libiodbc-3.52.9/0000755000076400007640000000000012323210721010363 500000000000000libiodbc-3.52.9/LICENSE0000644000076400007640000000133712323210535011317 00000000000000iODBC Driver Manager Copyright (C) 1995 by Ke Jin Copyright (C) 1996-2014 by OpenLink Software All Rights Reserved. This software is released under either the GNU Library General Public License (see LICENSE.LGPL) or the BSD License (see LICENSE.BSD). Note that the only valid version of the LGPL license as far as this project is concerned is the original GNU Library General Public License Version 2, dated June 1991. While not mandated by the BSD license, any patches you make to the iODBC may be contributed back into the iODBC project at your discretion. Contributions will benefit the Open Source and Data Access community as a whole. Submissions may be made at http://www.iodbc.org. libiodbc-3.52.9/README.CVS0000644000076400007640000000663012323210535011625 00000000000000iODBC Driver Manager Copyright (C) 1995 by Ke Jin Copyright (C) 1996-2014 by OpenLink Software All Rights Reserved. NOTICE ====== The iODBC development team has decided to use GIT instead of CVS. Users who are tracking the iODBC project or want to aid in it's development are encouraged to move with us to github via: https://github.com/openlink/iODBC For information about GIT see also README.GIT Introduction ============ This document describes how to checkout a copy of the CVS tree for development purposes. It also lists the packages that need to be installed prior to generating the necessary scripts and Makefiles to build the project. CVS access is only needed for developers who want to actively track progress of the iODBC source code and contribute bugfixes or enhancements to the project. It requires basic knowledge about the general layout of open source and GNU projects, the use of autoconf and automake etc, which is beyond the scope of this document. If you have any questions, please email us at . CVS Archive Server Access ========================= OpenLink currently provides read-only CVS Archive access through the SourceForge.net servers: $ cvs -d:pserver:anonymous@iodbc.cvs.sourceforge.net:/cvsroot/iodbc login (The password is blank) $ cvs -z3 -d:pserver:anonymous@iodbc.cvs.sourceforge.net:/cvsroot/iodbc co iODBC Package Dependencies ==================== To generate the configure script and all other build files necessary, please make sure the following packages and recommended versions are installed on your system. Package Version From ======== ======= ================================== autoconf 2.59 ftp://ftp.gnu.org/pub/gnu/autoconf automake 1.9.2 ftp://ftp.gnu.org/pub/gnu/automake libtool 1.5.6 ftp://ftp.gnu.org/pub/gnu/libtool gtk+ 1.2.10 ftp://ftp.gtk.org/pub/gtk/v1.2 The above version are used for generating the source distributions with are currently generated on a standard RedHat 9 installation. Older version of these packages can sometimes be used, but could cause build problems. To check the version number of the tools installed on your system, use one of the following commands: $ autoconf --version $ automake --version $ libtoolize --version $ gtk-config --version Generate build files ==================== To generate the configure script and all related build files, use one of the following commands: $ autoreconf --install or use the supplied script in your CVS checkout directory: $ ./bootstrap.sh If the above commands succeed without any error messages, please use the following command to check out all the options you can use: $ ./configure --help Certain build targets are only enabled when the --enable-maintainer-mode flag is added to configure. Please read the files INSTALL and README in this directory for further information on how to configure the package and install it on your system. Submitting fixes and enhancements ================================= Patches and new contributions can be submitted as diffs from the current CVS archive by: $ cvs add newfiles $ cvs -z3 diff -uN > diffs Patches and contributions can be send to the OpenLink iODBC source archive manager at to be included the next distribution. Please provide accompanying documentation on which bugs are fixed or new features are introduced. libiodbc-3.52.9/man/0000755000076400007640000000000012323210721011136 500000000000000libiodbc-3.52.9/man/iodbc-config.1.in0000644000076400007640000000506512323210535014101 00000000000000.nh .TH iodbc\-config 1 "16 June 2004" "@VERSION@" "@PACKAGE_NAME@" .SH NAME iodbc-config - script to get information about the installed version of iODBC .SH SYNOPSIS .B iodbc-config .RB [ \-\-prefix\fI[=DIR]\fR ] .RB [ \-\-exec\-prefix\fI[=DIR]\fR ] .RB [ \-\-version ] .RB [ \-\-cflags ] .RB [ \-\-libs ] .RB [ \-\-static\-libs ] .RB [ \-\-libtool\-libs ] .RB [ \-\-odbcini ] .RB [ \-\-odbcinstini ] .SH DESCRIPTION \fBiodbc-config\fR is a tool that is used to configure to determine the compiler and linker flags that should be used to compile and link programs that use \fRiODBC\fR. . .SH OPTIONS \fBiodbc-config\fR accepts the following options: .TP 8 .B \-\-version Print the currently installed version of \fBiODBC\fR on the standard output. .TP 8 .B \-\-cflags Print the compiler flags that are necessary to compile an \fBiODBC\fR program. .TP 8 .B \-\-libs Print the linker flags that are necessary to link an \fBiODBC\fR program using dynamic libraries (if supported). .TP 8 .B \-\-static\-libs Print the linker flags that are necessary to link an \fBiODBC\fR program using static libraries. .TP 8 .B \-\-libtool\-libs Print the linker flags that are necessary to link an \fBiODBC\fR program in a libtool environment. .TP 8 .B \-\-odbcini Print the path of the system wide odbc.ini file. .TP 8 .B \-\-odbcinstini Print the path of the system wide odbcinst.ini file. .TP 8 .B \-\-prefix\fI[=PREFIX]\fR If specified, use PREFIX instead of the installation prefix that \fBiODBC\fR was built with when computing the output for the \-\-cflags and \-\-libs options. This option is also used for the exec prefix if \-\-exec\-prefix was not specified. This option must be specified before any \-\-libs or \-\-cflags options. If PREFIX is not specified, the \fB\-\-prefix\fR flag shows where \fBiODBC\fR is currently installed. .TP 8 .B \-\-exec\-prefix=PREFIX If specified, use PREFIX instead of the installation exec prefix that \fBiODBC\fR was built with when computing the output for the \-\-cflags and \-\-libs options. This option must be specified before any \-\-libs or \-\-cflags options. .SH EXAMPLES To compile a program that calls the \fBiODBC\fR API, make sure the \fBiodbc\-config\fR program can be found in the \fBPATH\fR environment variable, before using the following Makefile fragment: .nf CFLAGS=\`iodbc-config \-\-cflags\` LDLIBS=\`iodbc-config \-\-libs\` iodbctest: iodbctest.c cc $(CFLAGS) \-o iodbctest iodbctest.c $(LDLIBS) .fi .SH COPYRIGHT Copyright \(co 1996-2014 by OpenLink Software .SH AUTHOR iODBC Administrator libiodbc-3.52.9/man/iodbctestw.1.in0000644000076400007640000000002512323204667013725 00000000000000.so man1/iodbctest.1 libiodbc-3.52.9/man/Makefile.in0000644000076400007640000004213012323210643013126 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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 = man DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/iodbc-config.1.in $(srcdir)/iodbcadm-gtk.1.in \ $(srcdir)/iodbctest.1.in $(srcdir)/iodbctestw.1.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = iodbc-config.1 iodbctest.1 iodbctestw.1 \ iodbcadm-gtk.1 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' man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) 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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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@ @GUI_TRUE@MAN_GUI = iodbcadm-gtk.1 man_MANS = iodbc-config.1 iodbctest.1 iodbctestw.1 $(MAN_GUI) EXTRA_DIST = \ $(srcdir)/iodbc-config.1.in \ $(srcdir)/iodbctest.1.in \ $(srcdir)/iodbctestw.1.in \ $(srcdir)/iodbcadm-gtk.1.in all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu man/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): iodbc-config.1: $(top_builddir)/config.status $(srcdir)/iodbc-config.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ iodbctest.1: $(top_builddir)/config.status $(srcdir)/iodbctest.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ iodbctestw.1: $(top_builddir)/config.status $(srcdir)/iodbctestw.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ iodbcadm-gtk.1: $(top_builddir)/config.status $(srcdir)/iodbcadm-gtk.1.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,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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-man 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-man1 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-man uninstall-man: uninstall-man1 .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-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ 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-man uninstall-man1 # 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: libiodbc-3.52.9/man/iodbcadm-gtk.1.in0000644000076400007640000000055612323210535014103 00000000000000.nh .TH iodbcadm-gtk 1 "16 June 2004" "@VERSION@" "@PACKAGE_NAME@" .SH NAME iodbcadm-gtk \- iODBC administration program. .SH SYNOPSIS iodbcadm-gtk .SH DESCRIPTION This program is a graphical ODBC administration program using the GTK+ widget set. .SH COPYRIGHT Copyright \(co 1996-2014 by OpenLink Software .SH AUTHOR iODBC Administrator libiodbc-3.52.9/man/Makefile.am0000644000076400007640000000652412323210535013124 00000000000000# # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # if GUI MAN_GUI = iodbcadm-gtk.1 endif man_MANS = iodbc-config.1 iodbctest.1 iodbctestw.1 $(MAN_GUI) EXTRA_DIST = \ $(srcdir)/iodbc-config.1.in \ $(srcdir)/iodbctest.1.in \ $(srcdir)/iodbctestw.1.in \ $(srcdir)/iodbcadm-gtk.1.in libiodbc-3.52.9/man/iodbctest.1.in0000644000076400007640000001010312323210535013523 00000000000000.nh .TH iodbctest 1 "3 August 2005" "@VERSION@" "@PACKAGE_NAME@" .SH NAME iodbctest, iodbctestw \- iODBC Demonstration programs .SH SYNOPSIS .B iodbctest .RB [ \(dqDSN=xxxx[;UID=xxxx][;PWD=xxxx][;OPT=value]\(dq ] .br .B iodbctestw .RB [ \(dqDSN=xxxx[;UID=xxxx][;PWD=xxxx][;OPT=value]\(dq ] .SH DESCRIPTION The \fBiodbctest\fR program and \fBiodbtestw\fR programs are simple ODBC sample programs, showing the strength of the ODBC API to connect to any ODBC enabled database, issue SQL commands and retrieve the query results. The \fBiodbctest\fR program uses the standard ODBC API calls to connect using any DSN, but retrieves all results in ASCII mode. The \fBiodbctestw\fR program uses the ODBC Unicode API calls to connect using any DSN, and retrieves all results in Unicode mode. .SH OPTIONS The \fBiodbctest\fR program uses the SQLDriverConnect function to make a connection using any available ODBC compliant driver. This allows the user to override any ODBC connect attribute in the DSN string. Connect strings should start with either a \fIDSN=xxx\fR or a \fIDRIVER=xxxx\fR attribute optionally followed by other DSN attributes separated by a semicolon e.g: .nf DSN=ora9;UID=scott;PWD=tiger;DATABASE=ora9u .fi Any attributes required for a proper connection that are not entered in the DSN connect string, must be present in the odbc.ini file. If the connect string is passed as an argument to the \fBiodbctest\fR program, the string should be quoted as most shells use the semicolon as their command separator. If the connect string is entered on the interactive prompt, no quotes should be used. After a successful connection has been established, the user is prompted for a SQL command to be send to the database. A SQL command cannot span multiple lines. If the SQL command returns one or more result sets, each result set is fetched using character buffers and displayed in a table. Additionally, the \fBiodbctest\fR program understands a few special commands: .TP 8 .B qualifiers .br Show a list of qualifiers using the SQLTables catalog call. .TP 8 .B owners .br Show a list of owners using the SQLTables catalog call. .TP 8 .B tables .br Show a list of tables using the SQLTables catalog call. .TP 8 .B types .br Show a list of tables types using the SQLTables catalog call. .TP 8 .B datatypes .br Show a list of data types using the SQLGetTypeInfo catalog call. .TP 8 .B reconnect .br Perform a disconnect/reconnect with the information saved during the first SQLDriverConnect. .TP 8 .B quit (or exit) .br Exit the program and return to the shell. .SH EXAMPLES Start the iodbctest program and get a list of DSNs before making a connection: .nf $ iodbctest OpenLink ODBC Demonstration program This program shows an interactive SQL processor Enter ODBC connect string (? shows list): ? DSN | Driver ----------------------------------------------------------------- ora9 | OpenLink Generic ODBC Driver mysql | OpenLink Generic ODBC Driver mysqllite | OpenLink Lite for MySQL myodbc | MyODBC Driver pgsql | OpenLink Generic ODBC Driver tds | OpenLink Generic ODBC Driver Enter ODBC connect string (? shows list): DSN=ora9;PWD=tiger Driver: 05.20.0316 OpenLink Generic ODBC Driver (oplodbc.so) SQL> .fi Connect to an Oracle 9 instance which has been previously setup in the odbc.ini file: .nf $ iodbctest "DSN=ora9;UID=scott;PWD=tiger" iODBC Demonstration program This program shows an interactive SQL processor Driver: 05.20.0316 OpenLink Generic ODBC Driver (oplodbc.so) SQL>select * from emp ID |NAME -----------------+------------------------------------------- 1 |Record 1 2 |Record 2 2 |Record 3 result set 1 returned 3 rows. SQL> quit .fi .SH COPYRIGHT Copyright \(co 1996-2014 by OpenLink Software .SH AUTHOR iODBC Administrator libiodbc-3.52.9/aclocal.m40000644000076400007640000011175512323210642012157 00000000000000# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # 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. # 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. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],, [m4_warning([this file was generated for autoconf 2.63. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # 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. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # 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. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # 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 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # 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 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # 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 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # 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 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # 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. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # 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 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # 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 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # 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 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # 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 # AM_PROG_CC_C_O # -------------- # Like AC_PROG_CC_C_O, but changed for automake. AC_DEFUN([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC_C_O])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi dnl Make sure AC_PROG_CC is never called again, or it will override our dnl setting of CC. m4_define([AC_PROG_CC], [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # 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 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # 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. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # 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 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # 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 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # 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. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # 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 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # 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 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([admin/gtk-2.0.m4]) m4_include([admin/gtk.m4]) m4_include([admin/libtool.m4]) m4_include([admin/ltoptions.m4]) m4_include([admin/ltsugar.m4]) m4_include([admin/ltversion.m4]) m4_include([admin/lt~obsolete.m4]) m4_include([acinclude.m4]) libiodbc-3.52.9/bootstrap.sh0000755000076400007640000001364512323210535012673 00000000000000#! /bin/sh # # bootstrap.sh # # Bootstrap the iODBC project so we do not need to maintain the # files generated by autoconf, automake and libtool # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # # ---------------------------------------------------------------------- # Globals # ---------------------------------------------------------------------- DIE=0 ELINES=3 # ---------------------------------------------------------------------- # Color settings # ---------------------------------------------------------------------- B=`tput bold 2>/dev/null` N=`tput sgr0 2>/dev/null` ERROR="${B}** ERROR **${N}" WARNING="${B}* WARNING *${N}" # ---------------------------------------------------------------------- # Functions # ---------------------------------------------------------------------- CHECK() { for PROG in $* do VERSION=`$PROG --version 2>/dev/null | head -1 | sed -e "s/$PROG //"` if test \! -z "$VERSION" then echo "Using $PROG $VERSION" USE_PROG=$PROG break fi done if test -z "VERSION" then echo echo "${ERROR} : You must have \`${B}${PROG}${N}' installed on your system." echo DIE=1 fi } CHECK_WARN() { for PROG in $* do VERSION=`$PROG --version 2>/dev/null | head -1 | sed -e "s/$PROG //"` if test \! -z "$VERSION" then echo "Using $PROG $VERSION" USE_PROG=$PROG break fi done if test -z "VERSION" then echo echo "${WARNING} : You may need \`${B}${PROG}${N}' installed on your system." echo fi } RUN() { PROG=$1; shift ARGS=$* echo "Running ${B}${PROG}${N} ..." $PROG $ARGS 2>> bootstrap.log if test $? -ne 0 then echo echo "${ERROR}" tail -$ELINES bootstrap.log echo echo "Bootstrap script aborting (see bootstrap.log for details) ..." exit 1 fi } # # Check availability of build tools # echo echo "${B}Checking build environment${N} ..." CHECK libtoolize glibtoolize; LIBTOOLIZE=$USE_PROG CHECK aclocal CHECK autoheader CHECK automake CHECK autoconf CHECK_WARN gtk-config if test "$DIE" -eq 1 then echo echo "Please read the ${B}README.CVS${N} file for a list of packages you need" echo "to install on your system before bootstrapping this project." echo echo "Bootstrap script aborting ..." exit 1 fi # # Generate the build scripts # > bootstrap.log echo echo "${B}Generating build scripts${N} ..." touch ChangeLog RUN $LIBTOOLIZE --force --copy RUN aclocal -I admin #--warnings=all RUN autoheader --warnings=all RUN automake --copy --add-missing --warnings=all RUN autoconf --warnings=all,no-obsolete echo echo "Please check the ${B}INSTALL${N} and ${B}README${N} files for instructions to" echo "configure, build and install iODBC on your system." echo echo "Certain build targets are only enabled in maintainer mode:" echo echo " ./configure --enable-maintainer-mode ..." echo echo "Bootstrap script completed successfully." exit 0 libiodbc-3.52.9/admin/0000755000076400007640000000000012323210721011453 500000000000000libiodbc-3.52.9/admin/depcomp0000755000076400007640000004426712323205111012762 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2009-04-28.21; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 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 outputing 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 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. ## 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" ;; 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" ;; #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" cat < "$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: libiodbc-3.52.9/admin/install-sh0000755000076400007640000003253712323205111013406 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.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 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 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 trap '(exit $?); exit' 1 2 13 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 starting with `-'. 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 # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # 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 -z "$d" && 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: libiodbc-3.52.9/admin/libiodbc.spec.in0000644000076400007640000002217012323210535014430 00000000000000# # libiodbc.spec # # $Id$ # # RPM specification file to build binary distribution set # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # # ---------------------------------------------------------------------- # MACROS AND DEFINES # ---------------------------------------------------------------------- # Disable generation of debug package %define debug_package %{nil} # Do we want to build the GTK based administrator? %define with_admin 1 # on commandline: --define 'noadmin 1' %{?noadmin:%define with_admin 0} # ---------------------------------------------------------------------- # BASE PACKAGE # ---------------------------------------------------------------------- Name: libiodbc Version: @VERSION@ Release: 1 Summary: iODBC Driver Manager Group: Libraries License: LGPL or BSD license (see "LICENSE" file included in distribution) URL: http://www.iodbc.org/ Source: http://www.iodbc.org/downloads/iODBC/libiodbc-%{PACKAGE_VERSION}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root %description The iODBC Driver Manager is a free implementation of the SAG CLI and ODBC compliant driver manager which allows developers to write ODBC compliant applications that can connect to various databases using appropriate backend drivers. The iODBC Driver Manager was originally created by Ke Jin and is currently maintained by OpenLink Software under a LGPL or BSD license (see "LICENSE" file included in the distribution). %package devel Summary: header files and libraries for iODBC development Group: Development/Libraries Requires: libiodbc %description devel The iODBC Driver Manager is a free implementation of the SAG CLI and ODBC compliant driver manager which allows developers to write ODBC compliant applications that can connect to various databases using appropriate backend drivers. This package contains the header files and libraries needed to develop program that use the driver manager. The iODBC Driver Manager was originally created by Ke Jin and is currently maintained by OpenLink Software under a LGPL or BSD license (see "LICENSE" file included in the distribution). %if %{with_admin} %package admin Summary: GTK based administrator for iODBC development Group: Development/Libraries Requires: libiodbc %description admin The iODBC Driver Manager is a free implementation of the SAG CLI and ODBC compliant driver manager which allows developers to write ODBC compliant applications that can connect to various databases using appropriate backend drivers. This package contains a GTK based administrator program for maintaining DSN information in odbc.ini and odbcinst.ini files. The iODBC Driver Manager was originally created by Ke Jin and is currently maintained by OpenLink Software under a LGPL or BSD license (see "LICENSE" file included in the distribution). %endif %prep %setup %build # # Configure the package # %if %{with_admin} %configure --enable-odbc3 --with-iodbc-inidir=/etc --enable-pthreads --disable-libodbc %else %configure --enable-odbc3 --with-iodbc-inidir=/etc --enable-pthreads --disable-libodbc --disable-gui %endif # # Build the packages # make %install # # Carefully clean the build tree before use # [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT # # Make sure we can find the necessary libraries # LIBRARY_PATH=$RPM_BUILD_ROOT/%{_libdir} export LIBRARY_PATH # # Install binaries, include files and libraries # %makeinstall # # Install the sample odbc.ini and odbcinst.ini files # mkdir -p $RPM_BUILD_ROOT/etc #install -m644 etc/odbc.ini.sample $RPM_BUILD_ROOT/etc/odbc.ini #install -m644 etc/odbcinst.ini.sample $RPM_BUILD_ROOT/etc/odbcinst.ini %clean # # Carefully clean the build tree # [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %files %attr(0755, root, root) %{_bindir}/iodbctest %attr(0755, root, root) %{_bindir}/iodbctestw %attr(0755, root, root) %{_libdir}/libiodbc.so.* %attr(0755, root, root) %{_libdir}/libiodbcinst.so.* %attr(0644, root, root) %{_mandir}/man1/iodbctest.1* %attr(0644, root, root) %{_mandir}/man1/iodbctestw.1* #%attr(0644, root, root) %config /etc/odbc.ini #%attr(0644, root, root) %config /etc/odbcinst.ini %files devel %defattr(-,root,root) %attr(0644, root, root) %doc AUTHORS %attr(0644, root, root) %doc LICENSE %attr(0644, root, root) %doc LICENSE.LGPL %attr(0644, root, root) %doc LICENSE.BSD %attr(0644, root, root) %doc ChangeLog %attr(0644, root, root) %doc NEWS %attr(0644, root, root) %doc README %attr(0644, root, root) %doc README.CVS %attr(0644, root, root) %doc etc/odbc.ini.sample %attr(0644, root, root) %doc etc/odbcinst.ini.sample %attr(0644, root, root) %{_includedir}/iodbcext.h %attr(0644, root, root) %{_includedir}/iodbcinst.h %attr(0644, root, root) %{_includedir}/iodbcunix.h %attr(0644, root, root) %{_includedir}/isqlext.h %attr(0644, root, root) %{_includedir}/isql.h %attr(0644, root, root) %{_includedir}/isqltypes.h %attr(0644, root, root) %{_includedir}/sql.h %attr(0644, root, root) %{_includedir}/sqltypes.h %attr(0644, root, root) %{_includedir}/sqlucode.h %attr(0644, root, root) %{_includedir}/sqlext.h %attr(0644, root, root) %{_includedir}/odbcinst.h %attr(0755, root, root) %{_bindir}/iodbc-config %attr(0644, root, root) %{_libdir}/libiodbc.a %attr(0644, root, root) %{_libdir}/libiodbc.la %attr(0755, root, root) %{_libdir}/libiodbc.so %attr(0644, root, root) %{_libdir}/libiodbcinst.a %attr(0644, root, root) %{_libdir}/libiodbcinst.la %attr(0755, root, root) %{_libdir}/libiodbcinst.so %attr(0644, root, root) %{_mandir}/man1/iodbc-config.1* %attr(0644, root, root) %{_datadir}/libiodbc/samples/Makefile %attr(0644, root, root) %{_datadir}/libiodbc/samples/iodbctest.c %attr(0644, root, root) %{_libdir}/pkgconfig/libiodbc.pc %if %{with_admin} %files admin %attr(0755, root, root) %{_bindir}/iodbcadm-gtk %ghost %{_libdir}/libdrvproxy.a %ghost %{_libdir}/libdrvproxy.la %ghost %{_libdir}/libdrvproxy.so %attr(0755, root, root) %{_libdir}/libdrvproxy.so.* %ghost %{_libdir}/libiodbcadm.a %ghost %{_libdir}/libiodbcadm.la %ghost %{_libdir}/libiodbcadm.so %attr(0755, root, root) %{_libdir}/libiodbcadm.so.* %attr(0644, root, root) %{_mandir}/man1/iodbcadm-gtk.1* %endif libiodbc-3.52.9/admin/config.sub0000755000076400007640000010316712323205111013363 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 # Free Software Foundation, Inc. timestamp='2009-11-20' # 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, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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 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-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/'` ;; *) 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 \ | 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 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | 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 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | 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 | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | ubicom32 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-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-* \ | 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-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | 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-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | 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-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | 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-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | 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 ;; 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) 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'm not sure what "Sysv32" means. Should this be sysv3.2? 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-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; 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 ;; 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) basic_machine=powerpc-unknown ;; ppc-*) 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 ;; 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 ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tile*) basic_machine=tile-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 ;; 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* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -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 ;; -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 ;; # 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 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; 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: libiodbc-3.52.9/admin/compile0000755000076400007640000000727112323205111012755 00000000000000#! /bin/sh # Wrapper for compilers which do not understand `-c -o'. scriptversion=2009-10-06.20; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 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 command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand `-c -o'. Remove `-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file `INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; esac ofile= cfile= eat= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as `compile cc -o foo foo.c'. # So we strip `-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no `-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # `.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use `[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" 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: libiodbc-3.52.9/admin/Makefile.in0000644000076400007640000003662412323210643013456 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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 = admin DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/libiodbc.pc.in $(srcdir)/libiodbc.spec.in compile \ config.guess config.sub depcomp install-sh ltmain.sh missing \ mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = libiodbc.spec libiodbc.pc CONFIG_CLEAN_VPATH_FILES = SCRIPTS = $(noinst_SCRIPTS) 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__installdirs = "$(DESTDIR)$(pkgconfigdir)" DATA = $(pkgconfig_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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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 = \ $(srcdir)/gtk.m4 \ $(srcdir)/gtk-2.0.m4 \ $(srcdir)/libiodbc.spec.in \ $(srcdir)/libiodbc.pc.in pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libiodbc.pc noinst_SCRIPTS = libiodbc.spec all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 admin/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu admin/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): libiodbc.spec: $(top_builddir)/config.status $(srcdir)/libiodbc.spec.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ libiodbc.pc: $(top_builddir)/config.status $(srcdir)/libiodbc.pc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || 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)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files 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 $(SCRIPTS) $(DATA) installdirs: for dir in "$(DESTDIR)$(pkgconfigdir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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-pkgconfigDATA 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-pkgconfigDATA .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-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkgconfigDATA 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-pkgconfigDATA # 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: libiodbc-3.52.9/admin/gtk.m40000644000076400007640000002013712323210535012430 00000000000000# Configure paths for GTK+ # Owen Taylor 97-11-3 dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS dnl AC_DEFUN([AM_PATH_GTK], [dnl dnl Get the cflags and libraries from the gtk-config script dnl AC_ARG_WITH(gtk-prefix,[ --with-gtk-prefix=PFX Prefix where GTK is installed (optional)], gtk_config_prefix="$withval", gtk_config_prefix="") AC_ARG_WITH(gtk-exec-prefix,[ --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)], gtk_config_exec_prefix="$withval", gtk_config_exec_prefix="") AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program], , enable_gtktest=yes) for module in . $4 do case "$module" in gthread) gtk_config_args="$gtk_config_args gthread" ;; esac done if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config fi fi if test x$gtk_config_prefix != x ; then gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_prefix/bin/gtk-config fi fi AC_PATH_PROG(GTK_CONFIG, gtk-config, no) min_gtk_version=ifelse([$1], ,0.99.7,$1) AC_MSG_CHECKING(for GTK - version >= $min_gtk_version) no_gtk="" if test "$GTK_CONFIG" = "no" ; then no_gtk=yes else GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" dnl dnl Now check if the installed GTK is sufficiently new. (Also sanity dnl checks the results of gtk-config to some extent dnl rm -f conf.gtktest AC_TRY_RUN([ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If gtk-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } #if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } #endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); printf("*** correct copy of gtk-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$GTK_CONFIG" = "no" ; then echo "*** The gtk-config script installed by GTK could not be found" echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GTK_CONFIG environment variable to the" echo "*** full path to gtk-config." else if test -f conf.gtktest ; then : else echo "*** Could not run GTK test program, checking why..." CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" AC_TRY_LINK([ #include #include ], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK or finding the wrong" echo "*** version of GTK. If it is not finding GTK, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" echo "*** came with the system with the command" echo "***" echo "*** rpm --erase --nodeps gtk gtk-devel" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK was incorrectly installed" echo "*** or that you have moved GTK since it was installed. In the latter case, you" echo "*** may want to edit the gtk-config script: $GTK_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) rm -f conf.gtktest ]) libiodbc-3.52.9/admin/libtool.m40000644000076400007640000077341112323210640013316 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 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 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 56 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_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 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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "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 _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_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])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 _LT_PROG_ECHO_BACKSLASH 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 # Sed substitution that helps us do robust quoting. It backslashifies # 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' # 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_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 "X$][$1" | $Xsed -e "$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 "X$" | $Xsed -e "$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' # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$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 "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\[$]0 --fallback-echo"')dnl " lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` ;; esac _LT_OUTPUT_LIBTOOL_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]) cat >"$CONFIG_LT" <<_LTEOF #! $SHELL # Generated by $as_me. # Run this file to recreate a libtool stub with the current configuration. lt_cl_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 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) 2008 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. if test "$no_create" != yes; then 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) fi ])# 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_XSI_SHELLFNS sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) 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)], [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 # _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([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)]) 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], []) # _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 test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 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" ]) 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" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES # -------------------------- # 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 _LT_TAGVAR(whole_archive_flag_spec, $1)='' _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=echo _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 # ----------------------- # 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. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl AC_LINK_IFELSE(AC_LANG_PROGRAM,[ lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`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 "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) $1 AC_DIVERT_POP ])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. m4_defun([_LT_PROG_ECHO_BACKSLASH], [_LT_SHELL_INIT([ # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac ECHO=${lt_ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF [$]* _LT_EOF exit 0 fi # 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 if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(lt_ECHO) ]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that does not interpret backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _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 __oline__ "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 ;; sparc*-*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*) LD="${LD-ld} -m elf64_sparc" ;; *) 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_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [AC_CHECK_TOOL(AR, ar, false) test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1]) 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 \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi _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_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:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/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; ;; 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 ;; 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"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$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 __oline__ "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 void fnord() { int i=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; /* 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:__oline__: $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:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 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 lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # 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 -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # 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; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` 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 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 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=`$ECHO "X$lib" | $Xsed -e '\''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 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,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) 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}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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 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 ;; freebsd1*) dynamic_linker=no ;; 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[[123]]*) 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 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 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' ;; interix[[3-9]]*) 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' 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 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 Linux ELF. linux* | k*bsd*-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' 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 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], [shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir # 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 # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # 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;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $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' ;; 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 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 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 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 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 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 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([], [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 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 lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' 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 ;; 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]) 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 Linux ELF. linux* | k*bsd*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) 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_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_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. AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) 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:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:__oline__: $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:__oline__: 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_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-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 _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' _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([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};"\ " /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 # 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 #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. */ 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_save_LIBS="$LIBS" lt_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_save_LIBS" CFLAGS="$lt_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 _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_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)= AC_MSG_CHECKING([for $compiler option to produce PIC]) 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)= ;; 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 ;; 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) 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*) # IBM XL 8.0 on PPC _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*) ;; *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*) # 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' ;; 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 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) 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' ;; pgcc* | pgf77* | pgf90* | pgf95*) # 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*) # IBM XL C 8.0/Fortran 10.1 on PPC _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)='-Wl,' ;; *Sun\ F*) # 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)='' ;; 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*) _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_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # 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]) # # 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_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' 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 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")) && ([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*) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ], [ 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_flag_spec_ld, $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 ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes if test "$with_gnu_ld" = 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 *\ [[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.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. _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(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/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' 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 ;; 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) 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= 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # 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; $ECHO \"$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]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; 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; $ECHO \"$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*) # 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)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_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 $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) 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 $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' 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 $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 ;; 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 $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 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 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")) && ([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 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 _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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; 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 _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' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _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. _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 `$ECHO "X$deplibs" | $Xsed -e '\''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(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; 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 ;; freebsd1*) _LT_TAGVAR(ld_shlibs, $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 -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 -fPIC ${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 -a "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${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_flag_spec_ld, $1)='+b $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 -a "$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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${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' ;; *) _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 $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE(int foo(void) {}, _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' ) LDFLAGS="$save_LDFLAGS" else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -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" && $ECHO "X-set_version $verstring" | $Xsed` -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*) 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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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 "X-set_version $verstring" | $Xsed` -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 ${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 ${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_MSG_CHECKING([whether -lc should be explicitly linked in]) $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_TAGVAR(archive_cmds_need_lc, $1)=no else _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* AC_MSG_RESULT([$_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_flag_spec_ld], [1], [[If ld is used when linking, 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([], [fix_srcfile_path], [1], [Fix the shell variable $srcfile for the compiler]) _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([], [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_PROG_CXX # ------------ # Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ # compiler, we have our own version here. m4_defun([_LT_PROG_CXX], [ pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) AC_PROG_CXX 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 popdef([AC_MSG_ERROR]) ])# _LT_PROG_CXX dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_CXX], []) # _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], [AC_REQUIRE([_LT_PROG_CXX])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl 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_flag_spec_ld, $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(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_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++"} 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 -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -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 "\-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 _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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; 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 _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' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _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*) # _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(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 ;; 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 ;; freebsd[[12]]*) # 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*) ;; 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; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${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; $ECHO "X$list" | $Xsed' ;; *) 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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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 -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -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) 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; $ECHO "X$list" | $Xsed' _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 | $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 | $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 | $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 | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 will 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; $ECHO \"$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=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; xl*) # 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; $ECHO \"$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='echo' # 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=echo 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" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -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" && $ECHO "X-set_version $verstring" | $Xsed` -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 "X-set_version $verstring" | $Xsed` -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=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) 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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${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 "\-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*) # 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='echo' # 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 -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 -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 "\-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 "\-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(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 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_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 # 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 ]) 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 $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 else prev= fi if test "$pre_test_object_deps_done" = no; then case $p 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 ;; *.$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 # 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*) # 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_PROG_F77 # ------------ # Since AC_PROG_F77 is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_F77], [ pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) AC_PROG_F77 if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_F77 dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_F77], []) # _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_REQUIRE([_LT_PROG_F77])dnl AC_LANG_PUSH(Fortran 77) _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_flag_spec_ld, $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(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 CC=${F77-"f77"} 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" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_PROG_FC # ----------- # Since AC_PROG_FC is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_FC], [ pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) AC_PROG_FC if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_FC dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_FC], []) # _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_REQUIRE([_LT_PROG_FC])dnl AC_LANG_PUSH(Fortran) _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_flag_spec_ld, $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(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 CC=${FC-"f95"} 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" 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_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} 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 ## 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" ])# _LT_LANG_GCJ_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_GCC=$GCC GCC= CC=${RC-"windres"} 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" ])# _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_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_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"}, \ = c,a/b,, \ && 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_XSI_SHELLFNS # --------------------- # Bourne and XSI compatible variants of some useful shell functions. m4_defun([_LT_PROG_XSI_SHELLFNS], [case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # 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 () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # 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 () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # 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_stripname () { # 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}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $[*] )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # 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 () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -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 file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } dnl func_dirname_and_basename dnl A portable version of this function is already defined in general.m4sh dnl so there is no need for it here. # 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 "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[[^=]]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$[@]"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]+=\$[2]" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]=\$$[1]\$[2]" } _LT_EOF ;; esac ]) libiodbc-3.52.9/admin/gtk-2.0.m40000644000076400007640000001655212323210535012733 00000000000000# Configure paths for GTK+ # Owen Taylor 1997-2001 dnl AM_PATH_GTK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES, dnl pass to pkg-config dnl AC_DEFUN([AM_PATH_GTK_2_0], [dnl dnl Get the cflags and libraries from pkg-config dnl AC_ARG_ENABLE(gtktest, [ --disable-gtktest do not try to compile and run a test GTK+ program], , enable_gtktest=yes) pkg_config_args=gtk+-2.0 for module in . $4 do case "$module" in gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; esac done no_gtk="" AC_PATH_PROG(PKG_CONFIG, pkg-config, no) if test x$PKG_CONFIG != xno ; then if pkg-config --atleast-pkgconfig-version 0.7 ; then : else echo *** pkg-config too old; version 0.7 or better required. no_gtk=yes PKG_CONFIG=no fi else no_gtk=yes fi min_gtk_version=ifelse([$1], ,2.0.0,$1) AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version) if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH" enable_gtktest=no fi if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then : else no_gtk=yes fi fi if test x"$no_gtk" = x ; then GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags` GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs` gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" dnl dnl Now check if the installed GTK+ is sufficiently new. (Also sanity dnl checks the results of pkg-config to some extent) dnl rm -f conf.gtktest AC_TRY_RUN([ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://pkgconfig.sourceforge.net" else if test -f conf.gtktest ; then : else echo "*** Could not run GTK+ test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" AC_TRY_LINK([ #include #include ], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK+ or finding the wrong" echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) rm -f conf.gtktest ]) libiodbc-3.52.9/admin/lt~obsolete.m40000644000076400007640000001311312323210640014206 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007 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 4 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_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) 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])]) libiodbc-3.52.9/admin/ltmain.sh0000755000076400007640000073306012323210640013227 00000000000000# Generated from ltmain.m4sh. # ltmain.sh (GNU libtool) 2.2.6b # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 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 # --tag=TAG use configuration variables from tag TAG # -v, --verbose print informational messages (default) # --version print version information # -h, --help print short or long 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. # 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.2.6b # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . PROGRAM=ltmain.sh PACKAGE=libtool VERSION=2.2.6b TIMESTAMP="" package_revision=1.3017 # 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 # NLS nuisances: We save the old values to restore during execute mode. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). 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 $lt_unset CDPATH : ${CP="cp -f"} : ${ECHO="echo"} : ${EGREP="/bin/grep -E"} : ${FGREP="/bin/grep -F"} : ${GREP="/bin/grep"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SED="/bin/sed"} : ${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_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 "X${1}" | $Xsed -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 "X${1}" | $Xsed -e "$basename"` } # Generated shell functions inserted here. # 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" # The name of this program: # In the unlikely event $progname began with a '-', it would play havoc with # func_echo (imagine progname=-n), so we prepend ./ in that case: func_dirname_and_basename "$progpath" progname=$func_basename_result case $progname in -*) progname=./$progname ;; esac # 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=: 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' # 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${mode+: }$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_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname${mode+: }$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 "X$my_directory_path" | $Xsed -e "$dirname"` done my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e '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 "X$my_tmpdir" | $Xsed } # 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 "X$1" | $Xsed -e "$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 "X$1" | $Xsed \ -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_version # Echo version message to standard output and exit. func_version () { $SED -n '/^# '$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 () { $SED -n '/^# Usage:/,/# -h/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" $ECHO $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help # Echo long help message to standard output and exit. func_help () { $SED -n '/^# Usage:/,/# Report bugs to/ { 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 --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ p }' < "$progpath" exit $? } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { func_error "missing argument for $1" exit_cmd=exit } exit_cmd=: # Check that we have a working $ECHO. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then # Yippee, $ECHO works! : else # Restart under the correct shell, and then maybe $ECHO will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </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 } # Parse options once, thoroughly. This comes as soon as possible in # the script to make things like `libtool --version' happen quickly. { # 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 # Parse non-mode specific arguments: while test "$#" -gt 0; do opt="$1" shift case $opt in --config) func_config ;; --debug) preserve_args="$preserve_args $opt" func_echo "enabling shell trace mode" opt_debug='set -x' $opt_debug ;; -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break execute_dlfiles="$execute_dlfiles $1" shift ;; --dry-run | -n) opt_dry_run=: ;; --features) func_features ;; --finish) mode="finish" ;; --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break case $1 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 mode="$1" shift ;; --preserve-dup-deps) opt_duplicate_deps=: ;; --quiet|--silent) preserve_args="$preserve_args $opt" opt_silent=: ;; --verbose| -v) preserve_args="$preserve_args $opt" opt_silent=false ;; --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break preserve_args="$preserve_args $opt $1" func_enable_tag "$1" # tagname is set here shift ;; # Separate optargs to long options: -dlopen=*|--mode=*|--tag=*) func_opt_split "$opt" set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} shift ;; -\?|-h) func_usage ;; --help) opt_help=: ;; --version) func_version ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) nonopt="$opt" break ;; esac done 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_duplicate_deps ;; esac # Having warned about all mis-specified options, bail out if # anything was wrong. $exit_cmd $EXIT_FAILURE } # 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 } ## ----------- ## ## Main. ## ## ----------- ## $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 test -z "$mode" && func_fatal_error "error: you must specify a MODE." # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$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=$mode' for more information." } # 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_ltwrapper_scriptname_result="" if func_ltwrapper_executable_p "$1"; then func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" fi } # 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_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_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done 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 "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; # 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_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case "$@ " in " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) # 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 <?"'"'"' &()|`$[]' \ && 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e '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 removelist="$removelist $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist removelist="$removelist $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi 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 command="$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 command="$command -o $obj" fi # Suppress compiler output if we already did a PIC compilation. command="$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 "$mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $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 building PIC objects only -prefer-non-pic try to building 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 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 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 -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 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 \`$mode'" ;; esac $ECHO $ECHO "Try \`$progname --help' for more information about other modes." exit $? } # Now that we've collected a possible --mode arg, show help if necessary $opt_help && func_mode_help # 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 $execute_dlfiles; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) # 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 dir="$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 -*) ;; *) # 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_quote_for_eval "$file" args="$args $func_quote_for_eval_result" 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 "$mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done 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" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS $ECHO "X----------------------------------------------------------------------" | $Xsed $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 "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS } test "$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. $ECHO "X$nonopt" | $GREP shtool >/dev/null; 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" install_prog="$install_prog$func_quote_for_eval_result" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" install_prog="$install_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 -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. staticlibs="$staticlibs $file" ;; *.la) # 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 "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -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 "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "X$relink_command" | $Xsed -e "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_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" && staticlibs="$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 "X$lib" | $Xsed -e '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 "X$relink_command" | $Xsed -e '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 "X$file$stripped_ext" | $Xsed -e "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_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $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 "$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 /* 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 "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for progfile in $progfiles; do func_verbose "extracting global C symbols from \`$progfile'" $opt_dry_run || eval "$NM $progfile | $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" $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" } 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; " case $host in *cygwin* | *mingw* | *cegcc* ) $ECHO >> "$output_objdir/$my_dlsyms" "\ /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */" lt_dlsym_const= ;; *osf5*) echo >> "$output_objdir/$my_dlsyms" "\ /* This system does not cope well with relocations in const data */" lt_dlsym_const= ;; *) lt_dlsym_const=const ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ 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) ;; *) symtab_cflags="$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 "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "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. 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 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | $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_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' 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 | $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 | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper_part1 [arg=no] # # Emit the first part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part1 () { func_emit_wrapper_part1_arg1=no if test -n "$1" ; then func_emit_wrapper_part1_arg1=$1 fi $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. Xsed='${SED} -e 1s/^X//' 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 ECHO=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then # Yippee, \$ECHO works! : else # Restart under the correct shell, and then maybe \$ECHO will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $ECHO "\ # Find the directory that this script lives in. thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done " } # end: func_emit_wrapper_part1 # func_emit_wrapper_part2 [arg=no] # # Emit the second part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part2 () { func_emit_wrapper_part2_arg1=no if test -n "$1" ; then func_emit_wrapper_part2_arg1=$1 fi $ECHO "\ # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_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 \"X\$thisdir\" | \$Xsed -e '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" # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 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\ " } # end: func_emit_wrapper_part2 # 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=no if test -n "$1" ; then func_emit_wrapper_arg1=$1 fi # split this up so that func_emit_cwrapperexe_src # can call each part independently. func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" } # func_to_host_path arg # # Convert paths to host format when used with build tools. # Intended for use with "native" mingw (where libtool itself # is running under the msys shell), or in the following cross- # build environments: # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # where wine is equipped with the `winepath' executable. # In the native mingw case, the (msys) shell automatically # converts paths for any non-msys applications it launches, # but that facility isn't available from inside the cwrapper. # Similar accommodations are necessary for $host mingw and # $build cygwin. Calling this function does no harm for other # $host/$build combinations not listed above. # # ARG is the path (on $build) that should be converted to # the proper representation for $host. The result is stored # in $func_to_host_path_result. func_to_host_path () { func_to_host_path_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' case $build in *mingw* ) # actually, msys # awkward: cmd appends spaces to result lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_path_tmp1=`( cmd //c echo "$1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_path_tmp1=`cygpath -w "$1"` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # Unfortunately, winepath does not exit with a non-zero # error code, so we are forced to check the contents of # stdout. On the other hand, if the command is not # found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both # error code of zero AND non-empty stdout, which explains # the odd construction: func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` else # Allow warning below. func_to_host_path_result="" fi ;; esac if test -z "$func_to_host_path_result" ; then func_error "Could not determine host path corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_path_result="$1" fi ;; esac fi } # end: func_to_host_path # func_to_host_pathlist arg # # Convert pathlists to host format when used with build tools. # See func_to_host_path(), above. This function supports the # following $build/$host combinations (but does no harm for # combinations not listed here): # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # # 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. # # ARG is a pathlist (on $build) that should be converted to # the proper representation on $host. The result is stored # in $func_to_host_pathlist_result. func_to_host_pathlist () { func_to_host_pathlist_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # 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_to_host_pathlist_tmp2="$1" # Once set for this call, this variable should not be # reassigned. It is used in tha fallback case. func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e 's|^:*||' -e 's|:*$||'` case $build in *mingw* ) # Actually, msys. # Awkward: cmd appends spaces to result. lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # unfortunately, winepath doesn't convert pathlists func_to_host_pathlist_result="" func_to_host_pathlist_oldIFS=$IFS IFS=: for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do IFS=$func_to_host_pathlist_oldIFS if test -n "$func_to_host_pathlist_f" ; then func_to_host_path "$func_to_host_pathlist_f" if test -n "$func_to_host_path_result" ; then if test -z "$func_to_host_pathlist_result" ; then func_to_host_pathlist_result="$func_to_host_path_result" else func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" fi fi fi IFS=: done IFS=$func_to_host_pathlist_oldIFS ;; esac if test -z "$func_to_host_pathlist_result" ; then func_error "Could not determine the host path(s) corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This may break if $1 contains DOS-style drive # specifications. The fix is not to complicate the expression # below, but for the user to provide a working wine installation # with winepath so that path translation in the cross-to-mingw # case works properly. lt_replace_pathsep_nix_to_dos="s|:|;|g" func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_replace_pathsep_nix_to_dos"` fi # Now, add the leading and trailing path separators back case "$1" in :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" ;; esac case "$1" in *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" ;; esac ;; esac fi } # end: func_to_host_pathlist # 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 # define setmode _setmode #else # include # include # ifdef __CYGWIN__ # include # define HAVE_SETENV # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif # endif #endif #include #include #include #include #include #include #include #include #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 #ifdef _MSC_VER # define S_IXUSR _S_IEXEC # define stat _stat # ifndef _INTPTR_T_DEFINED # define intptr_t int # endif #endif #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 */ #ifdef __CYGWIN__ # define FOPEN_WB "wb" #endif #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) #undef LTWRAPPER_DEBUGPRINTF #if defined DEBUGWRAPPER # define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args static void ltwrapper_debugprintf (const char *fmt, ...) { va_list args; va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } #else # define LTWRAPPER_DEBUGPRINTF(args) #endif const char *program_name = NULL; 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_fatal (const char *message, ...); 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_opt_process_env_set (const char *arg); void lt_opt_process_env_prepend (const char *arg); void lt_opt_process_env_append (const char *arg); int lt_split_name_value (const char *arg, char** name, char** value); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); static const char *script_text_part1 = EOF func_emit_wrapper_part1 yes | $SED -e 's/\([\\"]\)/\\\1/g' \ -e 's/^/ "/' -e 's/$/\\n"/' echo ";" cat <"))); for (i = 0; i < newargc; i++) { LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 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; LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); 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; LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); 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 ("getcwd failed"); 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 ("getcwd failed"); 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) { LTWRAPPER_DEBUGPRINTF (("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 { char *errstr = strerror (errno); lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal ("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; } static void lt_error_core (int exit_status, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } void lt_setenv (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", (name ? name : ""), (value ? 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; } int lt_split_name_value (const char *arg, char** name, char** value) { const char *p; int len; if (!arg || !*arg) return 1; p = strchr (arg, (int)'='); if (!p) return 1; *value = xstrdup (++p); len = strlen (arg) - strlen (*value); *name = XMALLOC (char, len); strncpy (*name, arg, len-1); (*name)[len - 1] = '\0'; return 0; } void lt_opt_process_env_set (const char *arg) { char *name = NULL; char *value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); } lt_setenv (name, value); XFREE (name); XFREE (value); } void lt_opt_process_env_prepend (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); } new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_opt_process_env_append (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); } new_value = lt_extend_str (getenv (name), value, 1); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_update_exe_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? 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) { LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? 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 } # end: func_emit_cwrapperexe_src # 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 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 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 dlfiles="$dlfiles $arg" else dlprefiles="$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 "*) ;; *) deplibs="$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 # moreargs="$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 dlfiles="$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. dlprefiles="$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 "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) weak_libs="$weak_libs $arg" prev= continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$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 ;; -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" dir=$func_stripname_result if test -z "$dir"; 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 # 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 "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$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*) # 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 deplibs="$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 deplibs="$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) compiler_flags="$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) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) new_inherited_linker_flags="$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_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$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" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$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" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" linker_flags="$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" ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -F/path gives path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" compiler_flags="$compiler_flags $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. objs="$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 dlfiles="$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. dlprefiles="$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. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" 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 \"X\${$shlibpath_var}\" \| \$Xsed -e \'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" # 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_duplicate_deps ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$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 "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$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% $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= case $lib in *.la) func_source "$lib" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` case " $weak_libs " in *" $deplib_base "*) ;; *) deplibs="$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) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$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 "*) ;; * ) new_inherited_linker_flags="$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" newlib_search_path="$newlib_search_path $func_stripname_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" newlib_search_path="$newlib_search_path $func_stripname_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" dir=$func_stripname_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$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 \"X$deplib\"" 2>/dev/null | $Xsed -e 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. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$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 "X$inherited_linker_flags" | $Xsed -e '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 "*) ;; *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e '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" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$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. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done 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. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$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 "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$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 notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$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 # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$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" && \ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi 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 newlib_search_path="$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" newlib_search_path="$newlib_search_path $func_stripname_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_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$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:"*) ;; *) temp_rpath="$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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 notinst_deplibs="$notinst_deplibs $lib" need_relink=no ;; *) if test "$installed" = no; then notinst_deplibs="$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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 "$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$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$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:"*) ;; *) compile_shlibpath="$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:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$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:"*) ;; *) finalize_shlibpath="$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 [\\/]*) add_dir="$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 "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$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" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) 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 compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" linker_flags="$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 "X $new_inherited_linker_flags" | $Xsed -e '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 "*) ;; *) lib_search_path="$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 "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$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 tmp_libs="$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" objs="$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!" libobjs="$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 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|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 ;; 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) 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. verstring="$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" libobjs="$libobjs $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$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 removelist="$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 oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "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 temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 "*) ;; *) dlfiles="$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 "*) ;; *) dlprefiles="$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*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$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 deplibs="$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` 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$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. newdeplibs="$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 "*) newdeplibs="$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 \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$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. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ -e 's/ -lc$//' -e '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 "X $tmp_deplibs" | $Xsed -e "s,$i,,"` done fi if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | $GREP . >/dev/null; then $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 fi ;; 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 "X $newdeplibs" | $Xsed -e '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 "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO "X $deplibs" | $Xsed -e '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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$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 if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$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 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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$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" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$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 "$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 linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$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" delfiles="$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 cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" func_len " $cmd" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then func_show_eval "$cmd" 'exit $?' 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 "X$include_expsyms" | $Xsed | $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 delfiles="$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 "*) ;; *) tmp_deplibs="$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" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$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\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$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 output_la=`$ECHO "X$output" | $Xsed -e "$basename"` # 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 $ECHO "$obj" >> $output done $ECHO ')' >> $output delfiles="$delfiles $output" 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 $ECHO "$obj" >> $output done delfiles="$delfiles $output" output=$firstobj\"$file_list_spec$output\" 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. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$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~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi delfiles="$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 "$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 "X$include_expsyms" | $Xsed | $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 delfiles="$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" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles libobjs="$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 "$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 "$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 "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$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 "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e '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]) compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e '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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$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 "*) ;; *) finalize_rpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$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;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$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 "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$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 *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *cegcc) # Disable wrappers for cegcc, we are cross compiling anyway. wrappers_required=no ;; *) 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 "X$compile_command" | $Xsed -e '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=$?' # 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 rpath="$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 rpath="$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 "X$link_command" | $Xsed -e '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 $?' 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 "X$compile_var$compile_command$compile_rpath" | $Xsed -e '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 "X$link_command" | $Xsed -e '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 $?' # 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 "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $ECHO for shipping. if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$ECHO "X$ECHO" | $Xsed -e "$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 oldobjs="$oldobjs $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$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" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles oldobjs="$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" generated="$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" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi 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 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 "X$relink_command" | $Xsed -e "$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" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$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" newdlfiles="$newdlfiles $libdir/$name" ;; *) newdlfiles="$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" newdlprefiles="$newdlprefiles $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 newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; 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 "$mode" = link || test "$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) RM="$RM $arg"; rmforce=yes ;; -*) RM="$RM $arg" ;; *) files="$files $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= origobjdir="$objdir" for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then objdir="$origobjdir" else objdir="$dir/$origobjdir" fi func_basename "$file" name="$func_basename_result" test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; 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 rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${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 rmfiles="$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 rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$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 rmfiles="$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 rmfiles="$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 rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done objdir="$origobjdir" # 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 "$mode" = uninstall || test "$mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$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 libiodbc-3.52.9/admin/ltversion.m40000644000076400007640000000127712323210640013671 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. # Generated from ltversion.in. # serial 3017 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.2.6b]) m4_define([LT_PACKAGE_REVISION], [1.3017]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.6b' macro_revision='1.3017' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) libiodbc-3.52.9/admin/missing0000755000076400007640000002623312323205111012775 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 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 tar try tar, gnutar, gtar, then tar without non-portable flags 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. ;; tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) 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 ;; tar*) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) 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: libiodbc-3.52.9/admin/ltsugar.m40000644000076400007640000001042412323210640013317 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 ]) libiodbc-3.52.9/admin/mkinstalldirs0000755000076400007640000000653712323204667014230 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2005-02-02.21 # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # 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-end: "$" # End: libiodbc-3.52.9/admin/config.guess0000755000076400007640000012761512323205111013724 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 # Free Software Foundation, Inc. timestamp='2009-11-20' # 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, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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 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 tupples: *-*-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'` exit ;; 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:*:[456]) 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:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-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*: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 ;; 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 echo ${UNAME_MACHINE}-unknown-linux-gnueabi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-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 or32-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 ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-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 ;; 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 ;; 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: libiodbc-3.52.9/admin/Makefile.am0000644000076400007640000000647612323210535013447 00000000000000# # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # EXTRA_DIST = \ $(srcdir)/gtk.m4 \ $(srcdir)/gtk-2.0.m4 \ $(srcdir)/libiodbc.spec.in \ $(srcdir)/libiodbc.pc.in pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libiodbc.pc noinst_SCRIPTS = libiodbc.spec libiodbc-3.52.9/admin/ltoptions.m40000644000076400007640000002724212323210640013677 00000000000000# Helper functions for option handling. -*- 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 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], [0], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [0], [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], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [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])]) libiodbc-3.52.9/admin/libiodbc.pc.in0000644000076400007640000000675512323210535014113 00000000000000# # libiodbc.pc # # $Id$ # # pkg-config specification file # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ ODBCINI=@inidir@/odbc.ini ODBCINSTINI=@inidir@/odbcinst.ini odbcversion=@odbcmode@ Name: iODBC Description: @PACKAGE_NAME@ Version: @PACKAGE_VERSION@ Requires: Libs: -L${libdir} -liodbc -liodbcinst @LIBADD_DL@ Libs.private: -lpthread Cflags: -I${includedir} libiodbc-3.52.9/debian/0000755000076400007640000000000012323210721011605 500000000000000libiodbc-3.52.9/debian/iodbc.undocumented0000644000076400007640000000001712323204667015233 00000000000000iodbcadm-gtk.1 libiodbc-3.52.9/debian/watch0000644000076400007640000000016612323204667012575 00000000000000version=3 #http://www.iodbc.org/downloads/iODBC/libiodbc-(\d.*)\.tar\.gz http://sf.net/iodbc/libiodbc-(\d.*)\.tar\.gz libiodbc-3.52.9/debian/rules0000644000076400007640000000321512323210535012606 00000000000000#!/usr/bin/make -f DEB_AUTO_UPDATE_LIBTOOL=pre DEB_AUTO_UPDATE_ACLOCAL=1.11 DEB_AUTO_UPDATE_AUTOMAKE=1.11 DEB_AUTO_UPDATE_AUTOCONF=2.50 include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/autotools.mk include /usr/share/dpkg/architecture.mk # To make sure that every package that links against libiodbc defines # a versioned dependency and not just a normal one. DEB_CONFIGURE_EXTRA_FLAGS := --with-layout=debian DEB_DH_MAKESHLIBS_ARGS := -V DEB_SHLIBDEPS_LIBRARY_iodbc := libiodbc2 DEB_SHLIBDEPS_INCLUDE_iodbc := debian/libiodbc2/usr/lib:debian/iodbc/usr/lib DEB_SHLIBDEPS_INCLUDE_libiodbc2 := debian/libiodbc2/usr/lib CRUFT := \ aclocal.m4 \ admin/ltmain.sh \ admin/Makefile.in \ bin/Makefile.in \ configure \ drvproxy/gtk/Makefile.in \ drvproxy/Makefile.in \ etc/Makefile.in \ include/Makefile.in \ iodbc/Makefile.in \ iodbc/trace/Makefile.in \ iodbcadm/gtk/Makefile.in \ iodbcadm/Makefile.in \ iodbcinst/Makefile.in \ Makefile.in \ man/Makefile.in \ samples/Makefile.in \ update-config:: for f in $(CRUFT) ; do [ -e $$f.d-r-orig ] || cp -p $$f $$f.d-r-orig ; done reverse-config:: for f in $(CRUFT) ; do [ ! -e $$f.d-r-orig ] || mv $$f.d-r-orig $$f ; done install/iodbc :: mkdir -p debian/tmp/usr/share/lintian/overrides/ cp debian/iodbc.lintian-overrides debian/tmp/usr/share/lintian/overrides/iodbc install/libiodbc2 :: mkdir -p debian/tmp/usr/share/lintian/overrides/ cp debian/libiodbc2.lintian-overrides debian/tmp/usr/share/lintian/overrides/libiodbc2 #clean:: # for f in $(CRUFT) ; do cp -p ../orig/*/$$f $$f ; done clean:: rm -f admin/libtool.m4 admin/ltoptions.m4 admin/ltversion.m4 admin/lt~obsolete.m4 libiodbc-3.52.9/debian/libiodbc2.files0000644000076400007640000000010712323204667014414 00000000000000usr/bin/iodbc-config usr/lib/libiodbc.so.2* usr/lib/libiodbcinst.so.2* libiodbc-3.52.9/debian/libiodbc2.undocumented0000644000076400007640000000001712323204667016004 00000000000000iodbc-config.1 libiodbc-3.52.9/debian/iodbc.lintian-overrides0000644000076400007640000000047412323204667016206 00000000000000iodbc: non-dev-pkg-with-shlib-symlink usr/lib/libiodbcadm.so.2.1.18 usr/lib/libiodbcadm.so iodbc: non-dev-pkg-with-shlib-symlink usr/lib/libdrvproxy.so.2.1.18 usr/lib/libdrvproxy.so iodbc: package-name-doesnt-match-sonames libiodbcadm2 libdrvproxy2 iodbc: package-name-doesnt-match-sonames libdrvproxy2 libiodbcadm2 libiodbc-3.52.9/debian/iodbc.files0000644000076400007640000000002512323204667013642 00000000000000usr/bin/iodbcadm-gtk libiodbc-3.52.9/debian/libiodbc2.docs0000644000076400007640000000006612323204667014246 00000000000000debian/README.Debian AUTHORS IAFA-PACKAGE NEWS README libiodbc-3.52.9/debian/control0000644000076400007640000000536412323210535013143 00000000000000Source: libiodbc2 Section: libs Priority: optional Maintainer: Debian QA Group Build-Depends: debhelper (>= 8), autotools-dev, libtool (>= 1.5-2), automake1.11, autoconf, cdbs, m4 (>= 1.4.7), libgtk2.0-dev Standards-Version: 3.8.0 Homepage: http://www.iodbc.org/ Package: iodbc Section: misc Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: GTK+ config frontend for the iODBC Driver Manager The iODBC (intrinsic Open Database Connectivity) driver manager is compatible with the ODBC 2.x and 3.x specification and performs all the jobs of a ODBC driver manager (i.e. driver loading, parameters and function sequence checking, driver's function invoking, etc). Any ODBC driver working with ODBC 2.0 and 3.x driver manager will also work with iODBC driver manager and vice versa. . Applications (using ODBC function calls) linked with iODBC driver manager will be able to simultaneously access different types of data sources within one process through suitable iODBC drivers. . This package contains the configuration binaries. Package: libiodbc2 Section: libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Suggests: iodbc (= ${binary:Version}) Description: iODBC Driver Manager The iODBC (intrinsic Open Database Connectivity) driver manager is compatible with the ODBC 2.x and 3.x specification and performs all the jobs of a ODBC driver manager (i.e. driver loading, parameters and function sequence checking, driver's function invoking, etc). Any ODBC driver working with ODBC 2.0 and 3.x driver manager will also work with iODBC driver manager and vice versa. . Applications (using ODBC function calls) linked with iODBC driver manager will be able to simultaneously access different types of data sources within one process through suitable iODBC drivers. . This package contains the library files. Look for the iodbc package, too! Package: libiodbc2-dev Section: libdevel Architecture: any Depends: libiodbc2 (= ${binary:Version}), ${misc:Depends} Conflicts: libiodbc2 (<= 3.52.6-1), iodbc (<= 3.52.6-1) Description: iODBC Driver Manager (development files) The iODBC (intrinsic Open Database Connectivity) driver manager is compatible with the ODBC 2.x and 3.x specification and performs all the jobs of a ODBC driver manager (i.e. driver loading, parameters and function sequence checking, driver's function invoking, etc). Any ODBC driver working with ODBC 2.0 and 3.x driver manager will also work with iODBC driver manager and vice versa. . Applications (using ODBC function calls) linked with iODBC driver manager will be able to simultaneously access different types of data sources within one process through suitable iODBC drivers. . This package contains the development files. libiodbc-3.52.9/debian/libiodbc2.lintian-overrides0000644000076400007640000000027212323210535016742 00000000000000libiodbc2: non-dev-pkg-with-shlib-symlink usr/lib/libiodbcinst.so.2.1.18 usr/lib/libiodbcinst.so libiodbc2: non-dev-pkg-with-shlib-symlink usr/lib/libiodbc.so.2.1.18 usr/lib/libiodbc.so libiodbc-3.52.9/debian/libiodbc2.install0000644000076400007640000000016712323204667014766 00000000000000debian/tmp/usr/lib/libiodbc.so.* debian/tmp/usr/lib/libiodbcinst.so.* debian/tmp/usr/share/lintian/overrides/libiodbc2 libiodbc-3.52.9/debian/libiodbc2-dev.files0000644000076400007640000000023212323210535015156 00000000000000usr/include/*.h usr/lib/libiodbc.so usr/lib/libiodbc.a usr/lib/libiodbcinst.so usr/lib/libiodbcinst.a usr/lib/libiodbcadm-gtk.a usr/lib/libdrvproxy-gtk.a libiodbc-3.52.9/debian/libiodbc2-dev.examples0000644000076400007640000000002412323204667015702 00000000000000samples/iodbctest.c libiodbc-3.52.9/debian/copyright0000644000076400007640000000667712323210535013503 00000000000000This package was debianized by Christian Hammers on Sat, 2 Oct 1999 15:44:05 +0200. It was downloaded from http://www.iodbc.org/ Current Upstream Author: OpenLink Software Inc. You can find a copy of the common licenses in /usr/share/common-licenses/ Copyright: # # The iODBC driver manager. # # Copyright (C) 1995 by Ke Jin # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # libiodbc-3.52.9/debian/changelog0000644000076400007640000001755212323204667013425 00000000000000libiodbc2 (3.52.4-3) unstable; urgency=low * New maintainer. Closes: #230646. * debian/copyright: Updated by removing the existing patches. This fixes the FSF address, and this restores some subtle upstream license choices. * debian/iodbc.lintian-overrides: Updated. * debian/libiodbc2.lintian-overrides: Updated. * debian/control, debian/rules: Use automake1.9. * debian/control: Standards version. * debian/control: Added homepage. -- Bart Martens Sat, 22 Apr 2006 16:38:52 +0200 libiodbc2 (3.52.4-2) unstable; urgency=low * Fixed FTBFS due to bug in iodbc control file which has recently started to let dpkg-genchanges fail. -- Christian Hammers Mon, 6 Feb 2006 20:28:19 +0100 libiodbc2 (3.52.4-1) unstable; urgency=low * New upstream release. Closes: #339501 -- Christian Hammers Mon, 30 Jan 2006 21:37:30 +0100 libiodbc2 (3.52.3-1) unstable; urgency=low * New upstream release. Closes: #309935, #309936, #301304 * Removed Debian specific patches and added --layout=debian to configure. -- Christian Hammers Wed, 16 Nov 2005 02:56:21 +0100 libiodbc2 (3.52.2-4) unstable; urgency=low * Raised automake version from 1.6 to 1.7 on request of Eric Dorland. -- Christian Hammers Sun, 31 Jul 2005 23:50:25 +0200 libiodbc2 (3.52.2-3) unstable; urgency=low * Andreas Jochens reported a build problem on amd64 which uses the apparently more strict gcc-4.0 and provided a patch. Thanks! Closes: #294154 -- Christian Hammers Tue, 8 Feb 2005 13:04:39 +0100 libiodbc2 (3.52.2-2) unstable; urgency=low * debian/rules: Adjusted CDBS variables necessary to update libtool (thanks to Robert Millan). Closes: #268306, #262295 -- Christian Hammers Mon, 7 Feb 2005 21:05:33 +0100 libiodbc2 (3.52.2-1) unstable; urgency=low * New upstream version. -- Christian Hammers Mon, 7 Feb 2005 19:28:33 +0100 libiodbc2 (3.52.1-2) unstable; urgency=medium * Moved all .so files from libiodbc2-dev to iodbc and libiodbc2 as some applications like iodbcadm-gtk from iodbc load their shared libraries in a DLL wrapper function at runtime and not via the common dynamic linking way! (thanks to Alexey Nezhdanov). Closes: #275179 -- Christian Hammers Thu, 7 Oct 2004 23:02:04 +0200 libiodbc2 (3.52.1-1) unstable; urgency=low * New upstream release. -- Christian Hammers Sat, 2 Oct 2004 21:48:11 +0200 libiodbc2 (3.51.2-5) unstable; urgency=medium * Reworked libtool update to fix FTBFS on ARM. Sadly buildd said maybe-success and it took me a while to figure out that there was something for me to do :-( -- Christian Hammers Sat, 21 Aug 2004 15:08:48 +0200 libiodbc2 (3.51.2-4) unstable; urgency=medium * Added versioned dependencies to the .shlibs file (thanks to Adrian Bunk). Closes: #265494 * Added shlibs.local. -- Christian Hammers Fri, 13 Aug 2004 22:38:39 +0200 libiodbc2 (3.51.2-3) unstable; urgency=low * Converted debian/rules to cdbs. -- Christian Hammers Mon, 2 Aug 2004 19:43:22 +0200 libiodbc2 (3.51.2-2) unstable; urgency=low * Reverted the "-ld" patch from last upload. The problem that my iodbc libraries all had a TEXTREL symbol in them was simply caused do a "bug" in the libc6 package that made libdl.so a symlink pointing from /usr/lib/ to ../../lib/ which does not work if /usr is on another partition than /lib! -- Christian Hammers Thu, 4 Mar 2004 01:33:55 +0100 libiodbc2 (3.51.2-1) unstable; urgency=medium * New upstream version. * Changed Makefile so that there is no longer a TEXTREL secion in libiodbc.so.2.1.9 and "prelink" is happy. The shared library is now hopefully fully PIC compatible. Closes: #228859 * Upstream fixed this bug according to private email. Closes: #169174 * Changed section of libiodbc2-dev to libdevel. * Updated download link in copyright file. -- Christian Hammers Sun, 29 Feb 2004 22:39:59 +0100 libiodbc2 (3.51.1-3) unstable; urgency=low * Moved libdrvproxy from libiodbc2 to iodbc as it seems to be necessary only for the GUI (thanks to Raphael Surcouf Bordet). Closes: #221087 -- Christian Hammers Sun, 16 Nov 2003 16:06:02 +0100 libiodbc2 (3.51.1-2) unstable; urgency=low * Added libdrvproxy.so library (thanks to Adrian Kubala). Closes: #220834 -- Christian Hammers Sat, 15 Nov 2003 13:47:32 +0100 libiodbc2 (3.51.1-1) unstable; urgency=low * New upstream version. - Unicode support - bugfixes * Fixed small description typo (thanks to Thanasis Kinias). Closes: #197627 -- Christian Hammers Tue, 28 Oct 2003 01:15:32 +0100 libiodbc2 (3.0.6-4) unstable; urgency=low * Updated GNU autoconf files for Debian/FreeBSD (Thanks to Robert Millan). Closes: #195923 -- Christian Hammers Tue, 3 Jun 2003 14:28:22 +0200 libiodbc2 (3.0.6-3.1) unstable; urgency=low * NMU * iodbc-config.1 needs to be out of libiodbc2.undocumented, and libiodbc2-dev needs to Replace: libiodbc2 (<3.0.6-3). Closes: #148226 -- LaMont Jones Thu, 30 May 2002 22:18:56 -0600 libiodbc2 (3.0.6-3) unstable; urgency=low * Moved iodbc-config from lib to -dev package. Closes: #146905 -- Christian Hammers Mon, 20 May 2002 14:28:49 +0200 libiodbc2 (3.0.6-2) unstable; urgency=medium * Fixed build problems due to broken libtool support. Closes: #145325 -- Christian Hammers Tue, 7 May 2002 10:57:27 +0200 libiodbc2 (3.0.6-1) unstable; urgency=low * New upstream version. (minor bugfixes only) * The debian directory is now integrated into the upstream source. * Added iodbc-test binary. -- Christian Hammers Tue, 30 Apr 2002 00:28:59 +0200 libiodbc2 (3.0.5b-2) unstable; urgency=medium * Added dependency to libiodbc2. Closes: #144495 -- Christian Hammers Thu, 25 Apr 2002 18:02:34 +0200 libiodbc2 (3.0.5b-1) unstable; urgency=low * New snapshot source from upstream author that fixes build problems. * Put the new GTK configuration binary to a seperate package called 'iodbc'. Closes: #140859 -- Christian Hammers Sun, 14 Apr 2002 18:07:28 +0200 libiodbc2 (3.0.5-3) unstable; urgency=low * Corrected typo in package description. * Added libgtk1.2-dev to build-depends. Closes: #140723 -- Christian Hammers Fri, 29 Mar 2002 17:12:55 +0100 libiodbc2 (3.0.5-2) unstable; urgency=low * Corrected typo in package description. * Added libgtk1.2-dev to build-depends. Closes: #140723 -- Christian Hammers Fri, 29 Mar 2002 17:12:55 +0100 libiodbc2 (3.0.5-1) unstable; urgency=low * New upstream version. Closes: #113987 - now supports ODBC3 - added iodbc-config and iodbcadm-gtk binaries * This library is supposed to be backwards compatible to the 2.x versions. * iodbcadm-gtk doesn't build correctly -- Christian Hammers Tue, 26 Mar 2002 03:39:12 +0100 libiodbc2 (2.50.3-4) unstable; urgency=low * Updated config.guess and config.sub to make compilation on PARISC architecuture possible. Closes: #94763 -- Christian Hammers Sun, 20 May 2001 17:05:05 +0200 libiodbc2 (2.50.3-3) unstable; urgency=low * Added s390 recognition in config.sub. Closes: #88556 Thanks to kokids@debian.org for the patch. -- Christian Hammers Sat, 10 Mar 2001 17:14:00 +0100 libiodbc2 (2.50.3-2) unstable; urgency=low * Added Build-Depends. * No code change. -- Christian Hammers Sun, 18 Feb 2001 05:14:04 +0100 libiodbc2 (2.50.3-1) unstable; urgency=low * Initial Release. -- Christian Hammers Sat, 2 Oct 1999 15:44:05 +0200 libiodbc-3.52.9/debian/compat0000644000076400007640000000000212323210535012726 000000000000008 libiodbc-3.52.9/debian/libiodbc2.examples0000644000076400007640000000005412323204667015131 00000000000000etc/odbc.ini.sample etc/odbcinst.ini.sample libiodbc-3.52.9/debian/libiodbc2-dev.install0000644000076400007640000000056012323210535015526 00000000000000debian/tmp/usr/bin/iodbc-config debian/tmp/usr/include/*.h debian/tmp/usr/lib/libiodbc.a debian/tmp/usr/lib/libiodbcadm.a debian/tmp/usr/lib/libiodbcinst.a debian/tmp/usr/lib/libdrvproxy.a debian/tmp/usr/share/man/man1/iodbc-config.1 debian/tmp/usr/lib/libiodbc.so debian/tmp/usr/lib/libiodbcinst.so debian/tmp/usr/lib/libdrvproxy.so debian/tmp/usr/lib/libiodbcadm.so libiodbc-3.52.9/debian/README.Debian0000644000076400007640000000133512323204667013604 00000000000000# # What about libodbc.so? (bug #171370) # According to the upstream authors the library can safely be installed as libodbc.so to use it with OpenOffice, R and other applications. It is not yet done in Debian by default as currently unixODBC maintains a symlink to libodbc.so and using alternatives for shared libraries is maybe dangerous. We are currently deciding if maybe one ODBC library can be dropped alltogether. last edited: 2004-03-01, ch@debian.org # # Why are .so libraries not in -dev packages? (bug #275179) # This is an unfortunate side effect from the (legacy) version of libtool used at the time when this code was written and will be fixed in an upcoming version. last edited: 2007-01-05, iodbc@openlinksw.com libiodbc-3.52.9/debian/iodbc.install0000644000076400007640000000041112323204667014205 00000000000000debian/tmp/usr/bin/iodbcadm-gtk debian/tmp/usr/bin/iodbctest debian/tmp/usr/lib/libdrvproxy.so.* debian/tmp/usr/lib/libiodbcadm.so.* debian/tmp/usr/share/man/man1/iodbcadm-gtk.1 debian/tmp/usr/share/man/man1/iodbctest.1 debian/tmp/usr/share/lintian/overrides/iodbc libiodbc-3.52.9/IAFA-PACKAGE0000644000076400007640000000271012323204667011773 00000000000000Title: iODBC Driver Manager Version: 3.52.8 Description: iODBC (independent Open Database Connectivity) driver manager is compatible with ODBC 3.x specification and performs exactly same jobs of ODBC 3.x driver manager (i.e. driver loading, Parameters and function sequence checking, driver's function Invoking, etc.). Any ODBC driver that works with ODBC 3.0 driver manager will also work with iODBC driver manager and vice versa. Applications (using ODBC function calls) linked with iODBC driver manager will be able to simultaneously access different type of data sources within one process through suitable ODBC drivers. Original Author: Ke Jin Source Code Enhancement Contributors: OpenLink Software Source Maintainers: iODBC Maintainer Web Site: http://www.iodbc.org/ Platforms: SunOS (Sparc) 4.1.x HP/UX (s700/s800) 9.x, 10.x HP/UX (s300/s400) 9.x IBM AIX 3.x, 4.x Solaris (Sparc) 2.x Solaris (PCx86) 2.x SGI Irix 5.x, 6.x NCR SVR4 3.x UnixWare SVR4.2 1.x, 2.x DEC Unix (OSF/1) 3.x, 4.x FreeBSD 2.x BSDI BSD/OS 2.x Linux ELF 1.2.x SCO OpenServer 5.x Concurrent MAX/OS 1.x DG/UX 5.x License Policy: Freely Redistributable under either the GNU Library General Public License (LGPL) (see file LICENSE.LGPL for details) or the BSD License (see file LICENSE.BSD for details) Keywords: ODBC, database, SQL, OpenLink libiodbc-3.52.9/README.GIT0000644000076400007640000000744712323210535011624 00000000000000Using the iODBC GIT Tree ======================== Copyright (C) 1996-2014 OpenLink Software Introduction ============ This document describes how to checkout a copy of the git tree for development purposes. It also lists the packages that need to be installed prior to generating the necessary scripts and Makefiles to build the project. Git access is only needed for developers who want to actively track progress of the iODBC source code and contribute bugfixes or enhancements to the project. It requires basic knowledge of git itself, the general layout of open source and GNU projects, the use of autoconf and automake etc, which is beyond the scope of this document. If you have any questions, please email us at . Git Archive Server Access ========================= For main development OpenLink Software will publish the iODBC tree to GitHub and encourage everyone who is interested in tracking the project, to make an account there. Users who mainly just want to track the code can use the following command to get a copy of the tree: $ git clone git://github.com/openlink/iODBC At this point you can create your own work branch based on any of the branches available, create bugfixes and commit them to your own branch and then use the 'git format-patch' command to generate the appropriate diffs to send to: iodbc@openlinksw.com Developers are encouraged to fork the project using GitHub, create their own branches to make enhancements/bugfixes and then send pull requests using the excellent GitHub interface for the OpenLink team to examine and incorporate the fixes into the master tree for an upcoming release. Github has excellent documentation on how to fork a project, send pull requests, track the project etc. on: http://help.github.com/ OpenLink Software will continue to use sourceforge.net for the source tarball releases and certain binary releases, and for completenes will also provides read-only Git Archive access. For more information read: https://sourceforge.net/scm/?type=git&group_id=161622 Package Dependencies ==================== To generate the configure script and all other build files necessary, please make sure the following packages and recommended versions are installed on your system. Package Version From ======== ======= ================================== autoconf 2.59 ftp://ftp.gnu.org/pub/gnu/autoconf automake 1.9.6 ftp://ftp.gnu.org/pub/gnu/automake libtool 1.5.22 ftp://ftp.gnu.org/pub/gnu/libtool make 3.79.1 http://www.gnu.org/software/make gtk+ 1.2.10 ftp://ftp.gtk.org/pub/gtk/v1.2 and any GNU packages required by these. The autogen.sh and configure scripts check for the presence and right version of some of the required components. The above version are the minimum recommended versions of these packages. Older version of these packages can sometimes be used, but could cause build problems. To check the version number of the tools installed on your system, use one of the following commands: $ autoconf --version $ automake --version $ libtoolize --version $ make --version $ gtk-config --version Generate build files ==================== To generate the configure script and all related build files, use one of the following commands: $ autoreconf --install or use the supplied script in your checkout directory: $ ./bootstrap.sh If the above commands succeed without any error messages, please use the following command to check out all the options you can use: $ ./configure --help Certain build targets are only enabled when the --enable-maintainer-mode flag is added to configure. Please read the files INSTALL and README in this directory for further information on how to configure the package and install it on your system. libiodbc-3.52.9/iodbcinst/0000755000076400007640000000000012323210721012341 500000000000000libiodbc-3.52.9/iodbcinst/dlf.c0000644000076400007640000010330012323210535013172 00000000000000/* * dlf.c * * $Id$ * * Dynamic Library Loader (mapping to SVR4) * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #ifdef DLDAPI_DEFINED #undef DLDAPI_DEFINED #endif #ifdef DLDAPI_SVR4_DLFCN #define DLDAPI_DEFINED static char sccsid[] = "@(#)dynamic load interface -- SVR4 (dlfcn)"; #endif /********************************* * * HP/UX * *********************************/ #ifdef DLDAPI_HP_SHL #define DLDAPI_DEFINED static char sccsid[] = "@(#)dynamic load interface -- HP/UX (shl)"; #include void * dlopen (char *path, int mode) { return (void *) shl_load ((char *) (path), BIND_IMMEDIATE | BIND_NONFATAL, 0L); } void * dlsym (void *hdll, char *sym) { void *symaddr = 0; int ret; #if 0 /* * iODBC does not need a handle to itself */ if (!hdll) hdll = (void *) PROG_HANDLE; #endif /* Remember, a driver may export calls as function pointers * (i.e. with type TYPE_DATA) rather than as functions * (i.e. with type TYPE_PROCEDURE). Thus, to be safe, we * uses TYPE_UNDEFINED to cover all of them. */ ret = shl_findsym ((shl_t *) & hdll, sym, TYPE_UNDEFINED, &symaddr); if (ret == -1) return 0; return symaddr; } char * dlerror () { extern char *strerror (); return strerror (errno); } int dlclose (void *hdll) { struct shl_descriptor d; /* * As HP/UX does not use a reference counter for unloading, * we can only unload the driver when it is loaded once. */ if (shl_gethandle_r ((shl_t) hdll, &d) < 0 || d.ref_count > 1) { return 0; } return shl_unload ((shl_t) hdll); } #endif /* end of HP/UX Section */ /********************************* * * IBM AIX * *********************************/ #ifdef DLDAPI_AIX_LOAD #define DLDAPI_DEFINED static char sccsid[] = "@(#)dynamic load interface -- AIX (ldr)"; #include #include #include #include #ifndef HTAB_SIZE #define HTAB_SIZE 256 #endif #define FACTOR 0.618039887 /* i.e. (sqrt(5) - 1)/2 */ #ifndef ENTRY_SYM #define ENTRY_SYM ".__start" /* default entry point for aix */ #endif typedef struct slot_s { char *sym; long fdesc[3]; /* 12 bytes function descriptor */ struct slot_s *next; } slot_t; /* Note: on AIX, a function pointer actually points to a * function descriptor, a 12 bytes data. The first 4 bytes * is the virtual address of the function. The next 4 bytes * is the virtual address of TOC (Table of Contents) of the * object module the function belong to. The last 4 bytes * are always 0 for C and Fortran functions. Every object * module has an entry point (which can be specified at link * time by -e ld option). iODBC driver manager requires ODBC * driver shared library always use the default entry point * (so you shouldn't use -e ld option when creating a driver * share library). load() returns the function descriptor of * a module's entry point. From which we can calculate function * descriptors of other functions in the same module by using * the fact that the load() doesn't change the relative * offset of functions to their module entry point(i.e the * offset in memory loaded by load() will be as same as in * the module library file). */ typedef slot_t *hent_t; typedef struct nlist nlist_t; typedef struct stat stat_t; typedef struct obj { int dev; /* device id */ int ino; /* inode number */ char *path; /* file name */ int (*pentry) (); /* entry point of this share library */ int refn; /* number of reference */ hent_t htab[HTAB_SIZE]; struct obj *next; } obj_t; static char *errmsg = 0; static void init_htab (hent_t * ht) /* initialize a hashing table */ { int i; for (i = 0; i < HTAB_SIZE; i++) ht[i] = (slot_t *) 0; return; } static void clean_htab (hent_t * ht) /* free all slots */ { int i; slot_t *ent; slot_t *tent; for (i = 0; i < HTAB_SIZE; i++) { for (ent = ht[i]; ent;) { tent = ent->next; free (ent->sym); free (ent); ent = tent; } ht[i] = 0; } return; } static int hash (char *sym) { int a, key; double f; if (!sym || !*sym) return 0; for (key = *sym; *sym; sym++) { key += *sym; a = key; key = (int) ((a << 8) + (key >> 8)); key = (key > 0) ? key : -key; } f = key * FACTOR; a = (int) f; return (int) ((HTAB_SIZE - 1) * (f - a)); } static hent_t search (hent_t * htab, char *sym) /* search hashing table to find a matched slot */ { int key; slot_t *ent; key = hash (sym); for (ent = htab[key]; ent; ent = ent->next) { if (!strcmp (ent->sym, sym)) return ent; } return 0; /* no match */ } static void insert (hent_t * htab, slot_t * ent) /* insert a new slot to hashing table */ { int key; key = hash (ent->sym); ent->next = htab[key]; htab[key] = ent; return; } static slot_t * slot_alloc (char *sym) /* allocate a new slot with symbol */ { slot_t *ent; ent = (slot_t *) malloc (sizeof (slot_t)); ent->sym = (char *) malloc (STRLEN (sym) + 1); if (!ent->sym) { free (ent); return 0; } STRCPY (ent->sym, sym); return ent; } static obj_t *obj_list = 0; void * dlopen (char *file, int mode) { stat_t st; obj_t *pobj; char buf[1024]; if (!file || !*file) { errno = EINVAL; return 0; } errno = 0; errmsg = 0; if (stat (file, &st)) return 0; for (pobj = obj_list; pobj; pobj = pobj->next) /* find a match object */ { if (pobj->ino == st.st_ino && pobj->dev == st.st_dev) { /* found a match. increase its * reference count and return * its address */ pobj->refn++; return pobj; } } pobj = (obj_t *) malloc (sizeof (obj_t)); if (!pobj) return 0; pobj->path = (char *) malloc (STRLEN (file) + 1); if (!pobj->path) { free (pobj); return 0; } STRCPY (pobj->path, file); pobj->dev = st.st_dev; pobj->ino = st.st_ino; pobj->refn = 1; pobj->pentry = (int (*)()) load (file, 0, 0); if (!pobj->pentry) { free (pobj->path); free (pobj); return 0; } init_htab (pobj->htab); pobj->next = obj_list; obj_list = pobj; return pobj; } int dlclose (void *hobj) { obj_t *pobj = (obj_t *) hobj; obj_t *tpobj; int match = 0; if (!hobj) { errno = EINVAL; return -1; } errno = 0; errmsg = 0; if (pobj == obj_list) { pobj->refn--; if (pobj->refn) return 0; match = 1; obj_list = pobj->next; } for (tpobj = obj_list; !match && tpobj; tpobj = tpobj->next) { if (tpobj->next == pobj) { pobj->refn--; if (pobj->refn) return 0; match = 1; tpobj->next = pobj->next; } } if (match) { unload ((void *) (pobj->pentry)); clean_htab (pobj->htab); free (pobj->path); free (pobj); } return 0; } char * dlerror () { extern char *sys_errlist[]; if (!errmsg || !errmsg[0]) { if (errno >= 0) return sys_errlist[errno]; return ""; } return errmsg; } void * dlsym (void *hdl, char *sym) { nlist_t nl[3]; obj_t *pobj = (obj_t *) hdl; slot_t *ent; int (*fp) (); long lbuf[3]; if (!hdl || !(pobj->htab) || !sym || !*sym) { errno = EINVAL; return 0; } errno = 0; errmsg = 0; ent = search (pobj->htab, sym); if (ent) return ent->fdesc; #define n_name _n._n_name nl[0].n_name = ENTRY_SYM; nl[1].n_name = sym; nl[2].n_name = 0; /* There is a potential problem here. If application * did not pass a full path name, and changed the * working directory after the load(), then nlist() * will be unable to open the original shared library * file to resolve the symbols. there are 3 ways to working * round this: 1. convert to full pathname in driver * manager. 2. applications always pass driver's full * path name. 3. if driver itself don't support * SQLGetFunctions(), call it with SQL_ALL_FUNCTIONS * as flag immediately after SQLConnect(), SQLDriverConnect() * and SQLBrowseConnect() to force the driver manager * resolving all will be used symbols. */ if (nlist (pobj->path, nl) == -1) return 0; if (!nl[0].n_type && !nl[0].n_value) { errmsg = "can't locate module entry symbol"; return 0; } /* Note: On AIX 3.x if the object library is not * built with -g compiling option, .n_type field * is always 0. While on 4.x it will be 32. * On AIX 4.x, if the symbol is a entry point, * n_value will be 0. However, one thing is for sure * that if a symbol does not exists in the file, * both .n_type and .n_value would be 0. */ if (!nl[1].n_type && !nl[1].n_value) { errmsg = "symbol does not exist in this module"; return 0; } ent = slot_alloc (sym); if (!ent) return 0; /* catch it with a slot in the hashing table */ insert (pobj->htab, ent); memcpy (ent->fdesc, pobj->pentry, sizeof (ent->fdesc)); /* now ent->fdesc[0] is the virtual address of entry point * and ent->fdesc[1] is the TOC of the module */ /* let's calculate the virtual address of the symbol * by adding a relative offset getting from the module * file symbol table, i.e * * function virtual address = entry point virtual address + * + ( function offset in file - entry point offset in file ) */ (ent->fdesc)[0] = (ent->fdesc)[0] + (nl[1].n_value - nl[0].n_value); /* return the function descriptor */ return ent->fdesc; } #endif /* end of IBM AIX Section */ /********************************* * * Windows 3.x, 95, NT * *********************************/ #ifdef DLDAPI_WINDOWS #define DLDAPI_DEFINED static char sccsid[] = "@(#)dynamic load interface -- Windows (LoadLibrary)"; #include void * dlopen (char * dll, int mode) { HINSTANCE hint; if (dll == NULL) { return GetWindowWord (NULL, GWW_HINSTANCE); } hint = LoadLibrary (dll); if (hint < HINSTANCE_ERROR) { return NULL; } return (void *) hint; } void * dlsym (void * hdll, char * sym) { return (void *) GetProcAddress (hdll, sym); } char * dlerror () { return 0L; /* unimplemented yet */ } int dlclose (void * hdll) { FreeLibrary ((HINSTANCE) hdll); } #endif /* end of Windows family */ /*********************************** * * VMS * ***********************************/ #ifdef VMS #define DLDAPI_DEFINED #ifdef DLDAPI_VMS_IODBC static char sccsid[] = "@(#)dynamic load interface -- VMS"; #include #include #include #include #include #include #include #include #include #ifndef LIB$M_FIS_MIXCASE #define LIB$M_FIS_MIXCASE 1<<4 #endif typedef struct { struct dsc$descriptor_s filename_d; struct dsc$descriptor_s image_d; char filename[NAM$C_MAXRSS]; /* $PARSEd image name */ } dll_t; /* * The following static int contains the last VMS error returned. It is kept * static so that dlerror() can get it. This method is dangerous if you have * threaded applications, but this is the way the UNIX dlopen() etc * is defined. */ static int saved_status = SS$_NORMAL; static char dlerror_buf[256]; static int iodbc_find_image_symbol ( struct dsc$descriptor_s *filename_d, struct dsc$descriptor_s *symbol_d, void **rp, struct dsc$descriptor_s *image_d, int flag) { lib$establish (lib$sig_to_ret); return lib$find_image_symbol (filename_d, symbol_d, rp, image_d, flag); } void * iodbc_dlopen (char *path, int unused_flag) { int status; dll_t *dll; struct FAB imgfab; struct NAM imgnam; static char defimg[] = "SYS$SHARE:.EXE"; if (path == NULL) { saved_status = SS$_UNSUPPORTED; return NULL; } dll = malloc (sizeof (dll_t)); if (dll == NULL) { saved_status = SS$_INSFMEM; return NULL; } imgfab = cc$rms_fab; imgfab.fab$l_fna = path; imgfab.fab$b_fns = STRLEN (path); imgfab.fab$w_ifi = 0; imgfab.fab$l_dna = defimg; imgfab.fab$b_dns = sizeof (defimg); imgfab.fab$l_fop = FAB$M_NAM; imgfab.fab$l_nam = &imgnam; imgnam = cc$rms_nam; imgnam.nam$l_esa = dll->filename; imgnam.nam$b_ess = NAM$C_MAXRSS; status = sys$parse (&imgfab); if (!(status & 1)) { free (dll); saved_status = status; return NULL; } dll->filename_d.dsc$b_dtype = DSC$K_DTYPE_T; dll->filename_d.dsc$b_class = DSC$K_CLASS_S; dll->filename_d.dsc$a_pointer = imgnam.nam$l_name; dll->filename_d.dsc$w_length = imgnam.nam$b_name; dll->image_d.dsc$b_dtype = DSC$K_DTYPE_T; dll->image_d.dsc$b_class = DSC$K_CLASS_S; dll->image_d.dsc$a_pointer = dll->filename; dll->image_d.dsc$w_length = imgnam.nam$b_esl; /* * VMS does not have the concept of first opening a shared library and then * asking for symbols; the LIB$FIND_IMAGE_SYMBOL routine does both. * Since I want my implementation of dlopen() to return an error if the * shared library can not be loaded, I try to find a dummy symbol in the * library. */ iodbc_dlsym (dll, "THIS_ROUTINE_MIGHT_NOT_EXIST"); if (!((saved_status ^ LIB$_KEYNOTFOU) & ~7)) { saved_status = SS$_NORMAL; } if (saved_status & 1) { return dll; } else { free (dll); return NULL; } } void * iodbc_dlsym (void *hdll, char *sym) { int status; dll_t *dll; struct dsc$descriptor_s symbol_d; void *rp; dll = hdll; if (dll == NULL) return NULL; symbol_d.dsc$b_dtype = DSC$K_DTYPE_T; symbol_d.dsc$b_class = DSC$K_CLASS_S; symbol_d.dsc$a_pointer = sym; symbol_d.dsc$w_length = STRLEN (sym); status = iodbc_find_image_symbol (&dll->filename_d, &symbol_d, &rp, &dll->image_d, 0); if (!((saved_status ^ LIB$_KEYNOTFOU) & ~7)) { status = iodbc_find_image_symbol (&dll->filename_d, &symbol_d, &rp, &dll->image_d, LIB$M_FIS_MIXCASE); } if (status & 1) { return rp; } else { saved_status = status; return NULL; } } char * iodbc_dlerror () { struct dsc$descriptor desc; short outlen; int status; if (saved_status & 1) { return NULL; } desc.dsc$b_dtype = DSC$K_DTYPE_T; desc.dsc$b_class = DSC$K_CLASS_S; desc.dsc$a_pointer = dlerror_buf; desc.dsc$w_length = sizeof (dlerror_buf); status = sys$getmsg (saved_status, &outlen, &desc, 15, 0); if (status & 1) { dlerror_buf[outlen] = '\0'; } else { sprintf (dlerror_buf, "Message number %8X", saved_status); } saved_status = SS$_NORMAL; return (dlerror_buf); } int iodbc_dlclose (void *hdll) { /* * Not really implemented since VMS doesn't support unloading images. * The hdll pointer is released though. */ free (hdll); return 0; } #endif /* DLDAPI_VMS_IODBC */ #endif /* VMS */ /********************************* * * Apple MacOS X Rhapsody * *********************************/ #ifdef DLDAPI_DYLD #define DLDAPI_DEFINED static char sccsid[] = "@(#)dynamic load interface -- Mac OS X (dyld)"; #include #include static void undefined_symbol_handler (const char *symbolName) { fprintf (stderr, "dyld found undefined symbol: %s\n", symbolName); abort (); } static NSModule multiple_symbol_handler (NSSymbol s, NSModule old, NSModule new) { /* * Since we can't unload symbols, we're going to run into this * every time we reload a module. Workaround here is to just * rebind to the new symbol, and forget about the old one. * This is crummy, because it's basically a memory leak. */ return (new); } static void linkEdit_symbol_handler (NSLinkEditErrors c, int errorNumber, const char *fileName, const char *errorString) { fprintf (stderr, "dyld errors during link edit for file %s\n%s\n", fileName, errorString); abort (); } void * dlopen (char *path, int mode) { NSObjectFileImage image; NSLinkEditErrorHandlers handlers; NSModule handle = NULL; int i; /* * Install error handler */ handlers.undefined = undefined_symbol_handler; #if !defined (NSLINKMODULE_OPTION_PRIVATE) handlers.multiple = multiple_symbol_handler; #endif handlers.linkEdit = linkEdit_symbol_handler; NSInstallLinkEditErrorHandlers (&handlers); /* * Load object */ i = NSCreateObjectFileImageFromFile (path, &image); if (i != NSObjectFileImageSuccess) { static char *ErrorStrings[] = { "%s(%d): Object Image Load Failure\n", "%s(%d): Object Image Load Success\n", "%s(%d): Not an recognizable object file\n", "%s(%d): No valid architecture\n", "%s(%d): Object image has an invalid format\n", "%s(%d): Invalid access (permissions?)\n", "%s(%d): Unknown error code from NSCreateObjectFileImageFromFile\n", }; if (i < 0 || i > 6) i = 6; fprintf (stderr, ErrorStrings[i], path, i); } else { #if !defined (NSLINKMODULE_OPTION_PRIVATE) handle = NSLinkModule (image, path, TRUE); #else handle = NSLinkModule (image, path, NSLINKMODULE_OPTION_PRIVATE); #endif } return (void *) handle; } void * dlsym (void *hdll, char *sym) { NSSymbol symbol; #if !defined (NSLINKMODULE_OPTION_PRIVATE) if (NSIsSymbolNameDefined (sym)) { symbol = NSLookupAndBindSymbol (sym); return NSAddressOfSymbol (symbol); } return NULL; #else symbol = NSLookupSymbolInModule ((NSModule) hdll, sym); return NSAddressOfSymbol (symbol); #endif } char * dlerror () { return NULL; } int dlclose (void *hdll) { NSUnLinkModule (hdll, FALSE); return 0; } #endif /* end of Rhapsody Section */ /********************************* * * Apple MacOS X Rhapsody * *********************************/ #ifdef DLDAPI_MACX #define DLDAPI_DEFINED static char sccsid[] = "@(#)dynamic load interface -- Mac OS X 10.x (dyld)"; static struct dlopen_handle *dlopen_handles = NULL; static const struct dlopen_handle main_program_handle = { 0 }; static char *dlerror_pointer = NULL; /* * NSMakePrivateModulePublic() is not part of the public dyld API so we define * it here. The internal dyld function pointer for * __dyld_NSMakePrivateModulePublic is returned so thats all that matters to get * the functionality need to implement the dlopen() interfaces. */ static int NSMakePrivateModulePublic (NSModule module) { static int (*p) (NSModule module) = NULL; if (p == NULL) _dyld_func_lookup ("__dyld_NSMakePrivateModulePublic", (void *) &p); if (p == NULL) { #ifdef DEBUG printf ("_dyld_func_lookup of __dyld_NSMakePrivateModulePublic " "failed\n"); #endif return (FALSE); } return (p (module)); } /* * dlopen() the MacOS X version of the FreeBSD dlopen() interface. */ void * iodbc_dlopen (char * path, int mode) { void *retval; struct stat stat_buf; NSObjectFileImage objectFileImage; NSObjectFileImageReturnCode ofile_result_code; NSModule module; struct dlopen_handle *p; unsigned long options; NSSymbol NSSymbol; void (*init) (void); static char errbuf[640]; dlerror_pointer = NULL; /* * A NULL path is to indicate the caller wants a handle for the * main program. */ if (path == NULL) { retval = (void *) &main_program_handle; return (retval); } /* see if the path exists and if so get the device and inode number */ if (stat (path, &stat_buf) == -1) { dlerror_pointer = strerror (errno); return (NULL); } /* * If we don't want an unshared handle see if we already have a handle * for this path. */ if ((mode & RTLD_UNSHARED) != RTLD_UNSHARED) { p = dlopen_handles; while (p != NULL) { if (p->dev == stat_buf.st_dev && p->ino == stat_buf.st_ino) { /* skip unshared handles */ if ((p->dlopen_mode & RTLD_UNSHARED) == RTLD_UNSHARED) continue; /* * We have already created a handle for this path. The * caller might be trying to promote an RTLD_LOCAL handle * to a RTLD_GLOBAL. Or just looking it up with * RTLD_NOLOAD. */ if ((p->dlopen_mode & RTLD_LOCAL) == RTLD_LOCAL && (mode & RTLD_GLOBAL) == RTLD_GLOBAL) { /* promote the handle */ if (NSMakePrivateModulePublic (p->module) == TRUE) { p->dlopen_mode &= ~RTLD_LOCAL; p->dlopen_mode |= RTLD_GLOBAL; p->dlopen_count++; return (p); } else { dlerror_pointer = "can't promote handle from " "RTLD_LOCAL to RTLD_GLOBAL"; return (NULL); } } p->dlopen_count++; return (p); } p = p->next; } } /* * We do not have a handle for this path if we were just trying to * look it up return NULL to indicate we don't have it. */ if ((mode & RTLD_NOLOAD) == RTLD_NOLOAD) { dlerror_pointer = "no existing handle for path RTLD_NOLOAD test"; return (NULL); } /* try to create an object file image from this path */ ofile_result_code = NSCreateObjectFileImageFromFile (path, &objectFileImage); if (ofile_result_code != NSObjectFileImageSuccess) { switch (ofile_result_code) { case NSObjectFileImageFailure: dlerror_pointer = "object file setup failure"; return (NULL); case NSObjectFileImageInappropriateFile: dlerror_pointer = "not a Mach-O MH_BUNDLE file type"; return (NULL); case NSObjectFileImageArch: dlerror_pointer = "no object for this architecture"; return (NULL); case NSObjectFileImageFormat: dlerror_pointer = "bad object file format"; return (NULL); case NSObjectFileImageAccess: dlerror_pointer = "can't read object file"; return (NULL); default: dlerror_pointer = "unknown error from " "NSCreateObjectFileImageFromFile()"; return (NULL); } } /* try to link in this object file image */ options = NSLINKMODULE_OPTION_NONE | NSLINKMODULE_OPTION_PRIVATE | NSLINKMODULE_OPTION_RETURN_ON_ERROR; if ((mode & RTLD_NOW) == RTLD_NOW) options |= NSLINKMODULE_OPTION_BINDNOW; module = NSLinkModule (objectFileImage, path, options); NSDestroyObjectFileImage (objectFileImage); if (module == NULL) { NSLinkEditErrors lerr; int errNum; const char *fname; const char *errStr; NSLinkEditError(&lerr, &errNum, &fname, &errStr); sprintf(errbuf, "NSLinkModule() failed for dlopen() ([%.256s][%.256s])", fname, errStr); dlerror_pointer = errbuf; return (NULL); } /* * If the handle is to be global promote the handle. It is done this * way to avoid multiply defined symbols. */ if ((mode & RTLD_GLOBAL) == RTLD_GLOBAL) { if (NSMakePrivateModulePublic (module) == FALSE) { dlerror_pointer = "can't promote handle from RTLD_LOCAL to " "RTLD_GLOBAL"; return (NULL); } } p = malloc (sizeof (struct dlopen_handle)); if (p == NULL) { dlerror_pointer = "can't allocate memory for the dlopen handle"; return (NULL); } /* fill in the handle */ p->dev = stat_buf.st_dev; p->ino = stat_buf.st_ino; if (mode & RTLD_GLOBAL) p->dlopen_mode = RTLD_GLOBAL; else p->dlopen_mode = RTLD_LOCAL; p->dlopen_mode |= (mode & RTLD_UNSHARED) | (mode & RTLD_NODELETE) | (mode & RTLD_LAZY_UNDEF); p->dlopen_count = 1; p->module = module; p->prev = NULL; p->next = dlopen_handles; if (dlopen_handles != NULL) dlopen_handles->prev = p; dlopen_handles = p; /* call the init function if one exists */ NSSymbol = NSLookupSymbolInModule (p->module, "__init"); if (NSSymbol != NULL) { init = NSAddressOfSymbol (NSSymbol); init (); } return (p); } /* * dlsym() the MacOS X version of the FreeBSD dlopen() interface. */ void * iodbc_dlsym (void * handle, char * symbol) { struct dlopen_handle *dlopen_handle, *p; char symbol2[1024]; NSSymbol NSSymbol; void *address; symbol2[0] = '_'; strcpy (symbol2 + 1, symbol); dlopen_handle = (struct dlopen_handle *) handle; /* * If this is the handle for the main program do a global lookup. */ if (dlopen_handle == (struct dlopen_handle *) &main_program_handle) { if (NSIsSymbolNameDefined (symbol2) == TRUE) { NSSymbol = NSLookupAndBindSymbol (symbol2); address = NSAddressOfSymbol (NSSymbol); dlerror_pointer = NULL; return (address); } else { dlerror_pointer = "symbol not found"; return (NULL); } } /* * Find this handle and do a lookup in just this module. */ p = dlopen_handles; while (p != NULL) { if (dlopen_handle == p) { NSSymbol = NSLookupSymbolInModule (p->module, symbol2); if (NSSymbol != NULL) { address = NSAddressOfSymbol (NSSymbol); dlerror_pointer = NULL; return (address); } else { dlerror_pointer = "symbol not found"; return (NULL); } } p = p->next; } dlerror_pointer = "bad handle passed to dlsym()"; return (NULL); } /* * dlerror() the MacOS X version of the FreeBSD dlopen() interface. */ char * iodbc_dlerror (void) { const char *p; p = (const char *) dlerror_pointer; dlerror_pointer = NULL; return (char *)(p); } /* * dlclose() the MacOS X version of the FreeBSD dlopen() interface. */ int iodbc_dlclose (void * handle) { struct dlopen_handle *p, *q; unsigned long options; NSSymbol NSSymbol; void (*fini) (void); dlerror_pointer = NULL; q = (struct dlopen_handle *) handle; p = dlopen_handles; while (p != NULL) { if (p == q) { /* if the dlopen() count is not zero we are done */ p->dlopen_count--; if (p->dlopen_count != 0) return (0); /* call the fini function if one exists */ NSSymbol = NSLookupSymbolInModule (p->module, "__fini"); if (NSSymbol != NULL) { fini = NSAddressOfSymbol (NSSymbol); fini (); } /* unlink the module for this handle */ options = 0; if (p->dlopen_mode & RTLD_NODELETE) options |= NSUNLINKMODULE_OPTION_KEEP_MEMORY_MAPPED; if (p->dlopen_mode & RTLD_LAZY_UNDEF) options |= NSUNLINKMODULE_OPTION_RESET_LAZY_REFERENCES; if (NSUnLinkModule (p->module, options) == FALSE) { dlerror_pointer = "NSUnLinkModule() failed for dlclose()"; return (-1); } if (p->prev != NULL) p->prev->next = p->next; if (p->next != NULL) p->next->prev = p->prev; if (dlopen_handles == p) dlopen_handles = p->next; free (p); return (0); } p = p->next; } dlerror_pointer = "invalid handle passed to dlclose()"; return (-1); } #endif /* end of Rhapsody Section */ /********************************* * * Macintosh * *********************************/ #ifdef DLDAPI_MAC static char sccsid[] = "@(#)dynamic load interface -- Mac Classic"; #include #include static char *msg_error = NULL; void * dlopen (char *dll, int mode) { #ifdef __POWERPC__ CFragConnectionID conn_id; Ptr main_addr; Str255 name; OSErr err; if (dll == NULL) { msg_error = "Library name not valid."; return NULL; } if ((err = GetSharedLibrary ((unsigned char *) str_to_Str255 (dll), kPowerPCCFragArch, kLoadCFrag, &conn_id, &main_addr, name)) != noErr) { msg_error = "Library cannot be loaded."; return NULL; } msg_error = NULL; return (void *) conn_id; #else CFragConnectionID conn_id; Ptr main_addr; Str255 name; OSErr err; if (dll == NULL) { msg_error = "Library name not valid."; return NULL; } if ((err = GetSharedLibrary ((unsigned char *) str_to_Str255 (dll), kMotorola68KCFragArch, kLoadCFrag, &conn_id, &main_addr, name)) != noErr) { msg_error = "Library cannot be loaded."; return NULL; } msg_error = NULL; return (void *) conn_id; #endif } void * dlsym (void *hdll, char *sym) { #ifdef __POWERPC__ Ptr symbol; CFragSymbolClass symbol_type; OSErr err; if (sym == NULL) { msg_error = "Symbol name not valid."; return NULL; } if ((err = FindSymbol ((CFragConnectionID) hdll, (unsigned char *) str_to_Str255 (sym), &symbol, &symbol_type)) != noErr) { msg_error = "Symbol cannot be loaded."; return NULL; } msg_error = NULL; return symbol; #else Ptr symbol; CFragSymbolClass symbol_type; if (sym == NULL) { msg_error = "Symbol name not valid."; return NULL; } if (FindSymbol ((CFragConnectionID) hdll, (unsigned char *) str_to_Str255 (sym), &symbol, &symbol_type) != noErr) { msg_error = "Symbol cannot be loaded."; return NULL; } msg_error = NULL; return symbol; #endif } char * dlerror () { return (msg_error) ? msg_error : "No error detected."; } int dlclose (void *hdll) { /* It should be something like that .... */ /* but some applications like Office 2001 */ /* have a problem with that ... just let */ /* the Mac unload the library when the */ /* application stop ... */ #ifdef __POWERPC__ /* if( CloseConnection((CFragConnectionID*)hdll) ) { msg_error = "Library cannot be unloaded."; return 1; } msg_error = NULL; return 0;*/ #else if (CloseConnection ((CFragConnectionID *) hdll)) { msg_error = "Library cannot be unloaded."; return 1; } msg_error = NULL; return 0; #endif } #define DLDAPI_DEFINED #endif /* end of Macintosh family */ /********************************* * * BeOS * *********************************/ #ifdef DLDAPI_BE #define DLDAPI_DEFINED static char sccsid[] = "@(#)dynamic load interface -- BeOS"; #include #include static char *msg_error = NULL; void * dlopen (char *dll, int mode) { image_id dll_id; if (dll == NULL) { msg_error = "Library name not valid."; return NULL; } dll_id = load_add_on (dll); if (dll_id == B_ERROR) { msg_error = "Library cannot be loaded."; return NULL; } msg_error = NULL; return (void *) dll_id; } void * dlsym (void *hdll, char *sym) { void *address = NULL; if (sym == NULL) { msg_error = "Symbol name not valid."; return NULL; } if (get_image_symbol ((image_id) hdll, sym, B_SYMBOL_TYPE_ANY, &address) != B_OK) { msg_error = "Symbol cannot be loaded."; return NULL; } msg_error = NULL; return address; } char * dlerror () { return (msg_error) ? msg_error : "No error detected."; } int dlclose (void *hdll) { if (unload_add_on ((image_id) hdll) != B_OK) { msg_error = "Library cannot be unloaded."; return 1; } msg_error = NULL; return 0; } #endif /* end of BeOS */ /*********************************** * * other platforms * ***********************************/ #ifdef DLDAPI_OS2 #define DLDAPI_DEFINED /* * DosLoadModule(), DosQueryProcAddress(), DosFreeModule(), ... */ #endif #ifdef DLDAPI_NEXT #define DLDAPI_DEFINED #endif #ifndef DLDAPI_DEFINED #error "dynamic load editor undefined" #endif libiodbc-3.52.9/iodbcinst/inifile.c0000644000076400007640000006751512323210535014065 00000000000000/* * inifile.c * * $Id$ * * Configuration File Management * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #ifndef _MAC #include #include #endif #include #include #include "inifile.h" #include "misc.h" extern BOOL ValidDSN (LPCSTR lpszDSN); static PCFGENTRY __iodbcdm_cfg_poolalloc (PCONFIG p, u_int count); static int __iodbcdm_cfg_parse (PCONFIG pconfig); /*** READ MODULE ****/ #ifndef O_BINARY #define O_BINARY 0 #endif #ifdef _MAC static int strcasecmp (const char *s1, const char *s2) { int cmp; while (*s1) { if ((cmp = toupper (*s1) - toupper (*s2)) != 0) return cmp; s1++; s2++; } return (*s2) ? -1 : 0; } #endif /* * Initialize a configuration */ int _iodbcdm_cfg_init (PCONFIG *ppconf, const char *filename, int doCreate) { PCONFIG pconfig; *ppconf = NULL; if (!filename) return -1; if ((pconfig = (PCONFIG) calloc (1, sizeof (TCONFIG))) == NULL) return -1; pconfig->fileName = strdup (filename); if (pconfig->fileName == NULL) { _iodbcdm_cfg_done (pconfig); return -1; } /* If the file does not exist, try to create it */ if (doCreate && access (pconfig->fileName, 0) == -1) { int fd; fd = creat (filename, 0644); if (fd) close (fd); } if (_iodbcdm_cfg_refresh (pconfig) == -1) { _iodbcdm_cfg_done (pconfig); return -1; } *ppconf = pconfig; return 0; } /* * Free all data associated with a configuration */ int _iodbcdm_cfg_done (PCONFIG pconfig) { if (pconfig) { _iodbcdm_cfg_freeimage (pconfig); if (pconfig->fileName) free (pconfig->fileName); free (pconfig); } return 0; } /* * Free the content specific data of a configuration */ int _iodbcdm_cfg_freeimage (PCONFIG pconfig) { char *saveName; PCFGENTRY e; u_int i; if (pconfig->image) free (pconfig->image); if (pconfig->entries) { e = pconfig->entries; for (i = 0; i < pconfig->numEntries; i++, e++) { if (e->flags & CFE_MUST_FREE_SECTION) free (e->section); if (e->flags & CFE_MUST_FREE_ID) free (e->id); if (e->flags & CFE_MUST_FREE_VALUE) free (e->value); if (e->flags & CFE_MUST_FREE_COMMENT) free (e->comment); } free (pconfig->entries); } saveName = pconfig->fileName; memset (pconfig, 0, sizeof (TCONFIG)); pconfig->fileName = saveName; return 0; } /* * This procedure reads an copy of the file into memory * caching the content based on stat */ int _iodbcdm_cfg_refresh (PCONFIG pconfig) { struct stat sb; char *mem; int fd; if (pconfig == NULL || stat (pconfig->fileName, &sb) == -1) return -1; /* * If our image is dirty, ignore all local changes * and force a reread of the image, thus ignoring all mods */ if (pconfig->dirty) _iodbcdm_cfg_freeimage (pconfig); /* * Check to see if our incore image is still valid */ if (pconfig->image && sb.st_size == pconfig->size && sb.st_mtime == pconfig->mtime) return 0; /* * Now read the full image */ if ((fd = open (pconfig->fileName, O_RDONLY | O_BINARY)) == -1) return -1; mem = (char *) malloc (sb.st_size + 1); if (mem == NULL || read (fd, mem, sb.st_size) != sb.st_size) { free (mem); close (fd); return -1; } mem[sb.st_size] = 0; close (fd); /* * Store the new copy */ _iodbcdm_cfg_freeimage (pconfig); pconfig->image = mem; pconfig->size = sb.st_size; pconfig->mtime = sb.st_mtime; if (__iodbcdm_cfg_parse (pconfig) == -1) { _iodbcdm_cfg_freeimage (pconfig); return -1; } return 1; } #define iseolchar(C) (strchr ("\n\r\x1a", C) != NULL) #define iswhite(C) (strchr ("\f\t ", C) != NULL) static char * __iodbcdm_cfg_skipwhite (char *s) { while (*s && iswhite (*s)) s++; return s; } static int __iodbcdm_cfg_getline (char **pCp, char **pLinePtr) { char *start; char *cp = *pCp; while (*cp && iseolchar (*cp)) cp++; start = cp; if (pLinePtr) *pLinePtr = cp; while (*cp && !iseolchar (*cp)) cp++; if (*cp) { *cp++ = 0; *pCp = cp; while (--cp >= start && iswhite (*cp)); cp[1] = 0; } else *pCp = cp; return *start ? 1 : 0; } static char * rtrim (char *str) { char *endPtr; if (str == NULL || *str == '\0') return NULL; for (endPtr = &str[strlen (str) - 1]; endPtr >= str && isspace (*endPtr); endPtr--); endPtr[1] = 0; return endPtr >= str ? endPtr : NULL; } /* * Parse the in-memory copy of the configuration data */ static int __iodbcdm_cfg_parse (PCONFIG pconfig) { int isContinue, inString; char *imgPtr; char *endPtr; char *lp; char *section; char *id; char *value; char *comment; if (_iodbcdm_cfg_valid (pconfig)) return 0; endPtr = pconfig->image + pconfig->size; for (imgPtr = pconfig->image; imgPtr < endPtr;) { if (!__iodbcdm_cfg_getline (&imgPtr, &lp)) continue; section = id = value = comment = NULL; /* * Skip leading spaces */ if (iswhite (*lp)) { lp = __iodbcdm_cfg_skipwhite (lp); isContinue = 1; } else isContinue = 0; /* * Parse Section */ if (*lp == '[') { section = __iodbcdm_cfg_skipwhite (lp + 1); if ((lp = strchr (section, ']')) == NULL) continue; *lp++ = 0; if (rtrim (section) == NULL) { section = NULL; continue; } lp = __iodbcdm_cfg_skipwhite (lp); } else if (*lp != ';' && *lp != '#') { /* Try to parse * 1. Key = Value * 2. Value (iff isContinue) */ if (!isContinue) { /* Parse ` = ..' */ id = lp; if ((lp = strchr (id, '=')) == NULL) continue; *lp++ = 0; rtrim (id); lp = __iodbcdm_cfg_skipwhite (lp); } /* Parse value */ inString = 0; value = lp; while (*lp) { if (inString) { if (*lp == inString) inString = 0; } else if (*lp == '"' || *lp == '\'') inString = *lp; else if ((*lp == ';' || *lp == '#') && iswhite (lp[-1])) { *lp = 0; comment = lp + 1; rtrim (value); break; } lp++; } } /* * Parse Comment */ if (*lp == ';' || *lp == '#') comment = lp + 1; if (_iodbcdm_cfg_storeentry (pconfig, section, id, value, comment, 0) == -1) { pconfig->dirty = 1; return -1; } } pconfig->flags |= CFG_VALID; return 0; } int _iodbcdm_cfg_storeentry ( PCONFIG pconfig, char *section, char *id, char *value, char *comment, int dynamic) { PCFGENTRY data; if ((data = __iodbcdm_cfg_poolalloc (pconfig, 1)) == NULL) return -1; data->flags = 0; if (dynamic) { if (section) section = strdup (section); if (id) id = strdup (id); if (value) value = strdup (value); if (comment) comment = strdup (value); if (section) data->flags |= CFE_MUST_FREE_SECTION; if (id) data->flags |= CFE_MUST_FREE_ID; if (value) data->flags |= CFE_MUST_FREE_VALUE; if (comment) data->flags |= CFE_MUST_FREE_COMMENT; } data->section = section; data->id = id; data->value = value; data->comment = comment; return 0; } static PCFGENTRY __iodbcdm_cfg_poolalloc (PCONFIG p, u_int count) { PCFGENTRY newBase; u_int newMax; if (p->numEntries + count > p->maxEntries) { newMax = p->maxEntries ? count + p->maxEntries + p->maxEntries / 2 : count + 4096 / sizeof (TCFGENTRY); newBase = (PCFGENTRY) malloc (newMax * sizeof (TCFGENTRY)); if (newBase == NULL) return NULL; if (p->entries) { memcpy (newBase, p->entries, p->numEntries * sizeof (TCFGENTRY)); free (p->entries); } p->entries = newBase; p->maxEntries = newMax; } newBase = &p->entries[p->numEntries]; p->numEntries += count; return newBase; } /*** COMPATIBILITY LAYER ***/ int _iodbcdm_cfg_rewind (PCONFIG pconfig) { if (!_iodbcdm_cfg_valid (pconfig)) return -1; pconfig->flags = CFG_VALID; pconfig->cursor = 0; return 0; } /* * returns: * 0 success * -1 no next entry * * section id value flags meaning * !0 0 !0 SECTION [value] * !0 !0 !0 DEFINE id = value|id="value"|id='value' * !0 0 !0 0 value * 0 0 0 EOF end of file encountered */ int _iodbcdm_cfg_nextentry (PCONFIG pconfig) { PCFGENTRY e; if (!_iodbcdm_cfg_valid (pconfig) || _iodbcdm_cfg_eof (pconfig)) return -1; pconfig->flags &= ~(CFG_TYPEMASK); pconfig->id = pconfig->value = NULL; while (1) { if (pconfig->cursor >= pconfig->numEntries) { pconfig->flags |= CFG_EOF; return -1; } e = &pconfig->entries[pconfig->cursor++]; if (e->section) { pconfig->section = e->section; pconfig->flags |= CFG_SECTION; return 0; } if (e->value) { pconfig->value = e->value; if (e->id) { pconfig->id = e->id; pconfig->flags |= CFG_DEFINE; } else pconfig->flags |= CFG_CONTINUE; return 0; } } } int _iodbcdm_cfg_find (PCONFIG pconfig, char *section, char *id) { int atsection; if (!_iodbcdm_cfg_valid (pconfig) || _iodbcdm_cfg_rewind (pconfig)) return -1; atsection = 0; while (_iodbcdm_cfg_nextentry (pconfig) == 0) { if (atsection) { if (_iodbcdm_cfg_section (pconfig)) return -1; else if (_iodbcdm_cfg_define (pconfig)) { char *szId = _iodbcdm_remove_quotes (pconfig->id); int bSame; if (szId) { bSame = !strcasecmp (szId, id); free (szId); if (bSame) return 0; } } } else if (_iodbcdm_cfg_section (pconfig) && !strcasecmp (pconfig->section, section)) { if (id == NULL) return 0; atsection = 1; } } return -1; } /*** WRITE MODULE ****/ /* * Change the configuration * * section id value action * -------------------------------------------------------------------------- * value value value update '=' in section
* value value NULL delete '' from section
* value NULL NULL delete section
*/ int _iodbcdm_cfg_write ( PCONFIG pconfig, char *section, char *id, char *value) { PCFGENTRY e, e2, eSect; int idx; int i; if (!_iodbcdm_cfg_valid (pconfig) || section == NULL) return -1; /* find the section */ e = pconfig->entries; i = pconfig->numEntries; eSect = 0; while (i--) { if (e->section && !strcasecmp (e->section, section)) { eSect = e; break; } e++; } /* did we find the section? */ if (!eSect) { /* check for delete operation on a nonexisting section */ if (!id || !value) return 0; /* add section first */ if (_iodbcdm_cfg_storeentry (pconfig, section, NULL, NULL, NULL, 1) == -1 || _iodbcdm_cfg_storeentry (pconfig, NULL, id, value, NULL, 1) == -1) return -1; pconfig->dirty = 1; return 0; } /* ok - we have found the section - let's see what we need to do */ if (id) { if (value) { /* add / update a key */ while (i--) { e++; /* break on next section */ if (e->section) { /* insert new entry before e */ idx = e - pconfig->entries; if (__iodbcdm_cfg_poolalloc (pconfig, 1) == NULL) return -1; memmove (e + 1, e, (pconfig->numEntries - idx) * sizeof (TCFGENTRY)); e->section = NULL; e->id = strdup (id); e->value = strdup (value); e->comment = NULL; if (e->id == NULL || e->value == NULL) return -1; e->flags |= CFE_MUST_FREE_ID | CFE_MUST_FREE_VALUE; pconfig->dirty = 1; return 0; } if (e->id && !strcasecmp (e->id, id)) { /* found key - do update */ if (e->value && (e->flags & CFE_MUST_FREE_VALUE)) { e->flags &= ~CFE_MUST_FREE_VALUE; free (e->value); } pconfig->dirty = 1; if ((e->value = strdup (value)) == NULL) return -1; e->flags |= CFE_MUST_FREE_VALUE; return 0; } } /* last section in file - add new entry */ if (_iodbcdm_cfg_storeentry (pconfig, NULL, id, value, NULL, 1) == -1) return -1; pconfig->dirty = 1; return 0; } else { /* delete a key */ while (i--) { e++; /* break on next section */ if (e->section) return 0; /* not found */ if (e->id && !strcasecmp (e->id, id)) { /* found key - do delete */ eSect = e; e++; goto doDelete; } } /* key not found - that' ok */ return 0; } } else { /* delete entire section */ /* find e : next section */ while (i--) { e++; /* break on next section */ if (e->section) break; } if (i < 0) e++; /* move up e while comment */ e2 = e - 1; while (e2->comment && !e2->section && !e2->id && !e2->value && (iswhite (e2->comment[0]) || e2->comment[0] == ';')) e2--; e = e2 + 1; doDelete: /* move up eSect while comment */ e2 = eSect - 1; while (e2->comment && !e2->section && !e2->id && !e2->value && (iswhite (e2->comment[0]) || e2->comment[0] == ';')) e2--; eSect = e2 + 1; /* delete everything between eSect .. e */ for (e2 = eSect; e2 < e; e2++) { if (e2->flags & CFE_MUST_FREE_SECTION) free (e2->section); if (e2->flags & CFE_MUST_FREE_ID) free (e2->id); if (e2->flags & CFE_MUST_FREE_VALUE) free (e2->value); if (e2->flags & CFE_MUST_FREE_COMMENT) free (e2->comment); } idx = e - pconfig->entries; memmove (eSect, e, (pconfig->numEntries - idx) * sizeof (TCFGENTRY)); pconfig->numEntries -= e - eSect; pconfig->dirty = 1; } return 0; } /* * Write a formatted copy of the configuration to a file * * This assumes that the inifile has already been parsed */ static void __iodbcdm_cfg_outputformatted (PCONFIG pconfig, FILE *fd) { PCFGENTRY e = pconfig->entries; int i = pconfig->numEntries; int m = 0; int j, l; int skip = 0; while (i--) { if (e->section) { /* Add extra line before section, unless comment block found */ if (skip) fprintf (fd, "\n"); fprintf (fd, "[%s]", e->section); if (e->comment) fprintf (fd, "\t;%s", e->comment); /* Calculate m, which is the length of the longest key */ m = 0; for (j = 1; j <= i; j++) { if (e[j].section) break; if (e[j].id && (l = strlen (e[j].id)) > m) m = l; } /* Add an extra lf next time around */ skip = 1; } /* * Key = value */ else if (e->id && e->value) { if (m) fprintf (fd, "%-*.*s = %s", m, m, e->id, e->value); else fprintf (fd, "%s = %s", e->id, e->value); if (e->comment) fprintf (fd, "\t;%s", e->comment); } /* * Value only (continuation) */ else if (e->value) { fprintf (fd, " %s", e->value); if (e->comment) fprintf (fd, "\t;%s", e->comment); } /* * Comment only - check if we need an extra lf * * 1. Comment before section gets an extra blank line before * the comment starts. * * previousEntry = value * <<< INSERT BLANK LINE HERE >>> * ; Comment Block * ; Sticks to section below * [new section] * * 2. Exception on 1. for commented out definitions: * (Immediate nonwhitespace after ;) * [some section] * v1 = 1 * ;v2 = 2 << NO EXTRA LINE >> * v3 = 3 * * 3. Exception on 2. for ;; which certainly is a section comment * [some section] * definitions * <<< INSERT BLANK LINE HERE >>> * ;; block comment * [new section] */ else if (e->comment) { if (skip && (iswhite (e->comment[0]) || e->comment[0] == ';')) { for (j = 1; j <= i; j++) { if (e[j].section) { fprintf (fd, "\n"); skip = 0; break; } if (e[j].id || e[j].value) break; } } fprintf (fd, ";%s", e->comment); } fprintf (fd, "\n"); e++; } } /* * Write the changed file back */ int _iodbcdm_cfg_commit (PCONFIG pconfig) { FILE *fp; if (!_iodbcdm_cfg_valid (pconfig)) return -1; if (pconfig->dirty) { if ((fp = fopen (pconfig->fileName, "w")) == NULL) return -1; __iodbcdm_cfg_outputformatted (pconfig, fp); fclose (fp); pconfig->dirty = 0; } return 0; } int _iodbcdm_cfg_next_section(PCONFIG pconfig) { do if (0 != _iodbcdm_cfg_nextentry (pconfig)) return -1; while (!_iodbcdm_cfg_section (pconfig)); return 0; } int _iodbcdm_cfg_search_init(PCONFIG *ppconf, const char *filename, int doCreate) { char pathbuf[1024]; if (strstr (filename, "odbc.ini") || strstr (filename, "ODBC.INI")) return _iodbcdm_cfg_init (ppconf, _iodbcadm_getinifile (pathbuf, sizeof (pathbuf), FALSE, doCreate), doCreate); else if (strstr (filename, "odbcinst.ini") || strstr (filename, "ODBCINST.INI")) return _iodbcdm_cfg_init (ppconf, _iodbcadm_getinifile (pathbuf, sizeof (pathbuf), TRUE, doCreate), doCreate); else if (doCreate || (!doCreate && access(filename, R_OK) == 0)) return _iodbcdm_cfg_init (ppconf, filename, doCreate); else return -1; } int _iodbcdm_list_sections (PCONFIG pCfg, LPSTR lpszRetBuffer, int cbRetBuffer) { int curr = 0, sect_len = 0; lpszRetBuffer[0] = 0; if (0 == _iodbcdm_cfg_rewind (pCfg)) { while (curr < cbRetBuffer && 0 == _iodbcdm_cfg_next_section (pCfg) && pCfg->section) { sect_len = strlen (pCfg->section) + 1; sect_len = sect_len > cbRetBuffer - curr ? cbRetBuffer - curr : sect_len; memmove (lpszRetBuffer + curr, pCfg->section, sect_len); curr += sect_len; } if (curr < cbRetBuffer) lpszRetBuffer[curr] = 0; return curr; } return 0; } int _iodbcdm_list_entries (PCONFIG pCfg, LPCSTR lpszSection, LPSTR lpszRetBuffer, int cbRetBuffer) { int curr = 0, sect_len = 0; lpszRetBuffer[0] = 0; if (!_iodbcdm_cfg_find (pCfg, (char*)lpszSection, NULL)) { while (curr < cbRetBuffer && 0 == _iodbcdm_cfg_nextentry (pCfg)) { if (_iodbcdm_cfg_section (pCfg)) break; if (_iodbcdm_cfg_define (pCfg) && pCfg->id) { sect_len = strlen (pCfg->id) + 1; sect_len = sect_len > cbRetBuffer - curr ? cbRetBuffer - curr : sect_len; memmove (lpszRetBuffer + curr, pCfg->id, sect_len); curr += sect_len; } } if (curr < cbRetBuffer) lpszRetBuffer[curr] = 0; return curr; } return 0; } BOOL do_create_dsns (PCONFIG pCfg, PCONFIG pInfCfg, LPSTR szDriver, LPSTR szDSNS, LPSTR szDiz) { char *szValue = strdup (szDSNS), *szCurr = szValue, *szComma; int hasMore = FALSE; BOOL retcode = FALSE; do { szComma = strchr (szCurr, ','); if (szComma) { *szComma = 0; hasMore = TRUE; } else hasMore = FALSE; #ifdef WIN32 if (_iodbcdm_cfg_write (pCfg, "ODBC 32 bit Data Sources", szCurr, szDiz)) #else if (_iodbcdm_cfg_write (pCfg, "ODBC Data Sources", szCurr, szDiz)) #endif goto error; if (!ValidDSN (szCurr) || _iodbcdm_cfg_write (pCfg, szCurr, NULL, NULL)) goto error; if (_iodbcdm_cfg_find (pInfCfg, szCurr, NULL) && !_iodbcdm_cfg_write (pCfg, szCurr, NULL, NULL)) { if (_iodbcdm_cfg_write (pCfg, szCurr, "Driver", szDriver)) goto error; while (!_iodbcdm_cfg_nextentry (pInfCfg) && _iodbcdm_cfg_define (pInfCfg)) { if (_iodbcdm_cfg_write (pCfg, szCurr, pInfCfg->id, pInfCfg->value)) goto error; } } szCurr = szComma + 1; } while (hasMore); retcode = TRUE; error: free (szValue); return retcode; } BOOL install_from_ini (PCONFIG pCfg, PCONFIG pOdbcCfg, LPSTR szInfFile, LPSTR szDriver, BOOL drivers) { PCONFIG pInfCfg; char *szKeysSection = NULL, *szDriverFile = NULL, *szSetupFile = NULL, *szValue = NULL, *szId = NULL, *szComma, *szComma1; BOOL ret = FALSE; if (_iodbcdm_cfg_write (pCfg, szDriver, NULL, NULL)) return ret; if (_iodbcdm_cfg_init (&pInfCfg, szInfFile, FALSE)) return ret; if (_iodbcdm_cfg_find (pInfCfg, drivers ? "ODBC Drivers" : "ODBC Translators", szDriver)) goto error; #ifdef WIN32 if (_iodbcdm_cfg_write (pCfg, drivers ? "ODBC 32 bit Drivers" : "ODBC 32 bit Translators", szDriver, "Installed")) #else if (_iodbcdm_cfg_write (pCfg, drivers ? "ODBC Drivers" : "ODBC Translators", szDriver, "Installed")) #endif goto error; if (_iodbcdm_cfg_find (pInfCfg, szDriver, drivers ? "Driver" : "Translator")) goto error; szComma = strchr (pInfCfg->value, ','); szComma1 = strchr (szComma + 1, ','); if (!szComma || !szComma1 || szComma + 1 == szComma1) goto error; *szComma1 = 0; szDriverFile = strdup (szComma + 1); if (_iodbcdm_cfg_write (pCfg, szDriver, drivers ? "Driver" : "Translator", szDriverFile)) goto error; if (!_iodbcdm_cfg_find (pInfCfg, szDriver, "Setup")) { szComma = strchr (pInfCfg->value, ','); szComma1 = strchr (szComma + 1, ','); if (!szComma || !szComma1 || szComma + 1 == szComma1) goto error; *szComma1 = 0; szSetupFile = strdup (szComma + 1); if (_iodbcdm_cfg_write (pCfg, szDriver, "Setup", szSetupFile)) goto error; } if (!_iodbcdm_cfg_find (pInfCfg, szDriver, NULL)) { while (!_iodbcdm_cfg_nextentry (pInfCfg) && _iodbcdm_cfg_define (pInfCfg)) if (strcmp (pInfCfg->id, drivers ? "\"Driver\"" : "\"Translator\"") && strcmp (pInfCfg->id, "\"Setup\"")) { szComma = strchr (pInfCfg->value, ','); szComma1 = strchr (szComma + 1, ','); if (!szComma || !szComma1 || szComma + 1 == szComma1) szValue = strdup (""); else { *szComma1 = 0; szValue = strdup (szComma + 1); } szComma = strchr (pInfCfg->id, '"'); szComma1 = strchr (szComma + 1, '"'); if (!szComma || !szComma1 || szComma + 1 == szComma1) goto loop_cont; else { *szComma1 = 0; szId = strdup (szComma + 1); } if (_iodbcdm_cfg_write (pCfg, szDriver, szId, szValue)) goto error; loop_cont: if (szValue) { free (szValue); szValue = NULL; } if (szId) { free (szId); szId = NULL; } } } if (!drivers) goto quit; szKeysSection = (char *) calloc (strlen (szDriver) + 6, sizeof (char)); strcpy (szKeysSection, szDriver); strcat (szKeysSection, "-Keys"); if (!_iodbcdm_cfg_find (pInfCfg, szKeysSection, NULL)) { while (!_iodbcdm_cfg_nextentry (pInfCfg) && _iodbcdm_cfg_define (pInfCfg)) { if (strcmp (pInfCfg->id, "CreateDSN")) { if (_iodbcdm_cfg_write (pCfg, szDriver, pInfCfg->id, pInfCfg->value)) goto error; } else if (!do_create_dsns (pOdbcCfg, pCfg, szDriverFile, pInfCfg->value, szDriver)) goto error; } } quit: ret = TRUE; error: if (szKeysSection) free (szKeysSection); if (szDriverFile) free (szDriverFile); if (szSetupFile) free (szSetupFile); if (szValue) free (szValue); if (szId) free (szId); _iodbcdm_cfg_done (pInfCfg); return ret; } int install_from_string (PCONFIG pCfg, PCONFIG pOdbcCfg, LPSTR lpszDriver, BOOL drivers) { char *szCurr = (char *) lpszDriver, *szDiz = lpszDriver; char *szAssignment, *szEqual, *szValue, *szDriver = NULL; if (_iodbcdm_cfg_write (pCfg, lpszDriver, NULL, NULL)) return FALSE; #ifdef WIN32 if (_iodbcdm_cfg_write (pCfg, drivers ? "ODBC 32 bit Drivers" : "ODBC 32 bit Translators", lpszDriver, "Installed")) #else if (_iodbcdm_cfg_write (pCfg, drivers ? "ODBC Drivers" : "ODBC Translators", lpszDriver, "Installed")) #endif return FALSE; for (szCurr = lpszDriver + strlen (lpszDriver) + 1; *szCurr; szCurr += strlen (szCurr) + 1) { szAssignment = strdup (szCurr); szEqual = strchr (szAssignment, '='); szValue = szEqual + 1; if (szEqual) *szEqual = 0; else goto loop_error; if ((drivers && !strcmp (szAssignment, "Driver")) || (!drivers && !strcmp (szAssignment, "Translator"))) { if (szDriver) free (szDriver); szDriver = strdup (szValue); } if (drivers) { if (strcmp (szAssignment, "CreateDSN")) { if (_iodbcdm_cfg_write (pCfg, lpszDriver, szAssignment, szValue)) goto loop_error; } else if (!do_create_dsns (pOdbcCfg, pCfg, szDriver, szValue, szDiz)) goto loop_error; } else if (_iodbcdm_cfg_write (pCfg, lpszDriver, szAssignment, szValue)) goto loop_error; free (szAssignment); continue; loop_error: if (szDriver) free (szDriver); free (szAssignment); return FALSE; } if (szDriver) free (szDriver); else return FALSE; return TRUE; } libiodbc-3.52.9/iodbcinst/SQLCreateDataSource.c0000644000076400007640000001500512323210535016167 00000000000000/* * SQLCreateDataSource.c * * $Id$ * * Add, modify or delete datasources * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include "iodbc_error.h" #include "dlf.h" #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) #include #endif extern BOOL ValidDSN (LPCSTR lpszDSN); extern BOOL ValidDSNW (LPCWSTR lpszDSN); #define CALL_DRVCONN_DIALBOX(path) \ if ((handle = DLL_OPEN(path)) != NULL) \ { \ if ((pDrvConn = (pDrvConnFunc)DLL_PROC(handle, "iodbcdm_drvconn_dialbox")) != NULL) \ pDrvConn(parent, dsn, sizeof(dsn), NULL, SQL_DRIVER_PROMPT, &config); \ retcode = TRUE; \ DLL_CLOSE(handle); \ } #define CALL_DRVCONN_DIALBOXW(path) \ if ((handle = DLL_OPEN(path)) != NULL) \ { \ if ((pDrvConnW = (pDrvConnWFunc)DLL_PROC(handle, "iodbcdm_drvconn_dialboxw")) != NULL) \ pDrvConnW(parent, (LPWSTR)dsn, sizeof(dsn) / sizeof(wchar_t), NULL, SQL_DRIVER_PROMPT, &config); \ retcode = TRUE; \ DLL_CLOSE(handle); \ } BOOL CreateDataSource (HWND parent, LPCSTR lpszDSN, SQLCHAR waMode) { char dsn[1024] = { 0 }; UWORD config = ODBC_USER_DSN; BOOL retcode = FALSE; void *handle; pDrvConnFunc pDrvConn = NULL; pDrvConnWFunc pDrvConnW = NULL; #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) CFStringRef libname = NULL; CFBundleRef bundle; CFURLRef liburl; char name[1024] = { 0 }; #endif /* Load the Admin dialbox function */ #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) bundle = CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.inst")); if (bundle) { /* Search for the iODBCadm library */ liburl = CFBundleCopyResourceURL (bundle, CFSTR ("iODBCadm.bundle"), NULL, NULL); if (liburl && (libname = CFURLCopyFileSystemPath (liburl, kCFURLPOSIXPathStyle))) { CFStringGetCString (libname, name, sizeof (name), kCFStringEncodingASCII); STRCAT (name, "/Contents/MacOS/iODBCadm"); if (waMode == 'A') { CALL_DRVCONN_DIALBOX (name); } else { CALL_DRVCONN_DIALBOXW (name); } } if (liburl) CFRelease (liburl); if (libname) CFRelease (libname); } #else if (waMode == 'A') { CALL_DRVCONN_DIALBOX ("libiodbcadm.so.2"); } else { CALL_DRVCONN_DIALBOXW ("libiodbcadm.so.2"); } #endif return retcode; } BOOL INSTAPI SQLCreateDataSource_Internal (HWND hwndParent, SQLPOINTER lpszDSN, SQLCHAR waMode) { BOOL retcode = FALSE; /* Check input parameters */ CLEAR_ERROR (); if (!hwndParent) { PUSH_ERROR (ODBC_ERROR_INVALID_HWND); goto quit; } if (waMode == 'A') { if ((!lpszDSN && !ValidDSN (lpszDSN)) || (!lpszDSN && !STRLEN (lpszDSN))) { PUSH_ERROR (ODBC_ERROR_INVALID_DSN); goto quit; } } else { if ((!lpszDSN && !ValidDSNW (lpszDSN)) || (!lpszDSN && !WCSLEN (lpszDSN))) { PUSH_ERROR (ODBC_ERROR_INVALID_DSN); goto quit; } } retcode = CreateDataSource (hwndParent, lpszDSN, waMode); quit: return retcode; } BOOL INSTAPI SQLCreateDataSource (HWND hwndParent, LPCSTR lpszDSN) { return SQLCreateDataSource_Internal (hwndParent, (SQLPOINTER) lpszDSN, 'A'); } BOOL INSTAPI SQLCreateDataSourceW (HWND hwndParent, LPCWSTR lpszDSN) { return SQLCreateDataSource_Internal (hwndParent, (SQLPOINTER) lpszDSN, 'W'); } libiodbc-3.52.9/iodbcinst/Info.c0000644000076400007640000000636012323210535013330 00000000000000/* * info.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include char *iodbcinst_version = VERSION; libiodbc-3.52.9/iodbcinst/SQLReadFileDSN.c0000644000076400007640000001375112323210535015037 00000000000000/* * SQLReadFileDSN.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "inifile.h" #include "iodbc_error.h" #include "misc.h" extern int GetPrivateProfileString (LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszDefault, LPSTR lpszRetBuffer, int cbRetBuffer, LPCSTR lpszFilename); BOOL INSTAPI SQLReadFileDSN (LPCSTR lpszFileName, LPCSTR lpszAppName, LPCSTR lpszKeyName, LPSTR lpszString, WORD cbString, WORD * pcbString) { BOOL retcode = FALSE; WORD len = 0, i; char filename[1024]; /* Check input parameters */ CLEAR_ERROR (); if (!lpszString || !cbString) { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } if (!lpszAppName && lpszKeyName) { PUSH_ERROR (ODBC_ERROR_INVALID_REQUEST_TYPE); goto quit; } /* Is a file is specified */ if (lpszFileName) { _iodbcdm_getdsnfile (lpszFileName, filename, sizeof (filename)); len = GetPrivateProfileString (lpszAppName, lpszKeyName, "", lpszString, cbString, filename); if (numerrors == -1) retcode = TRUE; goto quit; } PUSH_ERROR (ODBC_ERROR_INVALID_PATH); goto quit; quit: for (i = 0; i < len; i++) if (!lpszString[i]) lpszString[i] = ';'; if (pcbString) *pcbString = len; if (len == cbString - 1) { PUSH_ERROR (ODBC_ERROR_OUTPUT_STRING_TRUNCATED); retcode = FALSE; } return retcode; } BOOL INSTAPI SQLReadFileDSNW (LPCWSTR lpszFileName, LPCWSTR lpszAppName, LPCWSTR lpszKeyName, LPWSTR lpszString, WORD cbString, WORD * pcbString) { char *_filename_u8 = NULL; char *_appname_u8 = NULL; char *_keyname_u8 = NULL; char *_string_u8 = NULL; BOOL retcode = FALSE; _filename_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszFileName, SQL_NTS); if (_filename_u8 == NULL && lpszFileName) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _appname_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszAppName, SQL_NTS); if (_appname_u8 == NULL && lpszAppName) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _keyname_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszKeyName, SQL_NTS); if (_keyname_u8 == NULL && lpszKeyName) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } if (cbString > 0) { if ((_string_u8 = malloc (cbString * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } } retcode = SQLReadFileDSN (_filename_u8, _appname_u8, _keyname_u8, _string_u8, cbString * UTF8_MAX_CHAR_LEN, pcbString); if (retcode == TRUE) { dm_StrCopyOut2_U8toW (_string_u8, lpszString, cbString, pcbString); } done: MEM_FREE (_filename_u8); MEM_FREE (_appname_u8); MEM_FREE (_keyname_u8); MEM_FREE (_string_u8); return retcode; } libiodbc-3.52.9/iodbcinst/iodbc_error.c0000644000076400007640000000657012323210535014731 00000000000000/* * iodbc_error.h * * $Id$ * * Misc support functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include "iodbc_error.h" DWORD ierror[ERROR_NUM] = {0}; LPSTR errormsg[ERROR_NUM] = {0}; SWORD numerrors = -1; libiodbc-3.52.9/iodbcinst/SQLRemoveDriverManager.c0000644000076400007640000000677112323210535016727 00000000000000/* * SQLRemoveDriverManager.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include "inifile.h" #include "misc.h" #include "iodbc_error.h" BOOL INSTAPI SQLRemoveDriverManager (LPDWORD lpdwUsageCount) { /* Implementation finished ... very easy ... */ CLEAR_ERROR (); return TRUE; } libiodbc-3.52.9/iodbcinst/inifile.h0000644000076400007640000001434412323210535014062 00000000000000/* * inifile.h * * $Id$ * * Read/Write .ini files * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _INIFILE_H #define _INIFILE_H #include #ifndef _MAC #include #endif /* configuration file entry */ typedef struct TCFGENTRY { char *section; char *id; char *value; char *comment; unsigned short flags; } TCFGENTRY, *PCFGENTRY; /* values for flags */ #define CFE_MUST_FREE_SECTION 0x8000 #define CFE_MUST_FREE_ID 0x4000 #define CFE_MUST_FREE_VALUE 0x2000 #define CFE_MUST_FREE_COMMENT 0x1000 /* configuration file */ typedef struct TCFGDATA { char *fileName; /* Current file name */ int dirty; /* Did we make modifications? */ char *image; /* In-memory copy of the file */ size_t size; /* Size of this copy (excl. \0) */ time_t mtime; /* Modification time */ unsigned int numEntries; unsigned int maxEntries; PCFGENTRY entries; /* Compatibility */ unsigned int cursor; char *section; char *id; char *value; char *comment; unsigned short flags; } TCONFIG, *PCONFIG; #define CFG_VALID 0x8000 #define CFG_EOF 0x4000 #define CFG_ERROR 0x0000 #define CFG_SECTION 0x0001 #define CFG_DEFINE 0x0002 #define CFG_CONTINUE 0x0003 #define CFG_TYPEMASK 0x000F #define CFG_TYPE(X) ((X) & CFG_TYPEMASK) #define _iodbcdm_cfg_valid(X) ((X) != NULL && ((X)->flags & CFG_VALID)) #define _iodbcdm_cfg_eof(X) ((X)->flags & CFG_EOF) #define _iodbcdm_cfg_section(X) (CFG_TYPE((X)->flags) == CFG_SECTION) #define _iodbcdm_cfg_define(X) (CFG_TYPE((X)->flags) == CFG_DEFINE) #define _iodbcdm_cfg_cont(X) (CFG_TYPE((X)->flags) == CFG_CONTINUE) int _iodbcdm_cfg_init (PCONFIG * ppconf, const char *filename, int doCreate); int _iodbcdm_cfg_done (PCONFIG pconfig); int _iodbcdm_cfg_freeimage (PCONFIG pconfig); int _iodbcdm_cfg_refresh (PCONFIG pconfig); int _iodbcdm_cfg_storeentry (PCONFIG pconfig, char *section, char *id, char *value, char *comment, int dynamic); int _iodbcdm_cfg_rewind (PCONFIG pconfig); int _iodbcdm_cfg_nextentry (PCONFIG pconfig); int _iodbcdm_cfg_find (PCONFIG pconfig, char *section, char *id); int _iodbcdm_cfg_next_section (PCONFIG pconfig); int _iodbcdm_cfg_write (PCONFIG pconfig, char *section, char *id, char *value); int _iodbcdm_cfg_commit (PCONFIG pconfig); int _iodbcdm_cfg_getstring (PCONFIG pconfig, char *section, char *id, char **valptr); int _iodbcdm_cfg_getlong (PCONFIG pconfig, char *section, char *id, long *valptr); int _iodbcdm_cfg_getshort (PCONFIG pconfig, char *section, char *id, short *valptr); int _iodbcdm_cfg_search_init (PCONFIG * ppconf, const char *filename, int doCreate); int _iodbcdm_list_entries (PCONFIG pCfg, LPCSTR lpszSection, LPSTR lpszRetBuffer, int cbRetBuffer); int _iodbcdm_list_sections (PCONFIG pCfg, LPSTR lpszRetBuffer, int cbRetBuffer); BOOL do_create_dsns (PCONFIG pCfg, PCONFIG pInfCfg, LPSTR szDriver, LPSTR szDSNS, LPSTR szDiz); BOOL install_from_ini (PCONFIG pCfg, PCONFIG pOdbcCfg, LPSTR szInfFile, LPSTR szDriver, BOOL drivers); int install_from_string (PCONFIG pCfg, PCONFIG pOdbcCfg, LPSTR lpszDriver, BOOL drivers); #endif /* _INIFILE_H */ libiodbc-3.52.9/iodbcinst/SQLValidDSN.c0000644000076400007640000001062212323210535014415 00000000000000/* * SQLValidDSN.c * * $Id$ * * Validate a DSN name * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "iodbc_error.h" #define INVALID_CHARS "[]{}(),;?*=!@\\" #define INVALID_CHARSW L"[]{}(),;?*=!@\\" BOOL ValidDSN (LPCSTR lpszDSN) { char *currp = (char *) lpszDSN; while (*currp) { if (strchr (INVALID_CHARS, *currp)) return FALSE; else currp++; } return TRUE; } BOOL ValidDSNW (LPCWSTR lpszDSN) { wchar_t *currp = (wchar_t *) lpszDSN; while (*currp) { if (wcschr (INVALID_CHARSW, *currp)) return FALSE; else currp++; } return TRUE; } BOOL INSTAPI SQLValidDSN (LPCSTR lpszDSN) { BOOL retcode = FALSE; /* Check dsn */ CLEAR_ERROR (); if (!lpszDSN || !STRLEN (lpszDSN) || STRLEN (lpszDSN) >= SQL_MAX_DSN_LENGTH) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; } retcode = ValidDSN (lpszDSN); quit: return retcode; } BOOL INSTAPI SQLValidDSNW (LPCWSTR lpszDSN) { BOOL retcode = FALSE; /* Check dsn */ CLEAR_ERROR (); if (!lpszDSN || !WCSLEN (lpszDSN) || WCSLEN (lpszDSN) >= SQL_MAX_DSN_LENGTH) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; } retcode = ValidDSNW (lpszDSN); quit: return retcode; } libiodbc-3.52.9/iodbcinst/Makefile.in0000644000076400007640000006240712323210643014342 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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 = iodbcinst DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = 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__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) libiodbc_common_la_LIBADD = am_libiodbc_common_la_OBJECTS = SQLGetConfigMode.lo \ SQLGetPrivateProfileString.lo SQLSetConfigMode.lo \ SQLValidDSN.lo SQLWritePrivateProfileString.lo \ SQLReadFileDSN.lo SQLWriteFileDSN.lo dlf.lo inifile.lo \ iodbc_error.lo misc.lo unicode.lo libiodbc_common_la_OBJECTS = $(am_libiodbc_common_la_OBJECTS) am__DEPENDENCIES_1 = libiodbcinst_la_DEPENDENCIES = libiodbc_common.la \ $(am__DEPENDENCIES_1) am_libiodbcinst_la_OBJECTS = SQLConfigDataSource.lo SQLConfigDriver.lo \ SQLGetAvailableDrivers.lo SQLGetInstalledDrivers.lo \ SQLInstallDriver.lo SQLRemoveDSNFromIni.lo SQLRemoveDriver.lo \ SQLWriteDSNToIni.lo SQLInstallDriverEx.lo SQLInstallODBC.lo \ SQLInstallTranslator.lo SQLCreateDataSource.lo \ SQLManageDataSource.lo SQLRemoveTranslator.lo \ SQLRemoveDefaultDataSource.lo SQLInstallDriverManager.lo \ SQLRemoveDriverManager.lo SQLInstallTranslatorEx.lo \ SQLInstallerError.lo SQLPostInstallerError.lo \ SQLGetTranslator.lo Info.lo libiodbcinst_la_OBJECTS = $(am_libiodbcinst_la_OBJECTS) libiodbcinst_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libiodbcinst_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/admin/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 = $(libiodbc_common_la_SOURCES) $(libiodbcinst_la_SOURCES) DIST_SOURCES = $(libiodbc_common_la_SOURCES) \ $(libiodbcinst_la_SOURCES) HEADERS = $(noinst_HEADERS) 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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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@ noinst_LTLIBRARIES = libiodbc_common.la lib_LTLIBRARIES = libiodbcinst.la AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/iodbc \ -I$(top_srcdir)/iodbcinst \ -I$(top_srcdir)/iodbcadm libiodbc_common_la_SOURCES = \ SQLGetConfigMode.c \ SQLGetPrivateProfileString.c \ SQLSetConfigMode.c \ SQLValidDSN.c \ SQLWritePrivateProfileString.c \ SQLReadFileDSN.c \ SQLWriteFileDSN.c \ dlf.c \ inifile.c \ iodbc_error.c \ misc.c \ unicode.c libiodbcinst_la_LDFLAGS = -version-info @lib_version@ \ -export-symbols $(srcdir)/iodbcinst.exp libiodbcinst_la_LIBADD = libiodbc_common.la $(LIBADD_DL) libiodbcinst_la_SOURCES = \ SQLConfigDataSource.c \ SQLConfigDriver.c \ SQLGetAvailableDrivers.c \ SQLGetInstalledDrivers.c \ SQLInstallDriver.c \ SQLRemoveDSNFromIni.c \ SQLRemoveDriver.c \ SQLWriteDSNToIni.c \ SQLInstallDriverEx.c \ SQLInstallODBC.c \ SQLInstallTranslator.c \ SQLCreateDataSource.c \ SQLManageDataSource.c \ SQLRemoveTranslator.c \ SQLRemoveDefaultDataSource.c \ SQLInstallDriverManager.c \ SQLRemoveDriverManager.c \ SQLInstallTranslatorEx.c \ SQLInstallerError.c \ SQLPostInstallerError.c \ SQLGetTranslator.c \ Info.c noinst_HEADERS = \ dlf.h \ inifile.h \ iodbc_error.h \ unicode.h \ misc.h EXTRA_DIST = $(srcdir)/iodbcinst.exp all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 iodbcinst/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu iodbcinst/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libiodbc_common.la: $(libiodbc_common_la_OBJECTS) $(libiodbc_common_la_DEPENDENCIES) $(LINK) $(libiodbc_common_la_OBJECTS) $(libiodbc_common_la_LIBADD) $(LIBS) @DARWIN_FALSE@libiodbcinst.la: $(libiodbcinst_la_OBJECTS) $(libiodbcinst_la_DEPENDENCIES) @DARWIN_FALSE@ $(libiodbcinst_la_LINK) -rpath $(libdir) $(libiodbcinst_la_OBJECTS) $(libiodbcinst_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Info.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLConfigDataSource.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLConfigDriver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLCreateDataSource.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLGetAvailableDrivers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLGetConfigMode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLGetInstalledDrivers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLGetPrivateProfileString.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLGetTranslator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLInstallDriver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLInstallDriverEx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLInstallDriverManager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLInstallODBC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLInstallTranslator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLInstallTranslatorEx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLInstallerError.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLManageDataSource.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLPostInstallerError.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLReadFileDSN.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLRemoveDSNFromIni.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLRemoveDefaultDataSource.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLRemoveDriver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLRemoveDriverManager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLRemoveTranslator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLSetConfigMode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLValidDSN.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLWriteDSNToIni.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLWriteFileDSN.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SQLWritePrivateProfileString.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inifile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iodbc_error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unicode.Plo@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 $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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-libLTLIBRARIES clean-libtool \ clean-noinstLTLIBRARIES 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-libLTLIBRARIES 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-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ ctags 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-libLTLIBRARIES 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-libLTLIBRARIES @DARWIN_TRUE@libiodbcinst.la: $(libiodbcinst_la_OBJECTS) $(libiodbcinst_la_DEPENDENCIES) @DARWIN_TRUE@ $(LINK) -rpath $(libdir) $(libiodbcinst_la_LDFLAGS) $(libiodbcinst_la_OBJECTS) $(libiodbcinst_la_LIBADD) $(LIBS) @DARWIN_TRUE@ -$(STRIP) -s $(top_srcdir)/mac/iodbcinst.exp -u .libs/*.dylib # 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: libiodbc-3.52.9/iodbcinst/SQLManageDataSource.c0000644000076400007640000001204112323210535016151 00000000000000/* * SQLManageDataSource.c * * $Id$ * * Add, modify or delete datasources * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "iodbc_error.h" #include "dlf.h" #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) #include #endif #define CALL_ADMIN_DIALBOX(path) \ if ((handle = DLL_OPEN(path)) != NULL) \ { \ if ((pAdminBox = (pAdminBoxFunc)DLL_PROC(handle, "_iodbcdm_admin_dialbox")) != NULL) \ if( pAdminBox(hwndParent) == SQL_SUCCESS) \ retcode = TRUE; \ DLL_CLOSE(handle); \ } \ BOOL ManageDataSources (HWND hwndParent) { void *handle; pAdminBoxFunc pAdminBox; BOOL retcode = FALSE; #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) CFStringRef libname = NULL; CFBundleRef bundle; CFURLRef liburl; char name[1024] = { 0 }; #endif /* Load the Admin dialbox function */ #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) bundle = CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.inst")); if (bundle) { /* Search for the iODBCadm library */ liburl = CFBundleCopyResourceURL (bundle, CFSTR ("iODBCadm.bundle"), NULL, NULL); if (liburl && (libname = CFURLCopyFileSystemPath (liburl, kCFURLPOSIXPathStyle))) { CFStringGetCString (libname, name, sizeof (name), kCFStringEncodingASCII); STRCAT (name, "/Contents/MacOS/iODBCadm"); CALL_ADMIN_DIALBOX (name); } if (liburl) CFRelease (liburl); if (libname) CFRelease (libname); } #else CALL_ADMIN_DIALBOX ("libiodbcadm.so.2"); #endif return retcode; } BOOL INSTAPI SQLManageDataSources (HWND hwndParent) { BOOL retcode = FALSE; /* Check input parameters */ CLEAR_ERROR (); if (!hwndParent) { PUSH_ERROR (ODBC_ERROR_INVALID_HWND); goto quit; } retcode = ManageDataSources (hwndParent); quit: return retcode; } libiodbc-3.52.9/iodbcinst/misc.c0000644000076400007640000003306312323210535013370 00000000000000/* * misc.c * * $Id$ * * Miscellaneous functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include "inifile.h" #include "misc.h" #ifdef _MAC # include #endif /* endif _MAC */ WORD wSystemDSN = USERDSN_ONLY; WORD configMode = ODBC_BOTH_DSN; #if !defined(WINDOWS) && !defined(WIN32) && !defined(OS2) && !defined(macintosh) # include # define UNIX_PWD #endif /* * Algorithm for resolving an odbc.ini reference * * For UNIX : 1. Check for $ODBCINI variable, if exists return $ODBCINI. * 2. Check for $HOME/.odbc.ini or ~/.odbc.ini file, * if exists return it. * 3. Check for SYS_ODBC_INI build variable, if exists return * it. (ie : /etc/odbc.ini). * 4. No odbc.ini presence, return NULL. * * For WINDOWS, WIN32, OS2 : * 1. Check for the system odbc.ini file, if exists return it. * 2. No odbc.ini presence, return NULL. * * For VMS: 1. Check for $ODBCINI variable, if exists return $ODBCINI. * 2. Check for SYS$LOGIN:ODBC.INI file, if exists return it. * 3. No odbc.ini presence, return NULL. * * For Mac: 1. On powerPC, file is ODBC Preferences PPC * On 68k, file is ODBC Preferences * 2. Check for ...:System Folder:Preferences:ODBC Preferences * file, if exists return it. * 3. No odbc.ini presence, return NULL. * * For MacX: 1. Check for $ODBCINI variable, if exists return $ODBCINI. * 2. Check for $HOME/.odbc.ini or ~/.odbc.ini file, if exists * return it. * 3. Check for $HOME/Library/ODBC/odbc.ini or * ~/.odbc.ini file, if exists return it. * 4. Check for SYS_ODBC_INI build variable, if exists return * it. (ie : /etc/odbc.ini). * 5. Check for /Library/ODBC/odbc.ini * file, if exists return it. * 6. No odbc.ini presence, return NULL. */ char * _iodbcadm_getinifile (char *buf, int size, int bIsInst, int doCreate) { #ifdef _MAC HParamBlockRec hp; long fldrDid; short fldrRef; OSErr result; #endif /* endif _MAC */ int i, j; char *ptr; #ifdef _MAC # ifdef __POWERPC__ j = STRLEN (bIsInst ? ":ODBC Installer Preferences PPC" : ":ODBC Preferences PPC") + 1; # else j = STRLEN (bIsInst ? ":ODBC Installer Preferences" : ":ODBC Preferences") + 1; # endif /* endif __POWERPC__ */ #else j = STRLEN (bIsInst ? "/odbcinst.ini" : "/odbc.ini") + 1; #endif /* endif _MAC */ if (size < j) return NULL; #if !defined(UNIX_PWD) # ifdef _MAC result = FindFolder (kOnSystemDisk, kPreferencesFolderType, kDontCreateFolder, &fldrRef, &fldrDid); if (result != noErr) return NULL; ptr = get_full_pathname (fldrDid, fldrRef); i = (ptr) ? STRLEN (ptr) : 0; if (i == 0 || i > size - j) { if (ptr) free (ptr); return NULL; } # ifdef __POWERPC__ STRCPY (buf, ptr); STRCAT (buf, bIsInst ? ":ODBC Installer Preferences PPC" : ":ODBC Preferences PPC"); # else STRCPY (buf, ptr); STRCAT (buf, bIsInst ? ":ODBC Installer Preferences" : ":ODBC Preferences"); # endif /* endif __POWERPC__ */ if (doCreate) { hp.fileParam.ioCompletion = NULL; hp.fileParam.ioVRefNum = fldrRef; hp.fileParam.ioDirID = fldrDid; # ifdef __POWERPC__ hp.fileParam.ioNamePtr = bIsInst ? "\pODBC Installer Preferences PPC" : "\pODBC Preferences PPC"; # else hp.fileParam.ioNamePtr = bIsInst ? "\pODBC Installer Preferences" : "\pODBC Preferences"; # endif PBHCreate (&hp, FALSE); } free (ptr); return buf; # else /* else _MAC */ /* * On Windows, there is only one place to look */ i = GetWindowsDirectory ((LPSTR) buf, size); if (i == 0 || i > size - j) return NULL; snprintf (buf + i, size - i, bIsInst ? "/odbcinst.ini" : "/odbc.ini"); return buf; # endif /* endif _MAC */ #else if (wSystemDSN == USERDSN_ONLY) { /* * 1. Check $ODBCINI environment variable */ if ((ptr = getenv (bIsInst ? "ODBCINSTINI" : "ODBCINI")) != NULL) { STRNCPY (buf, ptr, size); if (access (buf, R_OK) == 0) return buf; else if (doCreate) { int f = open ((char *) buf, O_CREAT, S_IREAD | S_IWRITE | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if (f != -1) { close (f); return buf; } } } # ifdef VMS /* * 2a. VMS calls this HOME */ STRNCPY (buf, bIsInst ? "SYS$LOGIN:ODBCINST.INI" : "SYS$LOGIN:ODBC.INI", size); if (doCreate || access (buf, R_OK) == 0) return buf; # else /* else VMS */ /* * 2b. Check either $HOME/.odbc.ini or ~/.odbc.ini */ if ((ptr = getenv ("HOME")) == NULL) { ptr = (char *) getpwuid (getuid ()); if (ptr != NULL) ptr = ((struct passwd *) ptr)->pw_dir; } if (ptr != NULL) { snprintf (buf, size, bIsInst ? "%s/.odbcinst.ini" : "%s/.odbc.ini", ptr); if (doCreate || access (buf, R_OK) == 0) return buf; #if defined(__APPLE__) /* * Try to check the ~/Library/ODBC/odbc.ini */ snprintf (buf, size, bIsInst ? "%s" ODBCINST_INI_APP : "%s" ODBC_INI_APP, ptr); if (access (buf, R_OK) == 0) return buf; else if (doCreate) { int f = open ((char *) buf, O_CREAT, S_IREAD | S_IWRITE | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if (f != -1) { close (f); return buf; } } # endif /* endif __APPLE__ */ } # endif /* endif VMS */ } /* * 3. Try SYS_ODBC_INI as the last resort */ if (wSystemDSN == SYSTEMDSN_ONLY || bIsInst) { /* * 1. Check $SYSODBCINI environment variable */ if ((ptr = getenv (bIsInst ? "SYSODBCINSTINI" : "SYSODBCINI")) != NULL) { STRNCPY (buf, ptr, size); if (access (buf, R_OK) == 0) return buf; else if (doCreate) { int f = open ((char *) buf, O_CREAT, S_IREAD | S_IWRITE | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if (f != -1) { close (f); return buf; } } } #if defined(__APPLE__) /* * Try to check the /Library/ODBC/odbc.ini */ snprintf (buf, size, "%s", bIsInst ? ODBCINST_INI_APP : ODBC_INI_APP); if (access (buf, R_OK) == 0) return buf; else if (doCreate) { int f = open ((char *) buf, O_CREAT, S_IREAD | S_IWRITE | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if (f != -1) { close (f); return buf; } } # endif /* endif __APPLE__ */ STRNCPY (buf, bIsInst ? SYS_ODBCINST_INI : SYS_ODBC_INI, size); return buf; } /* * No ini file found or accessible */ return NULL; #endif /* UNIX_PWD */ } const char * _iodbcdm_check_for_string(const char *szList, const char *szString, int bContains) { const char *currP = szList; while (*currP) { if (bContains) { if (strstr (currP, szString)) return currP; } else { if (!strcmp (currP, szString)) return currP; } } return NULL; } char * _iodbcdm_remove_quotes(const char *szString) { char *szWork, *szPtr; while (*szString == '\'' || *szString == '\"') szString += 1; if (!*szString) return NULL; szWork = strdup (szString); szPtr = strchr (szWork, '\''); if (szPtr) *szPtr = 0; szPtr = strchr (szWork, '\"'); if (szPtr) *szPtr = 0; return szWork; } /* * Get FILEDSN file name * * If file name does not contain path component, the default directory for * saving and loading a .dsn file will be defined as follows: * 1. if FILEDSNPATH is set in environment: use environment * 2. if odbcinst.ini [odbc] FILEDSNPATH is set: use this * 3. else use DEFAULT_FILEDSNPATH * * ".dsn" extension is always appended to the resulting filename * (if not already exists). */ void _iodbcdm_getdsnfile(const char *filedsn, char *buf, size_t buf_sz) { char *p; char *default_path; if (strchr (filedsn, '/') != NULL) { /* has path component -- copy as is */ _iodbcdm_strlcpy (buf, filedsn, buf_sz); goto done; } /* get default path */ if ((default_path = getenv ("FILEDSNPATH")) != NULL) _iodbcdm_strlcpy (buf, default_path, buf_sz); else { SQLSetConfigMode (ODBC_BOTH_DSN); if (!SQLGetPrivateProfileString ("ODBC", "FileDSNPath", "", buf, buf_sz, "odbcinst.ini")) _iodbcdm_strlcpy (buf, DEFAULT_FILEDSNPATH, buf_sz); } /* append filedsn file name */ _iodbcdm_strlcat (buf, "/", buf_sz); _iodbcdm_strlcat (buf, filedsn, buf_sz); done: /* append ".dsn" if extension is not ".dsn" */ if ((p = strrchr (buf, '.')) == NULL || strcasecmp (p, ".dsn") != 0) _iodbcdm_strlcat (buf, ".dsn", buf_sz); } /* * Copy src to string dst of size siz. At most siz-1 characters * will be copied. Always NUL terminates (unless siz == 0). * Returns strlen(src); if retval >= siz, truncation occurred. * * Taken from FreeBSD libc. */ size_t _iodbcdm_strlcpy(char *dst, const char *src, size_t siz) { char *d = dst; const char *s = src; size_t n = siz; /* Copy as many bytes as will fit */ if (n != 0 && --n != 0) { do { if ((*d++ = *s++) == 0) break; } while (--n != 0); } /* Not enough room in dst, add NUL and traverse rest of src */ if (n == 0) { if (siz != 0) *d = '\0'; /* NUL-terminate dst */ while (*s++) ; } return(s - src - 1); /* count does not include NUL */ } /* * Appends src to string dst of size siz (unlike strncat, siz is the * full size of dst, not space left). At most siz-1 characters * will be copied. Always NUL terminates (unless siz <= strlen(dst)). * Returns strlen(src) + MIN(siz, strlen(initial dst)). * If retval >= siz, truncation occurred. * * Taken from FreeBSD libc. */ size_t _iodbcdm_strlcat(char *dst, const char *src, size_t siz) { char *d = dst; const char *s = src; size_t n = siz; size_t dlen; /* Find the end of dst and adjust bytes left but don't go past end */ while (n-- != 0 && *d != '\0') d++; dlen = d - dst; n = siz - dlen; if (n == 0) return(dlen + strlen(s)); while (*s != '\0') { if (n != 1) { *d++ = *s; n--; } s++; } *d = '\0'; return(dlen + (s - src)); /* count does not include NUL */ } libiodbc-3.52.9/iodbcinst/SQLInstallTranslatorEx.c0000644000076400007640000001720412323210535016771 00000000000000/* * SQLInstallTranslatorEx.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "misc.h" #include "inifile.h" #include "iodbc_error.h" #if !defined(WINDOWS) && !defined(WIN32) && !defined(OS2) && !defined(macintosh) # include # include # define UNIX_PWD #endif extern BOOL InstallDriverPath (LPSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut, LPSTR envname); extern BOOL InstallDriverPathLength (WORD * pcbPathOut, LPSTR envname); BOOL INSTAPI SQLInstallTranslatorEx (LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount) { PCONFIG pCfg = NULL, pOdbcCfg = NULL; BOOL retcode = FALSE; CLEAR_ERROR (); if (lpszPathIn && access (lpszPathIn, R_OK | W_OK | X_OK)) { PUSH_ERROR (ODBC_ERROR_INVALID_PATH); goto quit; } switch (fRequest) { case ODBC_INSTALL_INQUIRY: if (lpszPathIn) { if (pcbPathOut) *pcbPathOut = STRLEN (lpszPathIn); retcode = TRUE; } else retcode = InstallDriverPathLength (pcbPathOut, "ODBCTRANSLATORS"); goto quit; case ODBC_INSTALL_COMPLETE: break; default: PUSH_ERROR (ODBC_ERROR_INVALID_REQUEST_TYPE); goto quit; } /* Check input parameters */ if (!lpszTranslator || !STRLEN (lpszTranslator)) { PUSH_ERROR (ODBC_ERROR_INVALID_PARAM_SEQUENCE); goto quit; } if (!lpszPathOut || !cbPathOutMax) { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } /* Write the out path */ if (!InstallDriverPath (lpszPathOut, cbPathOutMax, pcbPathOut, "ODBCTRANSLATORS")) goto quit; /* Else go through user/system odbcinst.ini */ switch (configMode) { case ODBC_BOTH_DSN: case ODBC_USER_DSN: wSystemDSN = USERDSN_ONLY; break; case ODBC_SYSTEM_DSN: wSystemDSN = SYSTEMDSN_ONLY; break; } if (_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; } if (_iodbcdm_cfg_search_init (&pOdbcCfg, "odbc.ini", TRUE)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); pOdbcCfg = NULL; goto done; } if (!install_from_string (pCfg, pOdbcCfg, (char *) lpszTranslator, FALSE)) { PUSH_ERROR (ODBC_ERROR_INVALID_KEYWORD_VALUE); goto done; } if (_iodbcdm_cfg_commit (pCfg) || _iodbcdm_cfg_commit (pOdbcCfg)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto done; } retcode = TRUE; done: _iodbcdm_cfg_done (pCfg); if (pOdbcCfg) _iodbcdm_cfg_done (pOdbcCfg); quit: wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; return retcode; } BOOL INSTAPI SQLInstallTranslatorExW (LPCWSTR lpszTranslator, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount) { char *_translator_u8 = NULL; char *_pathin_u8 = NULL; char *_pathout_u8 = NULL; BOOL retcode = FALSE; int length; SQLWCHAR *ptr; char *ptr_u8; for (length = 0, ptr = (SQLWCHAR *) lpszTranslator; *ptr; length += WCSLEN (ptr) + 1, ptr += WCSLEN (ptr) + 1); if (length > 0) { if ((_translator_u8 = malloc (length * UTF8_MAX_CHAR_LEN + 1)) != NULL) { for (ptr = (SQLWCHAR *) lpszTranslator, ptr_u8 = _translator_u8; *ptr; ptr += WCSLEN (ptr) + 1, ptr_u8 += STRLEN (ptr_u8) + 1) dm_StrCopyOut2_W2A (ptr, ptr_u8, WCSLEN (ptr) * UTF8_MAX_CHAR_LEN, NULL); *ptr_u8 = '\0'; } } else _translator_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszTranslator, SQL_NTS); if (_translator_u8 == NULL && lpszTranslator) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _pathin_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszPathIn, SQL_NTS); if (_pathin_u8 == NULL && lpszPathIn) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } if (cbPathOutMax > 0) { if ((_pathout_u8 = malloc (cbPathOutMax * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } } retcode = SQLInstallTranslatorEx (_translator_u8, _pathin_u8, _pathout_u8, cbPathOutMax * UTF8_MAX_CHAR_LEN, pcbPathOut, fRequest, lpdwUsageCount); if (retcode == TRUE) { dm_StrCopyOut2_U8toW (_pathout_u8, lpszPathOut, cbPathOutMax, pcbPathOut); } done: MEM_FREE (_translator_u8); MEM_FREE (_pathin_u8); MEM_FREE (_pathout_u8); return retcode; } libiodbc-3.52.9/iodbcinst/SQLWritePrivateProfileString.c0000644000076400007640000002016512323210535020151 00000000000000/* * SQLWritePrivateProfileString.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "inifile.h" #include "iodbc_error.h" #include "misc.h" #ifndef WIN32 BOOL WritePrivateProfileString (LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszString, LPCSTR lpszFilename) { BOOL retcode = FALSE; PCONFIG pCfg = NULL; /* Check Input parameters */ if (lpszSection == NULL || *lpszSection == '\0') { PUSH_ERROR (ODBC_ERROR_INVALID_REQUEST_TYPE); goto fail; } /* If error during reading the file */ if (_iodbcdm_cfg_search_init (&pCfg, lpszFilename, TRUE)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto fail; } /* Check if the section must be deleted */ if (!lpszEntry) { _iodbcdm_cfg_write (pCfg, (LPSTR) lpszSection, NULL, NULL); goto done; } /* Check if the entry must be deleted */ if (!lpszString) { _iodbcdm_cfg_write (pCfg, (LPSTR) lpszSection, (LPSTR) lpszEntry, NULL); goto done; } /* Else add the entry */ _iodbcdm_cfg_write (pCfg, (LPSTR) lpszSection, (LPSTR) lpszEntry, (LPSTR) lpszString); done: if (!_iodbcdm_cfg_commit (pCfg)) retcode = TRUE; else { PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED); goto fail; } fail: if (pCfg) _iodbcdm_cfg_done (pCfg); return retcode; } #endif BOOL INSTAPI SQLWritePrivateProfileString (LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszString, LPCSTR lpszFilename) { char pathbuf[1024]; BOOL retcode = FALSE; /* Check input parameters */ CLEAR_ERROR (); /* Else go through user/system odbc.ini */ switch (configMode) { case ODBC_USER_DSN: wSystemDSN = USERDSN_ONLY; if (lpszFilename) { retcode = WritePrivateProfileString (lpszSection, lpszEntry, lpszString, lpszFilename); goto quit; } if (_iodbcadm_getinifile (pathbuf, sizeof (pathbuf), FALSE, TRUE)) retcode = WritePrivateProfileString (lpszSection, lpszEntry, lpszString, pathbuf); goto quit; case ODBC_SYSTEM_DSN: wSystemDSN = SYSTEMDSN_ONLY; if (lpszFilename) { retcode = WritePrivateProfileString (lpszSection, lpszEntry, lpszString, lpszFilename); goto quit; } if (_iodbcadm_getinifile (pathbuf, sizeof (pathbuf), FALSE, TRUE)) retcode = WritePrivateProfileString (lpszSection, lpszEntry, lpszString, pathbuf); goto quit; case ODBC_BOTH_DSN: wSystemDSN = USERDSN_ONLY; if (lpszFilename) { retcode = WritePrivateProfileString (lpszSection, lpszEntry, lpszString, lpszFilename); if (!retcode) { CLEAR_ERROR (); wSystemDSN = SYSTEMDSN_ONLY; retcode = WritePrivateProfileString (lpszSection, lpszEntry, lpszString, lpszFilename); } goto quit; } if (_iodbcadm_getinifile (pathbuf, sizeof (pathbuf), FALSE, TRUE)) retcode = WritePrivateProfileString (lpszSection, lpszEntry, lpszString, pathbuf); else { CLEAR_ERROR (); wSystemDSN = SYSTEMDSN_ONLY; if (_iodbcadm_getinifile (pathbuf, sizeof (pathbuf), FALSE, TRUE)) retcode = WritePrivateProfileString (lpszSection, lpszEntry, lpszString, pathbuf); } goto quit; } PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; quit: wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; return retcode; } BOOL INSTAPI SQLWritePrivateProfileStringW (LPCWSTR lpszSection, LPCWSTR lpszEntry, LPCWSTR lpszString, LPCWSTR lpszFilename) { char *_section_u8 = NULL; char *_entry_u8 = NULL; char *_string_u8 = NULL; char *_filename_u8 = NULL; BOOL retcode = FALSE; _section_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszSection, SQL_NTS); if (_section_u8 == NULL && lpszSection) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _entry_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszEntry, SQL_NTS); if (_entry_u8 == NULL && lpszEntry) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _string_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszString, SQL_NTS); if (_string_u8 == NULL && lpszString) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _filename_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszFilename, SQL_NTS); if (_filename_u8 == NULL && lpszFilename) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } retcode = SQLWritePrivateProfileString (_section_u8, _entry_u8, _string_u8, _filename_u8); done: MEM_FREE (_section_u8); MEM_FREE (_entry_u8); MEM_FREE (_string_u8); MEM_FREE (_filename_u8); return retcode; } BOOL INSTAPI SQLSetKeywordValue (LPCSTR lpszSection, LPCSTR lpszEntry, LPSTR lpszString, int cbString) { return SQLWritePrivateProfileString (lpszSection, lpszEntry, lpszString, "odbc.ini"); } BOOL INSTAPI SQLSetKeywordValueW (LPCWSTR lpszSection, LPCWSTR lpszEntry, LPWSTR lpszString, int cbString) { return SQLWritePrivateProfileStringW (lpszSection, lpszEntry, lpszString, L"odbc.ini"); } libiodbc-3.52.9/iodbcinst/unicode.h0000644000076400007640000001251612323210535014070 00000000000000/* * unicode.h * * $Id$ * * ODBC unicode support * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _UNICODE_H #define _UNICODE_H #if defined (__APPLE__) && !defined (MACOSX102) && !defined (HAVE_CONFIG_H) #define HAVE_WCHAR_H #define HAVE_WCSLEN #define HAVE_WCSCPY #define HAVE_WCSNCPY #define HAVE_WCSCHR #define HAVE_WCSCAT #define HAVE_WCSCMP #define HAVE_TOWLOWER #endif #if defined (HAVE_WCHAR_H) #include #endif /* * Max length of a UTF-8 encoded character sequence */ #define UTF8_MAX_CHAR_LEN 4 /* * Function Prototypes */ SQLCHAR *dm_SQL_W2A (SQLWCHAR * inStr, ssize_t size); SQLCHAR *dm_SQL_WtoU8 (SQLWCHAR * inStr, ssize_t size); SQLCHAR *dm_strcpy_W2A (SQLCHAR * destStr, SQLWCHAR * sourStr); SQLWCHAR *dm_SQL_A2W (SQLCHAR * inStr, ssize_t size); SQLWCHAR *dm_SQL_U8toW (SQLCHAR * inStr, SQLSMALLINT size); SQLWCHAR *dm_strcpy_A2W (SQLWCHAR * destStr, SQLCHAR * sourStr); int dm_StrCopyOut2_A2W (SQLCHAR * inStr, SQLWCHAR * outStr, SQLSMALLINT size, SQLSMALLINT * result); int dm_StrCopyOut2_U8toW (SQLCHAR * inStr, SQLWCHAR * outStr, size_t size, u_short * result); int dm_StrCopyOut2_W2A (SQLWCHAR * inStr, SQLCHAR * outStr, SQLSMALLINT size, SQLSMALLINT * result); # ifdef WIN32 #define OPL_W2A(w, a, cb) \ WideCharToMultiByte(CP_ACP, 0, w, cb, a, cb, NULL, NULL) #define OPL_A2W(a, w, cb) \ MultiByteToWideChar(CP_ACP, 0, a, cb, w, cb) # else #define OPL_W2A(XW, XA, SIZE) wcstombs((char *) XA, (wchar_t *) XW, SIZE) #define OPL_A2W(XA, XW, SIZE) mbstowcs((wchar_t *) XW, (char *) XA, SIZE) # endif /* * Replacement functions */ #if !defined(HAVE_WCSLEN) size_t wcslen (const wchar_t * wcs); #endif #if !defined(HAVE_WCSCPY) wchar_t * wcscpy (wchar_t * wcd, const wchar_t * wcs); #endif #if !defined(HAVE_WCSNCPY) wchar_t * wcsncpy (wchar_t * wcd, const wchar_t * wcs, size_t n); #endif #if !defined(HAVE_WCSCHR) wchar_t* wcschr(const wchar_t *wcs, const wchar_t wc); #endif #if !defined(HAVE_WCSCAT) wchar_t* wcscat(wchar_t *dest, const wchar_t *src); #endif #if !defined(HAVE_WCSCMP) int wcscmp (const wchar_t* s1, const wchar_t* s2); #endif #if !defined(HAVE_WCSNCASECMP) int wcsncasecmp (const wchar_t* s1, const wchar_t* s2, size_t n); #endif #endif /* _UNICODE_H */ libiodbc-3.52.9/iodbcinst/SQLInstallTranslator.c0000644000076400007640000001716612323210535016503 00000000000000/* * SQLInstallTranslator.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "misc.h" #include "inifile.h" #include "iodbc_error.h" #if !defined(WINDOWS) && !defined(WIN32) && !defined(OS2) && !defined(macintosh) # include # include # define UNIX_PWD #endif extern BOOL InstallDriverPath (LPSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut, LPSTR envname); extern BOOL InstallDriverPathLength (WORD * pcbPathOut, LPSTR envname); BOOL INSTAPI SQLInstallTranslator (LPCSTR lpszInfFile, LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount) { PCONFIG pCfg = NULL, pOdbcCfg = NULL; BOOL retcode = FALSE; /* Check input parameters */ CLEAR_ERROR (); if (lpszPathIn && access (lpszPathIn, R_OK | W_OK | X_OK)) { PUSH_ERROR (ODBC_ERROR_INVALID_PATH); goto quit; } switch (fRequest) { case ODBC_INSTALL_INQUIRY: if (lpszPathIn) { if (pcbPathOut) *pcbPathOut = STRLEN (lpszPathIn); retcode = TRUE; } else retcode = InstallDriverPathLength (pcbPathOut, "ODBCTRANSLATORS"); goto quit; case ODBC_INSTALL_COMPLETE: break; default: PUSH_ERROR (ODBC_ERROR_INVALID_REQUEST_TYPE); goto quit; } /* Check input parameters */ if (!lpszTranslator || !STRLEN (lpszTranslator)) { PUSH_ERROR (ODBC_ERROR_INVALID_PARAM_SEQUENCE); goto quit; } if (!lpszPathOut || !cbPathOutMax) { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } /* Write the out path */ if (!InstallDriverPath (lpszPathOut, cbPathOutMax, pcbPathOut, "ODBCTRANSLATORS")) goto quit; /* Else go through user/system odbcinst.ini */ switch (configMode) { case ODBC_BOTH_DSN: case ODBC_USER_DSN: wSystemDSN = USERDSN_ONLY; break; case ODBC_SYSTEM_DSN: wSystemDSN = SYSTEMDSN_ONLY; break; } if (_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; } if (_iodbcdm_cfg_search_init (&pOdbcCfg, "odbc.ini", TRUE)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); pOdbcCfg = NULL; goto done; } if (lpszInfFile) { if (!install_from_ini (pCfg, pOdbcCfg, (char *) lpszInfFile, (char *) lpszTranslator, FALSE)) { PUSH_ERROR (ODBC_ERROR_INVALID_INF); goto done; } } else if (!install_from_string (pCfg, pOdbcCfg, (char *) lpszTranslator, FALSE)) { PUSH_ERROR (ODBC_ERROR_INVALID_KEYWORD_VALUE); goto done; } if (_iodbcdm_cfg_commit (pCfg) || _iodbcdm_cfg_commit (pOdbcCfg)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto done; } retcode = TRUE; done: _iodbcdm_cfg_done (pCfg); if (pOdbcCfg) _iodbcdm_cfg_done (pOdbcCfg); quit: wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; return retcode; } BOOL INSTAPI SQLInstallTranslatorW (LPCWSTR lpszInfFile, LPCWSTR lpszTranslator, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD FAR * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount) { char *_inf_u8 = NULL; char *_translator_u8 = NULL; char *_pathin_u8 = NULL; char *_pathout_u8 = NULL; BOOL retcode = FALSE; _inf_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszInfFile, SQL_NTS); if (_inf_u8 == NULL && lpszInfFile) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _translator_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszTranslator, SQL_NTS); if (_translator_u8 == NULL && lpszTranslator) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _pathin_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszPathIn, SQL_NTS); if (_pathin_u8 == NULL && lpszPathIn) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } if (cbPathOutMax > 0) { if ((_pathout_u8 = malloc (cbPathOutMax * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } } retcode = SQLInstallTranslator (_inf_u8, _translator_u8, _pathin_u8, _pathout_u8, cbPathOutMax * UTF8_MAX_CHAR_LEN, pcbPathOut, fRequest, lpdwUsageCount); if (retcode == TRUE) { dm_StrCopyOut2_U8toW (_pathout_u8, lpszPathOut, cbPathOutMax, pcbPathOut); } done: MEM_FREE (_inf_u8); MEM_FREE (_translator_u8); MEM_FREE (_pathin_u8); MEM_FREE (_pathout_u8); return retcode; } libiodbc-3.52.9/iodbcinst/SQLRemoveTranslator.c0000644000076400007640000001116312323210535016321 00000000000000/* * SQLRemoveTranslator.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "inifile.h" #include "misc.h" #include "iodbc_error.h" BOOL INSTAPI SQLRemoveTranslator (LPCSTR lpszTranslator, LPDWORD lpdwUsageCount) { BOOL retcode = FALSE; PCONFIG pCfg; /* Check input parameter */ CLEAR_ERROR (); if (!lpszTranslator || !STRLEN (lpszTranslator)) { PUSH_ERROR (ODBC_ERROR_INVALID_NAME); goto quit; } if (_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", FALSE)) { PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED); goto quit; } /* deletes the translator */ _iodbcdm_cfg_write (pCfg, "ODBC Translators", (LPSTR) lpszTranslator, NULL); _iodbcdm_cfg_write (pCfg, (LPSTR) lpszTranslator, NULL, NULL); if (_iodbcdm_cfg_commit (pCfg)) { PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED); goto done; } retcode = TRUE; done: _iodbcdm_cfg_done (pCfg); quit: return retcode; } BOOL INSTAPI SQLRemoveTranslatorW (LPCWSTR lpszTranslator, LPDWORD lpdwUsageCount) { char *_translator_u8 = NULL; BOOL retcode = FALSE; _translator_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszTranslator, SQL_NTS); if (_translator_u8 == NULL && lpszTranslator) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } retcode = SQLRemoveTranslator (_translator_u8, lpdwUsageCount); done: MEM_FREE (_translator_u8); return retcode; } libiodbc-3.52.9/iodbcinst/SQLInstallODBC.c0000644000076400007640000001162312323210535015051 00000000000000/* * SQLInstallODBC.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "iodbc_error.h" BOOL InstallODBC (HWND hwndParent, LPCSTR lpszInfFile, LPCSTR lpszSrcPath, LPCSTR lpszDrivers) { return FALSE; } BOOL INSTAPI SQLInstallODBC (HWND hwndParent, LPCSTR lpszInfFile, LPCSTR lpszSrcPath, LPCSTR lpszDrivers) { BOOL retcode = FALSE; /* Check input parameters */ CLEAR_ERROR (); if (!lpszDrivers || !STRLEN (lpszDrivers)) { PUSH_ERROR (ODBC_ERROR_INVALID_NAME); goto quit; } if (!lpszInfFile || !STRLEN (lpszInfFile)) { PUSH_ERROR (ODBC_ERROR_INVALID_INF); goto quit; } retcode = InstallODBC (hwndParent, lpszInfFile, lpszSrcPath, lpszDrivers); quit: return retcode; } BOOL INSTAPI SQLInstallODBCW (HWND hwndParent, LPCWSTR lpszInfFile, LPCWSTR lpszSrcPath, LPCWSTR lpszDrivers) { char *_inf_u8 = NULL; char *_srcpath_u8 = NULL; char *_drivers_u8 = NULL; BOOL retcode = FALSE; _inf_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszInfFile, SQL_NTS); if (_inf_u8 == NULL && lpszInfFile) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _srcpath_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszSrcPath, SQL_NTS); if (_srcpath_u8 == NULL && lpszSrcPath) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _drivers_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszDrivers, SQL_NTS); if (_drivers_u8 == NULL && lpszDrivers) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } retcode = SQLInstallODBC (hwndParent, _inf_u8, _srcpath_u8, _drivers_u8); done: MEM_FREE (_inf_u8); MEM_FREE (_srcpath_u8); MEM_FREE (_drivers_u8); return retcode; } libiodbc-3.52.9/iodbcinst/SQLWriteDSNToIni.c0000644000076400007640000001676012323210535015424 00000000000000/* * SQLWriteDSNToIni.c * * $Id$ * * Write a DSN connect string to a file * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "inifile.h" #include "misc.h" #include "iodbc_error.h" extern BOOL ValidDSN (LPCSTR lpszDSN); extern BOOL ValidDSNW (LPCWSTR lpszDSN); extern int GetPrivateProfileString (LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszDefault, LPSTR lpszRetBuffer, int cbRetBuffer, LPCSTR lpszFilename); BOOL WriteDSNToIni (LPCSTR lpszDSN, LPCSTR lpszDriver) { char szBuffer[4096]; BOOL retcode = FALSE; PCONFIG pCfg = NULL; if (_iodbcdm_cfg_search_init (&pCfg, "odbc.ini", TRUE)) { PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED); goto done; } if (strcmp (lpszDSN, "Default")) { /* adds a DSN=Driver to the [ODBC data sources] section */ #ifdef WIN32 if (_iodbcdm_cfg_write (pCfg, "ODBC 32 bit Data Sources", (LPSTR) lpszDSN, (LPSTR) lpszDriver)) #else if (_iodbcdm_cfg_write (pCfg, "ODBC Data Sources", (LPSTR) lpszDSN, (LPSTR) lpszDriver)) #endif { PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED); goto done; } } /* deletes the DSN section in odbc.ini */ if (_iodbcdm_cfg_write (pCfg, (LPSTR) lpszDSN, NULL, NULL)) { PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED); goto done; } /* gets the file of the driver if lpszDriver is a valid description */ wSystemDSN = USERDSN_ONLY; if (!GetPrivateProfileString ((LPSTR) lpszDriver, "Driver", "", szBuffer, sizeof (szBuffer) - 1, "odbcinst.ini")) { wSystemDSN = SYSTEMDSN_ONLY; if (!GetPrivateProfileString ((LPSTR) lpszDriver, "Driver", "", szBuffer, sizeof (szBuffer) - 1, "odbcinst.ini")) { PUSH_ERROR (ODBC_ERROR_INVALID_NAME); goto done; } } /* adds a [DSN] section with Driver key */ if (_iodbcdm_cfg_write (pCfg, (LPSTR) lpszDSN, "Driver", szBuffer) || _iodbcdm_cfg_commit (pCfg)) { PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED); goto done; } retcode = TRUE; done: wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; if (pCfg) _iodbcdm_cfg_done (pCfg); return retcode; } BOOL INSTAPI SQLWriteDSNToIni_Internal (SQLPOINTER lpszDSN, SQLPOINTER lpszDriver, SQLCHAR waMode) { char *_driver_u8 = NULL; char *_dsn_u8 = NULL; BOOL retcode = FALSE; /* Check input parameters */ CLEAR_ERROR (); if (waMode == 'A') { if (!lpszDSN || !ValidDSN (lpszDSN) || !STRLEN (lpszDSN)) { PUSH_ERROR (ODBC_ERROR_INVALID_DSN); goto quit; } } else { if (!lpszDSN || !ValidDSNW (lpszDSN) || !WCSLEN (lpszDSN)) { PUSH_ERROR (ODBC_ERROR_INVALID_DSN); goto quit; } } if (waMode == 'W') { _dsn_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszDSN, SQL_NTS); if (_dsn_u8 == NULL && lpszDSN) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto quit; } } else _dsn_u8 = (SQLCHAR *) lpszDSN; if (waMode == 'W') { _driver_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszDriver, SQL_NTS); if (_driver_u8 == NULL && lpszDriver) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto quit; } } else _driver_u8 = (SQLCHAR *) lpszDriver; if (!_driver_u8 || !STRLEN (_driver_u8)) { PUSH_ERROR (ODBC_ERROR_INVALID_NAME); goto quit; } switch (configMode) { case ODBC_USER_DSN: wSystemDSN = USERDSN_ONLY; retcode = WriteDSNToIni (_dsn_u8, _driver_u8); goto quit; case ODBC_SYSTEM_DSN: wSystemDSN = SYSTEMDSN_ONLY; retcode = WriteDSNToIni (_dsn_u8, _driver_u8); goto quit; case ODBC_BOTH_DSN: wSystemDSN = USERDSN_ONLY; retcode = WriteDSNToIni (_dsn_u8, _driver_u8); if (!retcode) { CLEAR_ERROR (); wSystemDSN = SYSTEMDSN_ONLY; retcode = WriteDSNToIni (_dsn_u8, _driver_u8); } goto quit; } PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; quit: if (_dsn_u8 != lpszDSN) MEM_FREE (_dsn_u8); if (_driver_u8 != lpszDriver) MEM_FREE (_driver_u8); wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; return retcode; } BOOL INSTAPI SQLWriteDSNToIni (LPCSTR lpszDSN, LPCSTR lpszDriver) { return SQLWriteDSNToIni_Internal ((SQLPOINTER) lpszDSN, (SQLPOINTER) lpszDriver, 'A'); } BOOL INSTAPI SQLWriteDSNToIniW (LPCWSTR lpszDSN, LPCWSTR lpszDriver) { return SQLWriteDSNToIni_Internal ((SQLPOINTER) lpszDSN, (SQLPOINTER) lpszDriver, 'W'); } libiodbc-3.52.9/iodbcinst/SQLRemoveDriver.c0000644000076400007640000001546112323210535015430 00000000000000/* * SQLRemoveDriver.c * * $Id$ * * Remove a driver * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "inifile.h" #include "misc.h" #include "iodbc_error.h" BOOL INSTAPI SQLRemoveDriver (LPCSTR lpszDriver, BOOL fRemoveDSN, LPDWORD lpdwUsageCount) { /*char *szDriverFile = NULL; */ BOOL retcode = FALSE; PCONFIG pCfg = NULL, pInstCfg = NULL; LPSTR entries = (LPSTR) malloc (sizeof (char) * 65535), curr; int len = 0, i = 0; /* Check input parameters */ CLEAR_ERROR (); if (!lpszDriver || !STRLEN (lpszDriver)) { PUSH_ERROR (ODBC_ERROR_INVALID_NAME); goto quit; } /* Else go through user/system odbcinst.ini */ switch (configMode) { case ODBC_BOTH_DSN: case ODBC_USER_DSN: wSystemDSN = USERDSN_ONLY; break; case ODBC_SYSTEM_DSN: wSystemDSN = SYSTEMDSN_ONLY; break; } if (_iodbcdm_cfg_search_init (&pCfg, "odbc.ini", FALSE)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto done; } if (_iodbcdm_cfg_search_init (&pInstCfg, "odbcinst.ini", FALSE)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto done; } if (fRemoveDSN) { #ifdef WIN32 if (entries && (len = _iodbcdm_list_entries (pCfg, "ODBC 32 bit Data Sources", entries, 65535))) #else if (entries && (len = _iodbcdm_list_entries (pCfg, "ODBC Data Sources", entries, 65535))) #endif { for (curr = entries; i < len; i += (STRLEN (curr) + 1), curr += (STRLEN (curr) + 1)) { int nCursor = pCfg->cursor; if (_iodbcdm_cfg_rewind (pCfg)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto done; } #ifdef WIN32 if (_iodbcdm_cfg_find (pCfg, "ODBC 32 bit Data Sources", curr)) #else if (_iodbcdm_cfg_find (pCfg, "ODBC Data Sources", curr)) #endif { if (_iodbcdm_cfg_rewind (pCfg)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto done; } pCfg->cursor = nCursor; continue; } if (!strcmp (pCfg->value, lpszDriver)) { if (_iodbcdm_cfg_write (pCfg, curr, NULL, NULL)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto done; } #ifdef WIN32 if (_iodbcdm_cfg_write (pCfg, "ODBC 32 bit Data Sources", curr, NULL)) #else if (_iodbcdm_cfg_write (pCfg, "ODBC Data Sources", curr, NULL)) #endif { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto done; } } pCfg->cursor = nCursor; } } } if (_iodbcdm_cfg_write (pInstCfg, (char *) lpszDriver, NULL, NULL)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto done; } #ifdef WIN32 if (_iodbcdm_cfg_write (pInstCfg, "ODBC 32 bit Drivers", lpszDriver, NULL)) #else if (_iodbcdm_cfg_write (pInstCfg, "ODBC Drivers", (LPSTR) lpszDriver, NULL)) #endif { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto done; } if (_iodbcdm_cfg_commit (pCfg) || _iodbcdm_cfg_commit (pInstCfg)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto done; } retcode = TRUE; done: if (pCfg) _iodbcdm_cfg_done (pCfg); if (pInstCfg) _iodbcdm_cfg_done (pInstCfg); if (entries) free (entries); quit: wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; return retcode; } BOOL INSTAPI SQLRemoveDriverW (LPCWSTR lpszDriver, BOOL fRemoveDSN, LPDWORD lpdwUsageCount) { char *_driver_u8 = NULL; BOOL retcode = FALSE; _driver_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszDriver, SQL_NTS); if (_driver_u8 == NULL && lpszDriver) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } retcode = SQLRemoveDriver (_driver_u8, fRemoveDSN, lpdwUsageCount); done: MEM_FREE (_driver_u8); return retcode; } libiodbc-3.52.9/iodbcinst/dlf.h0000644000076400007640000002103412323210535013202 00000000000000/* * dlf.h * * $Id$ * * Dynamic Library Loader (mapping to SVR4) * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _DLF_H #define _DLF_H #include #if defined(HAVE_SHL_LOAD) #define DLDAPI_HP_SHL #elif defined(HAVE_LIBDL) #define DLDAPI_SVR4_DLFCN #elif defined(HAVE_DYLD) #define DLDAPI_MACX #endif #if defined(DLDAPI_SVR4_DLFCN) #include #elif defined(DLDAPI_AIX_LOAD) #include #endif #if !defined(DLDAPI_SVR4_DLFCN) /* * Create internal namespace for dlopen functions */ #define dlopen iodbc_dlopen #define dlsym iodbc_dlsym #define dlerror iodbc_dlerror #define dlclose iodbc_dlclose extern void *dlopen (char * path, int mode); extern void *dlsym (void * hdll, char * sym); extern char *dlerror (); extern int dlclose (void * hdll); #endif #ifdef DLDAPI_MACX #include #include #include #include #include #include #include "mach-o/dyld.h" #define RTLD_LAZY 0x1 #define RTLD_NOW 0x2 #define RTLD_LOCAL 0x4 #define RTLD_GLOBAL 0x8 #define RTLD_NOLOAD 0x10 #define RTLD_SHARED 0x20 /* not used, the default */ #define RTLD_UNSHARED 0x40 #define RTLD_NODELETE 0x80 #define RTLD_LAZY_UNDEF 0x100 enum ofile_type { OFILE_UNKNOWN, OFILE_FAT, OFILE_ARCHIVE, OFILE_Mach_O }; enum byte_sex { UNKNOWN_BYTE_SEX, BIG_ENDIAN_BYTE_SEX, LITTLE_ENDIAN_BYTE_SEX }; /* * The structure describing an architecture flag with the string of the flag * name, and the cputype and cpusubtype. */ struct arch_flag { char *name; cpu_type_t cputype; cpu_subtype_t cpusubtype; }; /* * The structure used by ofile_*() routines for object files. */ struct ofile { char *file_name; /* pointer to name malloc'ed by ofile_map */ char *file_addr; /* pointer to vm_allocate'ed memory */ unsigned long file_size; /* size of vm_allocate'ed memory */ enum ofile_type file_type; /* type of the file */ struct fat_header *fat_header; /* If a fat file these are filled in and */ struct fat_arch *fat_archs; /* if needed converted to host byte sex */ /* * If this is a fat file then these are valid and filled in */ unsigned long narch; /* the current architecture */ enum ofile_type arch_type; /* the type of file for this arch. */ struct arch_flag arch_flag; /* the arch_flag for this arch, the name */ /* field is pointing at space malloc'ed */ /* by ofile_map. */ /* * If this structure is currently referencing an archive member or * an object file that is an archive member these are valid and filled in. */ unsigned long member_offset; /* logical offset to the member starting */ char *member_addr; /* pointer to the member contents */ unsigned long member_size; /* actual size of the member (not rounded)*/ struct ar_hdr *member_ar_hdr; /* pointer to the ar_hdr for this member */ char *member_name; /* name of this member */ unsigned long member_name_size; /* size of the member name */ enum ofile_type member_type; /* the type of file for this member */ cpu_type_t archive_cputype; /* if the archive contains objects then */ cpu_subtype_t /* these two fields reflect the object */ archive_cpusubtype; /* at are in the archive. */ /* * If this structure is currently referencing a dynamic library module * these are valid and filled in. */ struct dylib_module *modtab; /* the module table */ unsigned long nmodtab; /* the number of module table entries */ struct dylib_module /* pointer to the dylib_module for this */ *dylib_module; /* module */ char *dylib_module_name; /* the name of the module */ /* * If this structure is currently referencing an object file these are * valid and filled in. The mach_header and load commands have been * converted to the host byte sex if needed */ char *object_addr; /* the address of the object file */ unsigned long object_size; /* the size of the object file */ enum byte_sex object_byte_sex; /* the byte sex of the object file */ struct mach_header *mh; /* the mach_header of the object file */ struct load_command /* the start of the load commands */ *load_commands; }; /* * The structure of a dlopen() handle. */ struct dlopen_handle { dev_t dev; /* the path's device and inode number from stat(2) */ ino_t ino; int dlopen_mode; /* current dlopen mode for this handle */ int dlopen_count; /* number of times dlopen() called on this handle */ NSModule module; /* the NSModule returned by NSLinkModule() */ struct dlopen_handle *prev; struct dlopen_handle *next; }; #endif /* DLDAPI_MACX */ #ifndef RTLD_LOCAL #define RTLD_LOCAL 0 /* Only if not defined by dlfcn.h */ #endif #ifndef RTLD_LAZY #define RTLD_LAZY 1 #endif #ifdef RTLD_NOW #define OPL_DL_MODE (RTLD_NOW | RTLD_LOCAL) #else #define OPL_DL_MODE (RTLD_LAZY | RTLD_LOCAL) #endif #define DLL_OPEN(dll) (void*)dlopen((char*)(dll), OPL_DL_MODE) #define DLL_PROC(hdll, sym) (void*)dlsym((void*)(hdll), (char*)sym) #define DLL_ERROR() (char*)dlerror() #define DLL_CLOSE(hdll) dlclose((void*)(hdll)) #endif /* _DLF_H */ libiodbc-3.52.9/iodbcinst/SQLGetTranslator.c0000644000076400007640000002300412323210535015600 00000000000000/* * SQLGetTranslator.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include "dlf.h" #include "inifile.h" #include "misc.h" #include "iodbc_error.h" #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) #include #endif #ifndef WIN32 #include #define CALL_CONFIG_TRANSLATOR(path) \ if ((handle = DLL_OPEN(path)) != NULL) \ { \ if ((pConfigTranslator = (pConfigTranslatorFunc)DLL_PROC(handle, "ConfigTranslator")) != NULL) \ { \ if (pConfigTranslator(hwndParent, pvOption)) \ { \ DLL_CLOSE(handle); \ finish = retcode = TRUE; \ goto done; \ } \ else \ { \ PUSH_ERROR(ODBC_ERROR_GENERAL_ERR); \ DLL_CLOSE(handle); \ retcode = FALSE; \ goto done; \ } \ } \ DLL_CLOSE(handle); \ } #define CALL_TRSCHOOSE_DIALBOX(path) \ if ((handle = DLL_OPEN(path)) != NULL) \ { \ if ((pTrsChoose = (pTrsChooseFunc)DLL_PROC(handle, "_iodbcdm_trschoose_dialbox")) != NULL) \ ret = pTrsChoose(hwndParent, translator, sizeof(translator), NULL); \ else ret = SQL_NO_DATA; \ DLL_CLOSE(handle); \ } \ else ret = SQL_NO_DATA; #endif extern SQLRETURN _iodbcdm_trschoose_dialbox (HWND, LPSTR, DWORD, int *); BOOL INSTAPI GetTranslator (HWND hwndParent, LPSTR lpszName, WORD cbNameMax, WORD * pcbNameOut, LPSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut, DWORD * pvOption) { pConfigTranslatorFunc pConfigTranslator; pTrsChooseFunc pTrsChoose; BOOL retcode = FALSE, finish = FALSE; PCONFIG pCfg; UWORD configMode; RETCODE ret = SQL_NO_DATA; void *handle; char translator[1024]; #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) CFStringRef libname = NULL; CFBundleRef bundle; CFURLRef liburl; char name[1024] = { 0 }; #endif do { /* Load the Admin dialbox function */ #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) bundle = CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.inst")); if (bundle) { /* Search for the iODBCadm library */ liburl = CFBundleCopyResourceURL (bundle, CFSTR ("iODBCadm.bundle"), NULL, NULL); if (liburl && (libname = CFURLCopyFileSystemPath (liburl, kCFURLPOSIXPathStyle))) { CFStringGetCString (libname, name, sizeof (name), kCFStringEncodingASCII); STRCAT (name, "/Contents/MacOS/iODBCadm"); CALL_TRSCHOOSE_DIALBOX (name); } if (liburl) CFRelease (liburl); if (libname) CFRelease (libname); } #else CALL_TRSCHOOSE_DIALBOX ("libiodbcadm.so.2"); #endif if (ret == SQL_NO_DATA) { if (pcbNameOut) *pcbNameOut = 0; if (pcbPathOut) *pcbPathOut = 0; finish = TRUE; } if (ret == SQL_SUCCESS) { STRNCPY (lpszName, translator + STRLEN ("TranslationName="), cbNameMax - 1); if (pcbNameOut) *pcbNameOut = STRLEN (lpszName); /* Get it from the user odbcinst file */ wSystemDSN = USERDSN_ONLY; if (!_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE)) { if (!_iodbcdm_cfg_find (pCfg, (char *) lpszName, "Setup")) CALL_CONFIG_TRANSLATOR (pCfg->value); if (!_iodbcdm_cfg_find (pCfg, (char *) lpszName, "Translator")) CALL_CONFIG_TRANSLATOR (pCfg->value); if (!access (lpszName, X_OK)) CALL_CONFIG_TRANSLATOR (lpszName); if (!_iodbcdm_cfg_find (pCfg, "Default", "Setup")) CALL_CONFIG_TRANSLATOR (pCfg->value); if (!_iodbcdm_cfg_find (pCfg, "Default", "Translator")) CALL_CONFIG_TRANSLATOR (pCfg->value); } /* Get it from the system odbcinst file */ if (pCfg) { _iodbcdm_cfg_done (pCfg); pCfg = NULL; } wSystemDSN = SYSTEMDSN_ONLY; if (!_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE)) { if (!_iodbcdm_cfg_find (pCfg, (char *) lpszName, "Setup")) CALL_CONFIG_TRANSLATOR (pCfg->value); if (!_iodbcdm_cfg_find (pCfg, (char *) lpszName, "Translator")) CALL_CONFIG_TRANSLATOR (pCfg->value); if (!access (lpszName, X_OK)) CALL_CONFIG_TRANSLATOR (lpszName); if (!_iodbcdm_cfg_find (pCfg, "Default", "Setup")) CALL_CONFIG_TRANSLATOR (pCfg->value); if (!_iodbcdm_cfg_find (pCfg, "Default", "Translator")) CALL_CONFIG_TRANSLATOR (pCfg->value); } /* The last ressort, a proxy driver */ CALL_CONFIG_TRANSLATOR ("libtranslator.so.2"); /* Error : ConfigDSN could no be found */ PUSH_ERROR (ODBC_ERROR_LOAD_LIB_FAILED); done: STRNCPY (lpszPath, pCfg->fileName, cbPathMax - 1); if (pcbPathOut) *pcbPathOut = STRLEN (lpszPath); _iodbcdm_cfg_done (pCfg); } } while (!finish); retcode = TRUE; wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; return retcode; } BOOL INSTAPI SQLGetTranslator (HWND hwnd, LPSTR lpszName, WORD cbNameMax, WORD * pcbNameOut, LPSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut, DWORD * pvOption) { BOOL retcode = FALSE; /* Check input parameters */ CLEAR_ERROR (); if (!hwnd) { PUSH_ERROR (ODBC_ERROR_INVALID_HWND); goto quit; } if (!lpszName || !lpszPath || cbNameMax < 1 || cbPathMax < 1) { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } retcode = GetTranslator (hwnd, lpszName, cbNameMax, pcbNameOut, lpszPath, cbPathMax, pcbPathOut, pvOption); quit: return retcode; } BOOL INSTAPI SQLGetTranslatorW (HWND hwnd, LPWSTR lpszName, WORD cbNameMax, WORD FAR * pcbNameOut, LPWSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut, DWORD FAR * pvOption) { char *_name_u8 = NULL; char *_path_u8 = NULL; BOOL retcode = FALSE; if (cbNameMax > 0) { if ((_name_u8 = malloc (cbNameMax * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } } if (cbPathMax > 0) { if ((_path_u8 = malloc (cbPathMax * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } } retcode = SQLGetTranslator (hwnd, _name_u8, cbNameMax * UTF8_MAX_CHAR_LEN, pcbNameOut, _path_u8, cbPathMax * UTF8_MAX_CHAR_LEN, pcbPathOut, pvOption); if (retcode == TRUE) { dm_StrCopyOut2_U8toW (_name_u8, lpszName, cbNameMax, pcbNameOut); dm_StrCopyOut2_U8toW (_path_u8, lpszPath, cbPathMax, pcbPathOut); } done: MEM_FREE (_name_u8); MEM_FREE (_path_u8); return retcode; } libiodbc-3.52.9/iodbcinst/SQLRemoveDefaultDataSource.c0000644000076400007640000000661212323210535017532 00000000000000/* * SQLRemoveDefaultDataSource.c * * $Id$ * * Remove a DSN * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include BOOL INSTAPI SQLRemoveDefaultDataSource (void) { return SQLConfigDataSource (NULL, ODBC_REMOVE_DEFAULT_DSN, NULL, NULL); } libiodbc-3.52.9/iodbcinst/SQLRemoveDSNFromIni.c0000644000076400007640000001461612323210535016106 00000000000000/* * SQLRemoveDSNFromIni.c * * $Id$ * * Remove a DSN * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "inifile.h" #include "misc.h" #include "iodbc_error.h" extern BOOL ValidDSN (LPCSTR); extern BOOL ValidDSNW (LPCSTR); BOOL RemoveDSNFromIni (SQLPOINTER lpszDSN, SQLCHAR waMode) { BOOL retcode = FALSE; char *_dsn_u8 = NULL; PCONFIG pCfg; /* Check dsn */ if (waMode == 'A') { if (!lpszDSN || !ValidDSN (lpszDSN) || !STRLEN (lpszDSN)) { PUSH_ERROR (ODBC_ERROR_INVALID_DSN); goto quit; } _dsn_u8 = lpszDSN; } else { if (!lpszDSN || !ValidDSNW (lpszDSN) || !WCSLEN (lpszDSN)) { PUSH_ERROR (ODBC_ERROR_INVALID_DSN); goto quit; } _dsn_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszDSN, SQL_NTS); if (_dsn_u8 == NULL && lpszDSN) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto quit; } } if (_iodbcdm_cfg_search_init (&pCfg, "odbc.ini", TRUE)) { PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED); goto quit; } if (strcmp (_dsn_u8, "Default")) { /* deletes a DSN from [ODBC data sources] section */ #ifdef WIN32 _iodbcdm_cfg_write (pCfg, "ODBC 32 bit Data Sources", (LPSTR) _dsn_u8, NULL); #else _iodbcdm_cfg_write (pCfg, "ODBC Data Sources", (LPSTR) _dsn_u8, NULL); #endif } /* deletes the DSN section in odbc.ini */ _iodbcdm_cfg_write (pCfg, (LPSTR) _dsn_u8, NULL, NULL); if (_iodbcdm_cfg_commit (pCfg)) { PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED); goto done; } retcode = TRUE; done: _iodbcdm_cfg_done (pCfg); quit: if (_dsn_u8 != lpszDSN) MEM_FREE (_dsn_u8); return retcode; } BOOL INSTAPI SQLRemoveDSNFromIni (LPCSTR lpszDSN) { BOOL retcode = FALSE; CLEAR_ERROR (); switch (configMode) { case ODBC_USER_DSN: wSystemDSN = USERDSN_ONLY; retcode = RemoveDSNFromIni ((SQLPOINTER) lpszDSN, 'A'); goto quit; case ODBC_SYSTEM_DSN: wSystemDSN = SYSTEMDSN_ONLY; retcode = RemoveDSNFromIni ((SQLPOINTER) lpszDSN, 'A'); goto quit; case ODBC_BOTH_DSN: wSystemDSN = USERDSN_ONLY; retcode = RemoveDSNFromIni ((SQLPOINTER) lpszDSN, 'A'); if (!retcode) { CLEAR_ERROR (); wSystemDSN = SYSTEMDSN_ONLY; retcode = RemoveDSNFromIni ((SQLPOINTER) lpszDSN, 'A'); } goto quit; } PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; quit: wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; return retcode; } BOOL INSTAPI SQLRemoveDSNFromIniW (LPCWSTR lpszDSN) { BOOL retcode = FALSE; CLEAR_ERROR (); switch (configMode) { case ODBC_USER_DSN: wSystemDSN = USERDSN_ONLY; retcode = RemoveDSNFromIni ((SQLPOINTER) lpszDSN, 'W'); goto quit; case ODBC_SYSTEM_DSN: wSystemDSN = SYSTEMDSN_ONLY; retcode = RemoveDSNFromIni ((SQLPOINTER) lpszDSN, 'W'); goto quit; case ODBC_BOTH_DSN: wSystemDSN = USERDSN_ONLY; retcode = RemoveDSNFromIni ((SQLPOINTER) lpszDSN, 'W'); if (!retcode) { CLEAR_ERROR (); wSystemDSN = SYSTEMDSN_ONLY; retcode = RemoveDSNFromIni ((SQLPOINTER) lpszDSN, 'W'); } goto quit; } PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; quit: wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; return retcode; } libiodbc-3.52.9/iodbcinst/SQLConfigDataSource.c0000644000076400007640000003127512323210535016200 00000000000000/* * SQLConfigDataSource.c * * $Id$ * * Add, modify or delete datasources * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) # include #endif #include "dlf.h" #include "inifile.h" #include "misc.h" #include "iodbc_error.h" #ifndef WIN32 #include #define CALL_CONFIG_DSN(path) \ if ((handle = DLL_OPEN(path)) != NULL) \ { \ if ((pConfigDSN = (pConfigDSNFunc)DLL_PROC(handle, "ConfigDSN")) != NULL) \ { \ if (pConfigDSN(hwndParent, fRequest, lpszDriver, lpszAttributes)) \ { \ DLL_CLOSE(handle); \ retcode = TRUE; \ goto done; \ } \ else \ { \ PUSH_ERROR(ODBC_ERROR_REQUEST_FAILED); \ DLL_CLOSE(handle); \ retcode = FALSE; \ goto done; \ } \ } \ DLL_CLOSE(handle); \ } #define CALL_CONFIG_DSNW(path) \ if ((handle = DLL_OPEN(path)) != NULL) \ { \ if ((pConfigDSNW = (pConfigDSNWFunc)DLL_PROC(handle, "ConfigDSNW")) != NULL) \ { \ if (pConfigDSNW(hwndParent, fRequest, (SQLWCHAR*)lpszDriver, (SQLWCHAR*)lpszAttributes)) \ { \ DLL_CLOSE(handle); \ retcode = TRUE; \ goto done; \ } \ else \ { \ PUSH_ERROR(ODBC_ERROR_REQUEST_FAILED); \ DLL_CLOSE(handle); \ retcode = FALSE; \ goto done; \ } \ } \ else if ((pConfigDSN = (pConfigDSNFunc)DLL_PROC(handle, "ConfigDSN")) != NULL) \ { \ char *_attrs_u8, *ptr_u8; \ wchar_t *ptr; \ int length; \ for(length = 0, ptr = lpszAttributes ; *ptr ; length += WCSLEN (ptr) + 1, ptr += WCSLEN (ptr) + 1); \ if (length > 0) \ { \ if ((_attrs_u8 = malloc (length * UTF8_MAX_CHAR_LEN + 1)) != NULL) \ { \ for(ptr = lpszAttributes, ptr_u8 = _attrs_u8 ; *ptr ; ptr += WCSLEN (ptr) + 1, ptr_u8 += STRLEN (ptr_u8) + 1) \ dm_StrCopyOut2_W2A (ptr, ptr_u8, WCSLEN (ptr) * UTF8_MAX_CHAR_LEN, NULL); \ *ptr_u8 = '\0'; \ } \ } \ else _attrs_u8 = (char *) dm_SQL_WtoU8((SQLWCHAR*)lpszAttributes, SQL_NTS); \ if (_attrs_u8 == NULL && lpszAttributes) \ { \ PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); \ DLL_CLOSE(handle); \ retcode = FALSE; \ goto done; \ } \ if (pConfigDSN(hwndParent, fRequest, _drv_u8, _attrs_u8)) \ { \ MEM_FREE (_attrs_u8); \ DLL_CLOSE(handle); \ retcode = TRUE; \ goto done; \ } \ else \ { \ MEM_FREE (_attrs_u8); \ PUSH_ERROR(ODBC_ERROR_REQUEST_FAILED); \ DLL_CLOSE(handle); \ retcode = FALSE; \ goto done; \ } \ } \ DLL_CLOSE(handle); \ } #endif extern BOOL RemoveDSNFromIni (LPCSTR lpszDSN, SQLCHAR waMode); BOOL RemoveDefaultDataSource (void) { BOOL retcode = FALSE; PCONFIG pCfg = NULL; /* removes the default dsn */ if (!RemoveDSNFromIni ("Default", 'A')) { PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED); goto quit; } /* removes the default driver not regarding the current config mode */ if (_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE)) { PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED); goto quit; } _iodbcdm_cfg_write (pCfg, "Default", NULL, NULL); if (!_iodbcdm_cfg_commit (pCfg)) retcode = TRUE; else { PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED); goto quit; } /* check now the system only if it was the user first checked */ if (wSystemDSN != SYSTEMDSN_ONLY) { if (pCfg) { _iodbcdm_cfg_done (pCfg); pCfg = NULL; } wSystemDSN = SYSTEMDSN_ONLY; if (_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE)) goto quit; _iodbcdm_cfg_write (pCfg, "Default", NULL, NULL); _iodbcdm_cfg_commit (pCfg); } quit: if (pCfg) _iodbcdm_cfg_done (pCfg); return retcode; } BOOL INSTAPI SQLConfigDataSource_Internal (HWND hwndParent, WORD fRequest, SQLPOINTER lpszDriver, SQLPOINTER lpszAttributes, SQLCHAR waMode) { PCONFIG pCfg = NULL; BOOL retcode = FALSE; void *handle; pConfigDSNFunc pConfigDSN; pConfigDSNWFunc pConfigDSNW; #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) CFStringRef libname = NULL; CFBundleRef bundle; CFURLRef liburl; char name[1024] = { 0 }; #endif char *_drv_u8 = NULL; /* Check input parameters */ CLEAR_ERROR (); /* Map the request User/System */ switch (fRequest) { case ODBC_ADD_DSN: case ODBC_CONFIG_DSN: case ODBC_REMOVE_DSN: configMode = ODBC_USER_DSN; break; case ODBC_ADD_SYS_DSN: case ODBC_CONFIG_SYS_DSN: case ODBC_REMOVE_SYS_DSN: configMode = ODBC_SYSTEM_DSN; fRequest = fRequest - ODBC_ADD_SYS_DSN + ODBC_ADD_DSN; break; case ODBC_REMOVE_DEFAULT_DSN: retcode = RemoveDefaultDataSource (); goto resetdsnmode; default: PUSH_ERROR (ODBC_ERROR_INVALID_REQUEST_TYPE); goto resetdsnmode; } if (waMode == 'W') { _drv_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszDriver, SQL_NTS); if (_drv_u8 == NULL && lpszDriver) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto resetdsnmode; } } else _drv_u8 = (char *) lpszDriver; if (!_drv_u8 || !STRLEN (_drv_u8)) { PUSH_ERROR (ODBC_ERROR_INVALID_NAME); goto resetdsnmode; } /* Get it from the user odbcinst file */ wSystemDSN = USERDSN_ONLY; if (!_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE)) { if (!_iodbcdm_cfg_find (pCfg, (char *) _drv_u8, "Setup")) { if (waMode == 'A') { CALL_CONFIG_DSN (pCfg->value); } else { CALL_CONFIG_DSNW (pCfg->value); } } if (!_iodbcdm_cfg_find (pCfg, (char *) _drv_u8, "Driver")) { if (waMode == 'A') { CALL_CONFIG_DSN (pCfg->value); } else { CALL_CONFIG_DSNW (pCfg->value); } } if (!access (_drv_u8, X_OK)) { if (waMode == 'A') { CALL_CONFIG_DSN (_drv_u8); } else { CALL_CONFIG_DSNW (_drv_u8); } } if (!_iodbcdm_cfg_find (pCfg, "Default", "Setup")) { if (waMode == 'A') { CALL_CONFIG_DSN (pCfg->value); } else { CALL_CONFIG_DSNW (pCfg->value); } } if (!_iodbcdm_cfg_find (pCfg, "Default", "Driver")) { if (waMode == 'A') { CALL_CONFIG_DSN (pCfg->value); } else { CALL_CONFIG_DSNW (pCfg->value); } } } /* Get it from the system odbcinst file */ if (pCfg) { _iodbcdm_cfg_done (pCfg); pCfg = NULL; } wSystemDSN = SYSTEMDSN_ONLY; if (!_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE)) { if (!_iodbcdm_cfg_find (pCfg, (char *) _drv_u8, "Setup")) { if (waMode == 'A') { CALL_CONFIG_DSN (pCfg->value); } else { CALL_CONFIG_DSNW (pCfg->value); } } if (!_iodbcdm_cfg_find (pCfg, (char *) _drv_u8, "Driver")) { if (waMode == 'A') { CALL_CONFIG_DSN (pCfg->value); } else { CALL_CONFIG_DSNW (pCfg->value); } } if (!access (_drv_u8, X_OK)) { if (waMode == 'A') { CALL_CONFIG_DSN (_drv_u8); } else { CALL_CONFIG_DSNW (_drv_u8); } } if (!_iodbcdm_cfg_find (pCfg, "Default", "Setup")) { if (waMode == 'A') { CALL_CONFIG_DSN (pCfg->value); } else { CALL_CONFIG_DSNW (pCfg->value); } } if (!_iodbcdm_cfg_find (pCfg, "Default", "Driver")) { if (waMode == 'A') { CALL_CONFIG_DSN (pCfg->value); } else { CALL_CONFIG_DSNW (pCfg->value); } } } /* The last ressort, a proxy driver */ #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) bundle = CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.inst")); if (bundle) { /* Search for the drvproxy library */ liburl = CFBundleCopyResourceURL (bundle, CFSTR ("iODBCdrvproxy.bundle"), NULL, NULL); if (liburl && (libname = CFURLCopyFileSystemPath (liburl, kCFURLPOSIXPathStyle))) { CFStringGetCString (libname, name, sizeof (name), kCFStringEncodingASCII); strcat (name, "/Contents/MacOS/iODBCdrvproxy"); if (waMode == 'A') { CALL_CONFIG_DSN (name); } else { CALL_CONFIG_DSNW (name); } } if (liburl) CFRelease (liburl); if (libname) CFRelease (libname); } #else if (waMode == 'A') { CALL_CONFIG_DSN ("libdrvproxy.so.2"); } else { CALL_CONFIG_DSNW ("libdrvproxy.so.2"); } #endif /* Error : ConfigDSN could no be found */ PUSH_ERROR (ODBC_ERROR_LOAD_LIB_FAILED); done: if (pCfg) _iodbcdm_cfg_done (pCfg); resetdsnmode: if (_drv_u8 != lpszDriver) MEM_FREE (_drv_u8); wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; return retcode; } BOOL INSTAPI SQLConfigDataSource (HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes) { return SQLConfigDataSource_Internal (hwndParent, fRequest, (SQLPOINTER) lpszDriver, (SQLPOINTER) lpszAttributes, 'A'); } BOOL INSTAPI SQLConfigDataSourceW (HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszAttributes) { return SQLConfigDataSource_Internal (hwndParent, fRequest, (SQLPOINTER) lpszDriver, (SQLPOINTER) lpszAttributes, 'W'); } libiodbc-3.52.9/iodbcinst/unicode.c0000644000076400007640000003670312323210535014067 00000000000000/* * unicode.c * * $Id$ * * ODBC unicode functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #define UNICODE #include #include #include #include #include #include #ifdef WIN32 #include #include #endif #include "unicode.h" #if !defined(HAVE_WCSLEN) size_t wcslen (const wchar_t * wcs) { size_t len = 0; while (*wcs++ != L'\0') len++; return len; } #endif #if !defined(HAVE_WCSCPY) wchar_t * wcscpy (wchar_t * wcd, const wchar_t * wcs) { wchar_t *dst = wcd; while ((*dst++ = *wcs++) != L'\0') ; return wcd; } #endif #if !defined (HAVE_WCSNCPY) wchar_t * wcsncpy (wchar_t * wcd, const wchar_t * wcs, size_t n) { wchar_t *dst = wcd; size_t len = 0; while ( len < n && (*dst++ = *wcs++) != L'\0') len++; for (; len < n; len++) *dst++ = L'\0'; return wcd; } #endif #if !defined(HAVE_WCSCHR) wchar_t* wcschr(const wchar_t *wcs, const wchar_t wc) { do if(*wcs == wc) return (wchar_t*) wcs; while(*wcs++ != L'\0'); return NULL; } #endif #if !defined(HAVE_WCSCAT) wchar_t* wcscat(wchar_t *dest, const wchar_t *src) { wchar_t *s1 = dest; const wchar_t *s2 = src; wchar_t c; do c = *s1 ++; while(c != L'\0'); s1 -= 2; do { c = *s2 ++; *++s1 = c; } while(c != L'\0'); return dest; } #endif #if !defined(HAVE_WCSCMP) int wcscmp (const wchar_t* s1, const wchar_t* s2) { wchar_t c1, c2; if (s1 == s2) return 0; do { c1 = *s1++; c2 = *s2++; if(c1 == L'\0') break; } while (c1 == c2); return c1 - c2; } #endif #if !defined(HAVE_TOWLOWER) #if (defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64))) #include wchar_t towlower (wchar_t wc) { CFMutableStringRef strRef = CFStringCreateMutable (NULL, 0); UniChar c = (UniChar) wc; wchar_t wcs; CFStringAppendCharacters (strRef, &c, 1); CFStringLowercase (strRef, NULL); wcs = CFStringGetCharacterAtIndex (strRef, 0); CFRelease (strRef); return wcs; } #else /* Use dummy function */ wchar_t towlower (wchar_t wc) { return wc; } #endif /* __APPLE__ */ #endif /* !HAVE_TOWLOWER */ #if !defined(HAVE_WCSNCASECMP) int wcsncasecmp (const wchar_t* s1, const wchar_t* s2, size_t n) { wchar_t c1, c2; if (s1 == s2 || n ==0) return 0; do { c1 = towlower(*s1++); c2 = towlower(*s2++); if(c1 == L'\0' || c1 != c2) return c1 - c2; } while (--n > 0); return c1 - c2; } #endif SQLCHAR * dm_SQL_W2A (SQLWCHAR * inStr, ssize_t size) { SQLCHAR *outStr = NULL; size_t len; if (inStr == NULL) return NULL; if (size == SQL_NTS) len = wcslen (inStr); else len = size; if (len < 0) return NULL; if ((outStr = (SQLCHAR *) malloc (len * UTF8_MAX_CHAR_LEN + 1)) != NULL) { if (len > 0) OPL_W2A (inStr, outStr, len); outStr[len] = '\0'; } return outStr; } SQLWCHAR * dm_SQL_A2W (SQLCHAR * inStr, ssize_t size) { SQLWCHAR *outStr = NULL; size_t len; if (inStr == NULL) return NULL; if (size == SQL_NTS) len = strlen ((char *) inStr); else len = size; if (len < 0) return NULL; if ((outStr = (SQLWCHAR *) calloc (len + 1, sizeof (SQLWCHAR))) != NULL) { if (len > 0) OPL_A2W (inStr, outStr, len); outStr[len] = L'\0'; } return outStr; } int dm_StrCopyOut2_A2W ( SQLCHAR * inStr, SQLWCHAR * outStr, SQLSMALLINT size, SQLSMALLINT * result) { size_t length; if (!inStr) return -1; length = strlen ((char *) inStr); if (result) *result = (SQLSMALLINT) length; if (!outStr) return 0; if (size >= length + 1) { if (length > 0) OPL_A2W (inStr, outStr, length); outStr[length] = L'\0'; return 0; } if (size > 0) { OPL_A2W (inStr, outStr, size); outStr[--size] = L'\0'; } return -1; } int dm_StrCopyOut2_W2A ( SQLWCHAR * inStr, SQLCHAR * outStr, SQLSMALLINT size, SQLSMALLINT * result) { size_t length; if (!inStr) return -1; length = wcslen (inStr); if (result) *result = (SQLSMALLINT) length; if (!outStr) return 0; if (size >= length + 1) { if (length > 0) OPL_W2A (inStr, outStr, length); outStr[length] = '\0'; return 0; } if (size > 0) { OPL_W2A (inStr, outStr, size); outStr[--size] = '\0'; } return -1; } SQLWCHAR * dm_strcpy_A2W (SQLWCHAR * destStr, SQLCHAR * sourStr) { size_t length; if (!sourStr || !destStr) return destStr; length = strlen ((char *) sourStr); if (length > 0) OPL_A2W (sourStr, destStr, length); destStr[length] = L'\0'; return destStr; } SQLCHAR * dm_strcpy_W2A (SQLCHAR * destStr, SQLWCHAR * sourStr) { size_t length; if (!sourStr || !destStr) return destStr; length = wcslen (sourStr); if (length > 0) OPL_W2A (sourStr, destStr, length); destStr[length] = '\0'; return destStr; } static size_t calc_len_for_utf8 (SQLWCHAR * str, ssize_t size) { size_t len = 0; SQLWCHAR c; if (!str) return len; if (size == SQL_NTS) { while ((c = *str)) { if (c < 0x80) len += 1; else if (c < 0x800) len += 2; else if (c < 0x10000) len += 3; else if (c < 0x200000) len += 4; else len += 1; str++; } } else { while (size > 0) { c = *str; if (c < 0x80) len += 1; else if (c < 0x800) len += 2; else if (c < 0x10000) len += 3; else if (c < 0x200000) len += 4; else len += 1; str++; size--; } } return len; } static size_t utf8_len (SQLCHAR * p, ssize_t size) { size_t len = 0; if (!*p) return 0; if (size == SQL_NTS) while (*p) { for (p++; (*p & 0xC0) == 0x80; p++) ; len++; } else while (size > 0) { for (p++, size--; (size > 0) && ((*p & 0xC0) == 0x80); p++, size--) ; len++; } return len; } /* * size - size of buffer for output utf8 string in bytes * return - length of output utf8 string */ static size_t wcstoutf8 (SQLWCHAR * wstr, SQLCHAR * ustr, size_t size) { size_t len; SQLWCHAR c; int first; size_t i; size_t count = 0; if (!wstr) return 0; while ((c = *wstr) && count < size) { if (c < 0x80) { len = 1; first = 0; } else if (c < 0x800) { len = 2; first = 0xC0; } else if (c < 0x10000) { len = 3; first = 0xE0; } else if (c < 0x200000) { len = 4; first = 0xf0; } else { len = 1; first = 0; c = '?'; } if (size - count < len) { return count; } for (i = len - 1; i > 0; --i) { ustr[i] = (c & 0x3f) | 0x80; c >>= 6; } ustr[0] = c | first; ustr += len; count += len; wstr++; } return count; } /* * wlen - length of input *wstr string in symbols * size - size of buffer ( *ustr string) in bytes * converted - number of converted symbols from *wstr * * Return - length of output utf8 string */ static int wcsntoutf8 ( SQLWCHAR * wstr, SQLCHAR * ustr, size_t wlen, size_t size, u_short * converted) { size_t len; SQLWCHAR c; int first; size_t i; size_t count = 0; size_t _converted = 0; if (!wstr) return 0; while (_converted < wlen && count < size) { c = *wstr; if (c < 0x80) { len = 1; first = 0; } else if (c < 0x800) { len = 2; first = 0xC0; } else if (c < 0x10000) { len = 3; first = 0xE0; } else if (c < 0x200000) { len = 4; first = 0xf0; } else { len = 1; first = 0; c = '?'; } if (size - count < len) { if (converted) *converted = (u_short) _converted; return count; } for (i = len - 1; i > 0; --i) { ustr[i] = (c & 0x3f) | 0x80; c >>= 6; } ustr[0] = c | first; ustr += len; count += len; wstr++; _converted++; } if (converted) *converted = (u_short) _converted; return count; } static SQLCHAR * strdup_WtoU8 (SQLWCHAR * str) { SQLCHAR *ret; size_t len; if (!str) return NULL; len = calc_len_for_utf8 (str, SQL_NTS); if ((ret = (SQLCHAR *) malloc (len + 1)) == NULL) return NULL; len = wcstoutf8 (str, ret, len); ret[len] = '\0'; return ret; } /* decode */ #define UTF8_COMPUTE(Char, Mask, Len) \ if (Char < 128) \ { \ Len = 1; \ Mask = 0x7f; \ } \ else if ((Char & 0xe0) == 0xc0) \ { \ Len = 2; \ Mask = 0x1f; \ } \ else if ((Char & 0xf0) == 0xe0) \ { \ Len = 3; \ Mask = 0x0f; \ } \ else if ((Char & 0xf8) == 0xf0) \ { \ Len = 4; \ Mask = 0x07; \ } \ else \ Len = -1; /* * size - size of buffer for output string in symbols (SQLWCHAR) * return - length of output SQLWCHAR string */ static size_t utf8towcs (SQLCHAR * ustr, SQLWCHAR * wstr, ssize_t size) { int i; int mask = 0; int len; SQLCHAR c; SQLWCHAR wc; int count = 0; if (!ustr) return 0; while ((c = (SQLCHAR) *ustr) && count < size) { UTF8_COMPUTE (c, mask, len); if (len == -1) return count; wc = c & mask; for (i = 1; i < len; i++) { if ((ustr[i] & 0xC0) != 0x80) return count; wc <<= 6; wc |= (ustr[i] & 0x3F); } *wstr = wc; ustr += len; wstr++; count++; } return count; } /* * ulen - length of input *ustr string in bytes * size - size of buffer ( *wstr string) in symbols * converted - number of converted bytes from *ustr * * Return - length of output wcs string */ static int utf8ntowcs ( SQLCHAR * ustr, SQLWCHAR * wstr, size_t ulen, size_t size, int * converted) { int i; int mask = 0; int len; SQLCHAR c; SQLWCHAR wc; size_t count = 0; size_t _converted = 0; if (!ustr) return 0; while ((_converted < ulen) && (count < size)) { c = (SQLCHAR) *ustr; UTF8_COMPUTE (c, mask, len); if ((len == -1) || (_converted + len > ulen)) { if (converted) *converted = (u_short) _converted; return count; } wc = c & mask; for (i = 1; i < len; i++) { if ((ustr[i] & 0xC0) != 0x80) { if (converted) *converted = (u_short) _converted; return count; } wc <<= 6; wc |= (ustr[i] & 0x3F); } *wstr = wc; ustr += len; wstr++; count++; _converted += len; } if (converted) *converted = (u_short) _converted; return count; } static SQLWCHAR * strdup_U8toW (SQLCHAR * str) { SQLWCHAR *ret; size_t len; if (!str) return NULL; len = utf8_len (str, SQL_NTS); if ((ret = (SQLWCHAR *) malloc ((len + 1) * sizeof (SQLWCHAR))) == NULL) return NULL; len = utf8towcs (str, ret, len); ret[len] = L'\0'; return ret; } SQLCHAR * dm_SQL_WtoU8 (SQLWCHAR * inStr, ssize_t size) { SQLCHAR *outStr = NULL; size_t len; if (inStr == NULL) return NULL; if (size == SQL_NTS) { outStr = strdup_WtoU8 (inStr); } else { len = calc_len_for_utf8 (inStr, size); if ((outStr = (SQLCHAR *) malloc (len + 1)) != NULL) { len = wcsntoutf8 (inStr, outStr, size, len, NULL); outStr[len] = '\0'; } } return outStr; } SQLWCHAR * dm_SQL_U8toW (SQLCHAR * inStr, SQLSMALLINT size) { SQLWCHAR *outStr = NULL; size_t len; if (inStr == NULL) return NULL; if (size == SQL_NTS) { outStr = strdup_U8toW (inStr); } else { len = utf8_len (inStr, size); if ((outStr = (SQLWCHAR *) calloc (len + 1, sizeof (SQLWCHAR))) != NULL) utf8ntowcs (inStr, outStr, size, len, NULL); } return outStr; } int dm_StrCopyOut2_U8toW ( SQLCHAR * inStr, SQLWCHAR * outStr, size_t size, u_short * result) { size_t length; if (!inStr) return -1; length = utf8_len (inStr, SQL_NTS); if (result) *result = (u_short) length; if (!outStr) return 0; if (size >= length + 1) { length = utf8towcs (inStr, outStr, size); outStr[length] = L'\0'; return 0; } if (size > 0) { length = utf8towcs (inStr, outStr, size - 1); outStr[length] = L'\0'; } return -1; } libiodbc-3.52.9/iodbcinst/SQLGetInstalledDrivers.c0000644000076400007640000001603112323210535016727 00000000000000/* * SQLGetInstalledDrivers.c * * $Id$ * * Get a list of installed drivers * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "misc.h" #include "iodbc_error.h" #ifdef WIN32 #define SECT1 "ODBC 32 bit Data Sources" #define SECT2 "ODBC 32 bit Drivers" #else #define SECT1 "ODBC Data Sources" #define SECT2 "ODBC Drivers" #endif #define MAX_ENTRIES 1024 extern BOOL GetAvailableDrivers (LPCSTR lpszInfFile, LPSTR lpszBuf, WORD cbBufMax, WORD * pcbBufOut, BOOL infFile); static int SectSorter (const void *p1, const void *p2) { const char **s1 = (const char **) p1; const char **s2 = (const char **) p2; return strcasecmp (*s1, *s2); } BOOL INSTAPI SQLGetInstalledDrivers_Internal (LPSTR lpszBuf, WORD cbBufMax, WORD * pcbBufOut, SQLCHAR waMode) { char buffer[4096], desc[1024], *ptr, *oldBuf = lpszBuf; int i, j, usernum = 0, num_entries = 0; void **sect = NULL; SQLUSMALLINT fDir = SQL_FETCH_FIRST_USER; if (pcbBufOut) *pcbBufOut = 0; /* * Allocate the buffer for the list */ if ((sect = (void **) calloc (MAX_ENTRIES, sizeof (void *))) == NULL) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); return SQL_FALSE; } do { SQLSetConfigMode (fDir == SQL_FETCH_FIRST_SYSTEM ? ODBC_SYSTEM_DSN : ODBC_USER_DSN); SQLGetPrivateProfileString (SECT2, NULL, "", buffer, sizeof (buffer) / sizeof (SQLTCHAR), "odbcinst.ini"); /* For each drivers */ for (ptr = buffer, i = 1; *ptr && i; ptr += STRLEN (ptr) + 1) { /* Add this section to the datasources list */ if (fDir == SQL_FETCH_FIRST_SYSTEM) { for (j = 0; j < usernum; j++) { if (STREQ (sect[j], ptr)) j = usernum; } if (j == usernum + 1) continue; } if (num_entries >= MAX_ENTRIES) { i = 0; break; } /* Skip the rest */ /* ... and its description */ SQLSetConfigMode (fDir == SQL_FETCH_FIRST_SYSTEM ? ODBC_SYSTEM_DSN : ODBC_USER_DSN); SQLGetPrivateProfileString (SECT2, ptr, "", desc, sizeof (desc) / sizeof (SQLTCHAR), "odbcinst.ini"); /* Check if the driver is installed */ if (!STRCASEEQ (desc, "Installed")) continue; /* Copy the driver name */ sect[num_entries++] = STRDUP (ptr); } switch (fDir) { case SQL_FETCH_FIRST_USER: fDir = SQL_FETCH_FIRST_SYSTEM; usernum = num_entries; break; case SQL_FETCH_FIRST_SYSTEM: fDir = SQL_FETCH_FIRST; break; } } while (fDir != SQL_FETCH_FIRST); /* * Sort all entries so we can present a nice list */ if (num_entries > 1) { qsort (sect, num_entries, sizeof (char **), SectSorter); /* Copy back the result */ for (i = 0; cbBufMax > 0 && i < num_entries; i++) { if (waMode == 'A') { STRNCPY (lpszBuf, sect[i], cbBufMax); cbBufMax -= (STRLEN (sect[i]) + 1); lpszBuf += (STRLEN (sect[i]) + 1); } else { dm_StrCopyOut2_A2W (sect[i], (LPWSTR) lpszBuf, cbBufMax, NULL); cbBufMax -= (STRLEN (sect[i]) + 1); lpszBuf += (STRLEN (sect[i]) + 1) * sizeof (wchar_t); } } if (waMode == 'A') *lpszBuf = '\0'; else *((wchar_t *) lpszBuf) = L'\0'; } /* * Free old section list */ if (sect) { for (i = 0; i < MAX_ENTRIES; i++) if (sect[i]) free (sect[i]); free (sect); } if (pcbBufOut) *pcbBufOut = lpszBuf - oldBuf + (waMode == 'A' ? sizeof (char) : sizeof (wchar_t)); return waMode == 'A' ? (oldBuf[0] ? SQL_TRUE : SQL_FALSE) : (((wchar_t *) oldBuf)[0] ? SQL_TRUE : SQL_FALSE); } BOOL INSTAPI SQLGetInstalledDrivers (LPSTR lpszBuf, WORD cbBufMax, WORD * pcbBufOut) { return SQLGetInstalledDrivers_Internal (lpszBuf, cbBufMax, pcbBufOut, 'A'); } BOOL INSTAPI SQLGetInstalledDriversW (LPWSTR lpszBuf, WORD cbBufMax, WORD FAR * pcbBufOut) { return SQLGetInstalledDrivers_Internal ((LPSTR) lpszBuf, cbBufMax, pcbBufOut, 'W'); } libiodbc-3.52.9/iodbcinst/misc.h0000644000076400007640000000734212323210535013376 00000000000000/* * misc.h * * $Id$ * * Misc support functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _MISC_H #define _MISC_H char *_iodbcadm_getinifile (char *buf, int size, int bIsInst, int doCreate); void _iodbcdm_getdsnfile(const char *filedsn, char *buf, size_t buf_sz); const char *_iodbcdm_check_for_string (const char *szList, const char *szString, int bContains); char *_iodbcdm_remove_quotes (const char *szString); size_t _iodbcdm_strlcpy(char *dst, const char *src, size_t siz); size_t _iodbcdm_strlcat(char *dst, const char *src, size_t siz); extern WORD wSystemDSN; extern WORD configMode; #endif libiodbc-3.52.9/iodbcinst/SQLConfigDriver.c0000644000076400007640000002611312323210535015374 00000000000000/* * SQLConfigDriver.c * * $Id$ * * Load the appropriate driver setup DLL and calls the ConfigDriver * function. * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) # include #endif #include "dlf.h" #include "inifile.h" #include "misc.h" #include "iodbc_error.h" #ifndef WIN32 #include #define CALL_CONFIG_DRIVER(driverpath) \ if ((handle = DLL_OPEN((driverpath))) != NULL) \ { \ if ((pConfigDriver = (pConfigDriverFunc)DLL_PROC(handle, "ConfigDriver")) != NULL) \ { \ if (pConfigDriver (hwndParent, fRequest, lpszDriver, lpszArgs, lpszMsg, cbMsgMax, pcbMsgOut)) \ { \ DLL_CLOSE(handle); \ retcode = TRUE; \ goto done; \ } \ else \ { \ PUSH_ERROR(ODBC_ERROR_REQUEST_FAILED); \ DLL_CLOSE(handle); \ retcode = FALSE; \ goto done; \ } \ } \ DLL_CLOSE(handle); \ } #define CALL_CONFIG_DRIVERW(driverpath) \ if ((handle = DLL_OPEN((driverpath))) != NULL) \ { \ if ((pConfigDriverW = (pConfigDriverWFunc)DLL_PROC(handle, "ConfigDriverW")) != NULL) \ { \ if (pConfigDriverW (hwndParent, fRequest, (SQLWCHAR*)lpszDriver, (SQLWCHAR*)lpszArgs, (SQLWCHAR*)lpszMsg, cbMsgMax, pcbMsgOut)) \ { \ DLL_CLOSE(handle); \ retcode = TRUE; \ goto done; \ } \ else \ { \ PUSH_ERROR(ODBC_ERROR_REQUEST_FAILED); \ DLL_CLOSE(handle); \ retcode = FALSE; \ goto done; \ } \ } \ else if ((pConfigDriver = (pConfigDriverFunc)DLL_PROC(handle, "ConfigDriver")) != NULL) \ { \ char *_args_u8 = (char *) dm_SQL_WtoU8((SQLWCHAR*)lpszArgs, SQL_NTS); \ char *_msg_u8 = (char *) dm_SQL_WtoU8((SQLWCHAR*)lpszMsg, SQL_NTS); \ if ((_args_u8 == NULL && lpszArgs) || (_msg_u8 == NULL && lpszMsg)) \ { \ PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); \ DLL_CLOSE(handle); \ retcode = FALSE; \ goto done; \ } \ if (pConfigDriver (hwndParent, fRequest, _drv_u8, _args_u8, _msg_u8, STRLEN(_msg_u8), pcbMsgOut)) \ { \ MEM_FREE (_args_u8); \ MEM_FREE (_msg_u8); \ DLL_CLOSE(handle); \ retcode = TRUE; \ goto done; \ } \ else \ { \ MEM_FREE (_args_u8); \ MEM_FREE (_msg_u8); \ PUSH_ERROR(ODBC_ERROR_REQUEST_FAILED); \ DLL_CLOSE(handle); \ retcode = FALSE; \ goto done; \ } \ } \ DLL_CLOSE(handle); \ } #endif BOOL INSTAPI SQLConfigDriver_Internal (HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszArgs, LPSTR lpszMsg, WORD cbMsgMax, WORD FAR * pcbMsgOut, SQLCHAR waMode) { PCONFIG pCfg; BOOL retcode = FALSE; void *handle; pConfigDriverFunc pConfigDriver; pConfigDriverWFunc pConfigDriverW; #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) CFStringRef libname = NULL; CFBundleRef bundle; CFURLRef liburl; char name[1024] = { 0 }; #endif char *_drv_u8 = NULL; /* Check input parameters */ CLEAR_ERROR (); if (waMode == 'W') { _drv_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszDriver, SQL_NTS); if (_drv_u8 == NULL && lpszDriver) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto quit; } } else _drv_u8 = (char *) lpszDriver; if (!_drv_u8 || !STRLEN (_drv_u8)) { PUSH_ERROR (ODBC_ERROR_INVALID_NAME); goto quit; } /* Map the request User/System */ if (fRequest < ODBC_INSTALL_DRIVER || fRequest > ODBC_CONFIG_DRIVER_MAX) { PUSH_ERROR (ODBC_ERROR_INVALID_REQUEST_TYPE); goto quit; } /* Get it from the user odbcinst file */ wSystemDSN = USERDSN_ONLY; if (!_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE)) { if (!_iodbcdm_cfg_find (pCfg, (char *) _drv_u8, "Setup")) { if (waMode == 'A') { CALL_CONFIG_DRIVER (pCfg->value); } else { CALL_CONFIG_DRIVERW (pCfg->value); } } if (!_iodbcdm_cfg_find (pCfg, (char *) _drv_u8, "Driver")) { if (waMode == 'A') { CALL_CONFIG_DRIVER (pCfg->value); } else { CALL_CONFIG_DRIVERW (pCfg->value); } } if (!access (_drv_u8, X_OK)) { if (waMode == 'A') { CALL_CONFIG_DRIVER (_drv_u8); } else { CALL_CONFIG_DRIVERW (_drv_u8); } } if (!_iodbcdm_cfg_find (pCfg, "Default", "Setup")) { if (waMode == 'A') { CALL_CONFIG_DRIVER (pCfg->value); } else { CALL_CONFIG_DRIVERW (pCfg->value); } } if (!_iodbcdm_cfg_find (pCfg, "Default", "Driver")) { if (waMode == 'A') { CALL_CONFIG_DRIVER (pCfg->value); } else { CALL_CONFIG_DRIVERW (pCfg->value); } } } /* Get it from the system odbcinst file */ if (pCfg) { _iodbcdm_cfg_done (pCfg); pCfg = NULL; } wSystemDSN = SYSTEMDSN_ONLY; if (!_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE)) { if (!_iodbcdm_cfg_find (pCfg, (char *) _drv_u8, "Setup")) { if (waMode == 'A') { CALL_CONFIG_DRIVER (pCfg->value); } else { CALL_CONFIG_DRIVERW (pCfg->value); } } if (!_iodbcdm_cfg_find (pCfg, (char *) _drv_u8, "Driver")) { if (waMode == 'A') { CALL_CONFIG_DRIVER (pCfg->value); } else { CALL_CONFIG_DRIVERW (pCfg->value); } } if (!access (_drv_u8, X_OK)) { if (waMode == 'A') { CALL_CONFIG_DRIVER (_drv_u8); } else { CALL_CONFIG_DRIVERW (_drv_u8); } } if (!_iodbcdm_cfg_find (pCfg, "Default", "Setup")) { if (waMode == 'A') { CALL_CONFIG_DRIVER (pCfg->value); } else { CALL_CONFIG_DRIVERW (pCfg->value); } } if (!_iodbcdm_cfg_find (pCfg, "Default", "Driver")) { if (waMode == 'A') { CALL_CONFIG_DRIVER (pCfg->value); } else { CALL_CONFIG_DRIVERW (pCfg->value); } } } /* The last ressort, a proxy driver */ #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) bundle = CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.inst")); if (bundle) { /* Search for the drvproxy library */ liburl = CFBundleCopyResourceURL (bundle, CFSTR ("iODBCdrvproxy.bundle"), NULL, NULL); if (liburl && (libname = CFURLCopyFileSystemPath (liburl, kCFURLPOSIXPathStyle))) { CFStringGetCString (libname, name, sizeof (name), kCFStringEncodingASCII); strcat (name, "/Contents/MacOS/iODBCdrvproxy"); if (waMode == 'A') { CALL_CONFIG_DRIVER (name); } else { CALL_CONFIG_DRIVERW (name); } } if (liburl) CFRelease (liburl); if (libname) CFRelease (libname); } #else if (waMode == 'A') { CALL_CONFIG_DRIVER ("libdrvproxy.so.2"); } else { CALL_CONFIG_DRIVERW ("libdrvproxy.so.2"); } #endif /* Error : ConfigDriver could no be found */ PUSH_ERROR (ODBC_ERROR_LOAD_LIB_FAILED); done: if (pCfg) _iodbcdm_cfg_done (pCfg); quit: if (_drv_u8 != lpszDriver) MEM_FREE (_drv_u8); wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; if (pcbMsgOut) *pcbMsgOut = 0; return retcode; } BOOL INSTAPI SQLConfigDriver (HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszArgs, LPSTR lpszMsg, WORD cbMsgMax, WORD FAR * pcbMsgOut) { return SQLConfigDriver_Internal (hwndParent, fRequest, (SQLPOINTER) lpszDriver, (SQLPOINTER) lpszArgs, (SQLPOINTER) lpszMsg, cbMsgMax, pcbMsgOut, 'A'); } BOOL INSTAPI SQLConfigDriverW (HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszArgs, LPWSTR lpszMsg, WORD cbMsgMax, WORD FAR * pcbMsgOut) { return SQLConfigDriver_Internal (hwndParent, fRequest, (SQLPOINTER) lpszDriver, (SQLPOINTER) lpszArgs, (SQLPOINTER) lpszMsg, cbMsgMax, pcbMsgOut, 'W'); } libiodbc-3.52.9/iodbcinst/SQLSetConfigMode.c0000644000076400007640000000753612323210535015511 00000000000000/* * SQLSetConfigMode.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include "iodbc_error.h" #include "misc.h" BOOL INSTAPI SQLSetConfigMode (UWORD wConfigMode) { BOOL retcode = FALSE; /* Check input parameters */ CLEAR_ERROR (); switch (wConfigMode) { case ODBC_BOTH_DSN: case ODBC_USER_DSN: wSystemDSN = USERDSN_ONLY; goto configmode; case ODBC_SYSTEM_DSN: wSystemDSN = SYSTEMDSN_ONLY; configmode: configMode = wConfigMode; wSystemDSN = USERDSN_ONLY; retcode = TRUE; break; default: PUSH_ERROR (ODBC_ERROR_INVALID_PARAM_SEQUENCE); } return retcode; } libiodbc-3.52.9/iodbcinst/SQLInstallDriverEx.c0000644000076400007640000002330212323210535016067 00000000000000/* * SQLInstallDriverEx.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "misc.h" #include "inifile.h" #include "iodbc_error.h" #ifdef _MAC # include #endif #if !defined(WINDOWS) && !defined(WIN32) && !defined(OS2) && !defined(macintosh) # include # include # include # include # define UNIX_PWD #endif extern BOOL InstallDriverPath (LPSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut, LPSTR envname); BOOL InstallDriverPathLength (WORD * pcbPathOut, LPSTR envname) { #ifdef _MAC OSErr result; long fldrDid; short fldrRef; #endif BOOL retcode = FALSE; WORD len = 0; char path[1024]; char *ptr; #if !defined(UNIX_PWD) #ifdef _MAC result = FindFolder (kOnSystemDisk, kExtensionFolderType, kDontCreateFolder, &fldrRef, &fldrDid); if (result != noErr) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; } ptr = get_full_pathname (fldrDid, fldrRef); len = STRLEN (ptr); free (ptr); goto done; #else /* * On Windows, there is only one place to look */ len = GetWindowsDirectory (path, sizeof (path)); goto done; #endif #else /* * 1. Check $ODBCDRIVERS environment variable */ if ((ptr = getenv (envname)) && access (ptr, R_OK | W_OK | X_OK) == 0) { len = STRLEN (ptr); goto done; } /* * 2. Check /usr/local/lib and /usr/lib */ #ifdef _BE if (access ("/boot/beos/system/lib", R_OK | W_OK | X_OK) == 0) { len = STRLEN ("/boot/beos/system/lib"); goto done; } #else if (access ("/usr/local/lib", R_OK | W_OK | X_OK) == 0) { len = STRLEN ("/usr/local/lib"); goto done; } #endif #ifdef _BE if (access ("/boot/home/config/lib", R_OK | W_OK | X_OK) == 0) { len = STRLEN ("/boot/home/config/lib"); goto done; } #else if (access ("/usr/lib", R_OK | W_OK | X_OK) == 0) { len = STRLEN ("/usr/lib"); goto done; } #endif /* * 3. Check either $HOME */ if (!(ptr = getenv ("HOME"))) { ptr = (char *) getpwuid (getuid ()); if (ptr) ptr = ((struct passwd *) ptr)->pw_dir; } if (ptr) { #ifdef _BE sprintf (path, "%s/config/lib", ptr); #else sprintf (path, "%s/lib", ptr); #endif if (access (path, R_OK | W_OK | X_OK) == 0) { len = STRLEN (path); goto done; } } if (!mkdir (path, 0755)) goto done; #endif SQLPostInstallerError (ODBC_ERROR_GENERAL_ERR, "Cannot retrieve a directory where to install the driver or translator."); goto quit; done: retcode = TRUE; quit: if (pcbPathOut) *pcbPathOut = len; return retcode; } BOOL INSTAPI SQLInstallDriverEx (LPCSTR lpszDriver, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount) { PCONFIG pCfg = NULL, pOdbcCfg = NULL; BOOL retcode = FALSE; CLEAR_ERROR (); if (lpszPathIn && access (lpszPathIn, R_OK | X_OK)) { PUSH_ERROR (ODBC_ERROR_INVALID_PATH); goto quit; } switch (fRequest) { case ODBC_INSTALL_INQUIRY: if (lpszPathIn) { if (pcbPathOut) *pcbPathOut = STRLEN (lpszPathIn); retcode = TRUE; } else retcode = InstallDriverPathLength (pcbPathOut, "ODBCDRIVERS"); goto quit; case ODBC_INSTALL_COMPLETE: break; default: PUSH_ERROR (ODBC_ERROR_INVALID_REQUEST_TYPE); goto quit; } /* Check input parameters */ if (!lpszDriver || !STRLEN (lpszDriver)) { PUSH_ERROR (ODBC_ERROR_INVALID_PARAM_SEQUENCE); goto quit; } if (!lpszPathOut || !cbPathOutMax) { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } /* Write the out path */ if (!InstallDriverPath (lpszPathOut, cbPathOutMax, pcbPathOut, "ODBCDRIVERS")) goto quit; /* Else go through user/system odbcinst.ini */ switch (configMode) { case ODBC_BOTH_DSN: case ODBC_USER_DSN: wSystemDSN = USERDSN_ONLY; break; case ODBC_SYSTEM_DSN: wSystemDSN = SYSTEMDSN_ONLY; break; } if (_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; } if (_iodbcdm_cfg_search_init (&pOdbcCfg, "odbc.ini", TRUE)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); pOdbcCfg = NULL; goto done; } if (!install_from_string (pCfg, pOdbcCfg, (char *) lpszDriver, TRUE)) { PUSH_ERROR (ODBC_ERROR_INVALID_KEYWORD_VALUE); goto done; } if (_iodbcdm_cfg_commit (pCfg) || _iodbcdm_cfg_commit (pOdbcCfg)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto done; } retcode = TRUE; done: _iodbcdm_cfg_done (pCfg); if (pOdbcCfg) _iodbcdm_cfg_done (pOdbcCfg); quit: wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; return retcode; } BOOL INSTAPI SQLInstallDriverExW (LPCWSTR lpszDriver, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount) { char *_driver_u8 = NULL; char *_pathin_u8 = NULL; char *_pathout_u8 = NULL; BOOL retcode = FALSE; int length; SQLWCHAR *ptr; char *ptr_u8; for (length = 0, ptr = (SQLWCHAR *) lpszDriver; *ptr; length += WCSLEN (ptr) + 1, ptr += WCSLEN (ptr) + 1); if (length > 0) { if ((_driver_u8 = malloc (length * UTF8_MAX_CHAR_LEN + 1)) != NULL) { for (ptr = (SQLWCHAR *) lpszDriver, ptr_u8 = _driver_u8; *ptr; ptr += WCSLEN (ptr) + 1, ptr_u8 += STRLEN (ptr_u8) + 1) dm_StrCopyOut2_W2A (ptr, ptr_u8, WCSLEN (ptr) * UTF8_MAX_CHAR_LEN, NULL); *ptr_u8 = '\0'; } } else _driver_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszDriver, SQL_NTS); if (_driver_u8 == NULL && lpszDriver) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _pathin_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszPathIn, SQL_NTS); if (_pathin_u8 == NULL && lpszPathIn) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } if (cbPathOutMax > 0) { if ((_pathout_u8 = malloc (cbPathOutMax * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } } retcode = SQLInstallDriverEx (_driver_u8, _pathin_u8, _pathout_u8, cbPathOutMax * UTF8_MAX_CHAR_LEN, pcbPathOut, fRequest, lpdwUsageCount); if (retcode == TRUE) { dm_StrCopyOut2_U8toW (_pathout_u8, lpszPathOut, cbPathOutMax, pcbPathOut); } done: MEM_FREE (_driver_u8); MEM_FREE (_pathin_u8); MEM_FREE (_pathout_u8); return retcode; } libiodbc-3.52.9/iodbcinst/SQLGetPrivateProfileString.c0000644000076400007640000002437412323210535017604 00000000000000/* * SQLGetProfileString.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "inifile.h" #include "iodbc_error.h" #include "misc.h" #ifndef WIN32 int GetPrivateProfileString (LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszDefault, LPSTR lpszRetBuffer, int cbRetBuffer, LPCSTR lpszFilename) { char *defval = (char *) lpszDefault, *value = NULL; int len = 0; PCONFIG pCfg; lpszRetBuffer[0] = 0; /* If error during reading the file */ if (_iodbcdm_cfg_search_init (&pCfg, lpszFilename, FALSE)) { if (lpszDefault) STRNCPY (lpszRetBuffer, lpszDefault, cbRetBuffer - 1); PUSH_ERROR (ODBC_ERROR_INVALID_PATH); goto fail; } /* List all sections from the ini file */ if (lpszSection == NULL || *lpszSection == '\0') { len = _iodbcdm_list_sections (pCfg, lpszRetBuffer, cbRetBuffer); goto done; } /* List all the entries of the specified section */ if (lpszEntry == NULL || *lpszEntry == '\0') { len = _iodbcdm_list_entries (pCfg, lpszSection, lpszRetBuffer, cbRetBuffer); goto done; } /* * Sorry for this one -- Windows cannot handle a default value of * "" in GetPrivateProfileString, so it is passed as " " instead. */ if (defval == NULL || *defval == '\0') defval = " "; /* * Check whether someone else has modified the odbc.ini file */ _iodbcdm_cfg_refresh (pCfg); if (!_iodbcdm_cfg_find (pCfg, (LPSTR) lpszSection, (LPSTR) lpszEntry)) value = pCfg->value; if (value == NULL) { value = defval; if (value[0] == ' ' && value[1] == '\0') value = ""; } STRNCPY (lpszRetBuffer, value, cbRetBuffer - 1); done: _iodbcdm_cfg_done (pCfg); fail: if (!len) len = STRLEN (lpszRetBuffer); if (len == cbRetBuffer - 1) PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); return len; } #endif int INSTAPI SQLGetPrivateProfileString (LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszDefault, LPSTR lpszRetBuffer, int cbRetBuffer, LPCSTR lpszFilename) { char pathbuf[1024]; int len = 0; /* Check input parameters */ CLEAR_ERROR (); if (!lpszRetBuffer || !cbRetBuffer) { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } if (!lpszDefault) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; } /* Else go through user/system odbc.ini */ switch (configMode) { case ODBC_USER_DSN: wSystemDSN = USERDSN_ONLY; if (lpszFilename) { len = GetPrivateProfileString (lpszSection, lpszEntry, lpszDefault, lpszRetBuffer, cbRetBuffer, lpszFilename); goto quit; } if (_iodbcadm_getinifile (pathbuf, sizeof (pathbuf), FALSE, FALSE)) len = GetPrivateProfileString (lpszSection, lpszEntry, lpszDefault, lpszRetBuffer, cbRetBuffer, pathbuf); goto quit; case ODBC_SYSTEM_DSN: wSystemDSN = SYSTEMDSN_ONLY; if (lpszFilename) { len = GetPrivateProfileString (lpszSection, lpszEntry, lpszDefault, lpszRetBuffer, cbRetBuffer, lpszFilename); goto quit; } if (_iodbcadm_getinifile (pathbuf, sizeof (pathbuf), FALSE, FALSE)) len = GetPrivateProfileString (lpszSection, lpszEntry, lpszDefault, lpszRetBuffer, cbRetBuffer, pathbuf); goto quit; case ODBC_BOTH_DSN: wSystemDSN = USERDSN_ONLY; if (lpszFilename) { len = GetPrivateProfileString (lpszSection, lpszEntry, lpszDefault, lpszRetBuffer, cbRetBuffer, lpszFilename); if (!len) { CLEAR_ERROR (); wSystemDSN = SYSTEMDSN_ONLY; len = GetPrivateProfileString (lpszSection, lpszEntry, lpszDefault, lpszRetBuffer, cbRetBuffer, lpszFilename); } goto quit; } if (_iodbcadm_getinifile (pathbuf, sizeof (pathbuf), FALSE, FALSE)) { len = GetPrivateProfileString (lpszSection, lpszEntry, lpszDefault, lpszRetBuffer, cbRetBuffer, pathbuf); if (len) goto quit; } CLEAR_ERROR (); wSystemDSN = SYSTEMDSN_ONLY; if (_iodbcadm_getinifile (pathbuf, sizeof (pathbuf), FALSE, FALSE)) { len = GetPrivateProfileString (lpszSection, lpszEntry, lpszDefault, lpszRetBuffer, cbRetBuffer, pathbuf); } goto quit; } PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; quit: wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; return len; } int INSTAPI SQLGetPrivateProfileStringW (LPCWSTR lpszSection, LPCWSTR lpszEntry, LPCWSTR lpszDefault, LPWSTR lpszRetBuffer, int cbRetBuffer, LPCWSTR lpszFilename) { char *_section_u8 = NULL; char *_entry_u8 = NULL; char *_default_u8 = NULL; char *_buffer_u8 = NULL; char *_filename_u8 = NULL; SQLCHAR *ptr; SQLWCHAR *ptrW; SQLSMALLINT length, len; _section_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszSection, SQL_NTS); if (_section_u8 == NULL && lpszSection) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _entry_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszEntry, SQL_NTS); if (_entry_u8 == NULL && lpszEntry) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _default_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszDefault, SQL_NTS); if (_default_u8 == NULL && lpszDefault) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _filename_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszFilename, SQL_NTS); if (_filename_u8 == NULL && lpszFilename) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } if (cbRetBuffer > 0) { if ((_buffer_u8 = malloc (cbRetBuffer * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } } length = SQLGetPrivateProfileString (_section_u8, _entry_u8, _default_u8, _buffer_u8, cbRetBuffer * UTF8_MAX_CHAR_LEN, _filename_u8); if (length > 0) { if (lpszSection == NULL || lpszEntry == NULL || lpszSection[0] == '\0' || lpszEntry[0] == '\0') { length = 0; for (ptr = _buffer_u8, ptrW = lpszRetBuffer; *ptr; ptr += STRLEN (ptr) + 1, ptrW += WCSLEN (ptrW) + 1) { dm_StrCopyOut2_U8toW (ptr, ptrW, cbRetBuffer - length - 1, &len); length += len; } *ptrW = L'\0'; length++; } else { dm_StrCopyOut2_U8toW (_buffer_u8, lpszRetBuffer, cbRetBuffer, &length); } } else { dm_StrCopyOut2_U8toW (_buffer_u8, lpszRetBuffer, cbRetBuffer, &length); } done: MEM_FREE (_section_u8); MEM_FREE (_entry_u8); MEM_FREE (_default_u8); MEM_FREE (_buffer_u8); MEM_FREE (_filename_u8); return length; } BOOL INSTAPI SQLGetKeywordValue (LPCSTR lpszSection, LPCSTR lpszEntry, LPSTR lpszBuffer, int cbBuffer, int *pcbBufOut) { int ret = SQLGetPrivateProfileString (lpszSection, lpszEntry, "", lpszBuffer, cbBuffer, "odbc.ini"); if (pcbBufOut) *pcbBufOut = ret; return (ret != 0); } BOOL INSTAPI SQLGetKeywordValueW (LPCWSTR lpszSection, LPCWSTR lpszEntry, LPWSTR lpszBuffer, int cbBuffer, int *pcbBufOut) { int ret = SQLGetPrivateProfileStringW (lpszSection, lpszEntry, L"", lpszBuffer, cbBuffer, L"odbc.ini"); if (pcbBufOut) *pcbBufOut = ret; return (ret != 0); } libiodbc-3.52.9/iodbcinst/SQLInstallDriver.c0000644000076400007640000002224312323210535015575 00000000000000/* * SQLInstallDriver.c * * $Id$ * * Install a driver * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "misc.h" #include "inifile.h" #include "iodbc_error.h" #ifdef _MAC # include #endif #if !defined(WINDOWS) && !defined(WIN32) && !defined(OS2) && !defined(macintosh) # include # include # include # include # define UNIX_PWD #endif BOOL InstallDriverPath (LPSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut, LPSTR envname) { #ifdef _MAC OSErr result; long fldrDid; short fldrRef; #endif BOOL retcode = FALSE; char *ptr; lpszPath[cbPathMax - 1] = 0; #if !defined(UNIX_PWD) #ifdef _MAC result = FindFolder (kOnSystemDisk, kExtensionFolderType, kDontCreateFolder, &fldrRef, &fldrDid); if (result != noErr) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; } ptr = get_full_pathname (fldrDid, fldrRef); STRNCPY (lpszPath, ptr, cbPathMax - 1); free (ptr); if (STRLEN (ptr) >= cbPathMax) { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } else goto done; #else /* * On Windows, there is only one place to look */ if (GetWindowsDirectory ((LPSTR) buf, cbPathMax) >= cbPathMax) { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } else goto done; #endif #else /* * 1. Check $ODBCDRIVERS environment variable */ if ((ptr = getenv (envname))) if (access (ptr, R_OK | W_OK | X_OK) == 0) { STRNCPY (lpszPath, ptr, cbPathMax - 1); if (STRLEN (ptr) >= cbPathMax) { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } else goto done; } /* * 2. Check /usr/local/lib and /usr/lib */ #ifdef _BE STRNCPY (lpszPath, "/boot/beos/system/lib", cbPathMax - 1); if (STRLEN (lpszPath) != STRLEN ("/boot/beos/system/lib")) #else STRNCPY (lpszPath, "/usr/local/lib", cbPathMax - 1); if (STRLEN (lpszPath) != STRLEN ("/usr/local/lib")) #endif { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } if (access (lpszPath, R_OK | W_OK | X_OK) == 0) goto done; #ifdef _BE STRNCPY (lpszPath, "/boot/home/config/lib", cbPathMax - 1); if (STRLEN (lpszPath) != STRLEN ("/boot/home/config/lib")) #else STRNCPY (lpszPath, "/usr/lib", cbPathMax - 1); if (STRLEN (lpszPath) != STRLEN ("/usr/lib")) #endif { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } if (access (lpszPath, R_OK | W_OK | X_OK) == 0) goto done; /* * 3. Check either $HOME */ if (!(ptr = getenv ("HOME"))) { ptr = (char *) getpwuid (getuid ()); if (ptr) ptr = ((struct passwd *) ptr)->pw_dir; } if (ptr) { #ifdef _BE sprintf (lpszPath, "%s/config/lib", ptr); #else sprintf (lpszPath, "%s/lib", ptr); #endif if (access (lpszPath, R_OK | W_OK | X_OK) == 0) goto done; } if (!mkdir (lpszPath, 0755)) goto done; #endif SQLPostInstallerError (ODBC_ERROR_GENERAL_ERR, "Cannot retrieve a directory where to install the driver or translator."); goto quit; done: retcode = TRUE; quit: if (pcbPathOut) *pcbPathOut = STRLEN (lpszPath); return retcode; } BOOL INSTAPI SQLInstallDriver (LPCSTR lpszInfFile, LPCSTR lpszDriver, LPSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut) { PCONFIG pCfg = NULL, pOdbcCfg = NULL; BOOL retcode = FALSE; /* Check input parameters */ CLEAR_ERROR (); if (!lpszDriver || !STRLEN (lpszDriver)) { PUSH_ERROR (ODBC_ERROR_INVALID_PARAM_SEQUENCE); goto quit; } if (!lpszPath || !cbPathMax) { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } /* Write the out path */ if (!InstallDriverPath (lpszPath, cbPathMax, pcbPathOut, "ODBCDRIVERS")) goto quit; /* Else go through user/system odbcinst.ini */ switch (configMode) { case ODBC_BOTH_DSN: case ODBC_USER_DSN: wSystemDSN = USERDSN_ONLY; break; case ODBC_SYSTEM_DSN: wSystemDSN = SYSTEMDSN_ONLY; break; } if (_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto quit; } if (_iodbcdm_cfg_search_init (&pOdbcCfg, "odbc.ini", TRUE)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); pOdbcCfg = NULL; goto done; } if (lpszInfFile) { if (!install_from_ini (pCfg, pOdbcCfg, (char *) lpszInfFile, (char *) lpszDriver, TRUE)) { PUSH_ERROR (ODBC_ERROR_INVALID_INF); goto done; } } else if (!install_from_string (pCfg, pOdbcCfg, (char *) lpszDriver, TRUE)) { PUSH_ERROR (ODBC_ERROR_INVALID_KEYWORD_VALUE); goto done; } if (_iodbcdm_cfg_commit (pCfg) || _iodbcdm_cfg_commit (pOdbcCfg)) { PUSH_ERROR (ODBC_ERROR_GENERAL_ERR); goto done; } retcode = TRUE; done: _iodbcdm_cfg_done (pCfg); if (pOdbcCfg) _iodbcdm_cfg_done (pOdbcCfg); quit: wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; return retcode; } BOOL INSTAPI SQLInstallDriverW (LPCWSTR lpszInfFile, LPCWSTR lpszDriver, LPWSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut) { char *_inf_u8 = NULL; char *_driver_u8 = NULL; char *_path_u8 = NULL; BOOL retcode = FALSE; _inf_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszInfFile, SQL_NTS); if (_inf_u8 == NULL && lpszInfFile) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _driver_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszDriver, SQL_NTS); if (_driver_u8 == NULL && lpszDriver) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } if (cbPathMax > 0) { if ((_path_u8 = malloc (cbPathMax * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } } retcode = SQLInstallDriver (_inf_u8, _driver_u8, _path_u8, cbPathMax * UTF8_MAX_CHAR_LEN, pcbPathOut); if (retcode == TRUE) { dm_StrCopyOut2_U8toW (_path_u8, lpszPath, cbPathMax, pcbPathOut); } done: MEM_FREE (_inf_u8); MEM_FREE (_driver_u8); MEM_FREE (_path_u8); return retcode; } libiodbc-3.52.9/iodbcinst/iodbc_error.h0000644000076400007640000000746312323210535014740 00000000000000/* * iodbc_error.h * * $Id$ * * Misc support functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _IODBC_ERROR_H #define _IODBC_ERROR_H /* Definition of the error code array */ #define ERROR_NUM 8 extern DWORD ierror[ERROR_NUM]; extern LPSTR errormsg[ERROR_NUM]; extern SWORD numerrors; #define CLEAR_ERROR() \ numerrors = -1; #define PUSH_ERROR(error) \ if(numerrors < ERROR_NUM) \ { \ ierror[++numerrors] = (error); \ errormsg[numerrors] = NULL; \ } #define POP_ERROR(error) \ if(numerrors != -1) \ { \ errormsg[numerrors] = NULL; \ (error) = ierror[numerrors--]; \ } #ifdef IS_ERROR # undef IS_ERROR #endif #define IS_ERROR() \ (numerrors != -1) ? 1 : 0 #endif libiodbc-3.52.9/iodbcinst/SQLWriteFileDSN.c0000644000076400007640000001233712323210535015255 00000000000000/* * SQLWriteFileDSN.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "inifile.h" #include "iodbc_error.h" #include "misc.h" extern BOOL WritePrivateProfileString (LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszString, LPCSTR lpszFilename); BOOL INSTAPI SQLWriteFileDSN (LPCSTR lpszFileName, LPCSTR lpszAppName, LPCSTR lpszKeyName, LPSTR lpszString) { BOOL retcode = FALSE; char filename[1024]; /* Check input parameters */ CLEAR_ERROR (); /* Is a file is specified */ if (lpszFileName) { _iodbcdm_getdsnfile (lpszFileName, filename, sizeof (filename)); retcode = WritePrivateProfileString (lpszAppName, lpszKeyName, lpszString, filename); goto quit; } PUSH_ERROR (ODBC_ERROR_INVALID_PATH); goto quit; quit: return retcode; } BOOL INSTAPI SQLWriteFileDSNW (LPCWSTR lpszFileName, LPCWSTR lpszAppName, LPCWSTR lpszKeyName, LPWSTR lpszString) { char *_filename_u8 = NULL; char *_appname_u8 = NULL; char *_keyname_u8 = NULL; char *_string_u8 = NULL; BOOL retcode = FALSE; _filename_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszFileName, SQL_NTS); if (_filename_u8 == NULL && lpszFileName) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _appname_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszAppName, SQL_NTS); if (_appname_u8 == NULL && lpszAppName) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _keyname_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszKeyName, SQL_NTS); if (_keyname_u8 == NULL && lpszKeyName) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } _string_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszString, SQL_NTS); if (_string_u8 == NULL && lpszString) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } retcode = SQLWriteFileDSN (_filename_u8, _appname_u8, _keyname_u8, _string_u8); done: MEM_FREE (_filename_u8); MEM_FREE (_appname_u8); MEM_FREE (_keyname_u8); MEM_FREE (_string_u8); return retcode; } libiodbc-3.52.9/iodbcinst/Makefile.am0000644000076400007640000001122012323210535014314 00000000000000# # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # noinst_LTLIBRARIES = libiodbc_common.la lib_LTLIBRARIES = libiodbcinst.la AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/iodbc \ -I$(top_srcdir)/iodbcinst \ -I$(top_srcdir)/iodbcadm libiodbc_common_la_SOURCES = \ SQLGetConfigMode.c \ SQLGetPrivateProfileString.c \ SQLSetConfigMode.c \ SQLValidDSN.c \ SQLWritePrivateProfileString.c \ SQLReadFileDSN.c \ SQLWriteFileDSN.c \ dlf.c \ inifile.c \ iodbc_error.c \ misc.c \ unicode.c libiodbcinst_la_LDFLAGS = -version-info @lib_version@ \ -export-symbols $(srcdir)/iodbcinst.exp libiodbcinst_la_LIBADD = libiodbc_common.la $(LIBADD_DL) libiodbcinst_la_SOURCES = \ SQLConfigDataSource.c \ SQLConfigDriver.c \ SQLGetAvailableDrivers.c \ SQLGetInstalledDrivers.c \ SQLInstallDriver.c \ SQLRemoveDSNFromIni.c \ SQLRemoveDriver.c \ SQLWriteDSNToIni.c \ SQLInstallDriverEx.c \ SQLInstallODBC.c \ SQLInstallTranslator.c \ SQLCreateDataSource.c \ SQLManageDataSource.c \ SQLRemoveTranslator.c \ SQLRemoveDefaultDataSource.c \ SQLInstallDriverManager.c \ SQLRemoveDriverManager.c \ SQLInstallTranslatorEx.c \ SQLInstallerError.c \ SQLPostInstallerError.c \ SQLGetTranslator.c \ Info.c noinst_HEADERS = \ dlf.h \ inifile.h \ iodbc_error.h \ unicode.h \ misc.h if DARWIN libiodbcinst.la: $(libiodbcinst_la_OBJECTS) $(libiodbcinst_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libiodbcinst_la_LDFLAGS) $(libiodbcinst_la_OBJECTS) $(libiodbcinst_la_LIBADD) $(LIBS) -$(STRIP) -s $(top_srcdir)/mac/iodbcinst.exp -u .libs/*.dylib endif EXTRA_DIST = $(srcdir)/iodbcinst.exp libiodbc-3.52.9/iodbcinst/SQLInstallerError.c0000644000076400007640000001334612323210535015766 00000000000000/* * SQLInstallerError.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "iodbc_error.h" LPSTR errortable[] = { "", "General installer error", "Invalid buffer length", "Invalid window handle", "Invalid string parameter", "Invalid type of request", "Component not found", "Invalid driver or translator name", "Invalid keyword-value pairs", "Invalid DSN", "Invalid .INF file", "Request failed", "Invalid install path.", "Could not load the driver or translator setup library", "Invalid parameter sequence", "Invalid log file name.", "Operation canceled on user request", "Could not increment or decrement the component usage count", "Creation of the DSN failed", "Error during writing system information", "Deletion of the DSN failed", "Out of memory", "Output string truncated due to a buffer not large enough", "Driver- or translator-specific error", }; RETCODE INSTAPI SQLInstallerError (WORD iError, DWORD * pfErrorCode, LPSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD * pcbErrorMsg) { LPSTR message; RETCODE retcode = SQL_ERROR; /* Check if the index is valid to retrieve an error */ if ((iError - 1) > numerrors) { retcode = SQL_NO_DATA; goto quit; } if (!lpszErrorMsg || !cbErrorMsgMax) goto quit; lpszErrorMsg[cbErrorMsgMax - 1] = 0; /* Copy the message error */ message = (errormsg[iError - 1]) ? errormsg[iError - 1] : errortable[ierror[iError - 1]]; if (STRLEN (message) >= cbErrorMsgMax - 1) { STRNCPY (lpszErrorMsg, message, cbErrorMsgMax - 1); retcode = SQL_SUCCESS_WITH_INFO; goto quit; } else STRCPY (lpszErrorMsg, message); if (pfErrorCode) *pfErrorCode = ierror[iError - 1]; if (pcbErrorMsg) *pcbErrorMsg = STRLEN (lpszErrorMsg); retcode = SQL_SUCCESS; quit: return retcode; } RETCODE INSTAPI SQLInstallerErrorW (WORD iError, DWORD * pfErrorCode, LPWSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD * pcbErrorMsg) { char *_errormsg_u8 = NULL; RETCODE retcode = SQL_ERROR; if (cbErrorMsgMax > 0) { if ((_errormsg_u8 = malloc (cbErrorMsgMax * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } } retcode = SQLInstallerError (iError, pfErrorCode, _errormsg_u8, cbErrorMsgMax * UTF8_MAX_CHAR_LEN, pcbErrorMsg); if (retcode != SQL_ERROR) { dm_StrCopyOut2_U8toW (_errormsg_u8, lpszErrorMsg, cbErrorMsgMax, pcbErrorMsg); } done: MEM_FREE (_errormsg_u8); return retcode; } libiodbc-3.52.9/iodbcinst/iodbcinst.exp0000644000076400007640000000202612323204667014771 00000000000000SQLConfigDataSource SQLConfigDriver SQLCreateDataSource SQLGetConfigMode SQLGetAvailableDrivers SQLGetInstalledDrivers SQLGetPrivateProfileString SQLGetTranslator SQLInstallDriverEx SQLInstallDriver SQLInstallDriverManager SQLInstallerError SQLInstallODBC SQLInstallTranslator SQLInstallTranslatorEx SQLManageDataSources SQLPostInstallerError SQLReadFileDSN SQLRemoveDSNFromIni SQLRemoveDefaultDataSource SQLRemoveDriver SQLRemoveDriverManager SQLRemoveTranslator SQLSetConfigMode SQLValidDSN SQLWriteDSNToIni SQLWriteFileDSN SQLWritePrivateProfileString SQLInstallODBCW SQLCreateDataSourceW SQLGetTranslatorW SQLInstallDriverW SQLInstallDriverManagerW SQLGetInstalledDriversW SQLGetAvailableDriversW SQLConfigDataSourceW SQLWriteDSNToIniW SQLRemoveDSNFromIniW SQLValidDSNW SQLWritePrivateProfileStringW SQLGetPrivateProfileStringW SQLInstallTranslatorW SQLRemoveTranslatorW SQLRemoveDriverW SQLConfigDriverW SQLInstallerErrorW SQLPostInstallerErrorW SQLReadFileDSNW SQLWriteFileDSNW SQLInstallDriverExW SQLInstallTranslatorExW iodbcinst_version libiodbc-3.52.9/iodbcinst/SQLPostInstallerError.c0000644000076400007640000001032312323210535016624 00000000000000/* * SQLPostInstallerError.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "iodbc_error.h" RETCODE INSTAPI SQLPostInstallerError (DWORD fErrorCode, LPSTR szErrorMsg) { RETCODE retcode = SQL_ERROR; /* Check if the index is valid to retrieve an error */ if (fErrorCode < ODBC_ERROR_GENERAL_ERR || fErrorCode > ODBC_ERROR_DRIVER_SPECIFIC) goto quit; if (numerrors < ERROR_NUM) { ierror[++numerrors] = fErrorCode; errormsg[numerrors] = szErrorMsg;; } retcode = SQL_SUCCESS; quit: return retcode; } RETCODE INSTAPI SQLPostInstallerErrorW (DWORD fErrorCode, LPWSTR szErrorMsg) { char *_errormsg_u8 = NULL; RETCODE retcode = SQL_ERROR; _errormsg_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) szErrorMsg, SQL_NTS); if (_errormsg_u8 == NULL && szErrorMsg) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } retcode = SQLPostInstallerError (fErrorCode, _errormsg_u8); done: MEM_FREE (_errormsg_u8); return retcode; } libiodbc-3.52.9/iodbcinst/SQLGetConfigMode.c0000644000076400007640000000721512323210535015467 00000000000000/* * SQLGetConfigMode.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include "iodbc_error.h" #include "misc.h" BOOL INSTAPI SQLGetConfigMode (UWORD * pwConfigMode) { BOOL retcode = FALSE; /* Clear errors */ CLEAR_ERROR (); /* Check input parameter */ if (!pwConfigMode) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); } else { *pwConfigMode = configMode; retcode = TRUE; } return retcode; } libiodbc-3.52.9/iodbcinst/SQLInstallDriverManager.c0000644000076400007640000001060512323210535017067 00000000000000/* * SQLInstallDriverManager.c * * $Id$ * * These functions intentionally left blank * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "iodbc_error.h" extern BOOL InstallDriverPath (LPSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut, LPSTR envname); BOOL INSTAPI SQLInstallDriverManager (LPSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut) { BOOL retcode = FALSE; /* Check input parameters */ CLEAR_ERROR (); if (!lpszPath || !cbPathMax) { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } retcode = InstallDriverPath (lpszPath, cbPathMax, pcbPathOut, "ODBCMANAGER"); quit: return retcode; } BOOL INSTAPI SQLInstallDriverManagerW (LPWSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut) { char *_path_u8 = NULL; BOOL retcode = FALSE; if (cbPathMax > 0) { if ((_path_u8 = malloc (cbPathMax * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } } retcode = SQLInstallDriverManager (_path_u8, cbPathMax * UTF8_MAX_CHAR_LEN, pcbPathOut); if (retcode == TRUE) { dm_StrCopyOut2_U8toW (_path_u8, lpszPath, cbPathMax, pcbPathOut); } done: MEM_FREE (_path_u8); return retcode; } libiodbc-3.52.9/iodbcinst/SQLGetAvailableDrivers.c0000644000076400007640000001521512323210535016673 00000000000000/* * SQLGetAvailableDrivers.c * * $Id$ * * Get a list of all available drivers * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "misc.h" #include "inifile.h" #include "iodbc_error.h" BOOL GetAvailableDrivers (LPCSTR lpszInfFile, LPSTR lpszBuf, WORD cbBufMax, WORD * pcbBufOut, BOOL infFile) { int sect_len = 0; WORD curr = 0; BOOL retcode = FALSE; PCONFIG pCfg; char *szId; if (!lpszBuf || !cbBufMax) { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } /* Open the file to read from */ if (_iodbcdm_cfg_init (&pCfg, lpszInfFile, FALSE)) { PUSH_ERROR (ODBC_ERROR_COMPONENT_NOT_FOUND); goto quit; } /* Get the ODBC Drivers section */ #ifdef WIN32 if (_iodbcdm_cfg_find (pCfg, "ODBC 32 bit Drivers", NULL)) #else if (_iodbcdm_cfg_find (pCfg, "ODBC Drivers", NULL)) #endif { PUSH_ERROR (ODBC_ERROR_COMPONENT_NOT_FOUND); goto done; } while (curr < cbBufMax && 0 == _iodbcdm_cfg_nextentry (pCfg)) { if (_iodbcdm_cfg_section (pCfg)) break; if (_iodbcdm_cfg_define (pCfg) && pCfg->id) { szId = pCfg->id; while (infFile && *szId == '"') szId++; sect_len = STRLEN (szId); if (!sect_len) { PUSH_ERROR (ODBC_ERROR_INVALID_INF); goto done; } while (infFile && *(szId + sect_len - 1) == '"') sect_len -= 1; sect_len = sect_len > cbBufMax - curr ? cbBufMax - curr : sect_len; if (sect_len) memmove (lpszBuf + curr, szId, sect_len); else { PUSH_ERROR (ODBC_ERROR_INVALID_INF); goto done; } curr += sect_len; lpszBuf[curr++] = 0; } } if (curr < cbBufMax) lpszBuf[curr + 1] = 0; if (pcbBufOut) *pcbBufOut = curr; retcode = TRUE; done: _iodbcdm_cfg_done (pCfg); quit: return retcode; } BOOL INSTAPI SQLGetAvailableDrivers (LPCSTR lpszInfFile, LPSTR lpszBuf, WORD cbBufMax, WORD * pcbBufOut) { BOOL retcode = FALSE; WORD lenBufOut; /* Get from the user files */ CLEAR_ERROR (); switch (configMode) { case ODBC_BOTH_DSN: case ODBC_USER_DSN: wSystemDSN = USERDSN_ONLY; break; case ODBC_SYSTEM_DSN: wSystemDSN = SYSTEMDSN_ONLY; break; } retcode = GetAvailableDrivers (lpszInfFile, lpszBuf, cbBufMax, &lenBufOut, FALSE); if (pcbBufOut) *pcbBufOut = lenBufOut; wSystemDSN = USERDSN_ONLY; configMode = ODBC_BOTH_DSN; return retcode; } BOOL INSTAPI SQLGetAvailableDriversW (LPCWSTR lpszInfFile, LPWSTR lpszBuf, WORD cbBufMax, WORD FAR * pcbBufOut) { BOOL retcode = FALSE; char *_inf_u8 = NULL; char *_buffer_u8 = NULL; SQLCHAR *ptr; SQLWCHAR *ptrW; WORD len = 0, length; _inf_u8 = (char *) dm_SQL_WtoU8 ((SQLWCHAR *) lpszInfFile, SQL_NTS); if (_inf_u8 == NULL && lpszInfFile) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } if (cbBufMax > 0) { if ((_buffer_u8 = malloc (cbBufMax * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSH_ERROR (ODBC_ERROR_OUT_OF_MEM); goto done; } } retcode = SQLGetAvailableDrivers (_inf_u8, _buffer_u8, cbBufMax * UTF8_MAX_CHAR_LEN, pcbBufOut); if (retcode == TRUE) { length = 0; for (ptr = _buffer_u8, ptrW = lpszBuf; *ptr; ptr += STRLEN (ptr) + 1, ptrW += WCSLEN (ptrW) + 1) { dm_StrCopyOut2_U8toW (ptr, ptrW, cbBufMax - 1, &len); length += len; } *ptrW = L'\0'; if (pcbBufOut) *pcbBufOut = length + 1; } done: MEM_FREE (_inf_u8); MEM_FREE (_buffer_u8); return retcode; } libiodbc-3.52.9/samples/0000755000076400007640000000000012323210721012027 500000000000000libiodbc-3.52.9/samples/Makefile.in0000644000076400007640000005511712323210643014030 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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 = iodbctest$(EXEEXT) iodbctestw$(EXEEXT) subdir = samples DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_iodbctest_OBJECTS = iodbctest.$(OBJEXT) iodbctest_OBJECTS = $(am_iodbctest_OBJECTS) iodbctest_DEPENDENCIES = ../iodbc/libiodbc.la iodbctest_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(iodbctest_LDFLAGS) $(LDFLAGS) -o $@ am_iodbctestw_OBJECTS = iodbctestw-iodbctest.$(OBJEXT) iodbctestw_OBJECTS = $(am_iodbctestw_OBJECTS) iodbctestw_DEPENDENCIES = ../iodbc/libiodbc.la iodbctestw_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(iodbctestw_CFLAGS) \ $(CFLAGS) $(iodbctestw_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/admin/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 = $(iodbctest_SOURCES) $(iodbctestw_SOURCES) DIST_SOURCES = $(iodbctest_SOURCES) $(iodbctestw_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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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 -DNO_FRAMEWORKS # # Build odbctest program # iodbctest_SOURCES = iodbctest.c iodbctest_LDADD = ../iodbc/libiodbc.la iodbctest_LDFLAGS = -static iodbctestw_CFLAGS = -DUNICODE iodbctestw_SOURCES = iodbctest.c iodbctestw_LDADD = ../iodbc/libiodbc.la iodbctestw_LDFLAGS = -static EXTRA_DIST = $(srcdir)/Makefile.sample all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 samples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu samples/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(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 iodbctest$(EXEEXT): $(iodbctest_OBJECTS) $(iodbctest_DEPENDENCIES) @rm -f iodbctest$(EXEEXT) $(iodbctest_LINK) $(iodbctest_OBJECTS) $(iodbctest_LDADD) $(LIBS) iodbctestw$(EXEEXT): $(iodbctestw_OBJECTS) $(iodbctestw_DEPENDENCIES) @rm -f iodbctestw$(EXEEXT) $(iodbctestw_LINK) $(iodbctestw_OBJECTS) $(iodbctestw_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iodbctest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iodbctestw-iodbctest.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 $@ $< iodbctestw-iodbctest.o: iodbctest.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iodbctestw_CFLAGS) $(CFLAGS) -MT iodbctestw-iodbctest.o -MD -MP -MF $(DEPDIR)/iodbctestw-iodbctest.Tpo -c -o iodbctestw-iodbctest.o `test -f 'iodbctest.c' || echo '$(srcdir)/'`iodbctest.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/iodbctestw-iodbctest.Tpo $(DEPDIR)/iodbctestw-iodbctest.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iodbctest.c' object='iodbctestw-iodbctest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iodbctestw_CFLAGS) $(CFLAGS) -c -o iodbctestw-iodbctest.o `test -f 'iodbctest.c' || echo '$(srcdir)/'`iodbctest.c iodbctestw-iodbctest.obj: iodbctest.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iodbctestw_CFLAGS) $(CFLAGS) -MT iodbctestw-iodbctest.obj -MD -MP -MF $(DEPDIR)/iodbctestw-iodbctest.Tpo -c -o iodbctestw-iodbctest.obj `if test -f 'iodbctest.c'; then $(CYGPATH_W) 'iodbctest.c'; else $(CYGPATH_W) '$(srcdir)/iodbctest.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/iodbctestw-iodbctest.Tpo $(DEPDIR)/iodbctestw-iodbctest.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iodbctest.c' object='iodbctestw-iodbctest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iodbctestw_CFLAGS) $(CFLAGS) -c -o iodbctestw-iodbctest.obj `if test -f 'iodbctest.c'; then $(CYGPATH_W) 'iodbctest.c'; else $(CYGPATH_W) '$(srcdir)/iodbctest.c'; fi` 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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 @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook 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 @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: install-am install-exec-am install-strip uninstall-am .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-exec-hook \ 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 uninstall-hook install-exec-hook: $(mkinstalldirs) ${DESTDIR}${pkgdatadir}/samples cp $(srcdir)/iodbctest.c ${DESTDIR}${pkgdatadir}/samples/iodbctest.c cp $(srcdir)/Makefile.sample ${DESTDIR}${pkgdatadir}/samples/Makefile @DARWIN_TRUE@ -/usr/bin/lipo ${DESTDIR}${bindir}/iodbctest -remove ppc64 -output ${DESTDIR}${bindir}/iodbctest @DARWIN_TRUE@ -/usr/bin/lipo ${DESTDIR}${bindir}/iodbctestw -remove ppc64 -output ${DESTDIR}${bindir}/iodbctestw uninstall-hook: rm -f ${DESTDIR}${pkgdatadir}/samples/iodbctest.c rm -f ${DESTDIR}${pkgdatadir}/samples/Makefile rmdir ${DESTDIR}${pkgdatadir}/samples # 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: libiodbc-3.52.9/samples/iodbctest.c0000644000076400007640000006050612323210535014105 00000000000000/* * iodbctest.c * * $Id$ * * Sample ODBC program * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include /* * Prototypes */ int ODBC_Connect (char *connStr); int ODBC_Disconnect (void); int ODBC_Errors (char *where); int ODBC_Test (void); #define MAXCOLS 32 #ifdef UNICODE #define TEXT(x) (SQLWCHAR *) L##x #define TEXTC(x) (SQLWCHAR) L##x #define TXTLEN(x) wcslen((wchar_t *) x) #define TXTCMP(x1,x2) wcscmp((wchar_t *) x1, (wchar_t *) x2) # ifdef WIN32 #define OPL_A2W(a, w, cb) \ MultiByteToWideChar(CP_ACP, 0, a, -1, w, cb) # else #define OPL_A2W(XA, XW, SIZE) mbstowcs(XW, XA, SIZE) # endif /* WIN32 */ #else #define TEXT(x) (SQLCHAR *) x #define TEXTC(x) (SQLCHAR) x #define TXTLEN(x) strlen((char *) x) #define TXTCMP(x1,x2) strcmp((char *) x1, (char *) x2) #endif /* UNICODE */ #define NUMTCHAR(X) (sizeof (X) / sizeof (SQLTCHAR)) /* * Global variables */ HENV henv = SQL_NULL_HANDLE; HDBC hdbc = SQL_NULL_HANDLE; HSTMT hstmt = SQL_NULL_HANDLE; int connected = 0; /* * Unicode conversion routines */ #ifdef UNICODE static SQLWCHAR * strcpy_A2W (SQLWCHAR * destStr, char *sourStr) { size_t length; if (!sourStr || !destStr) return destStr; length = strlen (sourStr); if (length > 0) OPL_A2W (sourStr, destStr, length); destStr[length] = L'\0'; return destStr; } #endif /* * Connect to the datasource * * The connect string can have the following parts and they refer to * the values in the odbc.ini file * * DSN= [mandatory] * HOST= [optional - value of Host] * SVT= [optional - value of ServerType] * DATABASE= [optional - value of Database] * OPTIONS= [optional - value of Options] * UID= [optional - value of LastUser] * PWD= [optional] * READONLY= [optional - value of ReadOnly] * FBS= [optional - value of FetchBufferSize] * * Examples: * * HOST=star;SVT=SQLServer 2000;UID=demo;PWD=demo;DATABASE=pubs * * DSN=pubs_sqlserver;PWD=demo */ SQLTCHAR outdsn[4096]; /* Store completed DSN for later use */ int ODBC_Connect (char *connStr) { short buflen; SQLCHAR dataSource[1024]; SQLTCHAR dsn[33]; SQLTCHAR desc[255]; SQLTCHAR driverInfo[255]; SQLSMALLINT len1, len2; int status; #ifdef UNICODE SQLWCHAR wdataSource[1024]; #endif #if (ODBCVER < 0x0300) if (SQLAllocEnv (&henv) != SQL_SUCCESS) return -1; if (SQLAllocConnect (henv, &hdbc) != SQL_SUCCESS) return -1; #else if (SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv) != SQL_SUCCESS) return -1; SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER); if (SQLAllocHandle (SQL_HANDLE_DBC, henv, &hdbc) != SQL_SUCCESS) return -1; #endif /* * Set the application name */ SQLSetConnectOption (hdbc, SQL_APPLICATION_NAME, (SQLULEN) TEXT ("odbctest")); /* * Show the version number of the driver manager */ status = SQLGetInfo (hdbc, SQL_DM_VER, driverInfo, sizeof (driverInfo), &len1); if (status == SQL_SUCCESS) { #ifdef UNICODE printf ("Driver Manager: %S\n", driverInfo); #else printf ("Driver Manager: %s\n", driverInfo); #endif } /* * Either use the connect string provided on the command line or * ask for one. If an empty string or a ? is given, show a nice * list of options */ if (connStr && *connStr) strcpy ((char *) dataSource, connStr); else while (1) { /* * Ask for the connect string */ printf ("\nEnter ODBC connect string (? shows list): "); if (fgets ((char *) dataSource, sizeof (dataSource), stdin) == NULL) return 1; /* * Remove trailing '\n' */ dataSource[strlen ((char *) dataSource) - 1] = '\0'; /* * Check if the user wants to quit */ if (!strcmp ((char *)dataSource, "quit") || !strcmp ((char *)dataSource, "exit")) return -1; /* * If the user entered something other than a ? * break out of the while loop */ if (*dataSource && *dataSource != '?') break; /* * Print headers */ fprintf (stderr, "\n%-32s | %-40s\n", "DSN", "Driver"); fprintf (stderr, "------------------------------------------------------------------------------\n"); /* * Goto the first record */ if (SQLDataSources (henv, SQL_FETCH_FIRST, dsn, NUMTCHAR (dsn), &len1, desc, NUMTCHAR (desc), &len2) != SQL_SUCCESS) continue; /* * Show all records */ do { #ifdef UNICODE fprintf (stderr, "%-32S | %-40S\n", dsn, desc); #else fprintf (stderr, "%-32s | %-40s\n", dsn, desc); #endif } while (SQLDataSources (henv, SQL_FETCH_NEXT, dsn, NUMTCHAR (dsn), &len1, desc, NUMTCHAR (desc), &len2) == SQL_SUCCESS); } #ifdef UNICODE strcpy_A2W (wdataSource, (char *) dataSource); status = SQLDriverConnectW (hdbc, 0, (SQLWCHAR *) wdataSource, SQL_NTS, (SQLWCHAR *) outdsn, NUMTCHAR (outdsn), &buflen, SQL_DRIVER_COMPLETE); if (status != SQL_SUCCESS) ODBC_Errors ("SQLDriverConnectW"); #else status = SQLDriverConnect (hdbc, 0, (SQLCHAR *) dataSource, SQL_NTS, (SQLCHAR *) outdsn, NUMTCHAR (outdsn), &buflen, SQL_DRIVER_COMPLETE); if (status != SQL_SUCCESS) ODBC_Errors ("SQLDriverConnect"); #endif if (status != SQL_SUCCESS && status != SQL_SUCCESS_WITH_INFO) return -1; connected = 1; /* * Print out the version number and the name of the connected driver */ status = SQLGetInfo (hdbc, SQL_DRIVER_VER, driverInfo, NUMTCHAR (driverInfo), &len1); if (status == SQL_SUCCESS) { #ifdef UNICODE printf ("Driver: %S", driverInfo); #else printf ("Driver: %s", driverInfo); #endif status = SQLGetInfo (hdbc, SQL_DRIVER_NAME, driverInfo, NUMTCHAR (driverInfo), &len1); if (status == SQL_SUCCESS) { #ifdef UNICODE printf (" (%S)", driverInfo); #else printf (" (%s)", driverInfo); #endif } printf ("\n"); } /* * Show the list of supported functions in trace log */ #if (ODBCVER < 0x0300) { SQLUSMALLINT exists[100]; SQLGetFunctions (hdbc, SQL_API_ALL_FUNCTIONS, exists); } #else { SQLUSMALLINT exists[SQL_API_ODBC3_ALL_FUNCTIONS_SIZE]; SQLGetFunctions (hdbc, SQL_API_ODBC3_ALL_FUNCTIONS, exists); } #endif /* * Allocate statement handle */ #if (ODBCVER < 0x0300) if (SQLAllocStmt (hdbc, &hstmt) != SQL_SUCCESS) return -1; #else if (SQLAllocHandle (SQL_HANDLE_STMT, hdbc, &hstmt) != SQL_SUCCESS) return -1; #endif return 0; } /* * Disconnect from the database */ int ODBC_Disconnect (void) { #if (ODBCVER < 0x0300) if (hstmt) SQLFreeStmt (hstmt, SQL_DROP); if (connected) SQLDisconnect (hdbc); if (hdbc) SQLFreeConnect (hdbc); if (henv) SQLFreeEnv (henv); #else if (hstmt) { SQLCloseCursor (hstmt); SQLFreeHandle (SQL_HANDLE_STMT, hstmt); } if (connected) SQLDisconnect (hdbc); if (hdbc) SQLFreeHandle (SQL_HANDLE_DBC, hdbc); if (henv) SQLFreeHandle (SQL_HANDLE_ENV, henv); #endif return 0; } /* * Perform a disconnect/reconnect using the DSN stored from the original * SQLDriverConnect */ int ODBC_Reconnect (void) { SQLRETURN status; SQLTCHAR buf[4096]; SQLSMALLINT len; /* * Free old statement handle */ #if (ODBCVER < 0x0300) SQLFreeStmt (hstmt, SQL_DROP); #else SQLFreeHandle (SQL_HANDLE_STMT, hstmt); #endif /* * Disconnect */ SQLDisconnect (hdbc); /* * Reconnect */ status = SQLDriverConnect (hdbc, 0, outdsn, SQL_NTS, buf, sizeof (buf), &len, SQL_DRIVER_NOPROMPT); /* * Allocate new statement handle */ if (SQL_SUCCEEDED (status)) { #if (ODBCVER < 0x0300) status = SQLAllocStmt (hdbc, &hstmt); #else status = SQLAllocHandle (SQL_HANDLE_STMT, hdbc, &hstmt); #endif } /* * Show why we where unsuccessful and return an error */ if (!SQL_SUCCEEDED (status)) { ODBC_Errors ("DriverConnect (reconnect)"); return -1; } /* * Success */ return 0; } /* * Show all the error information that is available */ int ODBC_Errors (char *where) { SQLTCHAR buf[512]; SQLTCHAR sqlstate[15]; SQLINTEGER native_error = 0; int force_exit = 0; SQLRETURN sts; #if (ODBCVER < 0x0300) /* * Get statement errors */ while (hstmt) { sts = SQLError (henv, hdbc, hstmt, sqlstate, &native_error, buf, NUMTCHAR (buf), NULL); if (!SQL_SUCCEEDED (sts)) break; #ifdef UNICODE fprintf (stderr, "%s = %S (%ld) SQLSTATE=%S\n", where, buf, (long) native_error, sqlstate); #else fprintf (stderr, "%s = %s (%ld) SQLSTATE=%s\n", where, buf, (long) native_error, sqlstate); #endif /* * If the driver could not be loaded, there is no point in * continuing, after reading all the error messages */ if (!TXTCMP (sqlstate, TEXT ("IM003"))) force_exit = 1; } /* * Get connection errors */ while (hdbc) { sts = SQLError (henv, hdbc, SQL_NULL_HSTMT, sqlstate, &native_error, buf, NUMTCHAR (buf), NULL); if (!SQL_SUCCEEDED (sts)) break; #ifdef UNICODE fprintf (stderr, "%s = %S (%ld) SQLSTATE=%S\n", where, buf, (long) native_error, sqlstate); #else fprintf (stderr, "%s = %s (%ld) SQLSTATE=%s\n", where, buf, (long) native_error, sqlstate); #endif /* * If the driver could not be loaded, there is no point in * continuing, after reading all the error messages */ if (!TXTCMP (sqlstate, TEXT ("IM003"))) force_exit = 1; } /* * Get environment errors */ while (henv) { sts SQLError (henv, SQL_NULL_HDBC, SQL_NULL_HSTMT, sqlstate, &native_error, buf, NUMTCHAR (buf), NULL); if (!SQL_SUCCEEDED (sts)) break; #ifdef UNICODE fprintf (stderr, "%s = %S (%ld) SQLSTATE=%S\n", where, buf, (long) native_error, sqlstate); #else fprintf (stderr, "%s = %s (%ld) SQLSTATE=%s\n", where, buf, (long) native_error, sqlstate); #endif /* * If the driver could not be loaded, there is no point in * continuing, after reading all the error messages */ if (!TXTCMP (sqlstate, TEXT ("IM003"))) force_exit = 1; } #else /* ODBCVER */ int i; /* * Get statement errors */ i = 0; while (hstmt && i < 5) { sts = SQLGetDiagRec (SQL_HANDLE_STMT, hstmt, ++i, sqlstate, &native_error, buf, NUMTCHAR (buf), NULL); if (!SQL_SUCCEEDED (sts)) break; #ifdef UNICODE fprintf (stderr, "%d: %s = %S (%ld) SQLSTATE=%S\n", i, where, buf, (long) native_error, sqlstate); #else fprintf (stderr, "%d: %s = %s (%ld) SQLSTATE=%s\n", i, where, buf, (long) native_error, sqlstate); #endif /* * If the driver could not be loaded, there is no point in * continuing, after reading all the error messages */ if (!TXTCMP (sqlstate, TEXT ("IM003"))) force_exit = 1; } /* * Get connection errors */ i = 0; while (hdbc && i < 5) { sts = SQLGetDiagRec (SQL_HANDLE_DBC, hdbc, ++i, sqlstate, &native_error, buf, NUMTCHAR (buf), NULL); if (!SQL_SUCCEEDED (sts)) break; #ifdef UNICODE fprintf (stderr, "%d: %s = %S (%ld) SQLSTATE=%S\n", i, where, buf, (long) native_error, sqlstate); #else fprintf (stderr, "%d: %s = %s (%ld) SQLSTATE=%s\n", i, where, buf, (long) native_error, sqlstate); #endif /* * If the driver could not be loaded, there is no point in * continuing, after reading all the error messages */ if (!TXTCMP (sqlstate, TEXT ("IM003"))) force_exit = 1; } /* * Get environment errors */ i = 0; while (henv && i < 5) { sts = SQLGetDiagRec (SQL_HANDLE_ENV, henv, ++i, sqlstate, &native_error, buf, NUMTCHAR (buf), NULL); if (!SQL_SUCCEEDED (sts)) break; #ifdef UNICODE fprintf (stderr, "%d: %s = %S (%ld) SQLSTATE=%S\n", i, where, buf, (long) native_error, sqlstate); #else fprintf (stderr, "%d: %s = %s (%ld) SQLSTATE=%s\n", i, where, buf, (long) native_error, sqlstate); #endif /* * If the driver could not be loaded, there is no point in * continuing, after reading all the error messages */ if (!TXTCMP (sqlstate, TEXT ("IM003"))) force_exit = 1; } #endif /* ODBCVER */ /* * Force an exit status */ if (force_exit) exit (-1); return -1; } /* * Test program to run on the connected database */ int ODBC_Test () { SQLTCHAR request[4096]; SQLTCHAR fetchBuffer[1024]; char buf[4096]; size_t displayWidths[MAXCOLS]; size_t displayWidth; short numCols; short colNum; SQLTCHAR colName[50]; SQLSMALLINT colType; SQLULEN colPrecision; SQLLEN colIndicator; SQLSMALLINT colScale; SQLSMALLINT colNullable; unsigned long totalRows; unsigned long totalSets; int i; SQLRETURN sts; while (1) { /* * Ask the user for a dynamic SQL statement */ printf ("\nSQL>"); if (fgets (buf, sizeof (buf), stdin) == NULL) break; #ifndef UNICODE strcpy ((char *) request, (char *) buf); #else strcpy_A2W (request, buf); #endif request[TXTLEN (request) - 1] = TEXTC ('\0'); if (request[0] == TEXTC ('\0')) continue; /* * If the user just types tables, give him a list */ if (!TXTCMP (request, TEXT ("tables"))) { if (SQLTables (hstmt, NULL, 0, NULL, 0, NULL, 0, NULL, 0) != SQL_SUCCESS) { ODBC_Errors ("SQLTables(tables)"); continue; } } /* * If the user just types qualifiers, give him a list */ else if (!TXTCMP (request, TEXT ("qualifiers"))) { if (SQLTables (hstmt, TEXT ("%"), SQL_NTS, TEXT (""), 0, TEXT (""), 0, TEXT (""), 0) != SQL_SUCCESS) { ODBC_Errors ("SQLTables(qualifiers)"); continue; } } /* * If the user just types owners, give him a list */ else if (!TXTCMP (request, TEXT ("owners"))) { if (SQLTables (hstmt, TEXT (""), 0, TEXT ("%"), SQL_NTS, TEXT (""), 0, TEXT (""), 0) != SQL_SUCCESS) { ODBC_Errors ("SQLTables(owners)"); continue; } } /* * If the user just types "types", give him a list */ else if (!TXTCMP (request, TEXT ("types"))) { if (SQLTables (hstmt, TEXT (""), 0, TEXT (""), 0, TEXT (""), 0, TEXT ("%"), SQL_NTS) != SQL_SUCCESS) { ODBC_Errors ("SQLTables(types)"); continue; } } /* * If the user just types "datatypes", give him a list */ else if (!TXTCMP (request, TEXT ("datatypes"))) { if (SQLGetTypeInfo (hstmt, 0) != SQL_SUCCESS) { ODBC_Errors ("SQLGetTypeInfo"); continue; } } else if (!TXTCMP (request, TEXT ("reconnect"))) { if (ODBC_Reconnect()) return -1; continue; } #if defined (unix) else if (!TXTCMP (request, TEXT ("environment"))) { extern char **environ; int i; for (i = 0; environ[i]; i++) fprintf (stderr, "%03d: [%s]\n", i, environ[i]); continue; } #endif else if (!TXTCMP (request, TEXT ("quit")) || !TXTCMP (request, TEXT ("exit"))) break; /* If you want to quit, just say so */ else { /* * Prepare & Execute the statement */ if (SQLPrepare (hstmt, (SQLTCHAR *) request, SQL_NTS) != SQL_SUCCESS) { ODBC_Errors ("SQLPrepare"); continue; } if ((sts = SQLExecute (hstmt)) != SQL_SUCCESS) { ODBC_Errors ("SQLExec"); if (sts != SQL_SUCCESS_WITH_INFO) continue; } } /* * Loop through all the result sets */ totalSets = 1; do { /* * Get the number of result columns for this cursor. * If it is 0, then the statement was probably a select */ if (SQLNumResultCols (hstmt, &numCols) != SQL_SUCCESS) { ODBC_Errors ("SQLNumResultCols"); goto endCursor; } if (numCols == 0) { SQLLEN nrows = 0; SQLRowCount (hstmt, &nrows); printf ("Statement executed. %ld rows affected.\n", nrows > 0 ? (long) nrows : 0L); goto endCursor; } if (numCols > MAXCOLS) { numCols = MAXCOLS; fprintf (stderr, "NOTE: Resultset truncated to %d columns.\n", MAXCOLS); } /* * Get the names for the columns */ putchar ('\n'); for (colNum = 1; colNum <= numCols; colNum++) { /* * Get the name and other type information */ if (SQLDescribeCol (hstmt, colNum, (SQLTCHAR *) colName, NUMTCHAR (colName), NULL, &colType, &colPrecision, &colScale, &colNullable) != SQL_SUCCESS) { ODBC_Errors ("SQLDescribeCol"); goto endCursor; } /* * Calculate the display width for the column */ switch (colType) { case SQL_VARCHAR: case SQL_CHAR: case SQL_WVARCHAR: case SQL_WCHAR: case SQL_GUID: displayWidth = colPrecision; break; case SQL_BINARY: displayWidth = colPrecision * 2; break; case SQL_LONGVARCHAR: case SQL_WLONGVARCHAR: case SQL_LONGVARBINARY: displayWidth = 30; /* show only first 30 */ break; case SQL_BIT: displayWidth = 1; break; case SQL_TINYINT: case SQL_SMALLINT: case SQL_INTEGER: case SQL_BIGINT: displayWidth = colPrecision + 1; /* sign */ break; case SQL_DOUBLE: case SQL_DECIMAL: case SQL_NUMERIC: case SQL_FLOAT: case SQL_REAL: displayWidth = colPrecision + 2; /* sign, comma */ break; #ifdef SQL_TYPE_DATE case SQL_TYPE_DATE: #endif case SQL_DATE: displayWidth = 10; break; #ifdef SQL_TYPE_TIME case SQL_TYPE_TIME: #endif case SQL_TIME: displayWidth = 8; break; #ifdef SQL_TYPE_TIMESTAMP case SQL_TYPE_TIMESTAMP: #endif case SQL_TIMESTAMP: displayWidth = 19; if (colScale > 0) displayWidth = displayWidth + colScale + 1; break; default: displayWidths[colNum - 1] = 0; /* skip other data types */ continue; } if (displayWidth < TXTLEN (colName)) displayWidth = TXTLEN (colName); if (displayWidth > NUMTCHAR (fetchBuffer) - 1) displayWidth = NUMTCHAR (fetchBuffer) - 1; displayWidths[colNum - 1] = displayWidth; /* * Print header field */ #ifdef UNICODE printf ("%-*.*S", displayWidth, displayWidth, colName); #else printf ("%-*.*s", displayWidth, displayWidth, colName); #endif if (colNum < numCols) putchar ('|'); } putchar ('\n'); /* * Print second line */ for (colNum = 1; colNum <= numCols; colNum++) { for (i = 0; i < displayWidths[colNum - 1]; i++) putchar ('-'); if (colNum < numCols) putchar ('+'); } putchar ('\n'); /* * Print all the fields */ totalRows = 0; while (1) { #if (ODBCVER < 0x0300) int sts = SQLFetch (hstmt); #else int sts = SQLFetchScroll (hstmt, SQL_FETCH_NEXT, 1); #endif if (sts == SQL_NO_DATA_FOUND) break; if (sts != SQL_SUCCESS) { ODBC_Errors ("Fetch"); break; } for (colNum = 1; colNum <= numCols; colNum++) { /* * Fetch this column as character */ #ifdef UNICODE sts = SQLGetData (hstmt, colNum, SQL_C_WCHAR, fetchBuffer, NUMTCHAR (fetchBuffer), &colIndicator); #else sts = SQLGetData (hstmt, colNum, SQL_C_CHAR, fetchBuffer, NUMTCHAR (fetchBuffer), &colIndicator); #endif if (sts != SQL_SUCCESS_WITH_INFO && sts != SQL_SUCCESS) { ODBC_Errors ("SQLGetData"); goto endCursor; } /* * Show NULL fields as **** */ if (colIndicator == SQL_NULL_DATA) { for (i = 0; i < displayWidths[colNum - 1]; i++) fetchBuffer[i] = TEXTC ('*'); fetchBuffer[i] = TEXTC ('\0'); } #ifdef UNICODE printf ("%-*.*S", displayWidths[colNum - 1], displayWidths[colNum - 1], fetchBuffer); #else printf ("%-*.*s", displayWidths[colNum - 1], displayWidths[colNum - 1], fetchBuffer); #endif if (colNum < numCols) putchar ('|'); } putchar ('\n'); totalRows++; } printf ("\n result set %lu returned %lu rows.\n\n", totalSets, totalRows); totalSets++; } while ((sts = SQLMoreResults (hstmt)) == SQL_SUCCESS); if (sts == SQL_ERROR) ODBC_Errors ("SQLMoreResults"); endCursor: #if (ODBCVER < 0x0300) SQLFreeStmt (hstmt, SQL_CLOSE); #else SQLCloseCursor (hstmt); #endif } return 0; } int main (int argc, char **argv) { /* * Set locale based on environment variables */ setlocale (LC_ALL, ""); /* * Show welcome message */ #ifdef UNICODE printf ("iODBC Unicode Demonstration program\n"); #else printf ("iODBC Demonstration program\n"); #endif printf ("This program shows an interactive SQL processor\n"); /* * Show a usage string when the user asks for this */ if (argc > 2 || (argc == 2 && argv[1][0] == '-')) { fprintf (stderr, "\nUsage:\n iodbctest [\"DSN=xxxx;UID=xxxx;PWD=xxxx\"]\n"); exit (0); } /* * If we can connect to this datasource, run the test program */ if (ODBC_Connect (argv[1]) != 0) { ODBC_Errors ("ODBC_Connect"); } else if (ODBC_Test () != 0) { ODBC_Errors ("ODBC_Test"); } /* * End the connection */ ODBC_Disconnect (); printf ("\nHave a nice day."); return 0; } libiodbc-3.52.9/samples/Makefile.am0000644000076400007640000001007312323210535014007 00000000000000# # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # bin_PROGRAMS = iodbctest iodbctestw AM_CPPFLAGS = -I$(top_srcdir)/include -DNO_FRAMEWORKS # # Build odbctest program # iodbctest_SOURCES = iodbctest.c iodbctest_LDADD = ../iodbc/libiodbc.la iodbctest_LDFLAGS = -static iodbctestw_CFLAGS = -DUNICODE iodbctestw_SOURCES = iodbctest.c iodbctestw_LDADD = ../iodbc/libiodbc.la iodbctestw_LDFLAGS = -static EXTRA_DIST = $(srcdir)/Makefile.sample install-exec-hook: $(mkinstalldirs) ${DESTDIR}${pkgdatadir}/samples cp $(srcdir)/iodbctest.c ${DESTDIR}${pkgdatadir}/samples/iodbctest.c cp $(srcdir)/Makefile.sample ${DESTDIR}${pkgdatadir}/samples/Makefile if DARWIN -/usr/bin/lipo ${DESTDIR}${bindir}/iodbctest -remove ppc64 -output ${DESTDIR}${bindir}/iodbctest -/usr/bin/lipo ${DESTDIR}${bindir}/iodbctestw -remove ppc64 -output ${DESTDIR}${bindir}/iodbctestw endif uninstall-hook: rm -f ${DESTDIR}${pkgdatadir}/samples/iodbctest.c rm -f ${DESTDIR}${pkgdatadir}/samples/Makefile rmdir ${DESTDIR}${pkgdatadir}/samples libiodbc-3.52.9/samples/Makefile.sample0000644000076400007640000000654712323210535014706 00000000000000# # Makefile.sample # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # all: iodbctest iodbctestw iodbctest: iodbctest.c cc `iodbc-config --cflags` -o iodbctest iodbctest.c `iodbc-config --static-libs` iodbctestw: iodbctest.c cc `iodbc-config --cflags` -DUNICODE -o iodbctestw iodbctest.c `iodbc-config --static-libs` libiodbc-3.52.9/Makefile.in0000644000076400007640000007626512323210643012373 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1995 by Ke Jin # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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 = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \ ChangeLog INSTALL NEWS ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = 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 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 dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } 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" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).zip GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print 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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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@ AUTOMAKE_OPTIONS = gnu dist-zip 1.9.6 SUBDIRS = admin bin etc man include iodbcinst iodbc iodbcadm drvproxy samples ACLOCAL_AMFLAGS = -I admin EXTRA_DIST = \ $(srcdir)/IAFA-PACKAGE \ $(srcdir)/LICENSE \ $(srcdir)/LICENSE.LGPL \ $(srcdir)/LICENSE.BSD \ $(srcdir)/README.CVS \ $(srcdir)/README.GIT \ $(srcdir)/README.MACOSX \ $(srcdir)/bootstrap.sh \ $(srcdir)/PORT.OpenLink \ $(srcdir)/acinclude.m4 \ $(srcdir)/mac/*.exp \ $(srcdir)/mac/*.sh \ $(srcdir)/mac/iodbc-config.macosx \ $(srcdir)/mac/Makefile \ $(srcdir)/mac/myodbc.configure.diff \ $(srcdir)/mac/README.MYODBC \ $(srcdir)/mac/iODBC/*.plist \ $(srcdir)/mac/iODBC/English.lproj/*.strings \ $(srcdir)/mac/iODBC/iODBC.pbproj/project.pbxproj \ $(srcdir)/mac/iODBC/iODBC.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCadm/*.plist \ $(srcdir)/mac/iODBCadm/*.strings \ $(srcdir)/mac/iODBCadm/English.lproj/confirmation.xib \ $(srcdir)/mac/iODBCadm/English.lproj/connectionpool.xib \ $(srcdir)/mac/iODBCadm/English.lproj/driverremove.xib \ $(srcdir)/mac/iODBCadm/English.lproj/driversetup.xib \ $(srcdir)/mac/iODBCadm/English.lproj/drvchoose.tiff \ $(srcdir)/mac/iODBCadm/English.lproj/dsnchooser.xib \ $(srcdir)/mac/iODBCadm/English.lproj/gensetup.xib \ $(srcdir)/mac/iODBCadm/English.lproj/keyval.xib \ $(srcdir)/mac/iODBCadm/English.lproj/odbcadmin.xib \ $(srcdir)/mac/iODBCadm/English.lproj/odbcdriver.xib \ $(srcdir)/mac/iODBCadm/English.lproj/odbcdriverf.xib \ $(srcdir)/mac/iODBCadm/iODBCadm.pbproj/project.pbxproj \ $(srcdir)/mac/iODBCadm/iODBCadm.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCadministrator/*.plist \ $(srcdir)/mac/iODBCadministrator/English.lproj/*.strings \ $(srcdir)/mac/iODBCadministrator/English.lproj/about.xib \ $(srcdir)/mac/iODBCadministrator/English.lproj/iODBCAdministrator.icns \ $(srcdir)/mac/iODBCadministrator/English.lproj/main.xib \ $(srcdir)/mac/iODBCadministrator/English.lproj/odbcman.tiff \ $(srcdir)/mac/iODBCadministrator/iODBCadministrator.pbproj/project.pbxproj \ $(srcdir)/mac/iODBCadministrator/iODBCadministrator.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCcfmbridge/*.exp \ $(srcdir)/mac/iODBCcfmbridge/Info.c \ $(srcdir)/mac/iODBCcfmbridge/Makefile \ $(srcdir)/mac/iODBCcfmbridge/iODBC_CFM_Bridge \ $(srcdir)/mac/iODBCcfmbridge/iODBC_CFM_Bridge.res \ $(srcdir)/mac/iODBCcfmbridge/iodbccfm.c \ $(srcdir)/mac/iODBCcfmbridge/iodbccfm.h \ $(srcdir)/mac/iODBCcfmbridge/iodbccfm.r \ $(srcdir)/mac/iODBCdemo/*.plist \ $(srcdir)/mac/iODBCdemo/English.lproj/*.strings \ $(srcdir)/mac/iODBCdemo/English.lproj/Credits.rtf \ $(srcdir)/mac/iODBCdemo/English.lproj/ExecSQL.xib \ $(srcdir)/mac/iODBCdemo/English.lproj/MainMenu.xib \ $(srcdir)/mac/iODBCdemo/English.lproj/iODBCdemo.icns \ $(srcdir)/mac/iODBCdemo/ExecController.h \ $(srcdir)/mac/iODBCdemo/ExecController.m \ $(srcdir)/mac/iODBCdemo/NSResWindow.h \ $(srcdir)/mac/iODBCdemo/NSResWindow.m \ $(srcdir)/mac/iODBCdemo/TestController.h \ $(srcdir)/mac/iODBCdemo/TestController.m \ $(srcdir)/mac/iODBCdemo/iodbcdemo.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCdemo/iodbcdemo_Prefix.pch \ $(srcdir)/mac/iODBCdemo/main.m \ $(srcdir)/mac/iODBCdrvproxy/*.plist \ $(srcdir)/mac/iODBCdrvproxy/English.lproj/*.strings \ $(srcdir)/mac/iODBCdrvproxy/English.lproj/confirmation.xib \ $(srcdir)/mac/iODBCdrvproxy/English.lproj/gensetup.xib \ $(srcdir)/mac/iODBCdrvproxy/English.lproj/login.xib \ $(srcdir)/mac/iODBCdrvproxy/iODBCdrvproxy.pbproj/project.pbxproj \ $(srcdir)/mac/iODBCdrvproxy/iODBCdrvproxy.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCinst/*.plist \ $(srcdir)/mac/iODBCinst/English.lproj/*.strings \ $(srcdir)/mac/iODBCinst/iODBCinst.pbproj/project.pbxproj \ $(srcdir)/mac/iODBCinst/iODBCinst.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCtest/iODBCtest.pbproj/project.pbxproj \ $(srcdir)/mac/iODBCtest/iODBCtest.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCtestw/iODBCtestw.pbproj/project.pbxproj \ $(srcdir)/mac/iODBCtestw/iODBCtestw.xcodeproj/project.pbxproj \ $(srcdir)/debian/changelog \ $(srcdir)/debian/compat \ $(srcdir)/debian/control \ $(srcdir)/debian/copyright \ $(srcdir)/debian/iodbc.files \ $(srcdir)/debian/iodbc.install \ $(srcdir)/debian/iodbc.lintian-overrides \ $(srcdir)/debian/iodbc.undocumented \ $(srcdir)/debian/libiodbc2-dev.examples \ $(srcdir)/debian/libiodbc2-dev.files \ $(srcdir)/debian/libiodbc2-dev.install \ $(srcdir)/debian/libiodbc2.docs \ $(srcdir)/debian/libiodbc2.examples \ $(srcdir)/debian/libiodbc2.files \ $(srcdir)/debian/libiodbc2.install \ $(srcdir)/debian/libiodbc2.lintian-overrides \ $(srcdir)/debian/libiodbc2.undocumented \ $(srcdir)/debian/README.Debian \ $(srcdir)/debian/rules \ $(srcdir)/debian/watch # ---------------------------------------------------------------------- # # Maintainers only # # ---------------------------------------------------------------------- MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure DISTCLEANFILES = config.nice # # Create Linux RPM's # @MAINTAINER_MODE_TRUE@RPMFLAGS = --define="_topdir `pwd`/distrib" all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # 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) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @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 -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: 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-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -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: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck 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 installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am @MAINTAINER_MODE_TRUE@linux-rpm: @MAINTAINER_MODE_TRUE@ $(mkinstalldirs) distrib/SOURCES distrib/SRPMS distrib/SPECS @MAINTAINER_MODE_TRUE@ $(mkinstalldirs) distrib/BUILD distrib/RPMS/i386 @MAINTAINER_MODE_TRUE@ $(MAKE) dist @MAINTAINER_MODE_TRUE@ cp $(PACKAGE)-$(VERSION).tar.gz distrib/SOURCES @MAINTAINER_MODE_TRUE@ rpmbuild $(RPMFLAGS) -ba admin/libiodbc.spec @MAINTAINER_MODE_TRUE@ rpmbuild $(RPMFLAGS) --clean --rmsource admin/libiodbc.spec # # Create a tar file containing the library and include files # @MAINTAINER_MODE_TRUE@binary-tar: @MAINTAINER_MODE_TRUE@ -mkdir @build@ @MAINTAINER_MODE_TRUE@ $(MAKE) install prefix=`pwd`/@build@ @MAINTAINER_MODE_TRUE@ tar cvf @build@.tar @build@ @MAINTAINER_MODE_TRUE@ gzip -9vf @build@.tar @MAINTAINER_MODE_TRUE@ rm -rf @build@ # # Create a source snapshot package # @MAINTAINER_MODE_TRUE@snapshot: @MAINTAINER_MODE_TRUE@ $(MAKE) dist distdir=$(PACKAGE)-`date +"%Y%m%d"` # # Create an official release package # @MAINTAINER_MODE_TRUE@release: @MAINTAINER_MODE_TRUE@ $(MAKE) distcheck # # Generate ChangeLog # @MAINTAINER_MODE_TRUE@.PHONY: changelog @MAINTAINER_MODE_TRUE@changelog: @MAINTAINER_MODE_TRUE@ git2cl --format='%s%n%n%b%n' --strip-tab --strip-cherry-pick > ChangeLog # 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: libiodbc-3.52.9/COPYING0000644000076400007640000000133712323210535011345 00000000000000iODBC Driver Manager Copyright (C) 1995 by Ke Jin Copyright (C) 1996-2014 by OpenLink Software All Rights Reserved. This software is released under either the GNU Library General Public License (see LICENSE.LGPL) or the BSD License (see LICENSE.BSD). Note that the only valid version of the LGPL license as far as this project is concerned is the original GNU Library General Public License Version 2, dated June 1991. While not mandated by the BSD license, any patches you make to the iODBC may be contributed back into the iODBC project at your discretion. Contributions will benefit the Open Source and Data Access community as a whole. Submissions may be made at http://www.iodbc.org. libiodbc-3.52.9/acinclude.m40000644000076400007640000000761112323210535012504 00000000000000# # acinclude.m4 # # The iODBC driver manager. # # Copyright (C) 1995 by Ke Jin # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # AC_DEFUN([IODBC_CHECK_PTHREAD_LIB], [AC_MSG_CHECKING([for $2 in -l$1 $5]) ac_save_LIBS="$LIBS" LIBS="-l$1 $5 $LIBS" AC_LINK_IFELSE([AC_LANG_PROGRAM(dnl [[ #ifdef __cplusplus extern "C" #endif #if defined (HAVE_PTHREAD_H) #include #endif ]], [[$2(0)]])], eval "ac_cv_lib_$ac_lib_var=yes", eval "ac_cv_lib_$ac_lib_var=no") LIBS="$ac_save_LIBS" dnl if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then AC_MSG_RESULT(yes) ifelse([$3], , [changequote(, )dnl ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` changequote([, ])dnl AC_DEFINE_UNQUOTED($ac_tr_lib) LIBS="-l$1 $LIBS" ], [$3]) else AC_MSG_RESULT(no) ifelse([$4], , , [$4 ])dnl fi ]) libiodbc-3.52.9/configure.in0000644000076400007640000005411712323210535012627 00000000000000AC_PREREQ(2.59) AC_REVISION($Id$) # # configure.in # # The iODBC driver manager. # # Copyright (C) 1995 by Ke Jin # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # ########################################################################## ## ## ## Initialization ## ## ## ########################################################################## AC_INIT([iODBC Driver Manager], [3.52.9], [iodbc@openlinksw.com], [libiodbc]) AC_CONFIG_SRCDIR([include/isql.h]) AC_CONFIG_AUX_DIR(admin) AC_CONFIG_MACRO_DIR(admin) AC_CONFIG_HEADERS(include/config.h) AM_INIT_AUTOMAKE(AC_PACKAGE_TARNAME, AC_PACKAGE_VERSION) AC_CANONICAL_HOST AM_MAINTAINER_MODE ########################################################################## ## ## ## Version information ## ## ## ######################################################################### # # Version information for SQLGetInfo(SQL_DM_VER) call # BUILD_MAJOR="8" # last digit of version number BUILD_MINOR="120326" # year/month/day of release BUILD_VER="${BUILD_MAJOR}${BUILD_MINOR}" # # Library version numbers # lib3_version=3:20:1 # ODBC 3.x mode lib2_version=2:55:0 # ODBC 2.x mode (do not change) ########################################################################## ## ## ## Check whether config.cache belongs to this machine ## ## ## ########################################################################## AC_MSG_CHECKING(cached information) hostcheck="$host" AC_CACHE_VAL(ac_cv_hostcheck, [ ac_cv_hostcheck="$hostcheck" ]) if test "$ac_cv_hostcheck" != "$hostcheck"; then AC_MSG_RESULT(changed) AC_MSG_WARN([Running on a different architecture.]) AC_MSG_WARN([Can't use cached values.]) AC_MSG_ERROR([Please remove the invalid config.cache file, then try again.]) else AC_MSG_RESULT(ok) fi ########################################################################## ## ## ## Save configuration for later reuse ## ## ## ########################################################################## echo creating config.nice rm -f config.nice cat >config.nice<> config.nice for arg in $ac_configure_args do echo "$arg \\" >> config.nice done echo '"$@"' >> config.nice chmod +x config.nice ########################################################################## ## ## ## Set Layout for iODBC ## ## ## ########################################################################## AC_PREFIX_DEFAULT(/usr/local) AC_MSG_CHECKING(for iODBC installation layout) AC_ARG_WITH(layout, [dnl AS_HELP_STRING([--with-layout=LAYOUT], [Choose installation layout])dnl ], [ case "${withval}" in yes|no) IODBC_LAYOUT=unset ;; *) IODBC_LAYOUT=${withval} ;; esac ], [IODBC_LAYOUT=unset]) # # Defaults for Layout # install_libodbc=true case ${IODBC_LAYOUT} in unset) # No Layout set iodbc_layout="default" inidir=/etc ;; [[Gg]][[Nn]][[Uu]]) # GNU iodbc_layout="GNU" test "x$prefix" = xNONE && prefix=/usr/local inidir=${prefix}/etc/iodbc ;; [[Dd]][[Ee]][[Bb]][[Ii]][[Aa]][[Nn]]) # Debian iodbc_layout="Debian" test "x$prefix" = xNONE && prefix=/usr inidir=/etc install_libodbc=false ;; [[Gg]][[Ee]][[Nn]][[Tt]][[Oo]][[Oo]]) # Gentoo iodbc_layout="Gentoo" test "x$prefix" = xNONE && prefix=/usr includedir='${prefix}/include/iodbc' inidir=/etc/iodbc install_libodbc=false ;; [[Rr]][[Ee]][[Dd]][[Hh]][[Aa]][[Tt]]) # RedHat iodbc_layout=RedHat test "x$prefix" = xNONE && prefix=/usr inidir=/etc ;; [[Ff]][[Rr]][[Ee]][[Ee]][[Bb]][[Ss]][[Dd]]) # FreeBSD iodbc_layout=FreeBSD test "x$prefix" = xNONE && prefix=/usr inidir=/etc ;; [[Oo]][[Pp]][[Tt]]) # /opt iodbc_layout=opt test "x$prefix" = xNONE && prefix=/opt/iodbc inidir=/etc ;; [[Oo]][[Pp]][[Ee]][[Nn]][[Ll]][[Ii]][[Nn]][[Kk]]) # OpenLink iodbc_layout=openlink prefix=/usr/local/iODBC inidir=/etc ;; *) # UNKNOWN AC_MSG_RESULT(unknown) echo "" echo "Supported layouts: Debian FreeBSD GNU OpenLink opt RedHat" echo "" AC_MSG_ERROR([unable to continue]) ;; esac AC_MSG_RESULT([${iodbc_layout}]) ########################################################################## ## ## ## Check for C compiler ## ## ## ########################################################################## AC_PROG_CC AM_PROG_CC_C_O AC_PROG_CC_STDC AC_PROG_CPP AC_LANG([C]) AC_C_CONST ########################################################################## ## ## ## Check for standard programs ## ## ## ########################################################################## AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET dnl AC_PROG_RANLIB AC_PROG_LIBTOOL dnl LT_INIT(dlopen) ########################################################################## ## ## ## Check for standard header files ## ## ## ########################################################################## AC_HEADER_STDC AC_HEADER_TIME AC_CHECK_HEADERS(wchar.h) ########################################################################## ## ## ## Check for specific library functions ## ## ## ########################################################################## AC_CHECK_FUNCS(strerror setenv asprintf snprintf gettimeofday localtime_r) dnl Unicode AC_CHECK_FUNCS(wcslen wcscpy wcsncpy wcschr wcscat wcscmp towlower wcsncasecmp) ########################################################################## ## ## ## Check if we want to build the GUI applications and libraries ## ## ## ########################################################################## AC_ARG_ENABLE(gui, [dnl AS_HELP_STRING([--enable-gui], [build GUI applications (default)]) AS_HELP_STRING([--disable-gui], [build GUI applications])dnl ], [ case "${enableval}" in yes) USE_GUI=true ;; no) USE_GUI=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-gui) ;; esac ],[USE_GUI=true]) ########################################################################## ## ## ## Check for GTK library functions ## ## ## ########################################################################## USE_GTK=false if test x$USE_GUI = xtrue then no_gtk="" # Check for GTK+ 2.x AM_PATH_GTK_2_0(2.0.0) if test x$no_gtk != x then # Try GTK 1.2.x instead no_gtk="" AM_PATH_GTK(1.2.3) fi if test x$no_gtk = x then USE_GTK=true fi fi ########################################################################## ## ## ## Now make the final checks whether we can use GUI extensions ## ## ## ########################################################################## if test x$USE_GTK = xfalse then USE_GUI=false fi if test x$USE_GUI = xtrue then AC_DEFINE(GUI, 1, [Define if we detected a GUI library we can use]) fi AM_CONDITIONAL(GUI, [test x$USE_GUI = xtrue]) AM_CONDITIONAL(GTK, [test x$USE_GTK = xtrue]) ########################################################################## ## ## ## Check for dynamic load module ## ## ## ########################################################################## AC_CHECK_HEADERS(dlfcn.h dl.h dld.h) LIBADD_DL="" AC_CHECK_LIB(dl, dlopen, [AC_DEFINE(HAVE_LIBDL, 1, [Define if you have the -ldl library]) LIBADD_DL="-ldl"], [AC_CHECK_FUNCS(dlopen _dlopen, [ AC_DEFINE(HAVE_LIBDL, 1,[Define if you have the -ldl library]) ])] ) AC_CHECK_FUNC(shl_load, [AC_DEFINE(HAVE_SHL_LOAD, 1, [Define if you have the shl_load function])], [AC_CHECK_LIB(dld, shl_load, [AC_DEFINE(HAVE_SHL_LOAD, 1, [Define if you have the shl_load function]) LIBADD_DL="$LIBADD_DL -ldld"])] ) AC_CHECK_LIB(dld, dld_link, [AC_DEFINE(HAVE_DLD, 1, [Define if you have the -ldld library])dnl test "x$ac_cv_lib_dld_shl_load" = yes || LIBADD_DL="$LIBADD_DL -ldld"]) AC_CHECK_FUNC(NSCreateObjectFileImageFromFile, [AC_DEFINE(HAVE_DYLD, 1, [Define if you have the DYLD library])]) AC_SUBST(LIBADD_DL) AC_CACHE_CHECK([for underscore before symbols], libltdl_cv_uscore, [ echo "int fnord(void){return 42;}int main(void){return fnord();}" > conftest.c ${CC} ${CFLAGS} -c conftest.c > /dev/null 2>&1 if (nm conftest.o | grep _fnord) > /dev/null; then libltdl_cv_uscore=yes else libltdl_cv_uscore=no fi rm -f conftest* ]) if test x"$libltdl_cv_uscore" = xyes; then if test x"$ac_cv_func_dlopen" = xyes || test x"$ac_cv_lib_dl_dlopen" = xyes ; then AC_CACHE_CHECK([whether we have to add an underscore for dlsym], libltdl_cv_need_uscore, [dnl AC_RUN_IFELSE([AC_LANG_SOURCE([[ #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LTDL_GLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LTDL_GLOBAL DL_GLOBAL # else # define LTDL_GLOBAL 0 # endif #endif /* We may have to define LTDL_LAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LTDL_LAZY_OR_NOW # ifdef RTLD_LAZY # define LTDL_LAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LTDL_LAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LTDL_LAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LTDL_LAZY_OR_NOW DL_NOW # else # define LTDL_LAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord () { int i = 42; } int main () { void *self, *ptr1, *ptr2; self = dlopen (0, LTDL_GLOBAL | LTDL_LAZY_OR_NOW); if (self) { ptr1 = dlsym (self, "fnord"); ptr2 = dlsym (self, "_fnord"); if (ptr1 && !ptr2) { dlclose (self); exit (0); } } exit (1); } ]])], libltdl_cv_need_uscore=no, libltdl_cv_need_uscore=yes, libltdl_cv_need_uscore=no )]) fi fi if test x"$libltdl_cv_need_uscore" = xyes; then AC_DEFINE(NEED_USCORE, 1, [Define if dlsym() requires a leading underscore in symbol names. ]) fi ########################################################################## ## ## ## Check if the dl library has the dladdr function ## ## ## ########################################################################## AC_CHECK_FUNC(dladdr, AC_DEFINE(HAVE_DLADDR, 1, [Define to 1 if you have the `dladdr' function.]), [AC_CHECK_LIB(dl, dladdr, [AC_DEFINE(HAVE_DLADDR, 1, [Define to 1 if you have the `dladdr' function]) LIBADD_DL="-ldl"],[])] ) AC_CHECK_TYPE([Dl_info], [AC_DEFINE(HAVE_DL_INFO, 1, [Define to 1 if you have the Dl_info structure])], [], [#include ] ) ########################################################################## ## ## ## Set version information ## ## ## ########################################################################## AC_MSG_CHECKING(for iODBC mode) AC_ARG_ENABLE(odbc3, [dnl AS_HELP_STRING([--enable-odbc3], [build ODBC 3.x compatible driver manager (default)]) AS_HELP_STRING([--disable-odbc3], [build ODBC 2.x compatible driver manager])dnl ], [ case "${enableval}" in yes) odbcmode=3 ;; no) odbcmode=2 AC_MSG_ERROR(--disable-odbc3 temporarily disabled) ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-odbc3) ;; esac ], [ odbcmode=3 # set default to ODBC 3.x mode ]) if test "x$odbcmode" = "x3" then lib_version=$lib3_version CFLAGS="$CFLAGS -DODBCVER=0x0350 -DIODBC_BUILD=$BUILD_VER" AC_MSG_RESULT(ODBC 3.x compatible mode) else lib_version=$lib2_version CFLAGS="$CFLAGS -DODBCVER=0x0250 -DIODBC_BUILD=$BUILD_VER" AC_MSG_RESULT(ODBC 2.x compatible mode) fi AC_SUBST(odbcmode) AC_SUBST(lib_version) ########################################################################## ## ## ## Where to find the system odbc.ini file ** ## ## ########################################################################## # # First determine the systemwide default directory according # to GNU specifications # AC_MSG_CHECKING(system config directory) sysinidir=`eval echo $sysconfdir` case "$sysinidir" in NONE*) sysinidir=$ac_default_prefix/etc ;; /usr/etc) sysinidir=/etc ;; *) sysinidir=`eval echo $sysconfdir` ;; esac AC_MSG_RESULT($sysinidir) # # Now allow to overrule this directory with a custom setting # AC_MSG_CHECKING(for iODBC ini directory) AC_ARG_WITH(iodbc-inidir, [dnl AS_HELP_STRING([--with-iodbc-inidir=DIR], [where the system odbc.ini file should be located]) AS_HELP_STRING([ ], [(default is /etc)])dnl ], [ case "$withval" in yes|no) inidir=$sysinidir ;; *) inidir=$withval ;; esac ]) AC_MSG_RESULT($inidir) AC_SUBST(inidir) AC_DEFINE_UNQUOTED(SYS_ODBC_INI, "$inidir/odbc.ini", [Define path to systemwide odbc.ini file]) AC_DEFINE_UNQUOTED(SYS_ODBCINST_INI, "$inidir/odbcinst.ini", [Define path to systemwide odbcinst.ini file]) # # Now allow to override default FileDSN directory with a custom setting # filedsnpath=$inidir/ODBCDataSources AC_MSG_CHECKING(for FILEDSN default directory) AC_ARG_WITH(iodbc-filedsnpath, [dnl AS_HELP_STRING([--with-iodbc-filedsnpath=DIR], [default location for FILEDSN data sources]) AS_HELP_STRING([ ], [(default is $inidir/ODBCDataSources)])dnl ], [ case "$withval" in yes|no) filedsnpath=$inidir/ODBCDataSources ;; *) filedsnpath=$withval ;; esac ]) AC_MSG_RESULT($filedsnpath) AC_SUBST(filedsnpath) AC_DEFINE_UNQUOTED(DEFAULT_FILEDSNPATH, "$filedsnpath", [Default location for FILEDSN data sources]) ########################################################################## ## ## ## Create libodbc.so if requested ## ## ## ########################################################################## AC_MSG_CHECKING(for libodbc.so link) AC_ARG_ENABLE(libodbc, [dnl AS_HELP_STRING([--enable-libodbc], [install extra libodbc.so library (default)]) AS_HELP_STRING([--disable-libodbc], [do not install extra libodbc.so library ])dnl ], [ case "${enableval}" in yes) install_libodbc=true ;; no) install_libodbc=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-libodbc) ;; esac ],[]) AC_MSG_RESULT([$install_libodbc]) AM_CONDITIONAL(INSTALL_LIBODBC, [test x$install_libodbc = xtrue]) ########################################################################## ## ## ## Checkout pthread situation ## ## ## ########################################################################## # for backward compatibility AC_ARG_WITH(pthreads,[], [ AC_MSG_WARN([--with-pthreads flag is deprecated, use --enable-pthreads]) ],[]) AC_MSG_CHECKING(for thread model) AC_ARG_ENABLE(pthreads, [dnl AS_HELP_STRING([--enable-pthreads], [build threaded libraries and applications (default)]) AS_HELP_STRING([--disable-pthreads], [build non-threaded libraries and applications])dnl ], [ case "${enableval}" in yes) USE_PTHREADS=true ;; no) USE_PTHREADS=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-pthreads) ;; esac ],[USE_PTHREADS=true]) if test x$USE_PTHREADS = xtrue then AC_MSG_RESULT(enabled pthread support) CPPFLAGS="$CPPFLAGS -DWITH_PTHREADS -D_REENTRANT" found_lib=false AC_MSG_CHECKING(for OS dependent thread flags) case $host in *-aix*) # Unless overruled by the user, we prefer this compiler if test "x$CC" = "xcc" then CC=cc_r7 fi AC_MSG_RESULT([using $CC for AIX]) ;; *UnixWare*) CFLAGS="$CFLAGS -Kthread" AC_MSG_RESULT([use -Kthread for UnixWare]) ;; i[3456]86-dg-dgux*) CFLAGS="$CFLAGS -D_POSIX4A_DRAFT6_SOURCE" LIBS="$LIBS -lthread" AC_MSG_RESULT([use -lthread for DG/UX]) ;; *-freebsd*) CFLAGS="$CFLAGS -pthread" AC_MSG_RESULT([use -pthread for FreeBSD]) ;; *-hpux*) LIBS="$LIBS -lpthread -lcl" AC_MSG_RESULT([use -lpthread for HP/UX]) ;; *-osf3.*) CPPFLAGS="$CPPFLAGS -DOLD_PTHREADS" LIBS="$LIBS -lpthreads -lmach -lc_r" AC_MSG_RESULT([use -lpthreads for OSF 3.2]) ;; *-osf4.*) LIBS="$LIBS -lpthread" AC_MSG_RESULT([use -lpthread for OSF 4.x]) ;; *) AC_MSG_RESULT([none]) ;; esac # # Check headers # AC_CHECK_HEADER([pthread.h], , [AC_MSG_ERROR([pthreads header not found])]) # # If mutex functions are in C library, we should not need to link # with -lpthread # AC_CHECK_FUNC(pthread_mutex_lock, [found_lib=true]) # # Check out the various libraries # if test x$found_lib = xfalse then IODBC_CHECK_PTHREAD_LIB(pthreads, pthread_mutex_lock, [ LIBS="$LIBS -lpthreads" found_lib=true ]) fi if test x$found_lib = xfalse then IODBC_CHECK_PTHREAD_LIB(pthread, pthread_mutex_lock, [ LIBS="$LIBS -lpthread" found_lib=true ]) fi else AC_MSG_RESULT(no thread support) fi ########################################################################## ## ## ## OS dependent libraries ## ## ## ########################################################################## LIBADD_OS="" AC_MSG_CHECKING(for OS dependent libraries and link flags) AM_CONDITIONAL(DARWIN, false) case $host in *-hpux*) LDFLAGS="$LDFLAGS -Wl,+s" AC_MSG_RESULT([use -Wl,+s for HP/UX]) ;; *-darwin*) AM_CONDITIONAL(DARWIN, true) CFLAGS="$CFLAGS -DNO_FRAMEWORKS" LIBADD_OS="-Wl,-framework,Carbon" AC_MSG_RESULT([$LIBADD_OS]) ;; *) AC_MSG_RESULT(none) ;; esac AC_SUBST(LIBADD_OS) ########################################################################## ## ## ## Generate Makefiles etc. ## ## ## ########################################################################## AC_CONFIG_FILES([ Makefile admin/Makefile admin/libiodbc.spec admin/libiodbc.pc bin/Makefile bin/iodbc-config etc/Makefile man/Makefile man/iodbc-config.1 man/iodbctest.1 man/iodbctestw.1 man/iodbcadm-gtk.1 include/Makefile iodbc/Makefile iodbc/trace/Makefile iodbcinst/Makefile iodbcadm/Makefile iodbcadm/gtk/Makefile drvproxy/Makefile drvproxy/gtk/Makefile samples/Makefile ]) AC_CONFIG_COMMANDS([default],[ chmod 755 bin/iodbc-config ]) AC_OUTPUT ########################################################################## ## ## ## Display configuration information ## ## ## ########################################################################## # ---------------------------------------------------------------------- # Color settings # ---------------------------------------------------------------------- B=`tput bold 2>/dev/null` N=`tput sgr0 2>/dev/null` cat < # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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 = bin DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/iodbc-config.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = iodbc-config CONFIG_CLEAN_VPATH_FILES = 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__installdirs = "$(DESTDIR)$(bindir)" SCRIPTS = $(bin_SCRIPTS) SOURCES = DIST_SOURCES = 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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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@ bin_SCRIPTS = iodbc-config all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 bin/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): iodbc-config: $(top_builddir)/config.status $(srcdir)/iodbc-config.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || 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"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | 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; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$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_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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 $(SCRIPTS) 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binSCRIPTS 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-binSCRIPTS .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-binSCRIPTS 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-binSCRIPTS # 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: libiodbc-3.52.9/bin/iodbc-config.in0000644000076400007640000001305712323210535013737 00000000000000#!/bin/sh # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # prefix=@prefix@ exec_prefix=@exec_prefix@ exec_prefix_set=no data_dir=@datadir@ usage() { cat < Usage: iodbc-config [OPTIONS] [LIBRARIES] Options: [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--libs] [--static-libs] [--libtool-libs] [--cflags] [--odbcversion] [--odbcini] [--odbcinstini] Libraries: iodbc EOF exit $1 } if test $# -eq 0; then usage 1 1>&2 fi lib_iodbc=yes while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --prefix=*) prefix=$optarg if test $exec_prefix_set = no ; then exec_prefix=$optarg fi ;; --prefix) echo_prefix=yes ;; --exec-prefix=*) exec_prefix=$optarg exec_prefix_set=yes ;; --exec-prefix) echo_exec_prefix=yes ;; --version) echo @VERSION@ exit 0 ;; --cflags) if test "@includedir@" != /usr/include ; then includes="-I@includedir@" fi echo_cflags=yes ;; --libs) echo_libs=yes ;; --static-libs) echo_staticlibs=yes ;; --libtool-libs) echo_libtoollibs=yes ;; --data-dir) echo_data_dir=yes ;; --odbcversion) echo @odbcmode@ exit 0 ;; --odbcini) echo_odbcini=yes ;; --odbcinstini) echo_odbcinstini=yes ;; iodbc) lib_iodbc=yes ;; *) usage 1 1>&2 ;; esac shift done if test "$echo_prefix" = "yes"; then echo $prefix fi if test "$echo_exec_prefix" = "yes"; then echo $exec_prefix fi if test "$echo_data_dir" = "yes"; then echo $data_dir fi if test "$echo_odbcini" = "yes"; then echo "@inidir@/odbc.ini" fi if test "$echo_odbcinstini" = "yes"; then echo "@inidir@/odbcinst.ini" fi if test "$echo_cflags" = "yes"; then echo "$includes" fi if test "$echo_libs" = "yes"; then libs="" if test "$lib_iodbc" = "yes"; then libs="$libs -liodbc -liodbcinst" fi echo "-L@libdir@ $libs" fi if test "$echo_staticlibs" = "yes"; then libs="" if test "$lib_iodbc" = "yes"; then libs="@libdir@/libiodbc.a @libdir@/libiodbcinst.a -lpthread @LIBADD_DL@" fi echo "$libs" fi if test "$echo_libtoollibs" = "yes"; then libs="" if test "$lib_iodbc" = "yes"; then libs="@libdir@/libiodbc.la @libdir@/libiodbcinst.la" fi echo "$libs" fi libiodbc-3.52.9/bin/Makefile.am0000644000076400007640000000620512323210535013115 00000000000000# # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # bin_SCRIPTS = iodbc-config libiodbc-3.52.9/PORT.OpenLink0000755000076400007640000002510612323210535012542 00000000000000#!/bin/sh # # PORT.OpenLink # # Script to port iODBC to various platforms and ABIs # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # # # Defaults # TOP=`pwd` OS=`admin/config.guess` PREFIX=/usr/local/iODBC CC=${CC:-cc} CFLAGS=${CFLAGS:-"-O"} LDFLAGS=${LDFLAGS:-""} CONFLAGS=${CONFLAGS:-"--disable-gui --enable-maintainer-mode"} MAKE=${MAKE:-gmake} BUILD=run_make export TOP CC CFLAGS LDFLAGS OS PREFIX CONFLAGS BUILD MAKE # # Parse arguments # ARG=${1:-usage} case $ARG in -[Cc]|configure) BUILD=run_config;; -[Mm]|make) BUILD=run_make;; *) echo "PORT script to build OpenLink type installation packages" echo "in $PREFIX." echo "" echo "Usage: $0 [ -c | -m]" echo "" echo " -c run configure" echo " -m run make [clean|install]" exit 1 ;; esac # # Optional argument for make clean # shift MAKERULE=${*:-""} export MAKERULE # # Configure the package # run_config() { MODE=${1:-"default"} export MODE case $MODE in o32) # Irix $TOP/admin/mkinstalldirs build-o32 cd build-o32 ../configure --prefix=$PREFIX $CONFLAGS --bindir='${prefix}/bino32' --libdir='${prefix}/libo32' cd .. ;; 32) $TOP/admin/mkinstalldirs build-32 cd build-32 ../configure --prefix=$PREFIX $CONFLAGS --bindir='${prefix}/bin32' --libdir='${prefix}/lib32' cd .. ;; 64) $TOP/admin/mkinstalldirs build-64 cd build-64 ../configure --prefix=$PREFIX $CONFLAGS --bindir='${prefix}/bin64' --libdir='${prefix}/lib64' cd .. ;; universal) $TOP/admin/mkinstalldirs build-universal cd build-universal ../configure --prefix=$PREFIX $CONFLAGS cd .. ;; cur) ./configure --prefix=$PREFIX $CONFLAGS ;; *) $TOP/admin/mkinstalldirs build cd build ../configure --prefix=$PREFIX $CONFLAGS cd .. ;; esac } # # Make the package # run_make() { MODE=${1:-"default"} export MODE case $MODE in o32) cd build-o32 $MAKE $MAKERULE cd .. ;; 32) cd build-32 $MAKE $MAKERULE cd .. ;; 64) cd build-64 $MAKE $MAKERULE cd .. ;; universal) cd build-universal $MAKE $MAKERULE cd .. ;; cur) $MAKE $MAKERULE ;; *) cd build $MAKE $MAKERULE cd .. ;; esac } # # Main # case $OS in powerpc-ibm-aix4*) CC=cc_r7 CFLAGS="-O -q32" LDFLAGS="-brtl" OBJECT_MODE=64 export CC CFLAGS LDFLAGS OBJECT_MODE $BUILD 32 CC=cc_r7 CFLAGS="-O -q64" LDFLAGS="-brtl" OBJECT_MODE=64 export CC CFLAGS LDFLAGS OBJECT_MODE $BUILD 64 ;; hppa2.0w-hp-hpux11*) CFLAGS="-O -Ae +DA1.1" export CFLAGS $BUILD 32 CFLAGS="-O -Ae +DA2.0W" export CFLAGS $BUILD 64 ;; sparc-sun-solaris2.*) CFLAGS="-O" export CFLAGS $BUILD 32 CFLAGS="-O -xtarget=ultra -xarch=v9" export CFLAGS $BUILD 64 ;; i[3456]86-*-solaris2.*) CFLAGS="-O -xtarget=opteron" export CFLAGS $BUILD 32 CFLAGS="-O -xtarget=opteron -xarch=amd64" export CFLAGS $BUILD 64 ;; i[3456]86-pc-linux-*) CFLAGS="-O3" CONFLAGS="--enable-gui --enable-maintainer-mode" export CFLAGS CONFLAGS $BUILD cur ;; x86_64-suse-linux) CFLAGS="-O3" CONFLAGS="--enable-gui --enable-maintainer-mode" export CFLAGS CONFLAGS $BUILD ;; x86_64-*-linux-gnu) CONFLAGS="--enable-gui --enable-maintainer-mode" CFLAGS="-O3 -m32" export CFLAGS CONFLAGS $BUILD 32 CFLAGS="-O3 -m64" export CFLAGS CONFLAGS $BUILD 64 ;; *-apple-darwin14*) PREFIX=/usr/local/iODBC.darwin CONFLAGS="--disable-shared --with-pic" CFLAGS="-O -m32" export CFLAGS CONFLAGS PREFIX $BUILD 32 CFLAGS="-O -m64" export CFLAGS $BUILD 64 PREFIX=/usr/local/iODBC.universal CONFLAGS="--disable-shared --with-pic --disable-dependency-tracking" CFLAGS="-O -mmacosx-version-min=10.9 -arch i386 -arch x86_64" export PREFIX CONFLAGS CFLAGS $BUILD universal ;; *-apple-darwin13*) PREFIX=/usr/local/iODBC.darwin CONFLAGS="--disable-shared --with-pic" CFLAGS="-O -m32" export CFLAGS CONFLAGS PREFIX $BUILD 32 CFLAGS="-O -m64" export CFLAGS $BUILD 64 PREFIX=/usr/local/iODBC.universal CONFLAGS="--disable-shared --with-pic --disable-dependency-tracking" CFLAGS="-O -mmacosx-version-min=10.8 -arch i386 -arch x86_64" export PREFIX CONFLAGS CFLAGS $BUILD universal ;; *-apple-darwin12*) PREFIX=/usr/local/iODBC.darwin CONFLAGS="--disable-shared --with-pic" CFLAGS="-O -m32" export CFLAGS CONFLAGS PREFIX $BUILD 32 CFLAGS="-O -m64" export CFLAGS $BUILD 64 PREFIX=/usr/local/iODBC.universal CONFLAGS="--disable-shared --with-pic --disable-dependency-tracking" CFLAGS="-O -mmacosx-version-min=10.7 -arch i386 -arch x86_64" export PREFIX CONFLAGS CFLAGS $BUILD universal ;; i[3456]86-apple-darwin11*) PREFIX=/usr/local/iODBC.darwin CONFLAGS="--disable-shared --with-pic" CFLAGS="-O -m32" export CFLAGS CONFLAGS PREFIX $BUILD 32 CFLAGS="-O -m64" export CFLAGS $BUILD 64 PREFIX=/usr/local/iODBC.universal CONFLAGS="--disable-shared --with-pic --disable-dependency-tracking" CFLAGS="-O -isysroot /Developer/SDKs/MacOSX10.7.sdk -mmacosx-version-min=10.7 -arch i386 -arch x86_64" export PREFIX CONFLAGS CFLAGS $BUILD universal ;; i[3456]86-apple-darwin10*) PREFIX=/usr/local/iODBC.darwin CONFLAGS="--disable-shared --with-pic" CFLAGS="-O -m32" export CFLAGS CONFLAGS PREFIX $BUILD 32 CFLAGS="-O -m64" export CFLAGS $BUILD 64 PREFIX=/usr/local/iODBC.universal CONFLAGS="--disable-shared --with-pic --disable-dependency-tracking" CFLAGS="-O -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.6 -arch ppc -arch i386 -arch x86_64" export PREFIX CONFLAGS CFLAGS $BUILD universal ;; i[3456]86-apple-darwin9*) PREFIX=/usr/local/iODBC.darwin CONFLAGS="--disable-shared --with-pic" CFLAGS="-O -m32" export CFLAGS CONFLAGS PREFIX $BUILD 32 CFLAGS="-O -m64" export CFLAGS $BUILD 64 PREFIX=/usr/local/iODBC.universal CONFLAGS="--disable-shared --with-pic --disable-dependency-tracking" CFLAGS="-O -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5 -arch ppc -arch ppc64 -arch i386 -arch x86_64" export PREFIX CONFLAGS CFLAGS $BUILD universal ;; powerpc-apple-darwin8*) PREFIX=/usr/local/iODBC.darwin CONFLAGS="--disable-shared --with-pic" CFLAGS="-O -m32" export CFLAGS CONFLAGS PREFIX $BUILD 32 CFLAGS="-O -m64" export CFLAGS $BUILD 64 PREFIX=/usr/local/iODBC.universal CONFLAGS="--disable-shared --with-pic --disable-dependency-tracking" CFLAGS="-O -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch ppc -arch ppc64 -arch i386" export PREFIX CONFLAGS CFLAGS $BUILD universal ;; powerpc-apple-darwin7*) PREFIX=/usr/local/iODBC.darwin CONFLAGS="--disable-shared --with-pic" CFLAGS="-O -DNO_FRAMEWORKS" export CFLAGS CONFLAGS PREFIX $BUILD ;; powerpc-apple-darwin6*) PREFIX=/usr/local/iODBC.darwin CONFLAGS="--disable-shared --with-pic" CFLAGS="-O -DNO_FRAMEWORKS -DMACOSX102" export CFLAGS CONFLAGS PREFIX $BUILD ;; ia64-hp-hpux11.23) CFLAGS="-O -Ae +DD32" export CFLAGS $BUILD 32 CFLAGS="-O -Ae +DD64" export CFLAGS $BUILD 64 ;; powerpc-ibm-aix5*) CC=cc_r CFLAGS="-O -q32" LDFLAGS="-brtl" OBJECT_MODE=32 export CC CFLAGS LDFLAGS OBJECT_MODE $BUILD 32 CC=cc_r CFLAGS="-O -q64" LDFLAGS="-brtl" OBJECT_MODE=64 export CC CFLAGS LDFLAGS OBJECT_MODE $BUILD 64 ;; *) CFLAGS="-O" export CFLAGS $BUILD ;; esac # End exit 0 libiodbc-3.52.9/ChangeLog0000644000076400007640000016453412323210637012100 000000000000002014-04-15 iODBC Maintainer Merge branch 'release/3.52.9' Updated Debian build files Updated iODBC package version to 3.52.9 for final release 2014-04-15 Patrick van Kleef Updated NEWS Merge fixes 2014-04-15 iODBC Maintainer Added support for Mac OS X 10.9 2014-04-15 Patrick van Kleef Removed ChangeLog as it is generated Added unix build directories to ignore list 2014-04-15 Patrick van Kleef Partially reverted recent change for version autoconf/libtool Recent changes did not work properly with the minimum required versions of autoconf and libtool 2014-04-15 Patrick van Kleef Updated files to reflect minimum versions of autoconf/automake/libtool 2014-04-01 iODBC Maintainer Updated version to 3.32.9-dev 2014-04-01 Sergey Malinin Miscellaneous fixes from a developer from Teragram configure.in: * Rewrote the "underscore before symbols" code snippet to eliminate warnings (e.g. improper main() prototype) and potential optimizing-out of the fnord() function * Use ${CFLAGS} with ${CC}, as the former may contain important flags * Fail if pthread.h is not found, otherwise the configuration falls into a state where threading is enabled, but the header is missing include/sqltypes.h: * Need to check whether _MSC_VER is defined before using it in a cpp conditional, otherwise -Wundef gives a warning iodbc/dlproc.h: * Simplified the conditional affecting the definition of HDLL. (Is there any non-Win32 system that provides this type?) http://sourceforge.net/p/iodbc/mailman/message/29560355/ 2014-04-01 Sergey Malinin Build system updates ++ acinclude.m4 * Properly quote macro name in AC_DEFUN * Use AC_LINK_IFELSE instead of the obsolete AC_TRY_LINK ++ admin/gtk-2.0.m4, admin/gtk.m4 * Properly quote macro name in AC_DEFUN ++ bootstrap.sh * Call the various Autotools initialization programs with --warnings=all where applicable, to help with QA (and autoconf also gets no-obsolete so we don't hear about the obsolete usages still in the GTK m4 macros) ++ configure.in * Use AC_CONFIG_HEADERS instead of the obsolete AM_CONFIG_HEADER * Use AS_HELP_STRING instead of the obsolete AC_HELP_STRING * Don't use A[CS]_HELP_STRING inside an echo "...", as this is not how the macro is intended to be used, and it doesn't do much good anyway * Use AM_PROG_CC_C_O because AC_PROG_CC_C_O is not sufficient * Replaced the obsolete AC_LIBTOOL_DLOPEN and AM_PROG_LIBTOOL macros with a call to LT_INIT * Fixed the doc string for --disable-gui * Use AC_RUN_IFELSE instead of the obsolete AC_TRY_RUN * Can't use a variable in the doc string for --with-iodbc-filedsnpath, so replaced "$inidir" with "INIDIR" * Rewrote the config info summary at the end to use "cat < Fixed infinite loop in connection pool http://sourceforge.net/p/iodbc/mailman/message/29986083/ 2014-04-01 Sergey Malinin Fix build warning messages and using "strlen" function with unicode data - fix build warning messages - fix using strlen with unicode data 2014-04-01 Sergey Malinin Fix check, if Unicode driver is used http://sourceforge.net/p/iodbc/mailman/message/31801152/ 2014-04-01 iODBC Maintainer Merge branch 'feature/fix_pkg_config_and_odbc_config' into develop Fixed typo 2014-04-01 Sergey Malinin Fixes for the pkg-config file and iodbc-config http://sourceforge.net/p/iodbc/mailman/message/29721400/ 2014-04-01 Sergey Malinin Fix issue, when SQLCancel is call from another thread From a developer at MySQL/Sun/Oracle, an issue with SQLCancel() http://sourceforge.net/p/iodbc/mailman/message/31944526/ 2014-03-27 Sergey Malinin SQLInstallDriverEx does not work when driver library is read-only 2014-02-17 iODBC Maintainer Updated copyright year 2013-01-08 iODBC Maintainer Fixed missing declaration Fixed issue with dladdr prototype on linux Fixed issue with build dependancy when using make -j6 Fixed compiler warnings on newer Xcode compilers Mac OS X Added support for Mac OS X 10.8 Added support for Mac OS X 10.8 Fixed issue with SDKs path on Mac OS X 10.7 Added support for Mac OS X 10.7 Fixed deprecated macro 2013-01-04 Patrick van Kleef Updated copyright to include 2013 2012-03-27 Patrick van Kleef Added missing file 2012-03-27 Patrick van Kleef Merge branch 'release/v3.52.8' into develop Merge branch 'release/v3.52.8' Updated documentation Added info to NEWS Updated changelog Updated version number to 3.52.8 Added support for Mac OS X 10.7 2012-03-26 Patrick van Kleef Fixed list of files to be distributed Updated version to 3.52.8-rc1 Removed old .cvsignore files Merge branch 'feature/mac_ui' into develop Updated version of iODBC Demo to 1.1 Converted build rules to compile the UI from new .xib files Fixed problem installing CFMSupport Converted old .nib format to .xib format Added Mac OS X build files to ignore list Added more files to ignore Added initial .gitignore 2012-03-12 Patrick van Kleef * Updated copyright to 2012 2011-08-10 Patrick van Kleef * Fixed issue with using buffer after free * Updated copyright year 2010-09-04 Patrick van Kleef * Fixed use ssize_t where appropriate * Fixed compiler warning * Fixed version info * Fixed warnings * Fixed issue with strlen if param can be NULL * Fixed use ssize_t for length of string * Fixed tracing SQLGetData using multiple chunks * Fixed problem tracing on big-endian machines * Removed unused variables * Fixed wrong type label 2009-09-10 Patrick van Kleef * Fixed version *** empty log message *** *** empty log message *** * Updated version of package to 3.52.7 for final release * Updated library versions * Fixed loading libdrvproxy.so.2 and libiodbcadm.so.2 using major version number. * Removed libdrvproxy.{a|so} and libiodbcadm.{a|so} from packaging since they are not development libraries that user applications should try to link with. * Fixed instructions *** empty log message *** * Fixed distribution packaging 2009-09-09 Patrick van Kleef * Removed deprecated file * Removed space from file name * Moved iodbcunix.h from sql.h to sqltypes.h * Fixed description * Updated debian files * Fixed compiler warnings * Updated version info * Fixed compile flags * Fixed check for wchar.h on Mac framework build * Moved symbol files * Added install rules for iODBC CFM bridge * Added iODBC CFM Bridge code * Added support for overruling CFLAGS, CC and other environment vars * Updated Mac OS X build instructions * Fixed building/installing iODBC Demo Unicode version * Removed sudo from rules, user should perform 'sudo make install" 2009-09-08 Patrick van Kleef * Fixed portability between various versions of Mac OS X * Updated version info * Added support for building solaris 2.10 on AMD64 and Sparc * Added support for Mac OS X 10.6 *** empty log message *** * Added defines for Virtuoso ODBC SPASQL extensions * Fixed case label for x86_64 linux systems * Fixed compiler warning * FIxed namespace for internal dlopen functions * Added support for Mac OS X 10.6 * Added support for Mac OS X 10.5 2009-09-07 Patrick van Kleef * Fixed allow installation in temp directory structure * Fixed typo * More files to ignore * Fixed install rules * Fixed copyright year * Fixed support to quit application from decoration * Added iODBCdemo sample program for Mac OS X 2009-09-02 Patrick van Kleef * Fixed prototype * Fixed find relevant section instead of reading all entries in the file 2009-09-01 Patrick van Kleef *** empty log message *** * Ignore files from libtool 2.x * Set minimum requirement for auto* tools to match RedHat Enterprise 4 * Use newer RPM macros for building to fix building on x86_64 * Fixed configure to completely disable building UI extensions when using rpmbuild --define 'noadmin 1' ..... * Fixed prototype *** empty log message *** *** empty log message *** * Fixed group box size 2009-08-31 Patrick van Kleef * Fixed wrong text on tab 2009-08-30 Patrick van Kleef *** empty log message *** * Fixed unload bug deref wrong pointer * Added support for $S (sequence number) in TraceFile * When tracefile length has reached its limit, try to open a new tracefile * Fixed default window sizes * Fixed typos * Fixed typos * Updated copyright year to 2009 * Fixed licensing information * Fixed GTK based administrative code to use resizable windows 2009-06-24 Patrick van Kleef * Updated release number 2009-02-23 Patrick van Kleef * Moved Mac OS X gui components * Moved Mac OS X gui components 2009-02-16 Patrick van Kleef * Added support for Mac OS X 10.5 * Fixed missing function * Removed old endif 2009-01-30 Sergey Malinin * Added additional translations between unicode and ansi components (sm) * Added additional translations between unicode and ansi components (sm) 2008-10-30 Patrick van Kleef * Updated spec file to latest standards 2008-04-25 Patrick van Kleef * Fixed Connection Pooling UI 2008-03-14 Patrick van Kleef * Fixed bug checking for odbc_ver on connect handle 2007-10-08 Patrick van Kleef * Updated version to 3.52.6 for final release (pvk) *** empty log message *** * Updated version to 3.52.6 for final release (pvk) *** empty log message *** * Fixed problem returning memory allocation error when max length of buffer was set to 0. 2007-10-07 Patrick van Kleef *** empty log message *** * Updated instructions to get CVS tree from sourceforge archive * Fixed checking for driver version when not connected * Fixed typo * Fixed for openbsd * Fixed towlower on older Mac OS X systems * Use dummy towlower on systems that have no native support * Fixed wchar check for FreeBSD 4.8 (pvk) * Fixed checking pthread library on OSF 3.x and OSF 4.x (pvk) * Fixed problem with C variable scope (pvk) 2007-10-02 Patrick van Kleef * Removed AutoReqProv:no setting 2007-10-01 Patrick van Kleef * Disabled building/installing old libodbc.a as this can interfere with other driver managers * Fixed License keyword * Updated version of rpm 2007-09-10 Patrick van Kleef * Don't keep odbc mutex unnecessary long * Split locking section into smaller segements 2007-09-04 Patrick van Kleef * Fixed typos * Fixed return code when driver could not be found * Fixed error messages * Use SQLFetchScroll on ODBC 3.x * Added missing SQLStmtOptionA to export list * Fixed checking for driver version when not connected 2007-02-02 Sergey Malinin * Added initial support for gtk+ 2.x (sm) * Fixed Unicode bug in SQLBrowseConnect * Added SQLBrowseConnectW to export-symbol list (sm) 2007-01-08 Patrick van Kleef * Minor text changes (pvk) 2007-01-05 Patrick van Kleef *** empty log message *** * Updated version to 3.53.5 (pvk) * Added support for RedHat FC6 64bit (pvk) *** empty log message *** * Reverted incomplete patch (pvk) 2007-01-03 Sergey Malinin * Fixed buffer size calculation (sm) * Fixed problem connecting with FileDSN (sm) * Fixed missing newline when showing parameters (sm) 2006-12-21 Patrick van Kleef * Increased limit of tracedump char and hex data to 1000 lines max (pvk) * Limit the size of the tracefile to about 1Gb (pvk) 2006-12-21 Sergey Malinin * Fixed problems with FileDSN in GTK build (sm) 2006-12-15 Patrick van Kleef * Updated version to 3.52.5-rc2 * Added configure option to set default FileDSN directory (pvk) 2006-12-15 Sergey Malinin * Allow user to bypass connection check when adding a FileDSN (sm) 2006-12-12 Patrick van Kleef * Removed bogus free (pvk) * Removed duplicate error message box (pvk) 2006-12-11 Patrick van Kleef * Incorporated diff from debian web site (pvk) * Updated version to 3.52.5-rc1 * Fixed problem when driver has not yet been connected (pvk) * Use SQL_SUCCEEDED macro to increase readability (pvk) * Fixed problem always returning SQL_ERROR due to logic bug (pvk) * Call ODBC 2.x functions in driver if application uses ODBC 2.x only (pvk) 2006-09-25 Sergey Malinin * Call ODBC 2.x functions in driver if application uses ODBC 2.x only (sm) 2006-08-03 Patrick van Kleef * Added missing header to distribution 2006-07-17 Patrick van Kleef * Removed procid reference from code and simplified call mechanism (pvk) 2006-07-11 Patrick van Kleef * Simplified CALL_DRIVER and CALL_UDRIVER macros 2006-07-10 Patrick van Kleef * Merged FileDSN and ConnectionPooling support from iODBC-3_52_4-DEVEL * Merged FileDSN and ConnectionPooling support from iODBC-3_52_4-DEVEL * Merged FileDSN support from iODBC-3_52_4-DEVEL into HEAD * Use highlighting in overview screen (pvk) * Rewrote bootstrap script to be more verbose about programs/versions needed (pvk) 2006-04-27 Sergey Malinin * Skip {..} when parsing connect string (sm) 2006-03-21 Patrick van Kleef * Use localtime_r (pvk) 2006-03-06 Patrick van Kleef * Fixed typo in function prototype (pvk) 2006-03-03 Patrick van Kleef * Updated Info strings (pvk) 2006-02-24 Sergey Malinin * Let the driver manager call the setup dialogs for now and then call the driver with SQL_DRIVER_NOPROMPT (sm) 2006-02-13 Patrick van Kleef * Version information is inserted by installer scripts (pvk) * Added sccid to all sections to get string with load type into binary (pvk) 2006-02-08 Patrick van Kleef * Remove ppc64 from universal builds (pvk) 2006-02-03 Patrick van Kleef * Fixed include file problem on Mac OS X 10.3 (pvk) * Added realclean rule (pvk) 2006-01-26 Patrick van Kleef *** empty log message *** * Finalized iODBC-3.52.4 release (pvk) * Updated version number to 3.52.4 (pvk) * Add -Wl,+s to HP/UX builds to enable SHLIB_PATH handling (pvk) * Moved darwin specific -DNO_FRAMEWORKS from PORT.OpenLink to configure.in * Updated build instructions for Mac OS X (pvk) * Updated version number and build number in preparation for release (pvk) * Fixed copyright notice (pvk) * Added missing include directory (pvk) 2006-01-25 Patrick van Kleef * Added project files for Mac OS X 10.4 Universal builds (pvk) * Make it easier to change buildstyles (pvk) * Fixed order in which targets need to be installed (pvk) * Converted Xcode project files for Mac OS X 10.4 Universal builds (pvk) * Fixed bug in determining which version of Mac OS X we build on (pvk) * Cleanup Mac OS X project files (pvk) * Cleanup Mac OS X project files (pvk) * Cleanup Mac OS X project files (pvk) * Updated version number (pvk) 2006-01-24 Patrick van Kleef * Simplified building process (pvk) * Fixed include paths (pvk) * Fixed wchar_t issue on Mac OS X (pvk) * Added new version macros for Mac OS X build (pvk) * Fixed building and installing iodbctest and iodbctestw (pvk) * Files to ignore (pvk) * Added guard against including sqlext.h twice (pvk) * Fixed include paths building on Mac OS X (pvk) * Added proper header file for prototypes * Fixed typo in function name (pvk) * Fixed compiler warnings (pvk) * Fixed some compiler warnings (pvk) 2006-01-20 Patrick van Kleef * Clarify which version of the LGPL license this project adheres to (pvk) * Fixed temporary framework search paths * Fixed framework version for non-standard build (pvk) * Moved dlf.[ch] and unicode.[ch] to iodbcinst (pvk) * Use iodbcinst_common and gtk/libdrvproxy-gtk.la convenience libraries instead of referring to individual object files (pvk) * Use iodbcinst_common and gtk/libiodbcadm-gtk.la convenience libraries instead of referring to individual object files (pvk) * Added more functions to export (pvk) * Use new iodbcinst_common library so iodbc does not need to be linked against libiodbcinst. This created problems on various platforms like HP/UX with static link paths being inserted into the libiodbc.so library (pvk) * Created convenience library with common objects that are used in more than one place (pvk) * Moved dlf.[ch] and unicode.[ch] to iodbcinst (pvk) * Moved confirm.c and question.xpm from drvproxy/gtk to iodbcadm/gtk (pvk) 2006-01-18 Patrick van Kleef * If towlower does not exist and we cannot use Frameworks, then just return the original character (pvk) * Added support for Mac OS X 10.2 (pvk) * On AIX we prefer the cc_r7 compiler instead of the cc compiler (pvk) * Temporarily disabled --disable-odbc3 untill all parts of iODBC DM have been fixed to compile with ODBCVER=0x0250 (pvk) * Unicode and ANSI functions did not exist in ODBC 2.50 (pvk) 2006-01-17 Patrick van Kleef * Fixed errors when compiling iODBC for ODBC 2.50 specs (pvk) * Fixed ODBCVER (pvk) 2006-01-13 Patrick van Kleef * Added support for SUSE Linux on AMD opteron (pvk) * Added missing header files for function prototypes (pvk) 2006-01-12 Patrick van Kleef * Added support for building on Apple Mac OS X 10.4 ppc, ppc64 and i386 all in one (pvk) 2006-01-11 Patrick van Kleef * Allow # as extra comment character on reading the odbc.ini file. (pvk) * If subsequent SQLExecute returns SQL_ERROR, set handle state back to en_stmt_prepared and leave the prep_state as is. (pvk) * Fixed typo in local variable decl (pvk) 2005-11-07 Patrick van Kleef * Added missing file (pvk) *** empty log message *** * Finalized iODBC-3.52.3 release (pvk) * Fixed build issue with previously installed libraries (pvk) 2005-11-04 Patrick van Kleef * Fixed problem building on Mac OS X 64bit (pvk) * Apple does not provide certain frameworks in 64bit mode yet (pvk) * Added Unicode symbols (pvk) * Added option to build in current directory (pvk) * Updated DM build number and library version number (pvk) * Updated version number to 3.52.3 (pvk) * Added check for more wchar functions (pvk) * Added support for AIX 5.x (pvk) * Removed check for xml2 which is not needed for iODBC (pvk) * Added support for HP/UX Itanium (pvk) * Fixed support for building on Mac OS X 10.3 and 10.4 in Darwin mode (pvk) * Added detection for glibtoolize for Mac OS X build (pvk) * Apple does not provide certain frameworks in 64bit mode yet (pvk) 2005-10-08 Patrick van Kleef * Include config.h if present (pvk) * Fixed calculating end of buffer without lvalue cast as some compilers did not like this construction (pvk) * Ignore files from copied from autoconf/automake/libtool (pvk) * Resurrected mkinstalldirs (pvk) * Added timestamp to ENTER/EXIT trace lines to get better idea of where application time was spend; inside or outside of ODBC calls. (pvk) * Removed files that are distributed by autoconf/automake/libtoolize (pvk) * Updated build version and library version (pvk) * Fixed problem with truncated messages in ODBC_Error function (pvk) * C++ normally has wchar_t (pvk) * Fixed problem with symbol hiding unicode translation functions (pvk) 2005-09-12 Sergey Malinin * Avoid calling _iodbcdm_drvconn_dialbox twice (sm) 2005-09-12 Patrick van Kleef * Removed semicolon from end of statement block * Small code cleanup (pvk) 2005-09-12 Sergey Malinin * Set config mode before looking for driver name (sm) * Fixed problem with ODBC_BOTH_DSN (sm) 2005-08-30 Patrick van Kleef * Reordered InfoTypes based on ODBC version * Fixed problem with some types like SQL_POS_OPERATION and SQL_POSITIONED_STATEMENTS which where flagged ODBC 2.x only by mistake (pvk) 2005-08-22 Max Khon * Fixed NUL termination problem * DSN input was not disabled correctly (mk) * Fixed NUL termination problem (mk) 2005-08-16 Patrick van Kleef * Fixed minor build problems on Mac OS X * Allow both Xcode 1.5 and 2.1 style build directories (pvk) * Disable Carbon framework in Mac OS X 64bit port (pvk) * Fixed problem mixing framework type header files, which are prefixed with framework name, and internal header files (pvk) * Add iodbcinst.h to install target (pvk) * Do not distribute iodbc.h header anymore (pvk) 2005-08-15 Patrick van Kleef * Install iodbctest and iodbctestw in /Library/Application Support/iODBC/bin (pvk) * Fixed include files for Mac OS X framework build (pvk) 2005-08-03 Patrick van Kleef * Added 'reconnect' command to iodbctest (pvk) 2005-07-29 Sergey Malinin * Added defines for Mac OS X 10.3 and newer (sergei) * Fixed typo (sergei) 2005-07-27 Sergey Malinin * Improve the quality of error messages for dynamic linker problems (sergei) 2005-07-27 Patrick van Kleef * Added Max (pvk) 2005-07-27 Max Khon * Recalculate cbConnStrIn as szConnStrIn might have been changed by iodbcdm_drvconn_dialbox (mk) 2005-07-19 Patrick van Kleef * Changed SQL_DRIVER_PROMPT to SQL_DRIVER_COMPLETE which still allows drivers that have graphical setup screens to use them, but fixes a problem with the MyODBC driver which returns a very cryptic "No DSN entered". (pvk) 2005-07-16 Patrick van Kleef * Added initial support for pkg-config spec file (pvk) * Fixed problem with SQLDriverConnect when graphical library could not be found, the driver manager automatically returned an error when performing SQLDriverConnect (....., SQL_DRIVER_PROMPT). Instead we now silently continue to call the driver and hope it either asks for the missing connection parameters, or return an error. (pvk) * Added support for DSN-less connections (pvk) 2005-05-13 Patrick van Kleef * Renamed iodbcinst.h to odbcinst.h (pvk) * Replaced enum bool with int (pvk) * Use getprogname on Mac OS X 10.3 and above (pvk) * Fixed frameworkname for iODBCinst (pvk) * Added support for sqlucode.h (pvk) 2005-05-12 Patrick van Kleef * Renamed iodbcinst.h to odbcinst.h (pvk) * Renamed iodbcinst.h to odbcinst.h (pvk) 2005-03-22 Patrick van Kleef * Added missing unicode.[ch] into project file (pvk) 2005-03-14 Sergey Malinin * Added Unicode functions to gtk graphical code * Fixed small Unicode bugs (sm) 2005-03-09 Patrick van Kleef * Removed space from -D compile flag (pvk) 2005-03-03 Patrick van Kleef * Stubs for gtk code until we can fix the Unicode part (pvk) 2005-03-02 Sergey Malinin * Build iODBCadm as a bundle rather than a Framework * Fixed problems calling drvproxy code from iodbcadm (sm) * Added support for missing wchar functions (ep+sm) 2005-03-02 Patrick van Kleef * Indented code to improve readability (pvk) 2005-03-02 Sergey Malinin * Added support for iodbcinst Unicode functions (ep+sm) 2005-03-02 Patrick van Kleef * Updated debian build files with latest fixes from Christian (pvk) 2005-03-01 Patrick van Kleef * Ignore config.nice (pvk) * Explain which layouts are available instead of cryptic error (pvk) * Added extra configure flag --disable-libodbc to disable the building of the additional libodbc.so library some programs are linked against (pvk) 2005-02-15 Patrick van Kleef * Fixed problem compiling iodbctest.c with C++ compiler (pvk) 2005-02-14 Patrick van Kleef * Added initial support for building on MAC OS X 10.4 (pvk) * Don't stop the build process if strip fails on Darwin (pvk) 2005-02-14 Sergey Malinin * Fixed symbol clash between Oracle instant client and iODBC on Mac OS X (sergei) 2005-02-08 Patrick van Kleef * Removed static declaration from Done_iODBC (pvk) 2005-02-04 Patrick van Kleef *** empty log message *** * Finalized 3.52.2 release (pvk) * Put in final release stamp (pvk) * Added Mac OS X specific iodbc-config script for framework link (pvk) 2005-02-01 Patrick van Kleef * Ignore build directories (pvk) * Updated version number to 3.52.2 (pvk) * Added Port.OpenLink script to package distribution (pvk) * Fixed iODBC initialization code * Added global lock around SQLAllocHandleSTD (SQL_HANDLE_HENV) (pvk) * Close tracefile after the last environment handle has been freed (pvk) * Make sure trace_stop can be called multiple times (pvk) * Fixed iODBC initialization code * Added global lock around SQLAllocEnv/SQLAllocHandle (SQL_HANDLE_HENV) (pvk) * Do not stop tracing prematurely (pvk) 2005-01-31 Patrick van Kleef * Fixed whitespace (pvk) * Allow root to trace odbc sessions, but make sure we do not overwrite any existing files (pvk) * Changed parsing of TraceFile to avoid buffer overruns (pvk) * Added Driver Manager version to start of trace * Added date/time finished to end of trace * Changed date/time format (pvk) 2005-01-21 Patrick van Kleef * Build sample programs with static iODBC libraries (pvk) * Removed generated file (pvk) * Added script OpenLink uses to port iODBC as reference (pvk) * Added bootstrap.sh in package distribution * Added admin/gtk.m4 so target machines without GTK can still use bootstrap.sh to setup the automake/autoconf configuration (pvk) 2004-12-15 Patrick van Kleef * When a driver specific SQLSetConnectAttr fails return SQL_SUCCESS_WITH_INFO rather than failing the connection (pvk) * Only Darwin needs this special build rule (pvk) * Only call SQLGetDiagRec on allocated handles (pvk) * Fixed C++ prototype problems with older code on 32bit (pvk) * Use $DESTDIR/$libdir to make libodbc symlinks (pvk) 2004-11-03 Patrick van Kleef * Fixed argument check to be case insensitive (pvk) 2004-10-23 Patrick van Kleef * Fixed null pointer problem (pvk) 2004-10-15 Patrick van Kleef * Use returned size of buffer if possible instead of relying on SQL_NTS (pvk) 2004-10-04 Patrick van Kleef * Added DESTDIR in make install for packaging in different dir (pvk) 2004-09-29 Patrick van Kleef *** empty log message *** * Updated NEWS with highlights of new release * Added tag iODBC-3_52_1 to mark final release (pvk) 2004-09-29 Emmanuel Poitier * Fixed Mac OS X install problems (ep) 2004-09-29 Patrick van Kleef * Fixed RPM build/package issue on RedHat 9 (pvk) *** empty log message *** * Keep deprecated SQLROWCOUNT,SQLROWSETSIZE,SQLTRANSID and SQLROWOFFSET types around for backward compatibility (pvk) 2004-09-28 Patrick van Kleef * Added missing files for Mac OS X build (pvk) * Set project version to 3.52.1 (pvk) * Added support for SQL_BINARY fields (pvk) * Use SQL_DRIVER_PROMPT to call GUI setup if available (pvk) * Final fixes for SQLLEN definition (pvk) * Fixed problem with ODBCINT64 definition (pvk) * Make sure SQLGUID structure is the same size on both 32 and 64bit platforms (pvk) * Moved some typedefs around (pvk) * Small fixes to align with ms header file (pvk) * Explain prototype choice SQLColAttribute (pvk) * Mask out old and unused windows types (pvk) * Added compile time check for sizeof(long) (pvk) * Added symbolic tracing for SQLColAttribute (pvk) * Indentation + standard copyright header (pvk) 2004-09-10 Patrick van Kleef * Added new layer so drivers can be logically unloaded without being physically unloaded. This is needed to resolve an outstanding memory leak, while protecting the application from crashing if the unloaded driver registered an on_exit hook. A new flag UnloadSafe can be added to a driver to note it is safe to physically unload the driver. (pvk) 2004-08-26 Patrick van Kleef * Fixed SQLSetDescRec trace function (pvk) * Fixed "statement not reached" warning (pvk) * Converted SQLUINTEGER to SQLULEN for 64bit handling (pvk) 2004-08-20 Patrick van Kleef * Fixed build issue on non Mac OS X machines (pvk) 2004-08-20 Emmanuel Poitier * Fix to build non-framework version of iODBC on Mac OS X (ep) 2004-08-16 Patrick van Kleef * Enhanced support for tracing SQLGetFunctions (pvk) 2004-08-13 Patrick van Kleef * Increased size of output buffer for DSN to 1024 (pvk) 2004-07-13 Tim Haynes * Set basic permissions (th) 2004-07-13 Emmanuel Poitier * Added script to link Framework build into /usr/local/iODBC on Mac OS X * Fixed problem rewriting header files for Framework build (ep) 2004-07-13 Patrick van Kleef * Allow other ini files besides odbc.ini and odbcinst.ini to support FileDSN functions (pvk) * Added standard headers to get some basic typedefs like wchar_t * Added C calling conventions for C++ (pvk) * Replaces wchar.h with stdlib.h (pvk) 2004-07-13 Emmanuel Poitier * Small fixes for Mac OS X build (ep) 2004-07-07 Patrick van Kleef * Do not assume . is in PATH when reading the libiodbc.la file (pvk) * Make sure we use shl_open on HP/UX (pvk) * Removed INT64 and UINT64 types as they clash on various Unix versions (pvk) 2004-07-06 Patrick van Kleef * Added support for iodbcunix.h and iodbcext.h headers (pvk) * Fixed 64bit cast problems (pvk) * Fixed prototypes (pvk) * Use ssize_t and size_t for string lengths * Fixed 64bit cast issues (pvk) * Fixed 64bit cast problems (pvk) * Initial support for ODBC 3.52 API SQLLEN (pvk) * Initialize SQLGetPrivateProfileString return buffer to empty string (pvk) * Perform assignment in two steps for some older compilers (pvk) * Use _mandir macro for path to man pages (pvk) * Enhanced method for detecting pthread support on various platforms (pvk) * Use AC_HELP_STRING to format --help texts (pvk) * Handle UTF-8 sequences of 5 and 6 bytes * Skip bad UTF-8 sequences replacing them with a # in the trace (pvk) 2004-07-05 Patrick van Kleef * Fixed typo in HP/UX shared library name handling (pvk) 2004-06-24 Emmanuel Poitier * Added project build file for iodbctestw (ep) * Small fixes for Mac OS X build (ep) 2004-06-22 Patrick van Kleef * Small indentation fixes (pvk) * Fixed compiler warnings * Small indentation fixes (pvk) * Removed unused functions * Small indentation cleanups (pvk) 2004-06-21 Patrick van Kleef * Fixed C and C++ compiler warnings * Small indentation fixes (pvk) * Preparations for adding ODBC64 support (pvk) 2004-06-19 Patrick van Kleef * Removed obsolete FAR keyword (pvk) * Simplified version number maintenance (pvk) * Added initial man pages (pvk) 2004-06-18 Patrick van Kleef * Fixed problems in SQLSetScrollOption emulation when driver does not support this function (pvk) * Added checks to make sure all stages succeed properly (pvk) * Added extra tool needed to compile sample directory (pvk) * Export Unicode and ANSI names of ODBC functions (pvk) * Install sample source and Makefile in binary distributions (pvk) * Added Unicode support * Added extra datatypes (pvk) 2004-05-13 Patrick van Kleef * Added iodbcext.h (pvk) 2004-05-13 Sergey Malinin * Added support for SQLGetEnvAttr(SQL_ATTR_WCHAR_SIZE) extension (sm) 2004-04-20 Patrick van Kleef * Fixed NULL pointer dereference when connection fails (pvk) 2004-03-18 Emmanuel Poitier * Removed dependency on Carbon libraries for now so the driver manager works on non console sessions (ep) 2004-03-15 Patrick van Kleef * Increased input buffer to 4096 (pvk) 2004-02-24 Patrick van Kleef *** empty log message *** * Updated NEWS with highlights of new release * Updated version and build numbers to 3.51.2 (pvk) 2004-02-24 Tim Haynes * Fixed build problem on panther (th) 2004-02-23 Patrick van Kleef * Fixed build problem with older make programs (pvk) * Fixed problem building on FreeBSD * Clean symbolic links (pvk) * Regenerated ChangeLog (pvk) * Remove config.nice when making distributions (pvk) * Updated version information in preparation of final release (pvk) * Added --include-deps * Print comment on using --enable-maintainer-mode (pvk) 2004-02-23 Tim Haynes * Fixed problem building iodbctest program on Mac OS X (th) * Removed Framework build (th) * Check for pbxbuild (jaguar) or xcodebuild (panther) (th) 2004-02-23 Patrick van Kleef * Updated copyright string (pvk) * Added support for config.nice script (pvk) * Removed debug code (pvk) * Automatically regenerate libiodb.spec script when configure.in changes (pvk) 2004-02-20 Patrick van Kleef * Added --with-layout to simplify installation layouts for different distributions like Debian, Gentoo, FreeBSD etc (pvk) * Added missing file in distcheck (pvk) * Small documentation enhancements and clarifications (pvk) * Renewed build utilities (pvk) * Fixed license explaination * Fixed URL to source code on www.iodbc.org site (pvk) 2004-02-19 Patrick van Kleef * Fixed problem with finding install_libodbc.sh shell script (pvk) * If the allocation of the statement handle in the drivermanager fails, also release the statement handle in the driver (pvk) * Fixed prototype problem on Linux (pvk) 2004-02-18 Patrick van Kleef * Fixed typo in fprintf format (pvk) * Initialise native_error to 0 as some drivers do not set this field (pvk) 2004-02-18 Emmanuel Poitier * Increased size of local variables to accommodate larger input * Added SQLRowCount to display number of affected rows on DDL/DML statements (ep) * Removed compiler warning (ep) * Initialise some local variables (ep) * Added missing prototype (ep) * Updated Mac OS X build project (ep) 2004-02-18 Patrick van Kleef * Added support for displaying NativeError number * Added support for SQLDiagRec when compiling for ODBC 3.x (pvk) * Fixed problem with SQLCloseCursor * Replaced call to SQLFreeStmt (hstmt, SQL_CLOSE) with SQLCloseCursor when compiling for ODBC 3.x (pvk) * Removed call to SQLSetConnectOption(SQL_OPT_TRACEFILE) (pvk) * SQLCloseCursor should not return SQLState 24000 as this is up to the Driver not the DriverManager (pvk) 2004-02-17 Patrick van Kleef * Fixed compiler warnings * Fixed size calculation for variable length string and binary fields (pvk) * Fixed small compiler warnings * Use snprintf when available to guard against buffer overruns * Fixed problem with empty strings (pvk) * Added missing trace function for SQLSetDescRec (pvk) * Removed stale message handler (pvk) * Added support for asprintf and snprintf to guard against buffer overflows (pvk) * Create symbolic links for libodbc.a and libodbc.so for applications that need it (pvk) * Added support for snprintf (pvk) * Increased size of buf to fix potential stack overwrite (pvk) * Removed duplicate call to MEM_FREE (pvk) * Changed command line arguments for cvs2cl (pvk) * Added Tim (pvk) 2004-02-17 Tim Haynes * Small text clarifications (th) 2004-02-17 Patrick van Kleef * Added check for asnprintf and snprintf (pvk) * Added tracing to SQLSetDescRec (pvk) 2003-09-08 Patrick van Kleef * Added README.CVS to documentation (pvk) * Merged previous Changelogs into NEWS file * Use cvs2cl script to generate Changelog information from CVS (pvk) * Updated version and build numbers to 3.51.1 (pvk) * Added basic instructions for using the CVS tree (pvk) * Renamed bootstrap to bootstrap.sh and made it more developer friendly (pvk) 2003-09-07 Patrick van Kleef * Upgraded to libtool-1.4.3 (pvk) * Updated package information and version/build strings (pvk) * Rewrote check for Dl_info type (pvk) * Removed symbol clash on iodbc_version between various components (pvk) * Removed symbol clash on iodbc_version between various components (pvk) * Added check for OS dependent compilers and flags for building threaded programs (pvk) * Display version number of Driver Manager (pvk) * Removed symbol clash on iodbc_version between various components * Simplified getting version information from various components for iodbcadm-gtk (pvk) * Added check for const handling (pvk) 2003-09-05 Patrick van Kleef * Added check for FreeBSD wchar_t define (pvk) * Do not use -static on convenience libraries (pvk) 2003-09-04 Patrick van Kleef * Moved iodbc/iodbc.h to include/iodbc.h (pvk) 2003-09-04 Emmanuel Poitier * Updated build instructions for MyODBC on Mac OS X (ep) 2003-09-04 Patrick van Kleef * Use instead of (pvk) * Moved iodbc/iodbc.h to include/iodbc.h (pvk) 2003-09-03 Emmanuel Poitier * Small fixes for MAC OS X (ep) 2003-09-03 Patrick van Kleef * Added check for OS dependent libraries (pvk) 2003-09-03 Emmanuel Poitier * Small cleanups for MAC OS X build (ep) 2003-09-03 Patrick van Kleef * Small changes to fix problems indicated by gcc compiler warnings (pvk) * Fixed buffer size allocation using SQLGetPrivateProfileString * Always use a char buffer for SQLGetPrivateProfileString (pvk) * Use correct trace functions (pvk) 2003-09-02 Patrick van Kleef * Added checks for wchar.h and wcslen, wcscpy and wcsncpy and provide our own implementation if they do not exist in the standard C library (pvk) 2003-08-29 Patrick van Kleef * Fixed dependency problem between iodbc and iodbcinst (pvk) * Fixed state transition for SQLExecDirect (pvk) * Fixed state transitions for SQLFetch/SQLMoreresults (pvk) * Added libiodbcinst.la to the library dependency list (pvk) * Compile iodbcinst before iodbc (pvk) * Removed libiodbcinst.la as this is already implicit from libiodbc.la (pvk) * Added $(LIBADD_DL) to --static-libs (pvk) 2003-08-22 Patrick van Kleef * Added info for new release (pvk) * Updated version number to 3.51.00 to indicate start of new development cycle (pvk) * Merged iODBC-3_0_6-DEVEL tree onto main trunk (pvk) 2002-04-29 Patrick van Kleef * Added instructions on how to build MyODBC using the Mac OS X frameworks (pvk) * Wrote final entries for V3.0.6 release (pvk) 2002-04-29 Patrick van Kleef * Install iODBC frameworks always in /Library/Frameworks (pvk) * Fixed problems with iODBC header files when building with Mac OS X frameworks (pvk) 2002-04-29 Patrick van Kleef * Added relative search path for iODBC framework (pvk) 2002-04-29 Christian Hammers * Added packaging rules for the Debian project (ch) 2002-04-26 Emmanuel Poitier * Changed includes to for framework builds (ep) 2002-04-26 Patrick van Kleef * Added define in config.h for building GUI extentions (pvk) 2002-04-26 Emmanuel Poitier * Added initial build environment for Mac OS X framework (ep) * Use /Library/Preferences instead of the old /System/Library/Preferences (ep) * When using Apple Frameworks we need to provide the framework name (ep) * Cleaned some unused variables (ep) * If we are not compiling with GUI enabled, make sure we do not have any GUI references in our library (ep) * Cleaned some unused variables (ep) 2002-04-26 Emmanuel Poitier * Set default version if the package has not been configured (ep) * Add default path for MacOS X preferences (ep) 2002-04-25 Patrick van Kleef * Fixed GTK detection to enable GUI components * Fixed warnings from latest autoconf * Added check for DL_info datatype * Updated library version number to 3:6:1 (pvk) * Install the odbctest program with the rest of the package (pvk) 2002-04-25 Emmanuel Poitier * Create a new TOPLEVEL window if the user did not provide a valid window handle (ep) 2002-04-25 Patrick van Kleef * Fixed detection of Dl_info structure (pvk) * Makefile cleanups (pvk) * Ignore the autom4te.cache dir (pvk) * Updated RedHat RPM spec file to latest release (pvk) * Upgraded to automake 1.6.1 (pvk) * Only build .tar.gz and .zip distributions for now (pvk) 2002-03-14 Patrick van Kleef * Added support for automake 1.6, autoconf 2.53 and libtool 1.4.2 (pvk) * Updated comment to reflect dual LGPL/BSD license (pvk) * Updated comment to reflect dual LGPL/BSD license (pvk) * Added include of iodbc.h (pvk) * Fixed multiple definitions of CFLAGS in generated Makefile (pvk) 2002-01-31 Emmanuel Poitier * Added support for mapping SQLError to either SQLGetDiagRec or SQLError in the driver (epoitier) 2001-10-08 Patrick van Kleef * Print the version information of the connected driver * Renamed functions from DB_xxxx to ODBC_xxxx (pvk) 2001-09-11 Patrick van Kleef * Updated version number to 3.0.6 (pvk) * Wrote entries for V3.0.6 (pvk) * Fixed wrong argument to SQLEndTran call (pvk) * Fixed spelling errors (pvk) * Added state transitions to SQLFetchScroll (pvk) * Fixed typo in mapping SQL_COLUMN_NAME, SQL_COLUMN_NULLABLE, or SQL_COLUMN_COUNT in SQLColumnAttributes (pvk) * Fixed bug in cleanup code for descriptors * Fixed getting correct descriptor from driver * Return immediately if the arguments to SQLSetPos are wrong (pvk) * Added better support for skipping comments in string (pvk) * Added support for Driver specific connect options (pvk) 2001-06-12 Patrick van Kleef * Finalized notes for 3.0.5 release (pvk) * SQLMoreResults always returned SQL_NO_DATA_FOUND (pvk) 2001-06-11 Patrick van Kleef * Added new package libiodbc-admin (pvk) * Added support for multiple result sets (pvk) * Added configure flag --enable-gui to switch building the GUI parts of the iODBC administrator (pvk) * iODBC is now released under either the GNU Library General Public License or the BSD License. See files COPYING, COPYING.LGPL and COPYING.BSD for details (pvk) * Fixed portability issue with dladdr function (pvk) * Check if setenv function exists in standard libraries, otherwise use an internal copy (pvk) * Fixed typo (pvk) * Added sample odbcinst.ini file (pvk) 2001-06-07 Patrick van Kleef * Wrote entries for V3.0.5 (pvk) * More files to ignore (pvk) * Added new iodbcinst, iodbcadm, drvproxy directories (pvk) * Added new contributor (pvk) 2001-06-07 Emmanuel Poitier * Added new iodbcinst library (ep) 2001-06-07 Patrick van Kleef * Added modified BSD license file (pvk) 2001-06-07 Emmanuel Poitier * Added GUI frontend (ep) * Added new iodbcadm library and iodbcadm-gtk frontend (ep) 2001-06-06 Emmanuel Poitier * Rewrote SQLDriverConnect(..., SQL_DRIVER_PROMPT) to use GUI where appropriate (ep) * Added version and libname symbols (ep) * Fixed compiler warning on older compilers (ep) * Added dlopen support for Macintosh, Beos and MACX (ep) * Added support for Macintosh, Beos and MACX (ep) 2001-06-04 Patrick van Kleef * Only top Makefile.am needs AUTOMAKE_OPTIONS setting (pvk) * Added notes (pvk) * More files to ignore (pvk) * Add -f to gzip (pvk) * More files to ignore (pvk) * Some files to ignore (pvk) 2001-06-04 Patrick van Kleef * Added new config.h (generated from configure.in) (pvk) * Linux RPM spec file now automatically contains proper version number (pvk) * Set version number to 3.0.4 (pvk) 2001-06-04 Patrick van Kleef * Added new config.h (generated from configure.in) (pvk) * The libiodbc.spec file was moved to the admin directory (pvk) * Updated version number to 3.0.4 (pvk) * Renamed config.h to iodbc.h (pvk) 2001-06-04 Patrick van Kleef * Renamed config.h to iodbc.h (pvk) * Added new config.h (generated from configure.in) (pvk) 2001-06-04 Patrick van Kleef * Linux RPM spec file now automatically contains proper version number (pvk) * Major archive restructuring in preparation of adding iodbcinst code (pvk) * Major archive restructuring in preparation of adding iodbcinst code (pvk) * Major archive restructuring in preparation of adding iodbcinst code (pvk) * Major archive restructuring in preparation of adding iodbcinst code (pvk) 2001-06-01 Patrick van Kleef * Added support for automake 1.4-p2, autoconf 2.50 and libtool 1.4 (pvk) * Fixed problem with shl_unload on HP/UX (pvk) * iODBC does not need a handle to itself on HP/UX (pvk) 2001-06-01 Patrick van Kleef * Added usage information when called with -? (pvk) * Added more datatypes (pvk) 2001-06-01 Patrick van Kleef * Rewrote DYLD support for MacOS X/Darwin 1.2 (pvk) * Disallow root to start a debug session as this is a security risk (pvk) * Added checks for ODBC 3.x date, time and timestamp defines (pvk) * Return Driver Type name instead of DSN Description (pvk) * Removed stub for SQLGetPrivateProfileString (pvk) 2000-07-05 Patrick van Kleef * Translation of SQL_OJ_CAPABILITIES should only be done in ODBC 3.x (todd) * Fixed typo (pvk) 2000-06-14 Patrick van Kleef * Fixed initialization of cip flag which resulted in function sequence errors (pvk) * Added call to SQLCloseCursor for ODBC 3.x (pvk) 2000-02-01 Patrick van Kleef * Wrote ChangeLog entries for V3.0.1 and V3.0.2 distribution (pvk) * Incremented package version number to 3.0.2 (pvk) * SQLNumResult calls is also called from within iODBC, so it needs a wrapper function (pvk) * Check the pointer instead of the content (pvk) 2000-01-28 Patrick van Kleef * Added extra check for ANSI C Compilers (pvk) * Forgot to update pcbDSN and pcbDesc fields (pvk) * Incremented package version number to 3.0.1 (pvk) * Incremented package version number to 3.0.1 (pvk) * Added new argument --libtool-libs (pvk) * Added check for pthread library (pvk) * Added new header file for thread-safe codebase (pvk) * Added thread-safe macros to the codebase (pvk) * Added thread-safe macros and definitions (pvk) 2000-01-26 Patrick van Kleef * Use $(MAKE) instead of plain make command (pvk) 2000-01-21 Patrick van Kleef * Ignore generated files (pvk) * Removed generated files in favor of the bootstrap script (pvk) * Added shell script for freshly checked out CVS tree (pvk) 1999-12-16 Patrick van Kleef * Refreshed generated files (pvk) * Wrote ChangeLog entries for V3.0.0 distribution (pvk) * Start using some of the ODBC 3.x API calls (pvk) * Notify a ODBC 2.x driver when the internal rowset size changes (pvk) * Added support for SQLCloseCursor (pvk) * Added backward compatibility for SQL_OJ_CAPABILITIES call to ODBC 2.x driver (pvk) * Updated RPM specification file to reflect the new build (pvk) 1999-12-16 Patrick van Kleef * Set library version for ODBC 3.x interface to 3:0:1 (pvk) * Set library version for ODBC 2.x interface to 2:51:0 (pvk) 1999-12-15 Patrick van Kleef * Added initial support for MacOS X aka Rhapsody (pvk) * Added initial support for MacOS X aka Rhapsody (pvk) 1999-12-13 Patrick van Kleef * Only use the [ODBC Data Sources] section to populate the SQLDataSources call * Simplified mapping of API calls to function pointers or text (pvk) * Removed unneeded defines (pvk) 1999-12-10 Patrick van Kleef * Ignore iodbc-config generated script (pvk) * Refreshed generated files (pvk) * Added config script to get information about the installed version of iODBC. (pvk) * Set default directory for system wide odbc.ini to /etc (pvk) * Rewrote checks for dlopen checking (pvk) 1999-12-09 Patrick van Kleef * Removed spurious #endif (pvk) 1999-12-09 George Kodinov * Added initial ODBC 3.x support (gk) * Added initial ODBC 3.x support (gk) 1999-12-09 Patrick van Kleef * Changed to ODBC 3.x mode (pvk) * Regenerated files (pvk) * Added new contributor (pvk) * Regenerated files (pvk) * Reran libtoolize version 1.3.4 (pvk) 1999-12-09 Patrick van Kleef * Added maintainer mode (pvk) * Added support for ODBC 2.x and ODBC 3.x (pvk) 1999-12-09 Patrick van Kleef * Rewrote header files to support ODBC 3.5 specification (pvk) 1999-06-25 Patrick van Kleef * Added latest changes to the log * Changed typedef for SQLHENV, SQLHDBC, SQLSTMT to be void * instead of SQLINTEGER. Although this is contra to the official header files, it makes life a lot easier when you have ODBC 2.0 code you want to use * Added latest changes to the log * Updated README to reflect the current state of the project (pvk) 1999-06-25 Patrick van Kleef * Added sql.h, sqlext.h, sqltypes.h to the list of installable headers (pvk) * Set AutoReqProv flag to yes to allow rpm to automatically calculate dependancies (pvk) 1999-06-25 Patrick van Kleef * Regenerated file (pvk) * Fixed check for default SYS_ODBC_INI when configure --prefix=/xxx is used (pvk) * Regenerated (pvk) * Added sql.h, sqlext.h and sqltypes.h to the list of installable include files (pvk) * Use sql.h and sqlext.h instead of the nonstandard names isql.h and isqlext.h (pvk) * Renamed isql.h, isqlext.h and isqltypes.h to sql.h sqlext.h and sqtypes.h and added dummy files for backward compatibility (pvk) * Return SQL_SUCCESS on setting SQL_OPT_TRACEFILE (pvk) * Removed empty line as this causes confusion to some linkers (pvk) * Added target for binary tar distribution (pvk) 1999-04-26 Patrick van Kleef * Simplify building RPMS files on Linux (pvk) * Removed CVS Id tag from header so Makefile.am and the generated Makefile.in can be committed together rather than separate (pvk) * Search for odbc.ini in various places (pvk) * Set default system wide odbc.ini to /etc/odbc.ini if not configured otherwise (pvk) * Checked in generated files (pvk) * Figure out location for system wide odbc.ini (pvk) 1999-04-24 Patrick van Kleef * Checked in generated files (pvk) * Use -I$(top_srcdir) to find the include files (pvk) * Added source directory path to export file iodbc.exp (pvk) * Checked in generated file (pvk) * Added main.c to the list of files to be distributed. (pvk) * Checked in generated file (pvk) * Added iodbc.exp file which contains the symbol list of all symbols we want to export using libtool. (pvk) 1999-04-24 Patrick van Kleef * Added isqltypes.h (pvk) * Updated library version to 2.0.50 (pvk) 1999-04-24 Patrick van Kleef * Added Windows link file for iodbc.dll (pvk) * Include isqltypes.h as a global include rather than a local include file (pvk) * Small code cleanups (pvk) 1999-04-24 Patrick van Kleef * Code cleanups (pvk) * Fixed errors in Windows macros (pvk) 1999-04-24 Patrick van Kleef * Checked in new generated files (pvk) 1999-04-24 Patrick van Kleef * Updated version number of package to 2.50.2 (pvk) * Updated version number of library to 2:50:0 (pvk) 1999-04-24 Patrick van Kleef * Updated to more recent version of libtool 1.2f (pvk) * Code cleanups (pvk) * Added rudementary SQLGetPrivateProfileString call (pvk) * Close open file handle (pvk) * Use the internal form of the handle instead of the external representation (pvk) * Fixed some typo's (pvk) * Use the libtool define to check for underscore representation (pvk) * Added NEAR definition and HWND type for UNIX/VMS (pvk) 1999-03-22 Patrick van Kleef * Fixed a couple of typos (pvk) 1999-03-17 Patrick van Kleef * Added missing arguments to prototype (pvk) * Added support for SQL_DATE, SQL_TIME and SQL_TIMESTAMP (pvk) 1999-03-17 Per Schroder * Added support for VMS (ps) 1999-03-17 Patrick van Kleef * Added Per Schroder who contributed the VMS patches to the iODBC project 1999-03-17 Per Schroder * Added support for VMS (ps) * Added support for VMS (ps) 1999-03-17 Patrick van Kleef * Wrote new handle validation checks to make the driver manager more resistant to handle misuse (pvk) * Rewrote all function prototypes to conform to ODBC 2.51 standard (pvk) * Rewrote all function prototypes to conform to ODBC 2.51 standard (pvk) * Added file isqltypes.h (pvk) * Rewrote all function prototypes to conform to ODBC 2.51 standard (pvk) 1999-03-16 Patrick van Kleef * Added handle type definitions (pvk) * Added new file with ODBC 2.51 types (pvk) * Added full support for ODBC 2.51 specifications (pvk) 1999-01-25 Patrick van Kleef * Removed 2 copyright sccs stamps and comments as requested by Ke Jin (pvk) 1999-01-19 Patrick van Kleef * Prefix should of cause be / instead of /usr if we want to install /etc/odbc.ini * Added support for automake 1.4, autoconf 2.13 and libtool 1.2a * Added sample odbc.ini file * Changed reading of tokens from .ini file. We should really rewrite all of these functions. * Added specification file for Linux RPM builds * Use NEED_USCORE to set _SQL if needed * Removed as automake/autoconf/libtool can do this portable * Added to comply to GNU standards * Set default options * Added unwanted files * Version number is now set to 2.50 * Moved Changes.log into ChangeLog to comply with GNU standards * Added new files to comply with standard GNU source packages * Added missing typedefs, constants and prototypes * Moves HWND typedef to isql.h * Added proper support for SQLDataSources * SQLDrivers now returns SQL_NO_MORE_DATA so applications will not go into infinite loops when trying to retrieve driver information * Removed hwnd argument from SQLBrowseConnect as this is not part of the API * Added sample directory framework * Removed as libtool does this automatically 1999-01-18 Patrick van Kleef * Moved iODBC licensing to LGPL as per Ke Jin's request * Removed old build code * Added information on LGPL licensing * Re-indented code * Code cleanups * Added LGPL notice in all opening comments 1998-12-27 Patrick van Kleef * Added new comment to beginning of file * Reindented code * Checkin of initial version from Ke Jin * Checkin of initial version from Ke Jin libiodbc-3.52.9/README.MACOSX0000644000076400007640000000513512323210535012163 00000000000000iODBC Driver Manager Copyright (C) 1995 by Ke Jin Copyright (C) 1996-2014 by OpenLink Software All Rights Reserved. How to build iODBC for Mac OS X =============================== Method 1: Using Project builder ------------------------------- You first need to install the latest Mac OS X Developer Packages, which can be found at: http://developer.apple.com/tools Then execute the following commands from a terminal session to build all the frameworks and demo applications: $ cd mac $ make After building the iODBC libraries and applications, you have to install them on your system with the command: $ sudo make install This installs the iODBCinst and iODBC frameworks into: /Library/Frameworks and the test applications iodbctest and iodbctestw into: /Library/Application Support/iODBC/bin and the iODBC Administrator and the iODBC Demo applications in: /Applications/iODBC Now that you have installed the iODBC frameworks on your system, you are able to use ODBC applications or build your own applications using the iODBC API. Once you have installed an ODBC driver and configured a DSN, you will be able to make a connection using the iodbctest command which is located in: /Library/Application Support/iODBC/bin/iodbctest Method 2: Using configure and make ---------------------------------- The iODBC package can also be build like any other Open Source package not using any frameworks. To build the libraries, open up a terminal session and execute the following commands: $ sh bootstrap.sh $ ./configure $ make To install the header files and libraries in /usr/local, you execute the following command as administrator: $ sudo make install Note that this will build all code based that only runs on the CPU type you build it on, so PowerPC on older systems, 32bit Intel on early CoreDuo machine and 64bit on current models. However iODBC can also be configured to build a universal library that works with all 3 models embedded. The following commands will build a release of iODBC that works on both Mac OS X 10.5 as well as Mac OS X 10.6: $ CFLAGS="-O -arch ppc -arch i386 -arch x86_64" $ CFLAGS="$CFLAGS -isysroot /Developer/SDKs/MacOSX10.5.sdk" $ CFLAGS="$CFLAGS -mmacosx-version-min=10.5" $ export CFLAGS $ sh bootstrap.sh $ ./configure \ --disable-dependency-tracking \ --prefix=/usr/local/iODBC.universal $ make $ sudo make install Once you have installed an ODBC driver and configured a DSN, you will be able to make a connection using the iodbctest command which is located in: /usr/local/iODBC.universal/bin/iodbctest libiodbc-3.52.9/LICENSE.BSD0000644000076400007640000000307212323210535011724 00000000000000iODBC Driver Manager Copyright (C) 1995 by Ke Jin Copyright (C) 1996-2014 by OpenLink Software All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. 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. 3. Neither the name of OpenLink Software 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 COPYRIGHT HOLDERS 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 OPENLINK OR 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. libiodbc-3.52.9/etc/0000755000076400007640000000000012323210721011136 500000000000000libiodbc-3.52.9/etc/odbc.ini.sample0000644000076400007640000000065312323204667013766 00000000000000; ; odbc.ini ; [ODBC Data Sources] OpenLink = OpenLink (MT) [OpenLink] Driver = /home/openlink/lib/oplodbc.so.1 Description = Sample OpenLink MT DSN Host = localhost ServerType = Oracle 8 FetchBufferSize = 99 UserName = Password = Database = ServerOptions = ConnectOptions = Options = ReadOnly = no [Default] Driver = /home/openlink/lib/oplodbc.so.1 libiodbc-3.52.9/etc/odbcinst.ini.sample0000644000076400007640000000021412323204667014655 00000000000000[ODBC Drivers] OpenLink (MT) = Installed [OpenLink (MT)] Driver = /home/openlink/lib/oplodbc.so.1 Setup = /home/openlink/lib/oplodbc.so.1 libiodbc-3.52.9/etc/Makefile.in0000644000076400007640000003146012323210643013132 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = 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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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 = \ $(srcdir)/odbc.ini.sample \ $(srcdir)/odbcinst.ini.sample all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(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 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 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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-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: .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-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 # 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: libiodbc-3.52.9/etc/Makefile.am0000644000076400007640000000626412323210535013125 00000000000000# # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # EXTRA_DIST = \ $(srcdir)/odbc.ini.sample \ $(srcdir)/odbcinst.ini.sample libiodbc-3.52.9/iodbcadm/0000755000076400007640000000000012323210721012125 500000000000000libiodbc-3.52.9/iodbcadm/Info.c0000644000076400007640000000635712323210535013122 00000000000000/* * Info.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include char *iodbcadm_version = VERSION; libiodbc-3.52.9/iodbcadm/gtk/0000755000076400007640000000000012323210721012712 500000000000000libiodbc-3.52.9/iodbcadm/gtk/confirm.c0000644000076400007640000002231012323210535014434 00000000000000/* * confirm.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include "gui.h" #include "question.xpm" static void confirm_yes_clicked (GtkWidget *widget, TCONFIRM *confirm_t) { if (confirm_t) { confirm_t->yes_no = TRUE; gtk_signal_disconnect_by_func (GTK_OBJECT (confirm_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (confirm_t->mainwnd); } } static void confirm_no_clicked (GtkWidget *widget, TCONFIRM *confirm_t) { if (confirm_t) { confirm_t->yes_no = FALSE; gtk_signal_disconnect_by_func (GTK_OBJECT (confirm_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (confirm_t->mainwnd); } } static gint delete_event (GtkWidget *widget, GdkEvent *event, TCONFIRM *confirm_t) { confirm_no_clicked (widget, confirm_t); return FALSE; } BOOL create_confirm (HWND hwnd, LPCSTR dsn, LPCSTR text) { GtkWidget *confirm, *dialog_vbox1, *hbox1, *pixmap1, *l_text; GtkWidget *dialog_action_area1, *hbuttonbox1, *b_yes, *b_no; guint b_yes_key, b_no_key; GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; GtkAccelGroup *accel_group; char msg[1024]; TCONFIRM confirm_t; if (hwnd == NULL || !GTK_IS_WIDGET (hwnd)) return FALSE; accel_group = gtk_accel_group_new (); confirm = gtk_dialog_new (); if (dsn) sprintf (msg, "Confirm action/operation on %s", dsn); else sprintf (msg, "Confirm action/operation ..."); gtk_object_set_data (GTK_OBJECT (confirm), "confirm", confirm); gtk_widget_set_size_request (confirm, 400, 150); gtk_window_set_title (GTK_WINDOW (confirm), msg); gtk_window_set_position (GTK_WINDOW (confirm), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (confirm), TRUE); gtk_window_set_default_size (GTK_WINDOW (confirm), 400, 150); gtk_window_set_type_hint (GTK_WINDOW (confirm), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (confirm); #endif dialog_vbox1 = GTK_DIALOG (confirm)->vbox; gtk_object_set_data (GTK_OBJECT (confirm), "dialog_vbox1", dialog_vbox1); gtk_widget_show (dialog_vbox1); hbox1 = gtk_hbox_new (FALSE, 6); gtk_widget_ref (hbox1); gtk_object_set_data_full (GTK_OBJECT (confirm), "hbox1", hbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox1, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox1), 6); #if GTK_CHECK_VERSION(2,0,0) style = gtk_widget_get_style (confirm); pixmap = gdk_pixmap_create_from_xpm_d (confirm->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) question_xpm); #else style = gtk_widget_get_style (GTK_WIDGET (hwnd)); pixmap = gdk_pixmap_create_from_xpm_d (GTK_WIDGET (hwnd)->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) question_xpm); #endif pixmap1 = gtk_pixmap_new (pixmap, mask); gtk_widget_ref (pixmap1); gtk_object_set_data_full (GTK_OBJECT (confirm), "pixmap1", pixmap1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (pixmap1); gtk_box_pack_start (GTK_BOX (hbox1), pixmap1, FALSE, FALSE, 0); l_text = gtk_label_new (""); gtk_label_parse_uline (GTK_LABEL (l_text), text); gtk_widget_ref (l_text); gtk_object_set_data_full (GTK_OBJECT (confirm), "l_text", l_text, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (l_text); gtk_box_pack_start (GTK_BOX (hbox1), l_text, TRUE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (l_text), GTK_JUSTIFY_LEFT); gtk_label_set_line_wrap (GTK_LABEL (l_text), TRUE); dialog_action_area1 = GTK_DIALOG (confirm)->action_area; gtk_object_set_data (GTK_OBJECT (confirm), "dialog_action_area1", dialog_action_area1); gtk_widget_show (dialog_action_area1); gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area1), 5); hbuttonbox1 = gtk_hbutton_box_new (); gtk_widget_ref (hbuttonbox1); gtk_object_set_data_full (GTK_OBJECT (confirm), "hbuttonbox1", hbuttonbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbuttonbox1); gtk_box_pack_start (GTK_BOX (dialog_action_area1), hbuttonbox1, TRUE, TRUE, 0); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_END); gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbuttonbox1), 10); b_yes = gtk_button_new_from_stock ("gtk-yes"); gtk_widget_ref (b_yes); gtk_object_set_data_full (GTK_OBJECT (confirm), "b_yes", b_yes, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (b_yes); gtk_container_add (GTK_CONTAINER (hbuttonbox1), b_yes); gtk_dialog_add_action_widget (GTK_DIALOG (confirm), b_yes, GTK_RESPONSE_YES); GTK_WIDGET_SET_FLAGS (b_yes, GTK_CAN_DEFAULT); b_no = gtk_button_new_from_stock ("gtk-no"); gtk_widget_ref (b_no); gtk_object_set_data_full (GTK_OBJECT (confirm), "b_no", b_no, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (b_no); gtk_container_add (GTK_CONTAINER (hbuttonbox1), b_no); gtk_dialog_add_action_widget (GTK_DIALOG (confirm), b_no, GTK_RESPONSE_NO); GTK_WIDGET_SET_FLAGS (b_no, GTK_CAN_DEFAULT); /* Yes button events */ gtk_signal_connect (GTK_OBJECT (b_yes), "clicked", GTK_SIGNAL_FUNC (confirm_yes_clicked), &confirm_t); /* No button events */ gtk_signal_connect (GTK_OBJECT (b_no), "clicked", GTK_SIGNAL_FUNC (confirm_no_clicked), &confirm_t); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (confirm), "delete_event", GTK_SIGNAL_FUNC (delete_event), &confirm_t); gtk_signal_connect (GTK_OBJECT (confirm), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_window_add_accel_group (GTK_WINDOW (confirm), accel_group); confirm_t.yes_no = FALSE; confirm_t.mainwnd = confirm; gtk_widget_show_all (confirm); gtk_main (); return confirm_t.yes_no; } BOOL create_confirmw (HWND hwnd, LPCWSTR dsn, LPCWSTR text) { LPSTR _dsn = NULL; LPSTR _text = NULL; _dsn = dm_SQL_WtoU8((SQLWCHAR*)dsn, SQL_NTS); _text = dm_SQL_WtoU8((SQLWCHAR*)text, SQL_NTS); create_message(hwnd, _dsn, _text); if (_dsn) free(_dsn); if (_text) free(_text); } libiodbc-3.52.9/iodbcadm/gtk/connectionpooling.c0000644000076400007640000003267712323210535016547 00000000000000/* * connectionpooling.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "gui.h" static void connectionpool_finish_clicked (GtkWidget *widget, TCONNECTIONPOOLING *connectionpool_t) { if (connectionpool_t) { connectionpool_t->changed = TRUE; memset(connectionpool_t->timeout, 0, sizeof(connectionpool_t->timeout)); memset(connectionpool_t->probe, 0, sizeof(connectionpool_t->probe)); strncpy (connectionpool_t->timeout, gtk_entry_get_text (GTK_ENTRY (connectionpool_t->timeout_entry)), sizeof(connectionpool_t->timeout)-1); strncpy (connectionpool_t->probe, gtk_entry_get_text (GTK_ENTRY (connectionpool_t->probe_entry)), sizeof(connectionpool_t->probe)-1); gtk_signal_disconnect_by_func (GTK_OBJECT (connectionpool_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (connectionpool_t->mainwnd); } } static void connectionpool_cancel_clicked (GtkWidget *widget, TCONNECTIONPOOLING *connectionpool_t) { if (connectionpool_t) { connectionpool_t->changed = FALSE; gtk_signal_disconnect_by_func (GTK_OBJECT (connectionpool_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (connectionpool_t->mainwnd); } } static gint delete_event (GtkWidget *widget, GdkEvent *event, TCONNECTIONPOOLING *connectionpool_t) { connectionpool_cancel_clicked (widget, connectionpool_t); return FALSE; } BOOL create_connectionpool (HWND hwnd, TCONNECTIONPOOLING *choose_t) { GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; GtkWidget *connectionpool; GtkWidget *dialog_vbox7; GtkWidget *frame1; GtkWidget *alignment76; GtkWidget *vbox40; GtkWidget *frame93; GtkWidget *alignment77; GtkWidget *label154; GtkWidget *frame94; GtkWidget *alignment78; GtkWidget *hbox55; GtkWidget *label156; GtkWidget *t_cptimeout; GtkWidget *frame95; GtkWidget *alignment79; GtkWidget *label155; GtkWidget *frame96; GtkWidget *alignment80; GtkWidget *hbox56; GtkWidget *label157; GtkWidget *t_probe; GtkWidget *flabel1; GtkWidget *dialog_action_area7; GtkWidget *b_cancel; GtkWidget *b_finish; char msg[1024]; if (hwnd == NULL || !GTK_IS_WIDGET (hwnd) || !choose_t) return FALSE; connectionpool = gtk_dialog_new (); gtk_widget_set_name (connectionpool, "connectionpool"); gtk_widget_set_size_request (connectionpool, 433, 227); gtk_window_set_title (GTK_WINDOW (connectionpool), _("Connection pooling attributes")); gtk_window_set_position (GTK_WINDOW (connectionpool), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (connectionpool), TRUE); gtk_window_set_default_size (GTK_WINDOW (connectionpool), 433, 227); gtk_window_set_type_hint (GTK_WINDOW (connectionpool), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (connectionpool); #endif dialog_vbox7 = GTK_DIALOG (connectionpool)->vbox; gtk_widget_set_name (dialog_vbox7, "dialog_vbox7"); gtk_widget_show (dialog_vbox7); frame1 = gtk_frame_new (choose_t->driver); gtk_widget_set_name (frame1, "frame1"); gtk_widget_show (frame1); gtk_box_pack_start (GTK_BOX (dialog_vbox7), frame1, TRUE, TRUE, 0); alignment76 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment76, "alignment76"); gtk_widget_show (alignment76); gtk_container_add (GTK_CONTAINER (frame1), alignment76); vbox40 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox40, "vbox40"); gtk_widget_show (vbox40); gtk_container_add (GTK_CONTAINER (alignment76), vbox40); frame93 = gtk_frame_new (NULL); gtk_widget_set_name (frame93, "frame93"); gtk_widget_show (frame93); gtk_box_pack_start (GTK_BOX (vbox40), frame93, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame93), GTK_SHADOW_NONE); alignment77 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment77, "alignment77"); gtk_widget_show (alignment77); gtk_container_add (GTK_CONTAINER (frame93), alignment77); label154 = gtk_label_new (_("Enable connection pooling for this driver by specifying\na timeout in seconds")); gtk_widget_set_name (label154, "label154"); gtk_widget_show (label154); gtk_container_add (GTK_CONTAINER (alignment77), label154); frame94 = gtk_frame_new (NULL); gtk_widget_set_name (frame94, "frame94"); gtk_widget_show (frame94); gtk_box_pack_start (GTK_BOX (vbox40), frame94, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame94), GTK_SHADOW_NONE); alignment78 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment78, "alignment78"); gtk_widget_show (alignment78); gtk_container_add (GTK_CONTAINER (frame94), alignment78); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment78), 0, 0, 4, 10); hbox55 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox55, "hbox55"); gtk_widget_show (hbox55); gtk_container_add (GTK_CONTAINER (alignment78), hbox55); label156 = gtk_label_new (_("Timeout : ")); gtk_widget_set_name (label156, "label156"); gtk_widget_show (label156); gtk_box_pack_start (GTK_BOX (hbox55), label156, FALSE, FALSE, 0); t_cptimeout = gtk_entry_new (); gtk_widget_set_name (t_cptimeout, "t_cptimeout"); gtk_widget_show (t_cptimeout); gtk_box_pack_start (GTK_BOX (hbox55), t_cptimeout, TRUE, TRUE, 0); if (choose_t) gtk_entry_set_text (GTK_ENTRY (t_cptimeout), choose_t->timeout); frame95 = gtk_frame_new (NULL); gtk_widget_set_name (frame95, "frame95"); gtk_widget_show (frame95); gtk_box_pack_start (GTK_BOX (vbox40), frame95, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame95), GTK_SHADOW_NONE); alignment79 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment79, "alignment79"); gtk_widget_show (alignment79); gtk_container_add (GTK_CONTAINER (frame95), alignment79); label155 = gtk_label_new (_("Set an optional probe query, used for additional verification\nof the connection state")); gtk_widget_set_name (label155, "label155"); gtk_widget_show (label155); gtk_container_add (GTK_CONTAINER (alignment79), label155); frame96 = gtk_frame_new (NULL); gtk_widget_set_name (frame96, "frame96"); gtk_widget_show (frame96); gtk_box_pack_start (GTK_BOX (vbox40), frame96, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame96), GTK_SHADOW_NONE); alignment80 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment80, "alignment80"); gtk_widget_show (alignment80); gtk_container_add (GTK_CONTAINER (frame96), alignment80); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment80), 0, 10, 4, 10); hbox56 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox56, "hbox56"); gtk_widget_show (hbox56); gtk_container_add (GTK_CONTAINER (alignment80), hbox56); label157 = gtk_label_new (_(" Query : ")); gtk_widget_set_name (label157, "label157"); gtk_widget_show (label157); gtk_box_pack_start (GTK_BOX (hbox56), label157, FALSE, FALSE, 0); t_probe = gtk_entry_new (); gtk_widget_set_name (t_probe, "t_probe"); gtk_widget_show (t_probe); gtk_box_pack_start (GTK_BOX (hbox56), t_probe, TRUE, TRUE, 0); if (choose_t) gtk_entry_set_text (GTK_ENTRY (t_probe), choose_t->probe); dialog_action_area7 = GTK_DIALOG (connectionpool)->action_area; gtk_widget_set_name (dialog_action_area7, "dialog_action_area7"); gtk_widget_show (dialog_action_area7); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area7), GTK_BUTTONBOX_END); b_cancel = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_set_name (b_cancel, "b_cancel"); gtk_widget_show (b_cancel); gtk_dialog_add_action_widget (GTK_DIALOG (connectionpool), b_cancel, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (b_cancel, GTK_CAN_DEFAULT); b_finish = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_set_name (b_finish, "b_finish"); gtk_widget_show (b_finish); gtk_dialog_add_action_widget (GTK_DIALOG (connectionpool), b_finish, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (b_finish, GTK_CAN_DEFAULT); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (connectionpool, connectionpool, "connectionpool"); GLADE_HOOKUP_OBJECT_NO_REF (connectionpool, dialog_vbox7, "dialog_vbox7"); GLADE_HOOKUP_OBJECT (connectionpool, frame1, "frame1"); GLADE_HOOKUP_OBJECT (connectionpool, alignment76, "alignment76"); GLADE_HOOKUP_OBJECT (connectionpool, vbox40, "vbox40"); GLADE_HOOKUP_OBJECT (connectionpool, frame93, "frame93"); GLADE_HOOKUP_OBJECT (connectionpool, alignment77, "alignment77"); GLADE_HOOKUP_OBJECT (connectionpool, label154, "label154"); GLADE_HOOKUP_OBJECT (connectionpool, frame94, "frame94"); GLADE_HOOKUP_OBJECT (connectionpool, alignment78, "alignment78"); GLADE_HOOKUP_OBJECT (connectionpool, hbox55, "hbox55"); GLADE_HOOKUP_OBJECT (connectionpool, label156, "label156"); GLADE_HOOKUP_OBJECT (connectionpool, t_cptimeout, "t_cptimeout"); GLADE_HOOKUP_OBJECT (connectionpool, frame95, "frame95"); GLADE_HOOKUP_OBJECT (connectionpool, alignment79, "alignment79"); GLADE_HOOKUP_OBJECT (connectionpool, label155, "label155"); GLADE_HOOKUP_OBJECT (connectionpool, frame96, "frame96"); GLADE_HOOKUP_OBJECT (connectionpool, alignment80, "alignment80"); GLADE_HOOKUP_OBJECT (connectionpool, hbox56, "hbox56"); GLADE_HOOKUP_OBJECT (connectionpool, label157, "label157"); GLADE_HOOKUP_OBJECT (connectionpool, t_probe, "t_probe"); GLADE_HOOKUP_OBJECT (connectionpool, flabel1, "flabel1"); GLADE_HOOKUP_OBJECT_NO_REF (connectionpool, dialog_action_area7, "dialog_action_area7"); GLADE_HOOKUP_OBJECT (connectionpool, b_cancel, "b_cancel"); GLADE_HOOKUP_OBJECT (connectionpool, b_finish, "b_finish"); /* Finish button events */ gtk_signal_connect (GTK_OBJECT (b_finish), "clicked", GTK_SIGNAL_FUNC (connectionpool_finish_clicked), choose_t); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (b_cancel), "clicked", GTK_SIGNAL_FUNC (connectionpool_cancel_clicked), choose_t); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (connectionpool), "delete_event", GTK_SIGNAL_FUNC (delete_event), choose_t); gtk_signal_connect (GTK_OBJECT (connectionpool), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); choose_t->timeout_entry = t_cptimeout; choose_t->probe_entry = t_probe; choose_t->mainwnd = connectionpool; gtk_widget_show_all (connectionpool); gtk_main (); return choose_t->changed; } libiodbc-3.52.9/iodbcadm/gtk/driverchooser.c0000644000076400007640000014077712323210535015677 00000000000000/* * driverchooser.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "../gui.h" #include "img.xpm" #include "dlf.h" #include "dlproc.h" char *szDriverColumnNames[] = { "Name", "File", "Date", "Size", "Version" }; void adddrivers_to_list (GtkWidget *widget, GtkWidget *dlg) { SQLCHAR drvdesc[1024], drvattrs[1024], driver[1024], size[64]; SQLCHAR *data[4]; void *handle; struct stat _stat; SQLSMALLINT len, len1; SQLRETURN ret; HENV henv, drv_henv; HDBC drv_hdbc; pSQLGetInfoFunc funcHdl; pSQLAllocHandle allocHdl; pSQLAllocEnv allocEnvHdl = NULL; pSQLAllocConnect allocConnectHdl = NULL; pSQLFreeHandle freeHdl; pSQLFreeEnv freeEnvHdl; pSQLFreeConnect freeConnectHdl; if (!GTK_IS_CLIST (widget)) return; gtk_clist_clear (GTK_CLIST (widget)); /* Create a HENV to get the list of drivers then */ ret = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto end; } /* Set the version ODBC API to use */ SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER); /* Get the list of drivers */ ret = SQLDrivers (henv, SQL_FETCH_FIRST, drvdesc, sizeof (drvdesc) / sizeof (SQLTCHAR), &len, drvattrs, sizeof (drvattrs) / sizeof (SQLTCHAR), &len1); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO && ret != SQL_NO_DATA) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto error; } while (ret != SQL_NO_DATA) { data[0] = drvdesc; /* Get the driver library name */ SQLSetConfigMode (ODBC_BOTH_DSN); SQLGetPrivateProfileString (drvdesc, "Driver", "", driver, sizeof (driver) / sizeof (SQLTCHAR), "odbcinst.ini"); if (driver[0] == '\0') SQLGetPrivateProfileString ("Default", "Driver", "", driver, sizeof (driver) / sizeof (SQLTCHAR), "odbcinst.ini"); if (driver[0] == '\0') { data[0] = NULL; goto skip; } data[1] = driver; drv_hdbc = NULL; drv_henv = NULL; if ((handle = (void *) DLL_OPEN (driver)) != NULL) { if ((allocHdl = (pSQLAllocHandle) DLL_PROC (handle, "SQLAllocHandle")) != NULL) { ret = allocHdl (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &drv_henv); if (ret == SQL_ERROR) goto nodriverver; ret = allocHdl (SQL_HANDLE_DBC, drv_henv, &drv_hdbc); if (ret == SQL_ERROR) goto nodriverver; } else { if ((allocEnvHdl = (pSQLAllocEnv) DLL_PROC (handle, "SQLAllocEnv")) != NULL) { ret = allocEnvHdl (&drv_henv); if (ret == SQL_ERROR) goto nodriverver; } else goto nodriverver; if ((allocConnectHdl = (pSQLAllocConnect) DLL_PROC (handle, "SQLAllocConnect")) != NULL) { ret = allocConnectHdl (drv_henv, &drv_hdbc); if (ret == SQL_ERROR) goto nodriverver; } else goto nodriverver; } if ((funcHdl = (pSQLGetInfoFunc) DLL_PROC (handle, "SQLGetInfo")) != NULL) { /* Retrieve some information */ ret = funcHdl (drv_hdbc, SQL_DRIVER_VER, drvattrs, sizeof (drvattrs), &len); if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { unsigned int z; /* Drop the description if one provided */ for (z = 0; ((char *) drvattrs)[z]; z++) if (((char *) drvattrs)[z] == ' ') ((char *) drvattrs)[z] = '\0'; data[2] = drvattrs; } else goto nodriverver; } else goto nodriverver; } else { nodriverver: data[2] = "##.##"; } if (drv_hdbc || drv_henv) { if (allocConnectHdl && (freeConnectHdl = (pSQLFreeConnect) DLL_PROC (handle, "SQLFreeConnect")) != NULL) { freeConnectHdl (drv_hdbc); drv_hdbc = NULL; } if (allocEnvHdl && (freeEnvHdl = (pSQLFreeEnv) DLL_PROC (handle, "SQLFreeEnv")) != NULL) { freeEnvHdl (drv_henv); drv_henv = NULL; } } if ((drv_hdbc || drv_henv) && (freeHdl = (pSQLFreeHandle) DLL_PROC (handle, "SQLFreeHandle")) != NULL) { if (drv_hdbc) freeHdl (SQL_HANDLE_DBC, drv_hdbc); if (drv_henv) freeHdl (SQL_HANDLE_ENV, drv_henv); } if (handle) DLL_CLOSE (handle); /* Get the size of the driver */ if (!stat (driver, &_stat)) { sprintf (size, "%d Kb", (int) (_stat.st_size / 1024)); data[3] = size; } else data[3] = "-"; gtk_clist_append (GTK_CLIST (widget), (gchar**)data); skip: ret = SQLDrivers (henv, SQL_FETCH_NEXT, drvdesc, sizeof (drvdesc) / sizeof (SQLTCHAR), &len, drvattrs, sizeof (drvattrs) / sizeof (SQLTCHAR), &len1); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO && ret != SQL_NO_DATA) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto error; } } error: /* Clean all that */ SQLFreeHandle (SQL_HANDLE_ENV, henv); end: if (GTK_CLIST (widget)->rows > 0) { gtk_clist_columns_autosize (GTK_CLIST (widget)); gtk_clist_sort (GTK_CLIST (widget)); } } static void driver_list_select (GtkWidget *widget, gint row, gint column, GdkEvent *event, TDRIVERCHOOSER *choose_t) { LPSTR driver = NULL; if (choose_t) { /* Get the directory name */ gtk_clist_get_text (GTK_CLIST (choose_t->driverlist), row, 0, &driver); if (driver && event && event->type == GDK_2BUTTON_PRESS) gtk_signal_emit_by_name (GTK_OBJECT (choose_t->b_finish), "clicked", choose_t); } } static void driverchooser_ok_clicked (GtkWidget *widget, TDRIVERCHOOSER *choose_t) { char *szDriver; if (choose_t) { if (GTK_CLIST (choose_t->driverlist)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (choose_t->driverlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->driverlist)->selection-> data), 0, &szDriver); choose_t->driver = dm_SQL_A2W(szDriver, SQL_NTS); } else choose_t->driver = NULL; choose_t->driverlist = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (choose_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (choose_t->mainwnd); } } static void driverchooser_cancel_clicked (GtkWidget *widget, TDRIVERCHOOSER *choose_t) { if (choose_t) { choose_t->driverlist = NULL; choose_t->driver = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (choose_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (choose_t->mainwnd); } } static gint delete_event (GtkWidget *widget, GdkEvent *event, TDRIVERCHOOSER *choose_t) { driverchooser_cancel_clicked (widget, choose_t); return FALSE; } void create_driverchooser (HWND hwnd, TDRIVERCHOOSER *choose_t) { GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; GtkWidget *driverchooser; GtkWidget *dialog_vbox2; GtkWidget *hbox25; GtkWidget *frame37; GtkWidget *alignment29; GtkWidget *pixmap1; GtkWidget *frame36; GtkWidget *alignment28; GtkWidget *scrolledwindow10; GtkWidget *clist1; GtkWidget *l_name; GtkWidget *l_file; GtkWidget *l_date; GtkWidget *l_size; GtkWidget *l_diz; GtkWidget *dialog_action_area2; GtkWidget *b_finish; GtkWidget *b_cancel; if (hwnd == NULL || !GTK_IS_WIDGET (hwnd)) return; driverchooser = gtk_dialog_new (); gtk_widget_set_name (driverchooser, "driverchooser"); gtk_widget_set_size_request (driverchooser, 515, 335); gtk_window_set_title (GTK_WINDOW (driverchooser), _("Choose an ODBC Driver")); gtk_window_set_position (GTK_WINDOW (driverchooser), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (driverchooser), TRUE); gtk_window_set_default_size (GTK_WINDOW (driverchooser), 600, 450); gtk_window_set_type_hint (GTK_WINDOW (driverchooser), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (driverchooser); #endif dialog_vbox2 = GTK_DIALOG (driverchooser)->vbox; gtk_widget_set_name (dialog_vbox2, "dialog_vbox2"); gtk_widget_show (dialog_vbox2); hbox25 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox25, "hbox25"); gtk_widget_show (hbox25); gtk_box_pack_start (GTK_BOX (dialog_vbox2), hbox25, TRUE, TRUE, 0); frame37 = gtk_frame_new (NULL); gtk_widget_set_name (frame37, "frame37"); gtk_widget_show (frame37); gtk_box_pack_start (GTK_BOX (hbox25), frame37, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame37), 10); gtk_frame_set_shadow_type (GTK_FRAME (frame37), GTK_SHADOW_NONE); alignment29 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment29, "alignment29"); gtk_widget_show (alignment29); gtk_container_add (GTK_CONTAINER (frame37), alignment29); gtk_widget_set_size_request (alignment29, 140, -1); #if GTK_CHECK_VERSION(2,0,0) style = gtk_widget_get_style (driverchooser); pixmap = gdk_pixmap_create_from_xpm_d (driverchooser->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) img_xpm); #else style = gtk_widget_get_style (GTK_WIDGET (hwnd)); pixmap = gdk_pixmap_create_from_xpm_d (GTK_WIDGET (hwnd)->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) img_xpm); #endif pixmap1 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap1, "pixmap1"); gtk_widget_show (pixmap1); gtk_container_add (GTK_CONTAINER (alignment29), pixmap1); frame36 = gtk_frame_new (NULL); gtk_widget_set_name (frame36, "frame36"); gtk_widget_show (frame36); gtk_box_pack_start (GTK_BOX (hbox25), frame36, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame36), GTK_SHADOW_NONE); alignment28 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment28, "alignment28"); gtk_widget_show (alignment28); gtk_container_add (GTK_CONTAINER (frame36), alignment28); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment28), 0, 10, 0, 0); scrolledwindow10 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow10, "scrolledwindow10"); gtk_widget_show (scrolledwindow10); gtk_container_add (GTK_CONTAINER (alignment28), scrolledwindow10); clist1 = gtk_clist_new (4); gtk_widget_set_name (clist1, "clist1"); gtk_widget_show (clist1); gtk_container_add (GTK_CONTAINER (scrolledwindow10), clist1); gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 165); gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 118); gtk_clist_set_column_width (GTK_CLIST (clist1), 2, 80); gtk_clist_set_column_width (GTK_CLIST (clist1), 3, 80); gtk_clist_column_titles_show (GTK_CLIST (clist1)); l_name = gtk_label_new (_("Name")); gtk_widget_set_name (l_name, "l_name"); gtk_widget_show (l_name); gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, l_name); gtk_widget_set_size_request (l_name, 165, -1); l_file = gtk_label_new (_("File")); gtk_widget_set_name (l_file, "l_file"); gtk_widget_show (l_file); gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, l_file); gtk_widget_set_size_request (l_file, 118, -1); l_date = gtk_label_new (_("Date")); gtk_widget_set_name (l_date, "l_date"); gtk_widget_show (l_date); gtk_clist_set_column_widget (GTK_CLIST (clist1), 2, l_date); gtk_widget_set_size_request (l_date, 80, -1); l_size = gtk_label_new (_("Size")); gtk_widget_set_name (l_size, "l_size"); gtk_widget_show (l_size); gtk_clist_set_column_widget (GTK_CLIST (clist1), 3, l_size); gtk_widget_set_size_request (l_size, 80, -1); l_diz = gtk_label_new (_("Select a driver for which you want to setup a data source")); gtk_widget_set_name (l_diz, "l_diz"); gtk_widget_show (l_diz); gtk_frame_set_label_widget (GTK_FRAME (frame36), l_diz); gtk_label_set_use_markup (GTK_LABEL (l_diz), TRUE); dialog_action_area2 = GTK_DIALOG (driverchooser)->action_area; gtk_widget_set_name (dialog_action_area2, "dialog_action_area2"); gtk_widget_show (dialog_action_area2); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END); b_finish = gtk_button_new_with_mnemonic (_("_Finish")); gtk_widget_set_name (b_finish, "b_finish"); gtk_widget_show (b_finish); gtk_dialog_add_action_widget (GTK_DIALOG (driverchooser), b_finish, 0); GTK_WIDGET_SET_FLAGS (b_finish, GTK_CAN_DEFAULT); b_cancel = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_set_name (b_cancel, "b_cancel"); gtk_widget_show (b_cancel); gtk_dialog_add_action_widget (GTK_DIALOG (driverchooser), b_cancel, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (b_cancel, GTK_CAN_DEFAULT); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (driverchooser, driverchooser, "driverchooser"); GLADE_HOOKUP_OBJECT_NO_REF (driverchooser, dialog_vbox2, "dialog_vbox2"); GLADE_HOOKUP_OBJECT (driverchooser, hbox25, "hbox25"); GLADE_HOOKUP_OBJECT (driverchooser, frame37, "frame37"); GLADE_HOOKUP_OBJECT (driverchooser, alignment29, "alignment29"); GLADE_HOOKUP_OBJECT (driverchooser, pixmap1, "pixmap1"); GLADE_HOOKUP_OBJECT (driverchooser, frame36, "frame36"); GLADE_HOOKUP_OBJECT (driverchooser, alignment28, "alignment28"); GLADE_HOOKUP_OBJECT (driverchooser, scrolledwindow10, "scrolledwindow10"); GLADE_HOOKUP_OBJECT (driverchooser, clist1, "clist1"); GLADE_HOOKUP_OBJECT (driverchooser, l_name, "l_name"); GLADE_HOOKUP_OBJECT (driverchooser, l_file, "l_file"); GLADE_HOOKUP_OBJECT (driverchooser, l_date, "l_date"); GLADE_HOOKUP_OBJECT (driverchooser, l_size, "l_size"); GLADE_HOOKUP_OBJECT (driverchooser, l_diz, "l_diz"); GLADE_HOOKUP_OBJECT_NO_REF (driverchooser, dialog_action_area2, "dialog_action_area2"); GLADE_HOOKUP_OBJECT (driverchooser, b_finish, "b_finish"); GLADE_HOOKUP_OBJECT (driverchooser, b_cancel, "b_cancel"); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (b_finish), "clicked", GTK_SIGNAL_FUNC (driverchooser_ok_clicked), choose_t); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (b_cancel), "clicked", GTK_SIGNAL_FUNC (driverchooser_cancel_clicked), choose_t); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (driverchooser), "delete_event", GTK_SIGNAL_FUNC (delete_event), choose_t); gtk_signal_connect (GTK_OBJECT (driverchooser), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Driver list events */ gtk_signal_connect (GTK_OBJECT (clist1), "select_row", GTK_SIGNAL_FUNC (driver_list_select), choose_t); adddrivers_to_list (clist1, driverchooser); choose_t->driverlist = clist1; choose_t->driver = NULL; choose_t->mainwnd = driverchooser; choose_t->b_finish = b_finish; gtk_widget_show_all (driverchooser); gtk_main (); } static void fdriverchooser_switch_page (GtkNotebook * notebook, GtkNotebookPage * page, gint page_num, TFDRIVERCHOOSER * choose_t) { guint len; char buff[1024]; char *dsn = {""}; char *drv = {""}; char *curr; if (choose_t) { switch (page_num) { case 0: if (choose_t->b_back) gtk_widget_set_sensitive (choose_t->b_back, FALSE); if (choose_t->b_continue) gtk_label_parse_uline(GTK_LABEL(GTK_BIN (choose_t->b_continue)->child), "Continue"); break; case 1: if (choose_t->driverlist && choose_t->tab_panel && GTK_CLIST (choose_t->driverlist)->selection == NULL) { _iodbcdm_messagebox(choose_t->mainwnd, NULL, "Driver wasn't selected!"); gtk_notebook_set_page (GTK_NOTEBOOK (choose_t->tab_panel), 0); break; } if (choose_t->b_back) gtk_widget_set_sensitive (choose_t->b_back, TRUE); if (choose_t->b_continue) gtk_label_parse_uline(GTK_LABEL(GTK_BIN (choose_t->b_continue)->child), "Co_ntinue"); break; case 2: if (choose_t->driverlist && choose_t->tab_panel && choose_t->dsn_entry) { if (GTK_CLIST (choose_t->driverlist)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (choose_t->driverlist), GPOINTER_TO_INT(GTK_CLIST(choose_t->driverlist)->selection->data), 0, &drv); } else { _iodbcdm_messagebox(choose_t->mainwnd, NULL, "Driver wasn't selected!"); gtk_notebook_set_page (GTK_NOTEBOOK (choose_t->tab_panel), 0); break; } dsn = (char*)gtk_entry_get_text(GTK_ENTRY(choose_t->dsn_entry)); if (strlen(dsn) < 1) { _iodbcdm_messagebox(choose_t->mainwnd, NULL, "Enter File DSN Name..."); gtk_notebook_set_page (GTK_NOTEBOOK (choose_t->tab_panel), 1); break; } } if (choose_t->b_back) gtk_widget_set_sensitive (choose_t->b_back, TRUE); if (choose_t->b_continue) gtk_label_parse_uline(GTK_LABEL(GTK_BIN (choose_t->b_continue)->child), "_Finish"); if (choose_t->mess_entry) { #if GTK_CHECK_VERSION(2,0,0) GtkTextBuffer *gbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(choose_t->mess_entry)); GtkTextIter *iter; gtk_text_buffer_set_text(gbuf, "", 0); if (strchr(dsn, '/') != NULL) snprintf(buff, sizeof(buff), "Filename: %s\n", dsn); else snprintf(buff, sizeof(buff), "Filename: %s/%s\n", choose_t->curr_dir, dsn); gtk_text_buffer_insert_at_cursor(gbuf, buff, -1); snprintf(buff, sizeof(buff), "Driver: %s\n", drv); gtk_text_buffer_insert_at_cursor(gbuf, buff, -1); gtk_text_buffer_insert_at_cursor(gbuf, "Driver-specific Keywords:\n", -1); if (choose_t->attrs) { for (curr = choose_t->attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "PWD=", STRLEN ("PWD="))) continue; if (curr) gtk_text_buffer_insert_at_cursor(gbuf, curr, -1); gtk_text_buffer_insert_at_cursor(gbuf, "\n", -1); } } #else gtk_text_set_point(GTK_TEXT(choose_t->mess_entry), 0); len = gtk_text_get_length(GTK_TEXT(choose_t->mess_entry)); gtk_text_forward_delete(GTK_TEXT(choose_t->mess_entry), len); gtk_text_insert(GTK_TEXT(choose_t->mess_entry), NULL, NULL, NULL, "File Data Source\n", -1); if (strchr(dsn, '/') != NULL) snprintf(buff, sizeof(buff), "Filename: %s\n", dsn); else snprintf(buff, sizeof(buff), "Filename: %s/%s\n", choose_t->curr_dir, dsn); gtk_text_insert(GTK_TEXT(choose_t->mess_entry), NULL, NULL, NULL, buff, -1); snprintf(buff, sizeof(buff), "Driver: %s\n", drv); gtk_text_insert(GTK_TEXT(choose_t->mess_entry), NULL, NULL, NULL, buff, -1); gtk_text_insert(GTK_TEXT(choose_t->mess_entry), NULL, NULL, NULL, "Driver-specific Keywords:\n", -1); if (choose_t->attrs) { for (curr = choose_t->attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "PWD=", STRLEN ("PWD="))) { continue; } gtk_text_insert(GTK_TEXT(choose_t->mess_entry), NULL, NULL, NULL, curr, -1); gtk_text_insert(GTK_TEXT(choose_t->mess_entry), NULL, NULL, NULL, "\n", -1); } } #endif } break; } } } static void fdriverchooser_finish_clicked (GtkWidget *widget, TFDRIVERCHOOSER *choose_t) { char *szDriver; char *dsn; char buff[1024]; if (choose_t) { if (GTK_CLIST (choose_t->driverlist)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (choose_t->driverlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->driverlist)->selection-> data), 0, &szDriver); choose_t->driver = dm_SQL_A2W(szDriver, SQL_NTS); } else choose_t->driver = NULL; dsn = (char*)gtk_entry_get_text((GtkEntry*)choose_t->dsn_entry); if (strchr(dsn, '/') != NULL) snprintf(buff, sizeof(buff), "%s", dsn); else snprintf(buff, sizeof(buff), "%s/%s", choose_t->curr_dir, dsn); choose_t->dsn = strdup(buff); choose_t->driverlist = NULL; choose_t->dsn_entry = NULL; choose_t->b_back = NULL; choose_t->b_continue = NULL; choose_t->mess_entry = NULL; choose_t->tab_panel = NULL; choose_t->browse_sel = NULL; choose_t->ok = (choose_t->driver ? TRUE : FALSE); gtk_signal_disconnect_by_func (GTK_OBJECT (choose_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (choose_t->mainwnd); } } static void fdriverchooser_cancel_clicked (GtkWidget *widget, TFDRIVERCHOOSER *choose_t) { if (choose_t) { choose_t->driverlist = NULL; choose_t->driver = NULL; choose_t->ok = FALSE; choose_t->driverlist = NULL; choose_t->dsn_entry = NULL; choose_t->b_back = NULL; choose_t->b_continue = NULL; choose_t->mess_entry = NULL; choose_t->tab_panel = NULL; choose_t->browse_sel = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (choose_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (choose_t->mainwnd); } } static void fdriverchooser_next_clicked (GtkWidget * widget, TFDRIVERCHOOSER * choose_t) { if (choose_t) { gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK (choose_t->tab_panel)); if (page == 2) /* Last Page */ fdriverchooser_finish_clicked (widget, choose_t); else gtk_notebook_next_page (GTK_NOTEBOOK (choose_t->tab_panel)); } } static void fdriverchooser_prev_clicked (GtkWidget * widget, TFDRIVERCHOOSER * choose_t) { if (choose_t) { gtk_notebook_prev_page (GTK_NOTEBOOK (choose_t->tab_panel)); } } static gint fdelete_event (GtkWidget *widget, GdkEvent *event, TFDRIVERCHOOSER *choose_t) { fdriverchooser_cancel_clicked (widget, choose_t); return FALSE; } static void fdriver_list_select (GtkWidget *widget, gint row, gint column, GdkEvent *event, TFDRIVERCHOOSER *choose_t) { LPSTR driver = NULL; if (choose_t) { /* Get the directory name */ gtk_clist_get_text (GTK_CLIST (choose_t->driverlist), row, 0, &driver); if (driver && event && event->type == GDK_2BUTTON_PRESS) gtk_signal_emit_by_name (GTK_OBJECT (choose_t->b_continue), "clicked", choose_t); } } static void fdsn_choosen(GtkWidget *widget, TFDRIVERCHOOSER *choose_t) { if (choose_t) { gtk_entry_set_text (GTK_ENTRY (choose_t->dsn_entry), gtk_file_selection_get_filename (GTK_FILE_SELECTION (choose_t-> browse_sel))); choose_t->browse_sel = NULL; } } static void fdriverchooser_browse_clicked (GtkWidget * widget, TFDRIVERCHOOSER * choose_t) { GtkWidget *filesel; char *dsn; char buff[1024]; if (choose_t) { filesel = gtk_file_selection_new ("Save as ..."); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); dsn = (char*)gtk_entry_get_text((GtkEntry*)choose_t->dsn_entry); if (strchr(dsn, '/') != NULL) snprintf(buff, sizeof(buff), "%s", dsn); else snprintf(buff, sizeof(buff), "%s/%s", choose_t->curr_dir, dsn); gtk_file_selection_set_filename (GTK_FILE_SELECTION (filesel), buff); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->ok_button), "clicked", GTK_SIGNAL_FUNC (fdsn_choosen), choose_t); gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->ok_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->cancel_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (filesel), "delete_event", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); choose_t->browse_sel = filesel; gtk_widget_show_all (filesel); gtk_main (); gtk_widget_destroy (filesel); choose_t->browse_sel = NULL; } } static void fdriverchooser_advanced_clicked (GtkWidget * widget, TFDRIVERCHOOSER * choose_t) { if (choose_t) { LPSTR attr_lst = NULL; LPSTR in_attrs = choose_t->attrs ? choose_t->attrs : "\0\0"; attr_lst = create_keyval (choose_t->mainwnd, in_attrs, &choose_t->verify_conn); if (attr_lst && attr_lst != (LPSTR)-1L) { if (choose_t->attrs) free(choose_t->attrs); choose_t->attrs = attr_lst; } } } //??DONE void create_fdriverchooser (HWND hwnd, TFDRIVERCHOOSER *choose_t) { GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; GtkWidget *fdriverchooser; GtkWidget *dialog_vbox3; GtkWidget *notebook2; GtkWidget *hbox26; GtkWidget *frame38; GtkWidget *alignment30; GtkWidget *pixmap1; GtkWidget *vbox21; GtkWidget *frame39; GtkWidget *alignment31; GtkWidget *scrolledwindow11; GtkWidget *clist2; GtkWidget *l_name; GtkWidget *l_file; GtkWidget *l_date; GtkWidget *l_size; GtkWidget *label70; GtkWidget *hbox27; GtkWidget *frame40; GtkWidget *alignment32; GtkWidget *b_advanced; GtkWidget *label67; GtkWidget *hbox28; GtkWidget *frame41; GtkWidget *alignment33; GtkWidget *pixmap2; GtkWidget *vbox22; GtkWidget *frame42; GtkWidget *alignment34; GtkWidget *label79; GtkWidget *frame43; GtkWidget *alignment35; GtkWidget *hbox30; GtkWidget *fdsn_entry; GtkWidget *b_browse; GtkWidget *frame47; GtkWidget *alignment39; GtkWidget *label68; GtkWidget *hbox29; GtkWidget *frame44; GtkWidget *alignment36; GtkWidget *pixmap3; GtkWidget *vbox23; GtkWidget *frame45; GtkWidget *alignment37; GtkWidget *label80; GtkWidget *frame46; GtkWidget *alignment38; GtkWidget *scrolledwindow13; GtkWidget *result_text; GtkWidget *label69; GtkWidget *dialog_action_area3; GtkWidget *b_cancel; GtkWidget *b_back; GtkWidget *b_continue; if (hwnd == NULL || !GTK_IS_WIDGET (hwnd)) return; fdriverchooser = gtk_dialog_new (); gtk_widget_set_name (fdriverchooser, "fdriverchooser"); gtk_widget_set_size_request (fdriverchooser, 512, 384); gtk_window_set_title (GTK_WINDOW (fdriverchooser), _("Create New File Data Source")); gtk_window_set_modal (GTK_WINDOW (fdriverchooser), TRUE); gtk_window_set_default_size (GTK_WINDOW (fdriverchooser), 600, 450); gtk_window_set_position (GTK_WINDOW (fdriverchooser), GTK_WIN_POS_CENTER); gtk_window_set_type_hint (GTK_WINDOW (fdriverchooser), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (fdriverchooser); #endif dialog_vbox3 = GTK_DIALOG (fdriverchooser)->vbox; gtk_widget_set_name (dialog_vbox3, "dialog_vbox3"); gtk_widget_show (dialog_vbox3); notebook2 = gtk_notebook_new (); gtk_widget_set_name (notebook2, "notebook2"); gtk_widget_show (notebook2); gtk_box_pack_start (GTK_BOX (dialog_vbox3), notebook2, TRUE, TRUE, 0); hbox26 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox26, "hbox26"); gtk_widget_show (hbox26); gtk_container_add (GTK_CONTAINER (notebook2), hbox26); frame38 = gtk_frame_new (NULL); gtk_widget_set_name (frame38, "frame38"); gtk_widget_show (frame38); gtk_box_pack_start (GTK_BOX (hbox26), frame38, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame38), 10); gtk_frame_set_shadow_type (GTK_FRAME (frame38), GTK_SHADOW_NONE); alignment30 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment30, "alignment30"); gtk_widget_show (alignment30); gtk_container_add (GTK_CONTAINER (frame38), alignment30); gtk_widget_set_size_request (alignment30, 140, -1); #if GTK_CHECK_VERSION(2,0,0) style = gtk_widget_get_style (fdriverchooser); pixmap = gdk_pixmap_create_from_xpm_d (fdriverchooser->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) img_xpm); #else style = gtk_widget_get_style (GTK_WIDGET (hwnd)); pixmap = gdk_pixmap_create_from_xpm_d (GTK_WIDGET (hwnd)->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) img_xpm); #endif pixmap1 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap1, "pixmap1"); gtk_widget_show (pixmap1); gtk_container_add (GTK_CONTAINER (alignment30), pixmap1); vbox21 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox21, "vbox21"); gtk_widget_show (vbox21); gtk_box_pack_start (GTK_BOX (hbox26), vbox21, TRUE, TRUE, 0); frame39 = gtk_frame_new (NULL); gtk_widget_set_name (frame39, "frame39"); gtk_widget_show (frame39); gtk_box_pack_start (GTK_BOX (vbox21), frame39, TRUE, TRUE, 0); gtk_widget_set_size_request (frame39, -1, 270); gtk_frame_set_shadow_type (GTK_FRAME (frame39), GTK_SHADOW_NONE); alignment31 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment31, "alignment31"); gtk_widget_show (alignment31); gtk_container_add (GTK_CONTAINER (frame39), alignment31); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment31), 0, 0, 4, 0); scrolledwindow11 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow11, "scrolledwindow11"); gtk_widget_show (scrolledwindow11); gtk_container_add (GTK_CONTAINER (alignment31), scrolledwindow11); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow11), GTK_SHADOW_IN); clist2 = gtk_clist_new (4); gtk_widget_set_name (clist2, "clist2"); gtk_widget_show (clist2); gtk_container_add (GTK_CONTAINER (scrolledwindow11), clist2); gtk_clist_set_column_width (GTK_CLIST (clist2), 0, 165); gtk_clist_set_column_width (GTK_CLIST (clist2), 1, 118); gtk_clist_set_column_width (GTK_CLIST (clist2), 2, 80); gtk_clist_set_column_width (GTK_CLIST (clist2), 3, 80); gtk_clist_column_titles_show (GTK_CLIST (clist2)); l_name = gtk_label_new (_("Name")); gtk_widget_set_name (l_name, "l_name"); gtk_widget_show (l_name); gtk_clist_set_column_widget (GTK_CLIST (clist2), 0, l_name); gtk_widget_set_size_request (l_name, 165, -1); l_file = gtk_label_new (_("File")); gtk_widget_set_name (l_file, "l_file"); gtk_widget_show (l_file); gtk_clist_set_column_widget (GTK_CLIST (clist2), 1, l_file); gtk_widget_set_size_request (l_file, 118, -1); l_date = gtk_label_new (_("Date")); gtk_widget_set_name (l_date, "l_date"); gtk_widget_show (l_date); gtk_clist_set_column_widget (GTK_CLIST (clist2), 2, l_date); gtk_widget_set_size_request (l_date, 80, -1); l_size = gtk_label_new (_("Size")); gtk_widget_set_name (l_size, "l_size"); gtk_widget_show (l_size); gtk_clist_set_column_widget (GTK_CLIST (clist2), 3, l_size); gtk_widget_set_size_request (l_size, 80, -1); label70 = gtk_label_new (_("Select a driver for which you want to setup a data source")); gtk_widget_set_name (label70, "label70"); gtk_widget_show (label70); gtk_frame_set_label_widget (GTK_FRAME (frame39), label70); gtk_label_set_use_markup (GTK_LABEL (label70), TRUE); hbox27 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox27, "hbox27"); gtk_widget_show (hbox27); gtk_box_pack_start (GTK_BOX (vbox21), hbox27, FALSE, TRUE, 0); frame40 = gtk_frame_new (NULL); gtk_widget_set_name (frame40, "frame40"); gtk_widget_show (frame40); gtk_box_pack_start (GTK_BOX (hbox27), frame40, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame40), GTK_SHADOW_NONE); alignment32 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment32, "alignment32"); gtk_widget_show (alignment32); gtk_container_add (GTK_CONTAINER (frame40), alignment32); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment32), 0, 10, 0, 0); b_advanced = gtk_button_new_with_mnemonic (_("_Advanced...")); gtk_widget_set_name (b_advanced, "b_advanced"); gtk_widget_show (b_advanced); gtk_box_pack_start (GTK_BOX (hbox27), b_advanced, FALSE, TRUE, 0); gtk_widget_set_size_request (b_advanced, -1, 45); gtk_container_set_border_width (GTK_CONTAINER (b_advanced), 8); label67 = gtk_label_new (_(" Drivers ")); gtk_widget_set_name (label67, "label67"); gtk_widget_show (label67); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 0), label67); hbox28 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox28, "hbox28"); gtk_widget_show (hbox28); gtk_container_add (GTK_CONTAINER (notebook2), hbox28); frame41 = gtk_frame_new (NULL); gtk_widget_set_name (frame41, "frame41"); gtk_widget_show (frame41); gtk_box_pack_start (GTK_BOX (hbox28), frame41, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame41), 10); gtk_frame_set_shadow_type (GTK_FRAME (frame41), GTK_SHADOW_NONE); alignment33 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment33, "alignment33"); gtk_widget_show (alignment33); gtk_container_add (GTK_CONTAINER (frame41), alignment33); gtk_widget_set_size_request (alignment33, 140, -1); pixmap2 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap2, "pixmap2"); gtk_widget_show (pixmap2); gtk_container_add (GTK_CONTAINER (alignment33), pixmap2); vbox22 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox22, "vbox22"); gtk_widget_show (vbox22); gtk_box_pack_start (GTK_BOX (hbox28), vbox22, TRUE, TRUE, 0); frame42 = gtk_frame_new (NULL); gtk_widget_set_name (frame42, "frame42"); gtk_widget_show (frame42); gtk_box_pack_start (GTK_BOX (vbox22), frame42, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame42), GTK_SHADOW_NONE); alignment34 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment34, "alignment34"); gtk_widget_show (alignment34); gtk_container_add (GTK_CONTAINER (frame42), alignment34); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment34), 0, 0, 4, 0); label79 = gtk_label_new (_("Type the name of the data source you want to\nsave this connection to. Or, find the location to\nsave to by clicking Browse.")); gtk_widget_set_name (label79, "label79"); gtk_widget_show (label79); gtk_container_add (GTK_CONTAINER (alignment34), label79); frame43 = gtk_frame_new (NULL); gtk_widget_set_name (frame43, "frame43"); gtk_widget_show (frame43); gtk_box_pack_start (GTK_BOX (vbox22), frame43, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame43), GTK_SHADOW_NONE); alignment35 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment35, "alignment35"); gtk_widget_show (alignment35); gtk_container_add (GTK_CONTAINER (frame43), alignment35); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment35), 0, 0, 12, 0); hbox30 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox30, "hbox30"); gtk_widget_show (hbox30); gtk_container_add (GTK_CONTAINER (alignment35), hbox30); fdsn_entry = gtk_entry_new (); gtk_widget_set_name (fdsn_entry, "fdsn_entry"); gtk_widget_show (fdsn_entry); gtk_box_pack_start (GTK_BOX (hbox30), fdsn_entry, TRUE, TRUE, 0); b_browse = gtk_button_new_with_mnemonic (_(" Browse ")); gtk_widget_set_name (b_browse, "b_browse"); gtk_widget_show (b_browse); gtk_box_pack_start (GTK_BOX (hbox30), b_browse, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (b_browse), 10); frame47 = gtk_frame_new (NULL); gtk_widget_set_name (frame47, "frame47"); gtk_widget_show (frame47); gtk_box_pack_start (GTK_BOX (vbox22), frame47, TRUE, TRUE, 0); gtk_widget_set_size_request (frame47, -1, 200); gtk_frame_set_shadow_type (GTK_FRAME (frame47), GTK_SHADOW_NONE); alignment39 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment39, "alignment39"); gtk_widget_show (alignment39); gtk_container_add (GTK_CONTAINER (frame47), alignment39); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment39), 0, 0, 12, 0); label68 = gtk_label_new (_(" FileDSN Name ")); gtk_widget_set_name (label68, "label68"); gtk_widget_show (label68); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 1), label68); hbox29 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox29, "hbox29"); gtk_widget_show (hbox29); gtk_container_add (GTK_CONTAINER (notebook2), hbox29); frame44 = gtk_frame_new (NULL); gtk_widget_set_name (frame44, "frame44"); gtk_widget_show (frame44); gtk_box_pack_start (GTK_BOX (hbox29), frame44, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame44), 10); gtk_frame_set_shadow_type (GTK_FRAME (frame44), GTK_SHADOW_NONE); alignment36 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment36, "alignment36"); gtk_widget_show (alignment36); gtk_container_add (GTK_CONTAINER (frame44), alignment36); gtk_widget_set_size_request (alignment36, 140, -1); pixmap3 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap3, "pixmap3"); gtk_widget_show (pixmap3); gtk_container_add (GTK_CONTAINER (alignment36), pixmap3); vbox23 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox23, "vbox23"); gtk_widget_show (vbox23); gtk_box_pack_start (GTK_BOX (hbox29), vbox23, TRUE, TRUE, 0); frame45 = gtk_frame_new (NULL); gtk_widget_set_name (frame45, "frame45"); gtk_widget_show (frame45); gtk_box_pack_start (GTK_BOX (vbox23), frame45, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame45), GTK_SHADOW_NONE); alignment37 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment37, "alignment37"); gtk_widget_show (alignment37); gtk_container_add (GTK_CONTAINER (frame45), alignment37); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment37), 0, 0, 4, 0); label80 = gtk_label_new (_("When you click Finish, you will create the data\nsource which you have just configured. The driver\nmay prompt you more information.")); gtk_widget_set_name (label80, "label80"); gtk_widget_show (label80); gtk_container_add (GTK_CONTAINER (alignment37), label80); frame46 = gtk_frame_new (NULL); gtk_widget_set_name (frame46, "frame46"); gtk_widget_show (frame46); gtk_box_pack_start (GTK_BOX (vbox23), frame46, TRUE, TRUE, 0); gtk_widget_set_size_request (frame46, -1, 250); gtk_frame_set_shadow_type (GTK_FRAME (frame46), GTK_SHADOW_NONE); alignment38 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment38, "alignment38"); gtk_widget_show (alignment38); gtk_container_add (GTK_CONTAINER (frame46), alignment38); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment38), 0, 10, 0, 0); scrolledwindow13 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow13, "scrolledwindow13"); gtk_widget_show (scrolledwindow13); gtk_container_add (GTK_CONTAINER (alignment38), scrolledwindow13); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow13), GTK_SHADOW_IN); #if GTK_CHECK_VERSION(2,0,0) result_text = gtk_text_view_new (); #else result_text = gtk_text_new (NULL, NULL); #endif gtk_widget_set_name (result_text, "result_text"); gtk_widget_show (result_text); gtk_container_add (GTK_CONTAINER (scrolledwindow13), result_text); gtk_text_view_set_editable (GTK_TEXT_VIEW (result_text), FALSE); gtk_text_view_set_overwrite (GTK_TEXT_VIEW (result_text), TRUE); label69 = gtk_label_new (_(" Results ")); gtk_widget_set_name (label69, "label69"); gtk_widget_show (label69); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 2), label69); dialog_action_area3 = GTK_DIALOG (fdriverchooser)->action_area; gtk_widget_set_name (dialog_action_area3, "dialog_action_area3"); gtk_widget_show (dialog_action_area3); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area3), GTK_BUTTONBOX_END); b_cancel = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_set_name (b_cancel, "b_cancel"); gtk_widget_show (b_cancel); gtk_dialog_add_action_widget (GTK_DIALOG (fdriverchooser), b_cancel, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (b_cancel, GTK_CAN_DEFAULT); b_back = gtk_button_new_from_stock ("gtk-go-back"); gtk_widget_set_name (b_back, "b_back"); gtk_widget_show (b_back); gtk_dialog_add_action_widget (GTK_DIALOG (fdriverchooser), b_back, 0); gtk_widget_set_sensitive (b_back, FALSE); GTK_WIDGET_SET_FLAGS (b_back, GTK_CAN_DEFAULT); b_continue = gtk_button_new_with_mnemonic (_("Co_ntinue")); gtk_widget_set_name (b_continue, "b_continue"); gtk_widget_show (b_continue); gtk_dialog_add_action_widget (GTK_DIALOG (fdriverchooser), b_continue, 0); GTK_WIDGET_SET_FLAGS (b_continue, GTK_CAN_DEFAULT); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (fdriverchooser, fdriverchooser, "fdriverchooser"); GLADE_HOOKUP_OBJECT_NO_REF (fdriverchooser, dialog_vbox3, "dialog_vbox3"); GLADE_HOOKUP_OBJECT (fdriverchooser, notebook2, "notebook2"); GLADE_HOOKUP_OBJECT (fdriverchooser, hbox26, "hbox26"); GLADE_HOOKUP_OBJECT (fdriverchooser, frame38, "frame38"); GLADE_HOOKUP_OBJECT (fdriverchooser, alignment30, "alignment30"); GLADE_HOOKUP_OBJECT (fdriverchooser, pixmap1, "pixmap1"); GLADE_HOOKUP_OBJECT (fdriverchooser, vbox21, "vbox21"); GLADE_HOOKUP_OBJECT (fdriverchooser, frame39, "frame39"); GLADE_HOOKUP_OBJECT (fdriverchooser, alignment31, "alignment31"); GLADE_HOOKUP_OBJECT (fdriverchooser, scrolledwindow11, "scrolledwindow11"); GLADE_HOOKUP_OBJECT (fdriverchooser, clist2, "clist2"); GLADE_HOOKUP_OBJECT (fdriverchooser, l_name, "l_name"); GLADE_HOOKUP_OBJECT (fdriverchooser, l_file, "l_file"); GLADE_HOOKUP_OBJECT (fdriverchooser, l_date, "l_date"); GLADE_HOOKUP_OBJECT (fdriverchooser, l_size, "l_size"); GLADE_HOOKUP_OBJECT (fdriverchooser, label70, "label70"); GLADE_HOOKUP_OBJECT (fdriverchooser, hbox27, "hbox27"); GLADE_HOOKUP_OBJECT (fdriverchooser, frame40, "frame40"); GLADE_HOOKUP_OBJECT (fdriverchooser, alignment32, "alignment32"); GLADE_HOOKUP_OBJECT (fdriverchooser, b_advanced, "b_advanced"); GLADE_HOOKUP_OBJECT (fdriverchooser, label67, "label67"); GLADE_HOOKUP_OBJECT (fdriverchooser, hbox28, "hbox28"); GLADE_HOOKUP_OBJECT (fdriverchooser, frame41, "frame41"); GLADE_HOOKUP_OBJECT (fdriverchooser, alignment33, "alignment33"); GLADE_HOOKUP_OBJECT (fdriverchooser, pixmap2, "pixmap2"); GLADE_HOOKUP_OBJECT (fdriverchooser, vbox22, "vbox22"); GLADE_HOOKUP_OBJECT (fdriverchooser, frame42, "frame42"); GLADE_HOOKUP_OBJECT (fdriverchooser, alignment34, "alignment34"); GLADE_HOOKUP_OBJECT (fdriverchooser, label79, "label79"); GLADE_HOOKUP_OBJECT (fdriverchooser, frame43, "frame43"); GLADE_HOOKUP_OBJECT (fdriverchooser, alignment35, "alignment35"); GLADE_HOOKUP_OBJECT (fdriverchooser, hbox30, "hbox30"); GLADE_HOOKUP_OBJECT (fdriverchooser, fdsn_entry, "fdsn_entry"); GLADE_HOOKUP_OBJECT (fdriverchooser, b_browse, "b_browse"); GLADE_HOOKUP_OBJECT (fdriverchooser, frame47, "frame47"); GLADE_HOOKUP_OBJECT (fdriverchooser, alignment39, "alignment39"); GLADE_HOOKUP_OBJECT (fdriverchooser, label68, "label68"); GLADE_HOOKUP_OBJECT (fdriverchooser, hbox29, "hbox29"); GLADE_HOOKUP_OBJECT (fdriverchooser, frame44, "frame44"); GLADE_HOOKUP_OBJECT (fdriverchooser, alignment36, "alignment36"); GLADE_HOOKUP_OBJECT (fdriverchooser, pixmap3, "pixmap3"); GLADE_HOOKUP_OBJECT (fdriverchooser, vbox23, "vbox23"); GLADE_HOOKUP_OBJECT (fdriverchooser, frame45, "frame45"); GLADE_HOOKUP_OBJECT (fdriverchooser, alignment37, "alignment37"); GLADE_HOOKUP_OBJECT (fdriverchooser, label80, "label80"); GLADE_HOOKUP_OBJECT (fdriverchooser, frame46, "frame46"); GLADE_HOOKUP_OBJECT (fdriverchooser, alignment38, "alignment38"); GLADE_HOOKUP_OBJECT (fdriverchooser, scrolledwindow13, "scrolledwindow13"); GLADE_HOOKUP_OBJECT (fdriverchooser, result_text, "result_text"); GLADE_HOOKUP_OBJECT (fdriverchooser, label69, "label69"); GLADE_HOOKUP_OBJECT_NO_REF (fdriverchooser, dialog_action_area3, "dialog_action_area3"); GLADE_HOOKUP_OBJECT (fdriverchooser, b_cancel, "b_cancel"); GLADE_HOOKUP_OBJECT (fdriverchooser, b_back, "b_back"); GLADE_HOOKUP_OBJECT (fdriverchooser, b_continue, "b_continue"); /* Notebook events */ gtk_signal_connect_after (GTK_OBJECT (notebook2), "switch_page", GTK_SIGNAL_FUNC (fdriverchooser_switch_page), choose_t); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (b_cancel), "clicked", GTK_SIGNAL_FUNC (fdriverchooser_cancel_clicked), choose_t); /* Continue button events */ gtk_signal_connect (GTK_OBJECT (b_continue), "clicked", GTK_SIGNAL_FUNC (fdriverchooser_next_clicked), choose_t); /* Back button events */ gtk_signal_connect (GTK_OBJECT (b_back), "clicked", GTK_SIGNAL_FUNC (fdriverchooser_prev_clicked), choose_t); /* Browse button events */ gtk_signal_connect (GTK_OBJECT (b_browse), "clicked", GTK_SIGNAL_FUNC (fdriverchooser_browse_clicked), choose_t); /* Advanced button events */ gtk_signal_connect (GTK_OBJECT (b_advanced), "clicked", GTK_SIGNAL_FUNC (fdriverchooser_advanced_clicked), choose_t); /* Driver list events */ gtk_signal_connect (GTK_OBJECT (clist2), "select_row", GTK_SIGNAL_FUNC (fdriver_list_select), choose_t); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (fdriverchooser), "delete_event", GTK_SIGNAL_FUNC (fdelete_event), choose_t); gtk_signal_connect (GTK_OBJECT (fdriverchooser), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_widget_grab_default (b_continue); adddrivers_to_list (clist2, fdriverchooser); choose_t->driverlist = clist2; choose_t->driver = NULL; choose_t->mainwnd = fdriverchooser; choose_t->b_continue = b_continue; choose_t->b_back = b_back; choose_t->tab_panel = notebook2; choose_t->dsn_entry = fdsn_entry; choose_t->mess_entry = result_text; gtk_widget_show_all (fdriverchooser); gtk_main (); } libiodbc-3.52.9/iodbcadm/gtk/translatorchooser.c0000644000076400007640000003707512323210535016571 00000000000000/* * translator.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include "gui.h" #include "img.xpm" static void translator_list_select (GtkWidget *widget, gint row, gint column, GdkEvent *event, TTRANSLATORCHOOSER *choose_t) { LPSTR translator = NULL; if (choose_t) { /* Get the directory name */ gtk_clist_get_text (GTK_CLIST (choose_t->translatorlist), row, 0, &translator); if (translator && event && event->type == GDK_2BUTTON_PRESS) gtk_signal_emit_by_name (GTK_OBJECT (choose_t->b_finish), "clicked", choose_t); } } static void translatorchooser_ok_clicked (GtkWidget *widget, TTRANSLATORCHOOSER *choose_t) { char *szTranslator; if (choose_t) { if (GTK_CLIST (choose_t->translatorlist)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (choose_t->translatorlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->translatorlist)-> selection->data), 0, &szTranslator); choose_t->translator = dm_SQL_A2W (szTranslator, SQL_NTS); } else choose_t->translator = NULL; choose_t->translatorlist = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (choose_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (choose_t->mainwnd); } } static void translatorchooser_cancel_clicked (GtkWidget *widget, TTRANSLATORCHOOSER *choose_t) { if (choose_t) { choose_t->translatorlist = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (choose_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (choose_t->mainwnd); } } static gint delete_event (GtkWidget *widget, GdkEvent *event, TTRANSLATORCHOOSER *choose_t) { translatorchooser_cancel_clicked (widget, choose_t); return FALSE; } void addtranslators_to_list (GtkWidget *widget, GtkWidget *dlg) { char *curr, *buffer = (char *) malloc (sizeof (char) * 65536), *szDriver; char driver[1024], _date[1024], _size[1024]; char *data[4]; int len, i; BOOL careabout; UWORD confMode = ODBC_USER_DSN; struct stat _stat; if (!buffer || !GTK_IS_CLIST (widget)) return; gtk_clist_clear (GTK_CLIST (widget)); /* Get the current config mode */ while (confMode != ODBC_SYSTEM_DSN + 1) { /* Get the list of drivers in the user context */ SQLSetConfigMode (confMode); #ifdef WIN32 len = SQLGetPrivateProfileString ("ODBC 32 bit Translators", NULL, "", buffer, 65535, "odbcinst.ini"); #else len = SQLGetPrivateProfileString ("ODBC Translators", NULL, "", buffer, 65535, "odbcinst.ini"); #endif if (len) goto process; goto end; process: for (curr = buffer; *curr; curr += (STRLEN (curr) + 1)) { /* Shadowing system odbcinst.ini */ for (i = 0, careabout = TRUE; i < GTK_CLIST (widget)->rows; i++) { gtk_clist_get_text (GTK_CLIST (widget), i, 0, &szDriver); if (!strcmp (szDriver, curr)) { careabout = FALSE; break; } } if (!careabout) continue; SQLSetConfigMode (confMode); #ifdef WIN32 SQLGetPrivateProfileString ("ODBC 32 bit Translators", curr, "", driver, sizeof (driver), "odbcinst.ini"); #else SQLGetPrivateProfileString ("ODBC Translators", curr, "", driver, sizeof (driver), "odbcinst.ini"); #endif /* Check if the driver is installed */ if (strcasecmp (driver, "Installed")) goto end; /* Get the driver library name */ SQLSetConfigMode (confMode); if (!SQLGetPrivateProfileString (curr, "Translator", "", driver, sizeof (driver), "odbcinst.ini")) { SQLSetConfigMode (confMode); SQLGetPrivateProfileString ("Default", "Translator", "", driver, sizeof (driver), "odbcinst.ini"); } if (STRLEN (curr) && STRLEN (driver)) { data[0] = curr; data[1] = driver; /* Get some information about the driver */ if (!stat (driver, &_stat)) { sprintf (_size, "%lu Kb", (unsigned long) _stat.st_size / 1024L); sprintf (_date, "%s", ctime (&_stat.st_mtime)); data[2] = _date; data[3] = _size; gtk_clist_append (GTK_CLIST (widget), data); } } } end: if (confMode == ODBC_USER_DSN) confMode = ODBC_SYSTEM_DSN; else confMode = ODBC_SYSTEM_DSN + 1; } if (GTK_CLIST (widget)->rows > 0) { gtk_clist_columns_autosize (GTK_CLIST (widget)); gtk_clist_sort (GTK_CLIST (widget)); } /* Make the clean up */ free (buffer); } void create_translatorchooser (HWND hwnd, TTRANSLATORCHOOSER *choose_t) { GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; GtkWidget *translatorchooser; GtkWidget *vbox41; GtkWidget *hbox57; GtkWidget *frame97; GtkWidget *alignment81; GtkWidget *pixmap1; GtkWidget *frame98; GtkWidget *alignment82; GtkWidget *scrolledwindow21; GtkWidget *clist1; GtkWidget *label158; GtkWidget *label159; GtkWidget *label160; GtkWidget *label161; GtkWidget *label162; GtkWidget *hbuttonbox3; GtkWidget *b_finish; GtkWidget *b_cancel; if (hwnd == NULL || !GTK_IS_WIDGET (hwnd)) return; translatorchooser = gtk_dialog_new (); gtk_widget_set_name (translatorchooser, "translatorchooser"); gtk_widget_set_size_request (translatorchooser, 515, 335); gtk_window_set_title (GTK_WINDOW (translatorchooser), _("Choose a Translator")); gtk_window_set_position (GTK_WINDOW (translatorchooser), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_modal (GTK_WINDOW (translatorchooser), TRUE); gtk_window_set_default_size (GTK_WINDOW (translatorchooser), 600, 450); gtk_window_set_type_hint (GTK_WINDOW (translatorchooser), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (translatorchooser); #endif vbox41 = GTK_DIALOG (translatorchooser)->vbox; gtk_widget_set_name (vbox41, "vbox41"); gtk_widget_show (vbox41); hbox57 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox57, "hbox57"); gtk_widget_show (hbox57); gtk_box_pack_start (GTK_BOX (vbox41), hbox57, TRUE, TRUE, 0); frame97 = gtk_frame_new (NULL); gtk_widget_set_name (frame97, "frame97"); gtk_widget_show (frame97); gtk_box_pack_start (GTK_BOX (hbox57), frame97, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame97), 10); gtk_frame_set_shadow_type (GTK_FRAME (frame97), GTK_SHADOW_NONE); alignment81 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment81, "alignment81"); gtk_widget_show (alignment81); gtk_container_add (GTK_CONTAINER (frame97), alignment81); gtk_widget_set_size_request (alignment81, 140, -1); #if GTK_CHECK_VERSION(2,0,0) style = gtk_widget_get_style (translatorchooser); pixmap = gdk_pixmap_create_from_xpm_d (translatorchooser->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) img_xpm); #else style = gtk_widget_get_style (GTK_WIDGET (hwnd)); pixmap = gdk_pixmap_create_from_xpm_d (GTK_WIDGET (hwnd)->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) img_xpm); #endif pixmap1 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap1, "pixmap1"); gtk_widget_show (pixmap1); gtk_container_add (GTK_CONTAINER (alignment81), pixmap1); frame98 = gtk_frame_new (NULL); gtk_widget_set_name (frame98, "frame98"); gtk_widget_show (frame98); gtk_box_pack_start (GTK_BOX (hbox57), frame98, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame98), GTK_SHADOW_NONE); alignment82 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment82, "alignment82"); gtk_widget_show (alignment82); gtk_container_add (GTK_CONTAINER (frame98), alignment82); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment82), 0, 10, 0, 0); scrolledwindow21 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow21, "scrolledwindow21"); gtk_widget_show (scrolledwindow21); gtk_container_add (GTK_CONTAINER (alignment82), scrolledwindow21); clist1 = gtk_clist_new (4); gtk_widget_set_name (clist1, "clist1"); gtk_widget_show (clist1); gtk_container_add (GTK_CONTAINER (scrolledwindow21), clist1); gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 165); gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 118); gtk_clist_set_column_width (GTK_CLIST (clist1), 2, 80); gtk_clist_set_column_width (GTK_CLIST (clist1), 3, 80); gtk_clist_column_titles_show (GTK_CLIST (clist1)); label158 = gtk_label_new (_("Name")); gtk_widget_set_name (label158, "label158"); gtk_widget_show (label158); gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, label158); gtk_widget_set_size_request (label158, 165, -1); label159 = gtk_label_new (_("File")); gtk_widget_set_name (label159, "label159"); gtk_widget_show (label159); gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, label159); gtk_widget_set_size_request (label159, 118, -1); label160 = gtk_label_new (_("Date")); gtk_widget_set_name (label160, "label160"); gtk_widget_show (label160); gtk_clist_set_column_widget (GTK_CLIST (clist1), 2, label160); gtk_widget_set_size_request (label160, 80, -1); label161 = gtk_label_new (_("Size")); gtk_widget_set_name (label161, "label161"); gtk_widget_show (label161); gtk_clist_set_column_widget (GTK_CLIST (clist1), 3, label161); gtk_widget_set_size_request (label161, 80, -1); label162 = gtk_label_new (_("Select which ODBC Translator you want to use")); gtk_widget_set_name (label162, "label162"); gtk_widget_show (label162); gtk_frame_set_label_widget (GTK_FRAME (frame98), label162); gtk_label_set_use_markup (GTK_LABEL (label162), TRUE); hbuttonbox3 = GTK_DIALOG (translatorchooser)->action_area; gtk_widget_set_name (hbuttonbox3, "hbuttonbox3"); gtk_widget_show (hbuttonbox3); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox3), GTK_BUTTONBOX_END); b_finish = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_set_name (b_finish, "b_finish"); gtk_widget_show (b_finish); gtk_dialog_add_action_widget (GTK_DIALOG (translatorchooser), b_finish, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (b_finish, GTK_CAN_DEFAULT); b_cancel = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_set_name (b_cancel, "b_cancel"); gtk_widget_show (b_cancel); gtk_dialog_add_action_widget (GTK_DIALOG (translatorchooser), b_cancel, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (b_cancel, GTK_CAN_DEFAULT); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (translatorchooser, translatorchooser, "translatorchooser"); GLADE_HOOKUP_OBJECT_NO_REF (translatorchooser, vbox41, "vbox41"); GLADE_HOOKUP_OBJECT (translatorchooser, hbox57, "hbox57"); GLADE_HOOKUP_OBJECT (translatorchooser, frame97, "frame97"); GLADE_HOOKUP_OBJECT (translatorchooser, alignment81, "alignment81"); GLADE_HOOKUP_OBJECT (translatorchooser, pixmap1, "pixmap1"); GLADE_HOOKUP_OBJECT (translatorchooser, frame98, "frame98"); GLADE_HOOKUP_OBJECT (translatorchooser, alignment82, "alignment82"); GLADE_HOOKUP_OBJECT (translatorchooser, scrolledwindow21, "scrolledwindow21"); GLADE_HOOKUP_OBJECT (translatorchooser, clist1, "clist1"); GLADE_HOOKUP_OBJECT (translatorchooser, label158, "label158"); GLADE_HOOKUP_OBJECT (translatorchooser, label159, "label159"); GLADE_HOOKUP_OBJECT (translatorchooser, label160, "label160"); GLADE_HOOKUP_OBJECT (translatorchooser, label161, "label161"); GLADE_HOOKUP_OBJECT (translatorchooser, label162, "label162"); GLADE_HOOKUP_OBJECT_NO_REF (translatorchooser, hbuttonbox3, "hbuttonbox3"); GLADE_HOOKUP_OBJECT (translatorchooser, b_finish, "b_finish"); GLADE_HOOKUP_OBJECT (translatorchooser, b_cancel, "b_cancel"); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (b_finish), "clicked", GTK_SIGNAL_FUNC (translatorchooser_ok_clicked), choose_t); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (b_cancel), "clicked", GTK_SIGNAL_FUNC (translatorchooser_cancel_clicked), choose_t); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (translatorchooser), "delete_event", GTK_SIGNAL_FUNC (delete_event), choose_t); gtk_signal_connect (GTK_OBJECT (translatorchooser), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Translator list events */ gtk_signal_connect (GTK_OBJECT (clist1), "select_row", GTK_SIGNAL_FUNC (translator_list_select), choose_t); addtranslators_to_list (clist1, translatorchooser); choose_t->translatorlist = clist1; choose_t->translator = NULL; choose_t->mainwnd = translatorchooser; choose_t->b_finish = b_finish; gtk_widget_show_all (translatorchooser); gtk_main (); } libiodbc-3.52.9/iodbcadm/gtk/Makefile.in0000644000076400007640000004616712323210643014720 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Makefile.am # # $Id$ # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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 = iodbcadm/gtk DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libiodbcadm_gtk_la_DEPENDENCIES = am_libiodbcadm_gtk_la_OBJECTS = administrator.lo confirm.lo \ connectionpooling.lo driverchooser.lo driversetup.lo \ dsnchooser.lo errorbox.lo gensetup.lo main.lo messagebox.lo \ translatorchooser.lo libiodbcadm_gtk_la_OBJECTS = $(am_libiodbcadm_gtk_la_OBJECTS) libiodbcadm_gtk_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libiodbcadm_gtk_la_LDFLAGS) $(LDFLAGS) -o $@ @GTK_TRUE@am_libiodbcadm_gtk_la_rpath = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/admin/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 = $(libiodbcadm_gtk_la_SOURCES) DIST_SOURCES = $(libiodbcadm_gtk_la_SOURCES) HEADERS = $(noinst_HEADERS) 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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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@ DATEBUILD = `date +%d/%m/%Y_%T` @GTK_TRUE@noinst_LTLIBRARIES = libiodbcadm-gtk.la AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/iodbc \ -I$(top_srcdir)/iodbcadm \ -I$(top_srcdir)/iodbcinst \ @GTK_CFLAGS@ AM_CFLAGS = \ @CFLAGS@ -D__GTK__ -DDATEBUILD=\"$(DATEBUILD)\" libiodbcadm_gtk_la_LDFLAGS = #-static libiodbcadm_gtk_la_LIBADD = @GTK_LIBS@ libiodbcadm_gtk_la_SOURCES = \ administrator.c \ confirm.c \ connectionpooling.c \ driverchooser.c \ driversetup.c \ dsnchooser.c \ errorbox.c \ gensetup.c \ main.c \ messagebox.c \ translatorchooser.c noinst_HEADERS = error.xpm img.xpm odbc4.xpm question.xpm gui.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 iodbcadm/gtk/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu iodbcadm/gtk/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libiodbcadm-gtk.la: $(libiodbcadm_gtk_la_OBJECTS) $(libiodbcadm_gtk_la_DEPENDENCIES) $(libiodbcadm_gtk_la_LINK) $(am_libiodbcadm_gtk_la_rpath) $(libiodbcadm_gtk_la_OBJECTS) $(libiodbcadm_gtk_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/administrator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/confirm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connectionpooling.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/driverchooser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/driversetup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsnchooser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errorbox.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gensetup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/messagebox.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/translatorchooser.Plo@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 $(LTLIBRARIES) $(HEADERS) 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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 clean-noinstLTLIBRARIES \ 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: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags 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 # 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: libiodbc-3.52.9/iodbcadm/gtk/gensetup.c0000644000076400007640000010642112323210535014637 00000000000000/* * gensetup.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "gui.h" static char* STRCONN = "DSN=%s\0Description=%s\0\0"; static int STRCONN_NB_TOKENS = 2; static char *szKeysColumnNames[] = { "Keyword", "Value" }; static char *szKeysButtons[] = { "_Add", "_Update" }; static void addkeywords_to_list(GtkWidget* widget, LPCSTR attrs, TGENSETUP *gensetup_t) { char *curr, *cour; char *data[2]; if (!GTK_IS_CLIST (widget)) return; gtk_clist_clear (GTK_CLIST (widget)); for (curr = (LPSTR) attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "DSN=", STRLEN ("DSN=")) || !strncasecmp (curr, "Driver=", STRLEN ("Driver=")) || !strncasecmp (curr, "Description=", STRLEN ("Description="))) continue; if ((cour = strchr (curr, '='))) { *cour = '\0'; data[0] = curr; data[1] = cour + 1; gtk_clist_append (GTK_CLIST (widget), data); *cour = '='; } else { data[0] = ""; gtk_clist_append (GTK_CLIST (widget), data); } } if (GTK_CLIST (widget)->rows > 0) gtk_clist_sort (GTK_CLIST (widget)); } static void parse_attribute_line(TGENSETUP *gensetup_t, LPCSTR dsn, LPCSTR attrs, BOOL add) { if (dsn && gensetup_t->dsn_entry) { gtk_entry_set_text (GTK_ENTRY (gensetup_t->dsn_entry), dsn); if (add) gtk_widget_set_sensitive (gensetup_t->dsn_entry, TRUE); else gtk_widget_set_sensitive (gensetup_t->dsn_entry, FALSE); } addkeywords_to_list (gensetup_t->key_list, attrs, gensetup_t); } static void gensetup_add_clicked(GtkWidget* widget, TGENSETUP *gensetup_t) { char *szKey; char *data[2]; int i = 0; if (gensetup_t) { data[0] = (char*)gtk_entry_get_text (GTK_ENTRY (gensetup_t->key_entry)); if (STRLEN (data[0])) { data[1] = (char*)gtk_entry_get_text (GTK_ENTRY (gensetup_t->value_entry)); /* Try to see if the keyword already exists */ for (i = 0; i < GTK_CLIST (gensetup_t->key_list)->rows; i++) { gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), i, 0, &szKey); if (STREQ (data[0], szKey)) goto done; } /* An update operation */ if (i < GTK_CLIST (gensetup_t->key_list)->rows) { gtk_clist_set_text (GTK_CLIST (gensetup_t->key_list), i, 1, data[1]); } else if (STRLEN (data[1])) { gtk_clist_append (GTK_CLIST (gensetup_t->key_list), data); } } gtk_clist_sort (GTK_CLIST (gensetup_t->key_list)); done: gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), ""); gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), ""); } } static void gensetup_update_clicked(GtkWidget* widget, TGENSETUP *gensetup_t) { char *data[2]; int i; if (gensetup_t) { data[0] = (char*)gtk_entry_get_text (GTK_ENTRY (gensetup_t->key_entry)); if (STRLEN (data[0])) { data[1] = (char*)gtk_entry_get_text (GTK_ENTRY (gensetup_t->value_entry)); if (GTK_CLIST (gensetup_t->key_list)->selection != NULL) i = GPOINTER_TO_INT (GTK_CLIST (gensetup_t->key_list)->selection-> data); else i = 0; /* An update operation */ if (i < GTK_CLIST (gensetup_t->key_list)->rows) { gtk_clist_set_text (GTK_CLIST (gensetup_t->key_list), i, 0, data[0]); gtk_clist_set_text (GTK_CLIST (gensetup_t->key_list), i, 1, data[1]); } } gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), ""); gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), ""); } } static void gensetup_list_select(GtkWidget* widget, gint row, gint column, GdkEvent *event, TGENSETUP *gensetup_t) { char *szKey, *szValue; if (gensetup_t && GTK_CLIST (gensetup_t->key_list)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), GPOINTER_TO_INT (GTK_CLIST (gensetup_t->key_list)->selection->data), 0, &szKey); gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), GPOINTER_TO_INT (GTK_CLIST (gensetup_t->key_list)->selection->data), 1, &szValue); gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), szKey); gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), szValue); gtk_widget_set_sensitive (gensetup_t->bupdate, TRUE); } } static void gensetup_list_unselect(GtkWidget* widget, gint row, gint column, GdkEvent *event, TGENSETUP *gensetup_t) { if (gensetup_t) { gtk_widget_set_sensitive (gensetup_t->bupdate, FALSE); gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), ""); gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), ""); } } static void gensetup_ok_clicked(GtkWidget* widget, TGENSETUP *gensetup_t) { char *curr, *cour, *szKey, *szValue; int i = 0, size = 0; if (gensetup_t) { /* What is the size of the block to malloc */ if (gensetup_t->dsn_entry) { size += STRLEN (gtk_entry_get_text (GTK_ENTRY (gensetup_t->dsn_entry))) + STRLEN ("DSN=") + 1; size += STRLEN ("Description=") + 1; } else { size = 1; } /* Malloc it (+1 for list-terminating NUL) */ if ((gensetup_t->connstr = (char *) calloc (sizeof(char), ++size))) { if (gensetup_t->dsn_entry) { for (curr = STRCONN, cour = gensetup_t->connstr; i < STRCONN_NB_TOKENS; i++, curr += (STRLEN (curr) + 1)) switch (i) { case 0: sprintf (cour, curr, gtk_entry_get_text (GTK_ENTRY (gensetup_t->dsn_entry))); cour += (STRLEN (cour) + 1); break; case 1: sprintf (cour, curr, ""); cour += (STRLEN (cour) + 1); break; }; } else size = 1; for (i = 0; i < GTK_CLIST (gensetup_t->key_list)->rows; i++) { gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), i, 0, &szKey); gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), i, 1, &szValue); cour = gensetup_t->connstr; gensetup_t->connstr = (char *) malloc (size + STRLEN (szKey) + STRLEN (szValue) + 2); if (gensetup_t->connstr) { memcpy (gensetup_t->connstr, cour, size); sprintf (gensetup_t->connstr + size - 1, "%s=%s", szKey, szValue); free (cour); size += STRLEN (szKey) + STRLEN (szValue) + 2; } else gensetup_t->connstr = cour; } /* add list-terminating NUL */ gensetup_t->connstr[size - 1] = '\0'; } gensetup_t->dsn_entry = NULL; gensetup_t->key_list = NULL; gensetup_t->verify_conn = gtk_toggle_button_get_active((GtkToggleButton*)gensetup_t->verify_conn_cb); gtk_signal_disconnect_by_func (GTK_OBJECT (gensetup_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (gensetup_t->mainwnd); } } static void gensetup_cancel_clicked(GtkWidget* widget, TGENSETUP *gensetup_t) { if (gensetup_t) { gensetup_t->connstr = (LPSTR) -1L; gensetup_t->dsn_entry = NULL; gensetup_t->key_list = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (gensetup_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (gensetup_t->mainwnd); } } static gint delete_event( GtkWidget *widget, GdkEvent *event, TGENSETUP *gensetup_t) { gensetup_cancel_clicked (widget, gensetup_t); return FALSE; } LPSTR create_fgensetup (HWND hwnd, LPCSTR dsn, LPCSTR attrs, BOOL add, BOOL *verify_conn) { GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; GtkWidget *gensetup; GtkWidget *dialog_vbox5; GtkWidget *vbox25; GtkWidget *frame56; GtkWidget *alignment48; GtkWidget *hbox35; GtkWidget *label93; GtkWidget *t_dsn; GtkWidget *frame55; GtkWidget *alignment47; GtkWidget *label92; GtkWidget *frame54; GtkWidget *alignment46; GtkWidget *scrolledwindow15; GtkWidget *clist1; GtkWidget *l_key; GtkWidget *l_value; GtkWidget *frame53; GtkWidget *alignment45; GtkWidget *hbox34; GtkWidget *table4; GtkWidget *label88; GtkWidget *t_value; GtkWidget *b_update; GtkWidget *b_add; GtkWidget *t_keyword; GtkWidget *label89; GtkWidget *frame52; GtkWidget *alignment44; GtkWidget *hbox33; GtkWidget *cb_verify; GtkWidget *dialog_action_area5; GtkWidget *b_cancel; GtkWidget *b_ok; TGENSETUP gensetup_t; char buff[1024]; if (hwnd == NULL || !GTK_IS_WIDGET (hwnd)) return (LPSTR) attrs; gensetup = gtk_dialog_new (); gtk_widget_set_name (gensetup, "gensetup"); gtk_widget_set_size_request (gensetup, 354, 471); gtk_window_set_title (GTK_WINDOW (gensetup), _("File DSN Generic Setup")); gtk_window_set_position (GTK_WINDOW (gensetup), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (gensetup), TRUE); gtk_window_set_type_hint (GTK_WINDOW (gensetup), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (gensetup); #endif dialog_vbox5 = GTK_DIALOG (gensetup)->vbox; gtk_widget_set_name (dialog_vbox5, "dialog_vbox5"); gtk_widget_show (dialog_vbox5); vbox25 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox25, "vbox25"); gtk_widget_show (vbox25); gtk_box_pack_start (GTK_BOX (dialog_vbox5), vbox25, TRUE, TRUE, 0); frame56 = gtk_frame_new (NULL); gtk_widget_set_name (frame56, "frame56"); gtk_widget_show (frame56); gtk_box_pack_start (GTK_BOX (vbox25), frame56, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame56), GTK_SHADOW_NONE); alignment48 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment48, "alignment48"); gtk_widget_show (alignment48); gtk_container_add (GTK_CONTAINER (frame56), alignment48); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment48), 4, 0, 0, 0); hbox35 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox35, "hbox35"); gtk_widget_show (hbox35); gtk_container_add (GTK_CONTAINER (alignment48), hbox35); label93 = gtk_label_new (_("File Data Source Name : ")); gtk_widget_set_name (label93, "label93"); gtk_widget_show (label93); gtk_box_pack_start (GTK_BOX (hbox35), label93, FALSE, FALSE, 0); t_dsn = gtk_entry_new (); gtk_widget_set_name (t_dsn, "t_dsn"); gtk_widget_show (t_dsn); gtk_box_pack_start (GTK_BOX (hbox35), t_dsn, TRUE, TRUE, 0); frame55 = gtk_frame_new (NULL); gtk_widget_set_name (frame55, "frame55"); gtk_widget_show (frame55); gtk_box_pack_start (GTK_BOX (vbox25), frame55, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame55), GTK_SHADOW_NONE); alignment47 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment47, "alignment47"); gtk_widget_show (alignment47); gtk_container_add (GTK_CONTAINER (frame55), alignment47); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment47), 4, 4, 0, 0); label92 = gtk_label_new (_("If you know the driver-specific keywords for this data\nsource, you can type them and their values here. For\nmore information on driver-specific keywords, please\nconsult your ODBC driver documentation.")); gtk_widget_set_name (label92, "label92"); gtk_widget_show (label92); gtk_container_add (GTK_CONTAINER (alignment47), label92); frame54 = gtk_frame_new (NULL); gtk_widget_set_name (frame54, "frame54"); gtk_widget_show (frame54); gtk_box_pack_start (GTK_BOX (vbox25), frame54, TRUE, TRUE, 0); gtk_widget_set_size_request (frame54, -1, 180); gtk_frame_set_shadow_type (GTK_FRAME (frame54), GTK_SHADOW_NONE); alignment46 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment46, "alignment46"); gtk_widget_show (alignment46); gtk_container_add (GTK_CONTAINER (frame54), alignment46); scrolledwindow15 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow15, "scrolledwindow15"); gtk_widget_show (scrolledwindow15); gtk_container_add (GTK_CONTAINER (alignment46), scrolledwindow15); clist1 = gtk_clist_new (2); gtk_widget_set_name (clist1, "clist1"); gtk_widget_show (clist1); gtk_container_add (GTK_CONTAINER (scrolledwindow15), clist1); gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 80); gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 80); gtk_clist_column_titles_show (GTK_CLIST (clist1)); l_key = gtk_label_new (_("Keyword")); gtk_widget_set_name (l_key, "l_key"); gtk_widget_show (l_key); gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, l_key); gtk_widget_set_size_request (l_key, 137, -1); l_value = gtk_label_new (_("Value")); gtk_widget_set_name (l_value, "l_value"); gtk_widget_show (l_value); gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, l_value); frame53 = gtk_frame_new (NULL); gtk_widget_set_name (frame53, "frame53"); gtk_widget_show (frame53); gtk_box_pack_start (GTK_BOX (vbox25), frame53, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame53), GTK_SHADOW_NONE); alignment45 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment45, "alignment45"); gtk_widget_show (alignment45); gtk_container_add (GTK_CONTAINER (frame53), alignment45); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment45), 3, 0, 0, 0); hbox34 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox34, "hbox34"); gtk_widget_show (hbox34); gtk_container_add (GTK_CONTAINER (alignment45), hbox34); table4 = gtk_table_new (2, 3, FALSE); gtk_widget_set_name (table4, "table4"); gtk_widget_show (table4); gtk_box_pack_start (GTK_BOX (hbox34), table4, TRUE, TRUE, 0); label88 = gtk_label_new (_("Value : ")); gtk_widget_set_name (label88, "label88"); gtk_widget_show (label88); gtk_table_attach (GTK_TABLE (table4), label88, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); t_value = gtk_entry_new (); gtk_widget_set_name (t_value, "t_value"); gtk_widget_show (t_value); gtk_table_attach (GTK_TABLE (table4), t_value, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); b_update = gtk_button_new_with_mnemonic (_(" _Update ")); gtk_widget_set_name (b_update, "b_update"); gtk_widget_show (b_update); gtk_table_attach (GTK_TABLE (table4), b_update, 2, 3, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (b_update), 6); gtk_widget_set_sensitive(b_update, FALSE); b_add = gtk_button_new_from_stock ("gtk-add"); gtk_widget_set_name (b_add, "b_add"); gtk_widget_show (b_add); gtk_table_attach (GTK_TABLE (table4), b_add, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (b_add), 6); t_keyword = gtk_entry_new (); gtk_widget_set_name (t_keyword, "t_keyword"); gtk_widget_show (t_keyword); gtk_table_attach (GTK_TABLE (table4), t_keyword, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); label89 = gtk_label_new (_("Keyword : ")); gtk_widget_set_name (label89, "label89"); gtk_widget_show (label89); gtk_table_attach (GTK_TABLE (table4), label89, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); frame52 = gtk_frame_new (NULL); gtk_widget_set_name (frame52, "frame52"); gtk_widget_show (frame52); gtk_box_pack_start (GTK_BOX (vbox25), frame52, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame52), GTK_SHADOW_NONE); alignment44 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment44, "alignment44"); gtk_widget_show (alignment44); gtk_container_add (GTK_CONTAINER (frame52), alignment44); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment44), 0, 3, 12, 0); hbox33 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox33, "hbox33"); gtk_widget_show (hbox33); gtk_container_add (GTK_CONTAINER (alignment44), hbox33); cb_verify = gtk_check_button_new_with_mnemonic (_("Verify this connection (recommended)")); gtk_widget_set_name (cb_verify, "cb_verify"); gtk_widget_show (cb_verify); gtk_box_pack_start (GTK_BOX (hbox33), cb_verify, FALSE, FALSE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_verify), TRUE); dialog_action_area5 = GTK_DIALOG (gensetup)->action_area; gtk_widget_set_name (dialog_action_area5, "dialog_action_area5"); gtk_widget_show (dialog_action_area5); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area5), GTK_BUTTONBOX_END); b_cancel = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_set_name (b_cancel, "b_cancel"); gtk_widget_show (b_cancel); gtk_dialog_add_action_widget (GTK_DIALOG (gensetup), b_cancel, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (b_cancel, GTK_CAN_DEFAULT); b_ok = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_set_name (b_ok, "b_ok"); gtk_widget_show (b_ok); gtk_dialog_add_action_widget (GTK_DIALOG (gensetup), b_ok, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (b_ok, GTK_CAN_DEFAULT); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (gensetup, gensetup, "gensetup"); GLADE_HOOKUP_OBJECT_NO_REF (gensetup, dialog_vbox5, "dialog_vbox5"); GLADE_HOOKUP_OBJECT (gensetup, vbox25, "vbox25"); GLADE_HOOKUP_OBJECT (gensetup, frame56, "frame56"); GLADE_HOOKUP_OBJECT (gensetup, alignment48, "alignment48"); GLADE_HOOKUP_OBJECT (gensetup, hbox35, "hbox35"); GLADE_HOOKUP_OBJECT (gensetup, label93, "label93"); GLADE_HOOKUP_OBJECT (gensetup, t_dsn, "t_dsn"); GLADE_HOOKUP_OBJECT (gensetup, frame55, "frame55"); GLADE_HOOKUP_OBJECT (gensetup, alignment47, "alignment47"); GLADE_HOOKUP_OBJECT (gensetup, label92, "label92"); GLADE_HOOKUP_OBJECT (gensetup, frame54, "frame54"); GLADE_HOOKUP_OBJECT (gensetup, alignment46, "alignment46"); GLADE_HOOKUP_OBJECT (gensetup, scrolledwindow15, "scrolledwindow15"); GLADE_HOOKUP_OBJECT (gensetup, clist1, "clist1"); GLADE_HOOKUP_OBJECT (gensetup, l_key, "l_key"); GLADE_HOOKUP_OBJECT (gensetup, l_value, "l_value"); GLADE_HOOKUP_OBJECT (gensetup, frame53, "frame53"); GLADE_HOOKUP_OBJECT (gensetup, alignment45, "alignment45"); GLADE_HOOKUP_OBJECT (gensetup, hbox34, "hbox34"); GLADE_HOOKUP_OBJECT (gensetup, table4, "table4"); GLADE_HOOKUP_OBJECT (gensetup, label88, "label88"); GLADE_HOOKUP_OBJECT (gensetup, t_value, "t_value"); GLADE_HOOKUP_OBJECT (gensetup, b_update, "b_update"); GLADE_HOOKUP_OBJECT (gensetup, b_add, "b_add"); GLADE_HOOKUP_OBJECT (gensetup, t_keyword, "t_keyword"); GLADE_HOOKUP_OBJECT (gensetup, label89, "label89"); GLADE_HOOKUP_OBJECT (gensetup, frame52, "frame52"); GLADE_HOOKUP_OBJECT (gensetup, alignment44, "alignment44"); GLADE_HOOKUP_OBJECT (gensetup, hbox33, "hbox33"); GLADE_HOOKUP_OBJECT (gensetup, cb_verify, "cb_verify"); GLADE_HOOKUP_OBJECT_NO_REF (gensetup, dialog_action_area5, "dialog_action_area5"); GLADE_HOOKUP_OBJECT (gensetup, b_cancel, "b_cancel"); GLADE_HOOKUP_OBJECT (gensetup, b_ok, "b_ok"); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (b_ok), "clicked", GTK_SIGNAL_FUNC (gensetup_ok_clicked), &gensetup_t); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (b_cancel), "clicked", GTK_SIGNAL_FUNC (gensetup_cancel_clicked), &gensetup_t); /* Add button events */ gtk_signal_connect (GTK_OBJECT (b_add), "clicked", GTK_SIGNAL_FUNC (gensetup_add_clicked), &gensetup_t); /* Update button events */ gtk_signal_connect (GTK_OBJECT (b_update), "clicked", GTK_SIGNAL_FUNC (gensetup_update_clicked), &gensetup_t); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (gensetup), "delete_event", GTK_SIGNAL_FUNC (delete_event), &gensetup_t); gtk_signal_connect (GTK_OBJECT (gensetup), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* List events */ gtk_signal_connect (GTK_OBJECT (clist1), "select_row", GTK_SIGNAL_FUNC (gensetup_list_select), &gensetup_t); gtk_signal_connect (GTK_OBJECT (clist1), "unselect_row", GTK_SIGNAL_FUNC (gensetup_list_unselect), &gensetup_t); gensetup_t.dsn_entry = t_dsn; gensetup_t.key_list = clist1; gensetup_t.bupdate = b_update; gensetup_t.key_entry = t_keyword; gensetup_t.value_entry = t_value; gensetup_t.mainwnd = gensetup; gensetup_t.verify_conn_cb = cb_verify; gensetup_t.verify_conn = *verify_conn; gtk_toggle_button_set_active((GtkToggleButton*)cb_verify, *verify_conn); /* Parse the attributes line */ parse_attribute_line (&gensetup_t, dsn, attrs, add); gtk_widget_show_all (gensetup); gtk_main (); *verify_conn = gensetup_t.verify_conn; return gensetup_t.connstr; } LPSTR create_keyval (HWND hwnd, LPCSTR attrs, BOOL *verify_conn) { GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; GtkWidget *genkeyval; GtkWidget *dialog_vbox4; GtkWidget *vbox24; GtkWidget *frame48; GtkWidget *alignment40; GtkWidget *label81; GtkWidget *frame49; GtkWidget *alignment41; GtkWidget *scrolledwindow14; GtkWidget *clist1; GtkWidget *l_key; GtkWidget *l_value; GtkWidget *frame50; GtkWidget *alignment42; GtkWidget *hbox31; GtkWidget *table3; GtkWidget *label86; GtkWidget *t_value; GtkWidget *b_update; GtkWidget *b_add; GtkWidget *t_keyword; GtkWidget *label87; GtkWidget *frame51; GtkWidget *alignment43; GtkWidget *hbox32; GtkWidget *cb_verify; GtkWidget *dialog_action_area4; GtkWidget *cancelbutton2; GtkWidget *okbutton2; TGENSETUP gensetup_t; char buff[1024]; if (hwnd == NULL || !GTK_IS_WIDGET (hwnd)) return (LPSTR) attrs; genkeyval = gtk_dialog_new (); gtk_widget_set_name (genkeyval, "genkeyval"); gtk_widget_set_size_request (genkeyval, 355, 430); gtk_window_set_title (GTK_WINDOW (genkeyval), _("Advanced File DSN Creation Settings")); gtk_window_set_position (GTK_WINDOW (genkeyval), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (genkeyval), TRUE); gtk_window_set_default_size (GTK_WINDOW (genkeyval), 355, 430); gtk_window_set_type_hint (GTK_WINDOW (genkeyval), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (genkeyval); #endif dialog_vbox4 = GTK_DIALOG (genkeyval)->vbox; gtk_widget_set_name (dialog_vbox4, "dialog_vbox4"); gtk_widget_show (dialog_vbox4); vbox24 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox24, "vbox24"); gtk_widget_show (vbox24); gtk_box_pack_start (GTK_BOX (dialog_vbox4), vbox24, TRUE, TRUE, 0); frame48 = gtk_frame_new (NULL); gtk_widget_set_name (frame48, "frame48"); gtk_widget_show (frame48); gtk_box_pack_start (GTK_BOX (vbox24), frame48, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame48), GTK_SHADOW_NONE); alignment40 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment40, "alignment40"); gtk_widget_show (alignment40); gtk_container_add (GTK_CONTAINER (frame48), alignment40); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment40), 4, 4, 0, 0); label81 = gtk_label_new (_("If you know the driver-specific keywords for this data\nsource, you can type them and their values here. For\nmore information on driver-specific keywords, please\nconsult your ODBC driver documentation.")); gtk_widget_set_name (label81, "label81"); gtk_widget_show (label81); gtk_container_add (GTK_CONTAINER (alignment40), label81); frame49 = gtk_frame_new (NULL); gtk_widget_set_name (frame49, "frame49"); gtk_widget_show (frame49); gtk_box_pack_start (GTK_BOX (vbox24), frame49, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame49), GTK_SHADOW_NONE); alignment41 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment41, "alignment41"); gtk_widget_show (alignment41); gtk_container_add (GTK_CONTAINER (frame49), alignment41); scrolledwindow14 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow14, "scrolledwindow14"); gtk_widget_show (scrolledwindow14); gtk_container_add (GTK_CONTAINER (alignment41), scrolledwindow14); clist1 = gtk_clist_new (2); gtk_widget_set_name (clist1, "clist1"); gtk_widget_show (clist1); gtk_container_add (GTK_CONTAINER (scrolledwindow14), clist1); gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 80); gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 80); gtk_clist_column_titles_show (GTK_CLIST (clist1)); l_key = gtk_label_new (_("Keyword")); gtk_widget_set_name (l_key, "l_key"); gtk_widget_show (l_key); gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, l_key); gtk_widget_set_size_request (l_key, 137, -1); l_value = gtk_label_new (_("Value")); gtk_widget_set_name (l_value, "l_value"); gtk_widget_show (l_value); gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, l_value); frame50 = gtk_frame_new (NULL); gtk_widget_set_name (frame50, "frame50"); gtk_widget_show (frame50); gtk_box_pack_start (GTK_BOX (vbox24), frame50, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame50), GTK_SHADOW_NONE); alignment42 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment42, "alignment42"); gtk_widget_show (alignment42); gtk_container_add (GTK_CONTAINER (frame50), alignment42); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment42), 3, 0, 0, 0); hbox31 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox31, "hbox31"); gtk_widget_show (hbox31); gtk_container_add (GTK_CONTAINER (alignment42), hbox31); table3 = gtk_table_new (2, 3, FALSE); gtk_widget_set_name (table3, "table3"); gtk_widget_show (table3); gtk_box_pack_start (GTK_BOX (hbox31), table3, TRUE, TRUE, 0); label86 = gtk_label_new (_("Value : ")); gtk_widget_set_name (label86, "label86"); gtk_widget_show (label86); gtk_table_attach (GTK_TABLE (table3), label86, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); t_value = gtk_entry_new (); gtk_widget_set_name (t_value, "t_value"); gtk_widget_show (t_value); gtk_table_attach (GTK_TABLE (table3), t_value, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); b_update = gtk_button_new_with_mnemonic (_(" _Update ")); gtk_widget_set_name (b_update, "b_update"); gtk_widget_show (b_update); gtk_table_attach (GTK_TABLE (table3), b_update, 2, 3, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (b_update), 6); gtk_widget_set_sensitive(b_update, FALSE); b_add = gtk_button_new_from_stock ("gtk-add"); gtk_widget_set_name (b_add, "b_add"); gtk_widget_show (b_add); gtk_table_attach (GTK_TABLE (table3), b_add, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (b_add), 6); t_keyword = gtk_entry_new (); gtk_widget_set_name (t_keyword, "t_keyword"); gtk_widget_show (t_keyword); gtk_table_attach (GTK_TABLE (table3), t_keyword, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); label87 = gtk_label_new (_("Keyword : ")); gtk_widget_set_name (label87, "label87"); gtk_widget_show (label87); gtk_table_attach (GTK_TABLE (table3), label87, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); frame51 = gtk_frame_new (NULL); gtk_widget_set_name (frame51, "frame51"); gtk_widget_show (frame51); gtk_box_pack_start (GTK_BOX (vbox24), frame51, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame51), GTK_SHADOW_NONE); alignment43 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment43, "alignment43"); gtk_widget_show (alignment43); gtk_container_add (GTK_CONTAINER (frame51), alignment43); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment43), 0, 3, 12, 0); hbox32 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox32, "hbox32"); gtk_widget_show (hbox32); gtk_container_add (GTK_CONTAINER (alignment43), hbox32); cb_verify = gtk_check_button_new_with_mnemonic (_("Verify this connection (recommended)")); gtk_widget_set_name (cb_verify, "cb_verify"); gtk_widget_show (cb_verify); gtk_box_pack_start (GTK_BOX (hbox32), cb_verify, FALSE, FALSE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_verify), TRUE); dialog_action_area4 = GTK_DIALOG (genkeyval)->action_area; gtk_widget_set_name (dialog_action_area4, "dialog_action_area4"); gtk_widget_show (dialog_action_area4); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area4), GTK_BUTTONBOX_END); cancelbutton2 = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_set_name (cancelbutton2, "cancelbutton2"); gtk_widget_show (cancelbutton2); gtk_dialog_add_action_widget (GTK_DIALOG (genkeyval), cancelbutton2, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (cancelbutton2, GTK_CAN_DEFAULT); okbutton2 = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_set_name (okbutton2, "okbutton2"); gtk_widget_show (okbutton2); gtk_dialog_add_action_widget (GTK_DIALOG (genkeyval), okbutton2, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (okbutton2, GTK_CAN_DEFAULT); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (genkeyval, genkeyval, "genkeyval"); GLADE_HOOKUP_OBJECT_NO_REF (genkeyval, dialog_vbox4, "dialog_vbox4"); GLADE_HOOKUP_OBJECT (genkeyval, vbox24, "vbox24"); GLADE_HOOKUP_OBJECT (genkeyval, frame48, "frame48"); GLADE_HOOKUP_OBJECT (genkeyval, alignment40, "alignment40"); GLADE_HOOKUP_OBJECT (genkeyval, label81, "label81"); GLADE_HOOKUP_OBJECT (genkeyval, frame49, "frame49"); GLADE_HOOKUP_OBJECT (genkeyval, alignment41, "alignment41"); GLADE_HOOKUP_OBJECT (genkeyval, scrolledwindow14, "scrolledwindow14"); GLADE_HOOKUP_OBJECT (genkeyval, clist1, "clist1"); GLADE_HOOKUP_OBJECT (genkeyval, l_key, "l_key"); GLADE_HOOKUP_OBJECT (genkeyval, l_value, "l_value"); GLADE_HOOKUP_OBJECT (genkeyval, frame50, "frame50"); GLADE_HOOKUP_OBJECT (genkeyval, alignment42, "alignment42"); GLADE_HOOKUP_OBJECT (genkeyval, hbox31, "hbox31"); GLADE_HOOKUP_OBJECT (genkeyval, table3, "table3"); GLADE_HOOKUP_OBJECT (genkeyval, label86, "label86"); GLADE_HOOKUP_OBJECT (genkeyval, t_value, "t_value"); GLADE_HOOKUP_OBJECT (genkeyval, b_update, "b_update"); GLADE_HOOKUP_OBJECT (genkeyval, b_add, "b_add"); GLADE_HOOKUP_OBJECT (genkeyval, t_keyword, "t_keyword"); GLADE_HOOKUP_OBJECT (genkeyval, label87, "label87"); GLADE_HOOKUP_OBJECT (genkeyval, frame51, "frame51"); GLADE_HOOKUP_OBJECT (genkeyval, alignment43, "alignment43"); GLADE_HOOKUP_OBJECT (genkeyval, hbox32, "hbox32"); GLADE_HOOKUP_OBJECT (genkeyval, cb_verify, "cb_verify"); GLADE_HOOKUP_OBJECT_NO_REF (genkeyval, dialog_action_area4, "dialog_action_area4"); GLADE_HOOKUP_OBJECT (genkeyval, cancelbutton2, "cancelbutton2"); GLADE_HOOKUP_OBJECT (genkeyval, okbutton2, "okbutton2"); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (okbutton2), "clicked", GTK_SIGNAL_FUNC (gensetup_ok_clicked), &gensetup_t); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (cancelbutton2), "clicked", GTK_SIGNAL_FUNC (gensetup_cancel_clicked), &gensetup_t); /* Add button events */ gtk_signal_connect (GTK_OBJECT (b_add), "clicked", GTK_SIGNAL_FUNC (gensetup_add_clicked), &gensetup_t); /* Update button events */ gtk_signal_connect (GTK_OBJECT (b_update), "clicked", GTK_SIGNAL_FUNC (gensetup_update_clicked), &gensetup_t); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (genkeyval), "delete_event", GTK_SIGNAL_FUNC (delete_event), &gensetup_t); gtk_signal_connect (GTK_OBJECT (genkeyval), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* List events */ gtk_signal_connect (GTK_OBJECT (clist1), "select_row", GTK_SIGNAL_FUNC (gensetup_list_select), &gensetup_t); gtk_signal_connect (GTK_OBJECT (clist1), "unselect_row", GTK_SIGNAL_FUNC (gensetup_list_unselect), &gensetup_t); // gtk_window_add_accel_group (GTK_WINDOW (gensetup), accel_group); gensetup_t.dsn_entry = NULL; gensetup_t.key_list = clist1; gensetup_t.bupdate = b_update; gensetup_t.key_entry = t_keyword; gensetup_t.value_entry = t_value; gensetup_t.mainwnd = genkeyval; gensetup_t.verify_conn_cb = cb_verify; gensetup_t.verify_conn = *verify_conn; gtk_toggle_button_set_active((GtkToggleButton*)cb_verify, *verify_conn); /* Parse the attributes line */ parse_attribute_line (&gensetup_t, NULL, attrs, TRUE); gtk_widget_show_all (genkeyval); gtk_main (); *verify_conn = gensetup_t.verify_conn; return gensetup_t.connstr; } libiodbc-3.52.9/iodbcadm/gtk/administrator.c0000644000076400007640000032227612323210535015675 00000000000000/* * administrator.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifdef __linux # ifndef _GNU_SOURCE # define _GNU_SOURCE /* make sure dladdr is declared */ # endif # define HAVE_DL_INFO 1 #endif #include #include #include #include #include #include "../gui.h" #include "odbc4.xpm" #if defined (HAVE_DLADDR) && !defined(HAVE_DL_INFO) typedef struct { const char *dli_fname; /* File name of defining object. */ void *dli_fbase; /* Load address of that object. */ const char *dli_sname; /* Name of nearest symbol. */ void *dli_saddr; /* Exact value of nearest symbol. */ } Dl_info; #endif /* HAVE_DL_INFO */ static char *szDriverButtons[] = { "_Add a driver", "_Remove the driver", "Confi_gure the driver" }; static char *szCpLabels[] = { "Name", "Pool timeout (seconds)", "Probe query" }; static struct { char *lib_name; char *lib_desc; char *lib_ver_sym; } iODBC_Components[] = { {"libiodbc.so.2", "iODBC Driver Manager", "iodbc_version"}, {"libiodbcadm.so.2", "iODBC Administrator", "iodbcadm_version"}, {"libiodbcinst.so.2", "iODBC Installer", "iodbcinst_version"}, {"libdrvproxy.so.2", "iODBC Driver Setup Proxy", "iodbcproxy_version"}, {"libtranslator.so.2", "iODBC Translation Manager", "iodbctrans_version"} }; static void addcomponents_to_list (GtkWidget *widget) { char _date[1024], _size[1024]; char *data[5]; struct stat _stat; #if defined(HAVE_DLADDR) Dl_info info; #endif void *handle, *proc; int i; if (!GTK_IS_CLIST (widget)) return; gtk_clist_clear (GTK_CLIST (widget)); for (i = 0; i < sizeof (iODBC_Components) / sizeof (iODBC_Components[0]); i++) { /* * Collect basic info on the components */ data[0] = iODBC_Components[i].lib_desc; data[1] = VERSION; data[2] = iODBC_Components[i].lib_name; data[3] = ""; /* Modification Date */ data[4] = ""; /* Size */ if ((handle = dlopen (iODBC_Components[i].lib_name, RTLD_LAZY))) { /* Find out the version of the library */ if ((proc = dlsym (handle, iODBC_Components[i].lib_ver_sym))) data[1] = *(char **) proc; /* Check the size and modification date of the library */ #ifdef HAVE_DLADDR dladdr (proc, &info); if (!stat (info.dli_fname, &_stat)) { sprintf (_size, "%lu Kb", (unsigned long) _stat.st_size / 1024L); sprintf (_date, "%s", ctime (&_stat.st_mtime)); _date[strlen (_date) - 1] = '\0'; /* remove last \n */ data[3] = _date; data[4] = _size; } #endif gtk_clist_append (GTK_CLIST (widget), data); dlclose (handle); } } if (GTK_CLIST (widget)->rows > 0) { gtk_clist_columns_autosize (GTK_CLIST (widget)); gtk_clist_sort (GTK_CLIST (widget)); } } static void addconnectionpool_to_list (GtkWidget *widget) { char *curr, *buffer = (char *) malloc (sizeof (char) * 65536), *szDriver; char cptime[128], cpprobe[1024]; char *data[3]; int len, i; BOOL careabout; UWORD confMode = ODBC_USER_DSN; if (!buffer || !GTK_IS_CLIST (widget)) return; gtk_clist_clear (GTK_CLIST (widget)); /* Get the current config mode */ while (confMode != ODBC_SYSTEM_DSN + 1) { /* Get the list of drivers in the user context */ SQLSetConfigMode (confMode); #ifdef WIN32 len = SQLGetPrivateProfileString ("ODBC 32 bit Drivers", NULL, "", buffer, 65535, "odbcinst.ini"); #else len = SQLGetPrivateProfileString ("ODBC Drivers", NULL, "", buffer, 65535, "odbcinst.ini"); #endif if (len) goto process; goto end; process: for (curr = buffer; *curr; curr += (STRLEN (curr) + 1)) { /* Shadowing system odbcinst.ini */ for (i = 0, careabout = TRUE; i < GTK_CLIST (widget)->rows; i++) { gtk_clist_get_text (GTK_CLIST (widget), i, 0, &szDriver); if (!strcmp (szDriver, curr)) { careabout = FALSE; break; } } if (!careabout) continue; SQLSetConfigMode (confMode); #ifdef WIN32 SQLGetPrivateProfileString ("ODBC 32 bit Drivers", curr, "", cpprobe, sizeof (cpprobe), "odbcinst.ini"); #else SQLGetPrivateProfileString ("ODBC Drivers", curr, "", cpprobe, sizeof (cpprobe), "odbcinst.ini"); #endif /* Check if the driver is installed */ if (strcasecmp (cpprobe, "Installed")) goto end; /* Get the driver library name */ SQLSetConfigMode (confMode); if (!SQLGetPrivateProfileString (curr, "CPTimeout", "", cptime, sizeof (cptime), "odbcinst.ini")) { SQLSetConfigMode (confMode); SQLGetPrivateProfileString ("Default", "CPTimeout", "", cptime, sizeof (cptime), "odbcinst.ini"); } if (!SQLGetPrivateProfileString (curr, "CPProbe", "", cpprobe, sizeof (cpprobe), "odbcinst.ini")) { SQLSetConfigMode (confMode); SQLGetPrivateProfileString ("Default", "CPProbe", "", cpprobe, sizeof (cpprobe), "odbcinst.ini"); } if (STRLEN (curr) && STRLEN (cptime)) { data[0] = curr; data[1] = cptime; data[2] = cpprobe; gtk_clist_append (GTK_CLIST (widget), data); } } end: if (confMode == ODBC_USER_DSN) confMode = ODBC_SYSTEM_DSN; else confMode = ODBC_SYSTEM_DSN + 1; } if (GTK_CLIST (widget)->rows > 0) { gtk_clist_columns_autosize (GTK_CLIST (widget)); gtk_clist_sort (GTK_CLIST (widget)); } /* Make the clean up */ free (buffer); } static void admin_apply_tracing (TTRACING *tracing_t) { /* Write keywords for tracing in the ini file */ SQLWritePrivateProfileString ("ODBC", "Trace", (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tracing_t-> allthetime_rb)) == TRUE || gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tracing_t-> onetime_rb)) == TRUE) ? "1" : "0", NULL); SQLWritePrivateProfileString ("ODBC", "TraceAutoStop", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tracing_t-> onetime_rb)) ? "1" : "0", NULL); SQLWritePrivateProfileString ("ODBC", "TraceFile", gtk_entry_get_text (GTK_ENTRY (tracing_t->logfile_entry)), NULL); } static void admin_switch_page (GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, void **inparams) { TDSNCHOOSER *dsnchoose_t = (inparams) ? inparams[0] : NULL; TDRIVERCHOOSER *driverchoose_t = (inparams) ? inparams[1] : NULL; TTRACING *tracing_t = (inparams) ? inparams[2] : NULL; TCOMPONENT *component_t = (inparams) ? inparams[3] : NULL; TCONNECTIONPOOLING *connectionpool_t = (inparams) ? inparams[4] : NULL; BOOL trace = FALSE, traceauto = FALSE, perfmon = FALSE; char tokenstr[4096] = { 0 }; switch (page_num) { /* The User DSN panel */ case 0: if (dsnchoose_t) { dsnchoose_t->type_dsn = USER_DSN; adddsns_to_list (dsnchoose_t->udsnlist, FALSE); } break; /* The System DSN panel */ case 1: if (dsnchoose_t) { dsnchoose_t->type_dsn = SYSTEM_DSN; adddsns_to_list (dsnchoose_t->sdsnlist, TRUE); } break; /* The File DSN panel */ case 2: if (dsnchoose_t) { dsnchoose_t->type_dsn = FILE_DSN; addlistofdir_to_optionmenu(dsnchoose_t->dir_combo, dsnchoose_t->curr_dir, dsnchoose_t); adddirectories_to_list(dsnchoose_t->mainwnd, dsnchoose_t->dir_list, dsnchoose_t->curr_dir); addfiles_to_list(dsnchoose_t->mainwnd, dsnchoose_t->file_list, dsnchoose_t->curr_dir); } break; /* The ODBC Driver panel */ case 3: if (driverchoose_t) { adddrivers_to_list (driverchoose_t->driverlist, driverchoose_t->mainwnd); gtk_widget_set_sensitive (driverchoose_t->b_remove, FALSE); gtk_widget_set_sensitive (driverchoose_t->b_configure, FALSE); } break; /* The Connection Pooling */ case 4: if (!connectionpool_t->changed) { /* Get the connection pooling options */ SQLGetPrivateProfileString ("ODBC Connection Pooling", "Perfmon", "", tokenstr, sizeof (tokenstr), "odbcinst.ini"); if (!strcasecmp (tokenstr, "1") || !strcasecmp (tokenstr, "On")) perfmon = TRUE; SQLGetPrivateProfileString ("ODBC Connection Pooling", "Retry Wait", "", tokenstr, sizeof (tokenstr), "odbcinst.ini"); if (perfmon) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (connectionpool_t->enperfmon_rb), 1); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (connectionpool_t->disperfmon_rb), 1); gtk_entry_set_text (GTK_ENTRY (connectionpool_t->retwait_entry), tokenstr); connectionpool_t->changed = TRUE; } addconnectionpool_to_list (connectionpool_t->driverlist); break; /* The tracing panel */ case 5: if (!tracing_t->changed) { /* Get the traces options */ SQLGetPrivateProfileString ("ODBC", "Trace", "", tokenstr, sizeof (tokenstr), NULL); if (!strcasecmp (tokenstr, "1") || !strcasecmp (tokenstr, "On")) trace = TRUE; SQLGetPrivateProfileString ("ODBC", "TraceAutoStop", "", tokenstr, sizeof (tokenstr), NULL); if (!strcasecmp (tokenstr, "1") || !strcasecmp (tokenstr, "On")) traceauto = TRUE; SQLGetPrivateProfileString ("ODBC", "TraceFile", "", tokenstr, sizeof (tokenstr), NULL); /* Set the widgets */ if (trace) { if (!traceauto) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tracing_t-> allthetime_rb), 1); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tracing_t-> onetime_rb), 1); } else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tracing_t-> donttrace_rb), 1); gtk_entry_set_text (GTK_ENTRY (tracing_t->logfile_entry), (STRLEN (tokenstr)) ? tokenstr : "sql.log"); tracing_t->changed = TRUE; } break; /* The About panel */ case 6: if (component_t) addcomponents_to_list (component_t->componentlist); break; }; if (dsnchoose_t) { if (dsnchoose_t->uremove) gtk_widget_set_sensitive (dsnchoose_t->uremove, FALSE); if (dsnchoose_t->uconfigure) gtk_widget_set_sensitive (dsnchoose_t->uconfigure, FALSE); if (dsnchoose_t->utest) gtk_widget_set_sensitive (dsnchoose_t->utest, FALSE); if (dsnchoose_t->sremove) gtk_widget_set_sensitive (dsnchoose_t->sremove, FALSE); if (dsnchoose_t->sconfigure) gtk_widget_set_sensitive (dsnchoose_t->sconfigure, FALSE); if (dsnchoose_t->stest) gtk_widget_set_sensitive (dsnchoose_t->stest, FALSE); if (dsnchoose_t->fremove) gtk_widget_set_sensitive(dsnchoose_t->fremove, FALSE); if (dsnchoose_t->fconfigure) gtk_widget_set_sensitive(dsnchoose_t->fconfigure, FALSE); if (dsnchoose_t->ftest) gtk_widget_set_sensitive(dsnchoose_t->ftest, FALSE); } } static void tracing_start_clicked (GtkWidget *widget, TTRACING *tracing_t) { if (tracing_t) admin_apply_tracing (tracing_t); } static void tracing_logfile_choosen (GtkWidget *widget, TTRACING *tracing_t) { if (tracing_t) { gtk_entry_set_text (GTK_ENTRY (tracing_t->logfile_entry), gtk_file_selection_get_filename (GTK_FILE_SELECTION (tracing_t-> filesel))); tracing_t->filesel = NULL; } } static void tracing_browse_clicked (GtkWidget *widget, TTRACING *tracing_t) { GtkWidget *filesel; if (tracing_t) { filesel = gtk_file_selection_new ("Choose your log file ..."); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); gtk_file_selection_set_filename (GTK_FILE_SELECTION (filesel), gtk_entry_get_text (GTK_ENTRY (tracing_t->logfile_entry))); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)-> ok_button), "clicked", GTK_SIGNAL_FUNC (tracing_logfile_choosen), tracing_t); gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)-> ok_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)-> cancel_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (filesel), "delete_event", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); tracing_t->filesel = filesel; gtk_widget_show_all (filesel); gtk_main (); gtk_widget_destroy (filesel); tracing_t->filesel = NULL; } } static void cpdriver_list_select (GtkWidget *widget, gint row, gint column, GdkEvent *event, TCONNECTIONPOOLING *connectionpool_t) { char *szDriver = NULL, *cptimeout, *cpprobe; char sztime[1024] = { 0 }; char szprobe[1024] = { 0 }; TCONNECTIONPOOLING choose_t; if (connectionpool_t) { choose_t = *connectionpool_t; if (GTK_CLIST (connectionpool_t->driverlist)->selection != NULL) { memset(choose_t.timeout, 0, sizeof(choose_t.timeout)); memset(choose_t.probe, 0, sizeof(choose_t.probe)); gtk_clist_get_text (GTK_CLIST (choose_t.driverlist), GPOINTER_TO_INT (GTK_CLIST (choose_t.driverlist)-> selection->data), 0, &szDriver); gtk_clist_get_text (GTK_CLIST (choose_t.driverlist), GPOINTER_TO_INT (GTK_CLIST (choose_t.driverlist)-> selection->data), 1, &cptimeout); gtk_clist_get_text (GTK_CLIST (choose_t.driverlist), GPOINTER_TO_INT (GTK_CLIST (choose_t.driverlist)-> selection->data), 2, &cpprobe); strncpy (choose_t.timeout, cptimeout, sizeof(choose_t.timeout)-1); strncpy (choose_t.probe, cpprobe, sizeof(choose_t.probe)-1); strncpy (choose_t.driver, szDriver, sizeof(choose_t.driver)-1); } if (szDriver && event && event->type == GDK_2BUTTON_PRESS && (create_connectionpool (connectionpool_t->mainwnd, &choose_t) == TRUE)) { sprintf (sztime, "CPTimeout=%s", choose_t.timeout); if (!SQLConfigDriver (connectionpool_t->mainwnd, ODBC_CONFIG_DRIVER, szDriver, sztime, NULL, 0, NULL)) _iodbcdm_errorbox (connectionpool_t->mainwnd, szDriver, "An error occured when trying to set the connection pooling time-out : "); sprintf (szprobe, "CPProbe=%s", choose_t.probe); if (!SQLConfigDriver (connectionpool_t->mainwnd, ODBC_CONFIG_DRIVER, szDriver, szprobe, NULL, 0, NULL)) _iodbcdm_errorbox (connectionpool_t->mainwnd, szDriver, "An error occured when trying to set the connection probe query : "); addconnectionpool_to_list (connectionpool_t->driverlist); } } } static void driver_list_select (GtkWidget *widget, gint row, gint column, GdkEvent *event, TDRIVERCHOOSER *choose_t) { char *szDriver = NULL; if (choose_t) { if (GTK_CLIST (choose_t->driverlist)->selection != NULL) gtk_clist_get_text (GTK_CLIST (choose_t->driverlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->driverlist)->selection-> data), 0, &szDriver); if (szDriver && event && event->type == GDK_2BUTTON_PRESS) gtk_signal_emit_by_name (GTK_OBJECT (choose_t->b_configure), "clicked", choose_t); else { gtk_widget_set_sensitive (choose_t->b_remove, TRUE); gtk_widget_set_sensitive (choose_t->b_configure, TRUE); } } } static void driver_list_unselect (GtkWidget *widget, gint row, gint column, GdkEvent *event, TDRIVERCHOOSER *choose_t) { if (choose_t) { gtk_widget_set_sensitive (choose_t->b_remove, FALSE); gtk_widget_set_sensitive (choose_t->b_configure, FALSE); } } static void driver_add_clicked (GtkWidget *widget, TDRIVERCHOOSER *choose_t) { char connstr[4096] = { 0 }; char tokenstr[4096] = { 0 }; char *cstr; if (choose_t) { cstr = create_driversetup (choose_t->mainwnd, NULL, connstr, FALSE, TRUE); if (cstr && cstr != connstr && cstr != (LPSTR) - 1L) { SQLSetConfigMode (ODBC_USER_DSN); if (!SQLInstallDriverEx (cstr, NULL, tokenstr, sizeof (tokenstr), NULL, ODBC_INSTALL_COMPLETE, NULL)) { _iodbcdm_errorbox (choose_t->mainwnd, NULL, "An error occured when trying to add the driver : "); goto done; } free (cstr); } adddrivers_to_list (choose_t->driverlist, choose_t->mainwnd); done: if (GTK_CLIST (choose_t->driverlist)->selection == NULL) { if (choose_t->b_remove) gtk_widget_set_sensitive (choose_t->b_remove, FALSE); if (choose_t->b_configure) gtk_widget_set_sensitive (choose_t->b_configure, FALSE); } } return; } static void driver_remove_clicked (GtkWidget *widget, TDRIVERCHOOSER *choose_t) { char *szDriver = NULL; if (choose_t) { /* Retrieve the driver name */ if (GTK_CLIST (choose_t->driverlist)->selection != NULL) gtk_clist_get_text (GTK_CLIST (choose_t->driverlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->driverlist)->selection-> data), 0, &szDriver); /* Call the right function */ if (szDriver && create_confirm (choose_t->mainwnd, szDriver, "Are you sure you want to remove this driver ?")) { if (!SQLRemoveDriver (szDriver, create_confirm (choose_t->mainwnd, szDriver, "Do you want to remove all the DSN associated to this driver ?"), NULL)) { _iodbcdm_errorbox (choose_t->mainwnd, szDriver, "An error occured when trying to remove the driver : "); goto done; } adddrivers_to_list (choose_t->driverlist, choose_t->mainwnd); } done: if (GTK_CLIST (choose_t->driverlist)->selection == NULL) { if (choose_t->b_remove) gtk_widget_set_sensitive (choose_t->b_remove, FALSE); if (choose_t->b_configure) gtk_widget_set_sensitive (choose_t->b_configure, FALSE); } } return; } static void driver_configure_clicked (GtkWidget *widget, TDRIVERCHOOSER *choose_t) { char connstr[4096] = { 0 }; char tokenstr[4096] = { 0 }; char *szDriver = NULL, *curr, *cour, *cstr; int size = sizeof (connstr); if (choose_t) { /* Retrieve the driver name */ if (GTK_CLIST (choose_t->driverlist)->selection != NULL) gtk_clist_get_text (GTK_CLIST (choose_t->driverlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->driverlist)->selection-> data), 0, &szDriver); /* Call the right function */ if (szDriver) { SQLSetConfigMode (ODBC_USER_DSN); if (!SQLGetPrivateProfileString (szDriver, NULL, "", tokenstr, sizeof (tokenstr), "odbcinst.ini")) { _iodbcdm_errorbox (choose_t->mainwnd, szDriver, "An error occured when trying to configure the driver : "); goto done; } for (curr = tokenstr, cour = connstr; *curr; curr += (STRLEN (curr) + 1), cour += (STRLEN (cour) + 1)) { STRCPY (cour, curr); cour[STRLEN (curr)] = '='; SQLSetConfigMode (ODBC_USER_DSN); SQLGetPrivateProfileString (szDriver, curr, "", cour + STRLEN (curr) + 1, size - STRLEN (curr) - 1, "odbcinst.ini"); size -= (STRLEN (cour) + 1); } *cour = 0; cstr = create_driversetup (choose_t->mainwnd, szDriver, connstr, FALSE, TRUE); if (cstr && cstr != connstr && cstr != (LPSTR) - 1L) { SQLSetConfigMode (ODBC_USER_DSN); if (!SQLInstallDriverEx (cstr, NULL, tokenstr, sizeof (tokenstr), NULL, ODBC_INSTALL_COMPLETE, NULL)) { _iodbcdm_errorbox (choose_t->mainwnd, NULL, "An error occured when trying to configure the driver : "); goto done; } free (cstr); } adddrivers_to_list (choose_t->driverlist, choose_t->mainwnd); } done: if (GTK_CLIST (choose_t->driverlist)->selection == NULL) { if (choose_t->b_remove) gtk_widget_set_sensitive (choose_t->b_remove, FALSE); if (choose_t->b_configure) gtk_widget_set_sensitive (choose_t->b_configure, FALSE); } } return; } static void admin_ok_clicked (GtkWidget *widget, void **inparams) { TDSNCHOOSER *dsnchoose_t = (inparams) ? inparams[0] : NULL; TDRIVERCHOOSER *driverchoose_t = (inparams) ? inparams[1] : NULL; TTRACING *tracing_t = (inparams) ? inparams[2] : NULL; TCOMPONENT *component_t = (inparams) ? inparams[3] : NULL; TCONNECTIONPOOLING *connectionpool_t = (inparams) ? inparams[4] : NULL; GtkWidget *mainwnd = (inparams) ? inparams[5] : NULL; if (dsnchoose_t) { dsnchoose_t->udsnlist = dsnchoose_t->sdsnlist = dsnchoose_t->dir_list = NULL; dsnchoose_t->fadd = dsnchoose_t->fremove = dsnchoose_t->ftest = dsnchoose_t->fconfigure = dsnchoose_t->fsetdir = NULL; dsnchoose_t->uadd = dsnchoose_t->uremove = dsnchoose_t->utest = dsnchoose_t->uconfigure = NULL; dsnchoose_t->sadd = dsnchoose_t->sremove = dsnchoose_t->stest = dsnchoose_t->sconfigure = NULL; dsnchoose_t->file_list = dsnchoose_t->file_entry = dsnchoose_t->dir_combo = NULL; dsnchoose_t->type_dsn = -1; dsnchoose_t->dsn = NULL; } if (driverchoose_t) driverchoose_t->driverlist = NULL; if (component_t) component_t->componentlist = NULL; if (tracing_t) { if (tracing_t->changed) admin_apply_tracing (tracing_t); tracing_t->logfile_entry = tracing_t->tracelib_entry = tracing_t->b_start_stop = NULL; tracing_t->donttrace_rb = tracing_t->allthetime_rb = tracing_t->onetime_rb = NULL; } if (connectionpool_t) { if (connectionpool_t->changed) { /* Write keywords for tracing in the ini file */ SQLWritePrivateProfileString ("ODBC Connection Pooling", "PerfMon", (GTK_TOGGLE_BUTTON (connectionpool_t->enperfmon_rb)-> active) ? "1" : "0", "odbcinst.ini"); SQLWritePrivateProfileString ("ODBC Connection Pooling", "Retry Wait", gtk_entry_get_text (GTK_ENTRY (connectionpool_t-> retwait_entry)), "odbcinst.ini"); } connectionpool_t->driverlist = connectionpool_t->mainwnd = NULL; connectionpool_t->enperfmon_rb = connectionpool_t->disperfmon_rb = NULL; connectionpool_t->retwait_entry = NULL; } if (mainwnd) { gtk_signal_disconnect_by_func (GTK_OBJECT (mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (mainwnd); } } static void admin_cancel_clicked (GtkWidget *widget, void **inparams) { TDSNCHOOSER *dsnchoose_t = (inparams) ? inparams[0] : NULL; TDRIVERCHOOSER *driverchoose_t = (inparams) ? inparams[1] : NULL; TTRACING *tracing_t = (inparams) ? inparams[2] : NULL; TCOMPONENT *component_t = (inparams) ? inparams[3] : NULL; TCONNECTIONPOOLING *connectionpool_t = (inparams) ? inparams[4] : NULL; GtkWidget *mainwnd = (inparams) ? inparams[5] : NULL; if (dsnchoose_t) { dsnchoose_t->udsnlist = dsnchoose_t->sdsnlist = dsnchoose_t->dir_list = NULL; dsnchoose_t->fadd = dsnchoose_t->fremove = dsnchoose_t->ftest = dsnchoose_t->fconfigure = dsnchoose_t->fsetdir = NULL; dsnchoose_t->uadd = dsnchoose_t->uremove = dsnchoose_t->utest = dsnchoose_t->uconfigure = NULL; dsnchoose_t->sadd = dsnchoose_t->sremove = dsnchoose_t->stest = dsnchoose_t->sconfigure = NULL; dsnchoose_t->file_list = dsnchoose_t->file_entry = dsnchoose_t->dir_combo = NULL; dsnchoose_t->type_dsn = -1; dsnchoose_t->dsn = NULL; } if (driverchoose_t) driverchoose_t->driverlist = NULL; if (component_t) component_t->componentlist = NULL; if (tracing_t) { tracing_t->logfile_entry = tracing_t->tracelib_entry = tracing_t->b_start_stop = NULL; tracing_t->donttrace_rb = tracing_t->allthetime_rb = tracing_t->onetime_rb = NULL; } if (connectionpool_t) { connectionpool_t->driverlist = connectionpool_t->mainwnd = NULL; connectionpool_t->enperfmon_rb = connectionpool_t->disperfmon_rb = NULL; connectionpool_t->retwait_entry = NULL; } if (mainwnd) { gtk_signal_disconnect_by_func (GTK_OBJECT (mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (mainwnd); } } static gint delete_event (GtkWidget *widget, GdkEvent *event, void **inparams) { admin_cancel_clicked (widget, inparams); return FALSE; } void create_administrator (HWND hwnd) { GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; GtkWidget *admin; GtkWidget *dialog_vbox1; GtkWidget *notebook1; GtkWidget *vbox1; GtkWidget *frame1; GtkWidget *alignment1; GtkWidget *hbox2; GtkWidget *scrolledwindow1; GtkWidget *lst_usources; GtkWidget *lu_name; GtkWidget *lu_description; GtkWidget *lu_driver; GtkWidget *vbox3; GtkWidget *bu_add; GtkWidget *bu_remove; GtkWidget *bu_config; GtkWidget *bu_test; GtkWidget *frame18; GtkWidget *alignment18; GtkWidget *l_usdsn; GtkWidget *frame2; GtkWidget *alignment2; GtkWidget *hbox3; GtkWidget *pixmap1; GtkWidget *label14; GtkWidget *label1; GtkWidget *vbox4; GtkWidget *frame3; GtkWidget *alignment3; GtkWidget *hbox4; GtkWidget *scrolledwindow2; GtkWidget *lst_ssources; GtkWidget *ls_name; GtkWidget *ls_description; GtkWidget *ls_driver; GtkWidget *vbox5; GtkWidget *bs_add; GtkWidget *bs_remove; GtkWidget *bs_config; GtkWidget *bs_test; GtkWidget *frame19; GtkWidget *alignment19; GtkWidget *label18; GtkWidget *frame4; GtkWidget *alignment4; GtkWidget *hbox5; GtkWidget *pixmap2; GtkWidget *label19; GtkWidget *label2; GtkWidget *vbox6; GtkWidget *frame5; GtkWidget *alignment5; GtkWidget *hbox6; GtkWidget *vbox8; GtkWidget *hbox8; GtkWidget *frame7; GtkWidget *alignment7; GtkWidget *hbox9; GtkWidget *l_lookin; GtkWidget *optionmenu1; GtkWidget *menu1; GtkWidget *hbox11; GtkWidget *scrolledwindow3; GtkWidget *lst_fdir; GtkWidget *l_directory; GtkWidget *scrolledwindow4; GtkWidget *lst_ffiles; GtkWidget *l_files; GtkWidget *frame8; GtkWidget *alignment8; GtkWidget *hbox10; GtkWidget *l_selected; GtkWidget *t_fileselected; GtkWidget *vbox7; GtkWidget *bf_add; GtkWidget *bf_remove; GtkWidget *bf_config; GtkWidget *bf_test; GtkWidget *bf_setdir; GtkWidget *frame20; GtkWidget *alignment20; GtkWidget *frame6; GtkWidget *alignment6; GtkWidget *hbox7; GtkWidget *pixmap3; GtkWidget *label24; GtkWidget *label53; GtkWidget *vbox9; GtkWidget *frame9; GtkWidget *alignment9; GtkWidget *hbox12; GtkWidget *scrolledwindow5; GtkWidget *lst_drivers; GtkWidget *ld_name; GtkWidget *ld_file; GtkWidget *ld_date; GtkWidget *ld_size; GtkWidget *label32; GtkWidget *frame10; GtkWidget *alignment10; GtkWidget *hbox13; GtkWidget *b_add_driver; GtkWidget *b_remove_driver; GtkWidget *b_configure_driver; GtkWidget *frame17; GtkWidget *alignment17; GtkWidget *hbox20; GtkWidget *pixmap4; GtkWidget *label54; GtkWidget *label4; GtkWidget *vbox11; GtkWidget *hbox21; GtkWidget *frame21; GtkWidget *alignment21; GtkWidget *frame24; GtkWidget *alignment24; GtkWidget *scrolledwindow9; GtkWidget *lst_pool; GtkWidget *lp_name; GtkWidget *lp_timeout; GtkWidget *lp_probe; GtkWidget *label58; GtkWidget *label55; GtkWidget *vbox17; GtkWidget *frame22; GtkWidget *alignment22; GtkWidget *vbox18; GtkWidget *br_enable; GSList *br_enable_group = NULL; GtkWidget *br_disable; GtkWidget *label56; GtkWidget *frame23; GtkWidget *alignment23; GtkWidget *t_retrywait; GtkWidget *label57; GtkWidget *frame12; GtkWidget *alignment12; GtkWidget *hbox15; GtkWidget *pixmap5; GtkWidget *label38; GtkWidget *label5; GtkWidget *vbox13; GtkWidget *table1; GtkWidget *frame30; GtkWidget *frame25; GtkWidget *alignment25; GtkWidget *table2; GtkWidget *b_donottrace; GSList *b_donottrace_group = NULL; GtkWidget *b_allthetime; GtkWidget *b_onetime; GtkWidget *b_start; GtkWidget *frame28; GtkWidget *label59; GtkWidget *frame27; GtkWidget *alignment27; GtkWidget *vbox20; GtkWidget *t_tracelib; GtkWidget *hbox23; GtkWidget *frame34; GtkWidget *bt_select_library; GtkWidget *frame35; GtkWidget *frame31; GtkWidget *label61; GtkWidget *frame26; GtkWidget *alignment26; GtkWidget *vbox19; GtkWidget *t_logfile; GtkWidget *hbox22; GtkWidget *frame32; GtkWidget *bt_browse; GtkWidget *frame33; GtkWidget *frame29; GtkWidget *label60; GtkWidget *frame14; GtkWidget *alignment14; GtkWidget *hbox17; GtkWidget *pixmap6; GtkWidget *label43; GtkWidget *label6; GtkWidget *vbox15; GtkWidget *frame15; GtkWidget *alignment15; GtkWidget *hbox18; GtkWidget *scrolledwindow8; GtkWidget *lst_about; GtkWidget *la_name; GtkWidget *la_version; GtkWidget *la_file; GtkWidget *la_date; GtkWidget *la_size; GtkWidget *label47; GtkWidget *frame16; GtkWidget *alignment16; GtkWidget *hbox19; GtkWidget *pixmap7; GtkWidget *label48; GtkWidget *label7; GtkWidget *dialog_action_area1; GtkWidget *cancelbutton1; GtkWidget *okbutton1; GtkAccelGroup *accel_group; TDSNCHOOSER dsnchoose_t; TDRIVERCHOOSER driverchoose_t; TCOMPONENT component_t; TTRACING tracing_t; TCONNECTIONPOOLING connectionpool_t; void *inparams[6]; accel_group = gtk_accel_group_new (); admin = gtk_dialog_new (); gtk_widget_set_name (admin, "admin"); gtk_widget_set_size_request (admin, 600, 450); gtk_window_set_title (GTK_WINDOW (admin), _("iODBC Data Source Administrator")); gtk_window_set_position (GTK_WINDOW (admin), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (admin), TRUE); gtk_window_set_default_size (GTK_WINDOW (admin), 600, 450); gtk_window_set_type_hint (GTK_WINDOW (admin), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (admin); #endif dialog_vbox1 = GTK_DIALOG (admin)->vbox; gtk_widget_set_name (dialog_vbox1, "dialog_vbox1"); gtk_widget_show (dialog_vbox1); notebook1 = gtk_notebook_new (); gtk_widget_set_name (notebook1, "notebook1"); gtk_widget_show (notebook1); gtk_box_pack_start (GTK_BOX (dialog_vbox1), notebook1, TRUE, TRUE, 0); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox1, "vbox1"); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (notebook1), vbox1); frame1 = gtk_frame_new (NULL); gtk_widget_set_name (frame1, "frame1"); gtk_widget_show (frame1); gtk_box_pack_start (GTK_BOX (vbox1), frame1, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_NONE); alignment1 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment1, "alignment1"); gtk_widget_show (alignment1); gtk_container_add (GTK_CONTAINER (frame1), alignment1); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment1), 0, 0, 4, 0); hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox2, "hbox2"); gtk_widget_show (hbox2); gtk_container_add (GTK_CONTAINER (alignment1), hbox2); scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow1, "scrolledwindow1"); gtk_widget_show (scrolledwindow1); gtk_box_pack_start (GTK_BOX (hbox2), scrolledwindow1, TRUE, TRUE, 0); gtk_widget_set_size_request (scrolledwindow1, 440, 219); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_SHADOW_IN); lst_usources = gtk_clist_new (3); gtk_widget_set_name (lst_usources, "lst_usources"); gtk_widget_show (lst_usources); gtk_container_add (GTK_CONTAINER (scrolledwindow1), lst_usources); gtk_clist_set_column_width (GTK_CLIST (lst_usources), 0, 80); gtk_clist_set_column_width (GTK_CLIST (lst_usources), 1, 80); gtk_clist_set_column_width (GTK_CLIST (lst_usources), 2, 80); gtk_clist_column_titles_show (GTK_CLIST (lst_usources)); lu_name = gtk_label_new (_("Name")); gtk_widget_set_name (lu_name, "lu_name"); gtk_widget_show (lu_name); gtk_clist_set_column_widget (GTK_CLIST (lst_usources), 0, lu_name); gtk_widget_set_size_request (lu_name, 100, -1); lu_description = gtk_label_new (_("Description")); gtk_widget_set_name (lu_description, "lu_description"); gtk_widget_show (lu_description); gtk_clist_set_column_widget (GTK_CLIST (lst_usources), 1, lu_description); gtk_widget_set_size_request (lu_description, 162, -1); lu_driver = gtk_label_new (_("Driver")); gtk_widget_set_name (lu_driver, "lu_driver"); gtk_widget_show (lu_driver); gtk_clist_set_column_widget (GTK_CLIST (lst_usources), 2, lu_driver); gtk_widget_set_size_request (lu_driver, 80, -1); vbox3 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox3, "vbox3"); gtk_widget_show (vbox3); gtk_box_pack_start (GTK_BOX (hbox2), vbox3, FALSE, TRUE, 0); bu_add = gtk_button_new_from_stock ("gtk-add"); gtk_widget_set_name (bu_add, "bu_add"); gtk_widget_show (bu_add); gtk_box_pack_start (GTK_BOX (vbox3), bu_add, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bu_add), 4); GTK_WIDGET_SET_FLAGS (bu_add, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bu_add, "clicked", accel_group, GDK_A, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bu_remove = gtk_button_new_from_stock ("gtk-remove"); gtk_widget_set_name (bu_remove, "bu_remove"); gtk_widget_show (bu_remove); gtk_box_pack_start (GTK_BOX (vbox3), bu_remove, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bu_remove), 4); gtk_widget_set_sensitive (bu_remove, FALSE); GTK_WIDGET_SET_FLAGS (bu_remove, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bu_remove, "clicked", accel_group, GDK_R, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bu_config = gtk_button_new_with_mnemonic (_("Confi_gure")); gtk_widget_set_name (bu_config, "bu_config"); gtk_widget_show (bu_config); gtk_box_pack_start (GTK_BOX (vbox3), bu_config, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bu_config), 4); gtk_widget_set_sensitive (bu_config, FALSE); GTK_WIDGET_SET_FLAGS (bu_config, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bu_config, "clicked", accel_group, GDK_G, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); gtk_widget_add_accelerator (bu_config, "clicked", accel_group, GDK_g, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bu_test = gtk_button_new_with_mnemonic (_("_Test")); gtk_widget_set_name (bu_test, "bu_test"); gtk_widget_show (bu_test); gtk_box_pack_start (GTK_BOX (vbox3), bu_test, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bu_test), 4); gtk_widget_set_sensitive (bu_test, FALSE); GTK_WIDGET_SET_FLAGS (bu_test, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bu_test, "clicked", accel_group, GDK_T, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); frame18 = gtk_frame_new (NULL); gtk_widget_set_name (frame18, "frame18"); gtk_widget_show (frame18); gtk_box_pack_start (GTK_BOX (vbox3), frame18, TRUE, TRUE, 0); gtk_widget_set_size_request (frame18, -1, 80); gtk_frame_set_shadow_type (GTK_FRAME (frame18), GTK_SHADOW_NONE); alignment18 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment18, "alignment18"); gtk_widget_show (alignment18); gtk_container_add (GTK_CONTAINER (frame18), alignment18); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment18), 0, 0, 12, 0); l_usdsn = gtk_label_new (_(" User Data Sources:")); gtk_widget_set_name (l_usdsn, "l_usdsn"); gtk_widget_show (l_usdsn); gtk_frame_set_label_widget (GTK_FRAME (frame1), l_usdsn); gtk_label_set_use_markup (GTK_LABEL (l_usdsn), TRUE); frame2 = gtk_frame_new (NULL); gtk_widget_set_name (frame2, "frame2"); gtk_widget_show (frame2); gtk_box_pack_start (GTK_BOX (vbox1), frame2, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame2), 3); alignment2 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment2, "alignment2"); gtk_widget_show (alignment2); gtk_container_add (GTK_CONTAINER (frame2), alignment2); hbox3 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox3, "hbox3"); gtk_widget_show (hbox3); gtk_container_add (GTK_CONTAINER (alignment2), hbox3); gtk_container_set_border_width (GTK_CONTAINER (hbox3), 10); #if GTK_CHECK_VERSION(2,0,0) style = gtk_widget_get_style (admin); pixmap = gdk_pixmap_create_from_xpm_d (admin->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) odbc4_xpm); #else style = gtk_widget_get_style (GTK_WIDGET (hwnd)); pixmap = gdk_pixmap_create_from_xpm_d (GTK_WIDGET (hwnd)->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) odbc4_xpm); #endif pixmap1 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap1, "pixmap1"); gtk_widget_show (pixmap1); gtk_box_pack_start (GTK_BOX (hbox3), pixmap1, FALSE, TRUE, 10); label14 = gtk_label_new (_("An ODBC User data source stores information about to connect to\nthe indicated data provider. A User data source is only available to you,\nand can only be used on the current machine.")); gtk_widget_set_name (label14, "label14"); gtk_widget_show (label14); gtk_box_pack_start (GTK_BOX (hbox3), label14, FALSE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label14), GTK_JUSTIFY_FILL); label1 = gtk_label_new (_("User DSN")); gtk_widget_set_name (label1, "label1"); gtk_widget_show (label1); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label1); dsnchoose_t.uadd = bu_add; dsnchoose_t.uremove = bu_remove; dsnchoose_t.utest = bu_test; dsnchoose_t.uconfigure = bu_config; vbox4 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox4, "vbox4"); gtk_widget_show (vbox4); gtk_container_add (GTK_CONTAINER (notebook1), vbox4); frame3 = gtk_frame_new (NULL); gtk_widget_set_name (frame3, "frame3"); gtk_widget_show (frame3); gtk_box_pack_start (GTK_BOX (vbox4), frame3, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame3), GTK_SHADOW_NONE); alignment3 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment3, "alignment3"); gtk_widget_show (alignment3); gtk_container_add (GTK_CONTAINER (frame3), alignment3); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment3), 0, 0, 4, 0); hbox4 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox4, "hbox4"); gtk_widget_show (hbox4); gtk_container_add (GTK_CONTAINER (alignment3), hbox4); scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow2, "scrolledwindow2"); gtk_widget_show (scrolledwindow2); gtk_box_pack_start (GTK_BOX (hbox4), scrolledwindow2, TRUE, TRUE, 0); gtk_widget_set_size_request (scrolledwindow2, 440, 219); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow2), GTK_SHADOW_IN); lst_ssources = gtk_clist_new (3); gtk_widget_set_name (lst_ssources, "lst_ssources"); gtk_widget_show (lst_ssources); gtk_container_add (GTK_CONTAINER (scrolledwindow2), lst_ssources); gtk_clist_set_column_width (GTK_CLIST (lst_ssources), 0, 80); gtk_clist_set_column_width (GTK_CLIST (lst_ssources), 1, 80); gtk_clist_set_column_width (GTK_CLIST (lst_ssources), 2, 80); gtk_clist_column_titles_show (GTK_CLIST (lst_ssources)); ls_name = gtk_label_new (_("Name")); gtk_widget_set_name (ls_name, "ls_name"); gtk_widget_show (ls_name); gtk_clist_set_column_widget (GTK_CLIST (lst_ssources), 0, ls_name); gtk_widget_set_size_request (ls_name, 100, -1); ls_description = gtk_label_new (_("Description")); gtk_widget_set_name (ls_description, "ls_description"); gtk_widget_show (ls_description); gtk_clist_set_column_widget (GTK_CLIST (lst_ssources), 1, ls_description); gtk_widget_set_size_request (ls_description, 162, -1); ls_driver = gtk_label_new (_("Driver")); gtk_widget_set_name (ls_driver, "ls_driver"); gtk_widget_show (ls_driver); gtk_clist_set_column_widget (GTK_CLIST (lst_ssources), 2, ls_driver); gtk_widget_set_size_request (ls_driver, 80, -1); vbox5 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox5, "vbox5"); gtk_widget_show (vbox5); gtk_box_pack_start (GTK_BOX (hbox4), vbox5, FALSE, TRUE, 0); bs_add = gtk_button_new_from_stock ("gtk-add"); gtk_widget_set_name (bs_add, "bs_add"); gtk_widget_show (bs_add); gtk_box_pack_start (GTK_BOX (vbox5), bs_add, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bs_add), 4); GTK_WIDGET_SET_FLAGS (bs_add, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bs_add, "clicked", accel_group, GDK_A, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bs_remove = gtk_button_new_from_stock ("gtk-remove"); gtk_widget_set_name (bs_remove, "bs_remove"); gtk_widget_show (bs_remove); gtk_box_pack_start (GTK_BOX (vbox5), bs_remove, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bs_remove), 4); gtk_widget_set_sensitive (bs_remove, FALSE); GTK_WIDGET_SET_FLAGS (bs_remove, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bs_remove, "clicked", accel_group, GDK_R, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bs_config = gtk_button_new_with_mnemonic (_("Confi_gure")); gtk_widget_set_name (bs_config, "bs_config"); gtk_widget_show (bs_config); gtk_box_pack_start (GTK_BOX (vbox5), bs_config, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bs_config), 4); gtk_widget_set_sensitive (bs_config, FALSE); GTK_WIDGET_SET_FLAGS (bs_config, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bs_config, "clicked", accel_group, GDK_G, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); gtk_widget_add_accelerator (bs_config, "clicked", accel_group, GDK_g, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bs_test = gtk_button_new_with_mnemonic (_("_Test")); gtk_widget_set_name (bs_test, "bs_test"); gtk_widget_show (bs_test); gtk_box_pack_start (GTK_BOX (vbox5), bs_test, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bs_test), 4); gtk_widget_set_sensitive (bs_test, FALSE); GTK_WIDGET_SET_FLAGS (bs_test, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bs_test, "clicked", accel_group, GDK_T, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); frame19 = gtk_frame_new (NULL); gtk_widget_set_name (frame19, "frame19"); gtk_widget_show (frame19); gtk_box_pack_start (GTK_BOX (vbox5), frame19, TRUE, TRUE, 0); gtk_widget_set_size_request (frame19, -1, 80); gtk_frame_set_shadow_type (GTK_FRAME (frame19), GTK_SHADOW_NONE); alignment19 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment19, "alignment19"); gtk_widget_show (alignment19); gtk_container_add (GTK_CONTAINER (frame19), alignment19); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment19), 0, 0, 12, 0); label18 = gtk_label_new (_(" System Data Sources:")); gtk_widget_set_name (label18, "label18"); gtk_widget_show (label18); gtk_frame_set_label_widget (GTK_FRAME (frame3), label18); gtk_label_set_use_markup (GTK_LABEL (label18), TRUE); frame4 = gtk_frame_new (NULL); gtk_widget_set_name (frame4, "frame4"); gtk_widget_show (frame4); gtk_box_pack_start (GTK_BOX (vbox4), frame4, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame4), 3); alignment4 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment4, "alignment4"); gtk_widget_show (alignment4); gtk_container_add (GTK_CONTAINER (frame4), alignment4); hbox5 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox5, "hbox5"); gtk_widget_show (hbox5); gtk_container_add (GTK_CONTAINER (alignment4), hbox5); gtk_container_set_border_width (GTK_CONTAINER (hbox5), 10); pixmap2 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap2, "pixmap2"); gtk_widget_show (pixmap2); gtk_box_pack_start (GTK_BOX (hbox5), pixmap2, FALSE, TRUE, 10); label19 = gtk_label_new (_("An ODBC System data source stores information about to connect to\nthe indicated data provider. A System data source is visible to all\nusers on this machine, including daemons.")); gtk_widget_set_name (label19, "label19"); gtk_widget_show (label19); gtk_box_pack_start (GTK_BOX (hbox5), label19, FALSE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label19), GTK_JUSTIFY_FILL); label2 = gtk_label_new (_("System DSN")); gtk_widget_set_name (label2, "label2"); gtk_widget_show (label2); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), label2); dsnchoose_t.sadd = bs_add; dsnchoose_t.sremove = bs_remove; dsnchoose_t.stest = bs_test; dsnchoose_t.sconfigure = bs_config; vbox6 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox6, "vbox6"); gtk_widget_show (vbox6); gtk_container_add (GTK_CONTAINER (notebook1), vbox6); frame5 = gtk_frame_new (NULL); gtk_widget_set_name (frame5, "frame5"); gtk_widget_show (frame5); gtk_box_pack_start (GTK_BOX (vbox6), frame5, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame5), 2); gtk_frame_set_shadow_type (GTK_FRAME (frame5), GTK_SHADOW_NONE); alignment5 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment5, "alignment5"); gtk_widget_show (alignment5); gtk_container_add (GTK_CONTAINER (frame5), alignment5); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment5), 0, 0, 4, 0); hbox6 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox6, "hbox6"); gtk_widget_show (hbox6); gtk_container_add (GTK_CONTAINER (alignment5), hbox6); vbox8 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox8, "vbox8"); gtk_widget_show (vbox8); gtk_box_pack_start (GTK_BOX (hbox6), vbox8, TRUE, TRUE, 0); gtk_widget_set_size_request (vbox8, 436, 250); hbox8 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox8, "hbox8"); gtk_widget_show (hbox8); gtk_box_pack_start (GTK_BOX (vbox8), hbox8, FALSE, FALSE, 0); frame7 = gtk_frame_new (NULL); gtk_widget_set_name (frame7, "frame7"); gtk_widget_show (frame7); gtk_box_pack_start (GTK_BOX (hbox8), frame7, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame7), 4); gtk_frame_set_shadow_type (GTK_FRAME (frame7), GTK_SHADOW_NONE); alignment7 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment7, "alignment7"); gtk_widget_show (alignment7); gtk_container_add (GTK_CONTAINER (frame7), alignment7); gtk_container_set_border_width (GTK_CONTAINER (alignment7), 2); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment7), 0, 0, 6, 0); hbox9 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox9, "hbox9"); gtk_widget_show (hbox9); gtk_container_add (GTK_CONTAINER (alignment7), hbox9); l_lookin = gtk_label_new (_("Look in : ")); gtk_widget_set_name (l_lookin, "l_lookin"); gtk_widget_show (l_lookin); gtk_box_pack_start (GTK_BOX (hbox9), l_lookin, FALSE, FALSE, 0); optionmenu1 = gtk_option_menu_new (); gtk_widget_set_name (optionmenu1, "optionmenu1"); gtk_widget_show (optionmenu1); gtk_box_pack_start (GTK_BOX (hbox9), optionmenu1, TRUE, TRUE, 0); menu1 = gtk_menu_new (); gtk_widget_set_name (menu1, "menu1"); gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu1), menu1); hbox11 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox11, "hbox11"); gtk_widget_show (hbox11); gtk_box_pack_start (GTK_BOX (vbox8), hbox11, TRUE, TRUE, 0); scrolledwindow3 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow3, "scrolledwindow3"); gtk_widget_show (scrolledwindow3); gtk_box_pack_start (GTK_BOX (hbox11), scrolledwindow3, TRUE, TRUE, 0); gtk_widget_set_size_request (scrolledwindow3, 96, -1); gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow3), 4); lst_fdir = gtk_clist_new (1); gtk_widget_set_name (lst_fdir, "lst_fdir"); gtk_widget_show (lst_fdir); gtk_container_add (GTK_CONTAINER (scrolledwindow3), lst_fdir); gtk_clist_set_column_width (GTK_CLIST (lst_fdir), 0, 80); gtk_clist_column_titles_show (GTK_CLIST (lst_fdir)); l_directory = gtk_label_new (_("Directories")); gtk_widget_set_name (l_directory, "l_directory"); gtk_widget_show (l_directory); gtk_clist_set_column_widget (GTK_CLIST (lst_fdir), 0, l_directory); scrolledwindow4 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow4, "scrolledwindow4"); gtk_widget_show (scrolledwindow4); gtk_box_pack_start (GTK_BOX (hbox11), scrolledwindow4, TRUE, TRUE, 0); gtk_widget_set_size_request (scrolledwindow4, 102, -1); gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow4), 4); lst_ffiles = gtk_clist_new (1); gtk_widget_set_name (lst_ffiles, "lst_ffiles"); gtk_widget_show (lst_ffiles); gtk_container_add (GTK_CONTAINER (scrolledwindow4), lst_ffiles); gtk_clist_set_column_width (GTK_CLIST (lst_ffiles), 0, 80); gtk_clist_column_titles_show (GTK_CLIST (lst_ffiles)); l_files = gtk_label_new (_("Files")); gtk_widget_set_name (l_files, "l_files"); gtk_widget_show (l_files); gtk_clist_set_column_widget (GTK_CLIST (lst_ffiles), 0, l_files); frame8 = gtk_frame_new (NULL); gtk_widget_set_name (frame8, "frame8"); gtk_widget_show (frame8); gtk_box_pack_start (GTK_BOX (vbox8), frame8, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame8), 4); gtk_frame_set_shadow_type (GTK_FRAME (frame8), GTK_SHADOW_NONE); alignment8 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment8, "alignment8"); gtk_widget_show (alignment8); gtk_container_add (GTK_CONTAINER (frame8), alignment8); gtk_container_set_border_width (GTK_CONTAINER (alignment8), 2); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment8), 0, 0, 6, 0); hbox10 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox10, "hbox10"); gtk_widget_show (hbox10); gtk_container_add (GTK_CONTAINER (alignment8), hbox10); l_selected = gtk_label_new (_("File selected:")); gtk_widget_set_name (l_selected, "l_selected"); gtk_widget_show (l_selected); gtk_box_pack_start (GTK_BOX (hbox10), l_selected, FALSE, FALSE, 0); t_fileselected = gtk_entry_new (); gtk_widget_set_name (t_fileselected, "t_fileselected"); gtk_widget_show (t_fileselected); gtk_box_pack_start (GTK_BOX (hbox10), t_fileselected, TRUE, TRUE, 0); vbox7 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox7, "vbox7"); gtk_widget_show (vbox7); gtk_box_pack_start (GTK_BOX (hbox6), vbox7, FALSE, TRUE, 0); bf_add = gtk_button_new_from_stock ("gtk-add"); gtk_widget_set_name (bf_add, "bf_add"); gtk_widget_show (bf_add); gtk_box_pack_start (GTK_BOX (vbox7), bf_add, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bf_add), 4); GTK_WIDGET_SET_FLAGS (bf_add, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bf_add, "clicked", accel_group, GDK_A, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bf_remove = gtk_button_new_from_stock ("gtk-remove"); gtk_widget_set_name (bf_remove, "bf_remove"); gtk_widget_show (bf_remove); gtk_box_pack_start (GTK_BOX (vbox7), bf_remove, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bf_remove), 4); GTK_WIDGET_SET_FLAGS (bf_remove, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bf_remove, "clicked", accel_group, GDK_R, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bf_config = gtk_button_new_with_mnemonic (_("Confi_gure")); gtk_widget_set_name (bf_config, "bf_config"); gtk_widget_show (bf_config); gtk_box_pack_start (GTK_BOX (vbox7), bf_config, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bf_config), 4); GTK_WIDGET_SET_FLAGS (bf_config, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bf_config, "clicked", accel_group, GDK_G, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); gtk_widget_add_accelerator (bf_config, "clicked", accel_group, GDK_g, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bf_test = gtk_button_new_with_mnemonic (_("_Test")); gtk_widget_set_name (bf_test, "bf_test"); gtk_widget_show (bf_test); gtk_box_pack_start (GTK_BOX (vbox7), bf_test, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bf_test), 4); GTK_WIDGET_SET_FLAGS (bf_test, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bf_test, "clicked", accel_group, GDK_T, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bf_setdir = gtk_button_new_with_mnemonic (_("_Set Dir")); gtk_widget_set_name (bf_setdir, "bf_setdir"); gtk_widget_show (bf_setdir); gtk_box_pack_start (GTK_BOX (vbox7), bf_setdir, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bf_setdir), 4); GTK_WIDGET_SET_FLAGS (bf_setdir, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bf_setdir, "clicked", accel_group, GDK_S, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); frame20 = gtk_frame_new (NULL); gtk_widget_set_name (frame20, "frame20"); gtk_widget_show (frame20); gtk_box_pack_start (GTK_BOX (vbox7), frame20, TRUE, TRUE, 0); gtk_widget_set_size_request (frame20, -1, 80); gtk_frame_set_shadow_type (GTK_FRAME (frame20), GTK_SHADOW_NONE); alignment20 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment20, "alignment20"); gtk_widget_show (alignment20); gtk_container_add (GTK_CONTAINER (frame20), alignment20); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment20), 0, 0, 12, 0); frame6 = gtk_frame_new (NULL); gtk_widget_set_name (frame6, "frame6"); gtk_widget_show (frame6); gtk_box_pack_start (GTK_BOX (vbox6), frame6, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame6), 3); alignment6 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment6, "alignment6"); gtk_widget_show (alignment6); gtk_container_add (GTK_CONTAINER (frame6), alignment6); hbox7 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox7, "hbox7"); gtk_widget_show (hbox7); gtk_container_add (GTK_CONTAINER (alignment6), hbox7); gtk_container_set_border_width (GTK_CONTAINER (hbox7), 10); pixmap3 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap3, "pixmap3"); gtk_widget_show (pixmap3); gtk_box_pack_start (GTK_BOX (hbox7), pixmap3, FALSE, TRUE, 10); label24 = gtk_label_new (_("Select the file data source that describes the driver that you wish to\nconnect to. You can use any file data source that refers to an ODBC\ndriver which is installed on your machine.")); gtk_widget_set_name (label24, "label24"); gtk_widget_show (label24); gtk_box_pack_start (GTK_BOX (hbox7), label24, FALSE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label24), GTK_JUSTIFY_FILL); label53 = gtk_label_new (_("File DSN")); gtk_widget_set_name (label53, "label53"); gtk_widget_show (label53); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 2), label53); dsnchoose_t.fadd = bf_add; dsnchoose_t.fremove = bf_remove; dsnchoose_t.fconfigure = bf_config; dsnchoose_t.ftest = bf_test; dsnchoose_t.dir_list = lst_fdir; dsnchoose_t.dir_combo = optionmenu1; dsnchoose_t.file_list = lst_ffiles; dsnchoose_t.file_entry = t_fileselected; dsnchoose_t.fsetdir = bf_setdir; dsnchoose_t.udsnlist = lst_usources; dsnchoose_t.sdsnlist = lst_ssources; dsnchoose_t.type_dsn = 0; dsnchoose_t.mainwnd = admin; vbox9 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox9, "vbox9"); gtk_widget_show (vbox9); gtk_container_add (GTK_CONTAINER (notebook1), vbox9); frame9 = gtk_frame_new (NULL); gtk_widget_set_name (frame9, "frame9"); gtk_widget_show (frame9); gtk_box_pack_start (GTK_BOX (vbox9), frame9, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame9), GTK_SHADOW_NONE); alignment9 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment9, "alignment9"); gtk_widget_show (alignment9); gtk_container_add (GTK_CONTAINER (frame9), alignment9); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment9), 0, 0, 4, 0); hbox12 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox12, "hbox12"); gtk_widget_show (hbox12); gtk_container_add (GTK_CONTAINER (alignment9), hbox12); scrolledwindow5 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow5, "scrolledwindow5"); gtk_widget_show (scrolledwindow5); gtk_box_pack_start (GTK_BOX (hbox12), scrolledwindow5, TRUE, TRUE, 0); gtk_widget_set_size_request (scrolledwindow5, 440, 185); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow5), GTK_SHADOW_IN); lst_drivers = gtk_clist_new (4); gtk_widget_set_name (lst_drivers, "lst_drivers"); gtk_widget_show (lst_drivers); gtk_container_add (GTK_CONTAINER (scrolledwindow5), lst_drivers); gtk_clist_set_column_width (GTK_CLIST (lst_drivers), 0, 80); gtk_clist_set_column_width (GTK_CLIST (lst_drivers), 1, 80); gtk_clist_set_column_width (GTK_CLIST (lst_drivers), 2, 80); gtk_clist_set_column_width (GTK_CLIST (lst_drivers), 3, 80); gtk_clist_column_titles_show (GTK_CLIST (lst_drivers)); ld_name = gtk_label_new (_("Name")); gtk_widget_set_name (ld_name, "ld_name"); gtk_widget_show (ld_name); gtk_clist_set_column_widget (GTK_CLIST (lst_drivers), 0, ld_name); gtk_widget_set_size_request (ld_name, 188, -1); ld_file = gtk_label_new (_("File")); gtk_widget_set_name (ld_file, "ld_file"); gtk_widget_show (ld_file); gtk_clist_set_column_widget (GTK_CLIST (lst_drivers), 1, ld_file); gtk_widget_set_size_request (ld_file, 170, -1); ld_date = gtk_label_new (_("Date")); gtk_widget_set_name (ld_date, "ld_date"); gtk_widget_show (ld_date); gtk_clist_set_column_widget (GTK_CLIST (lst_drivers), 2, ld_date); gtk_widget_set_size_request (ld_date, 134, -1); ld_size = gtk_label_new (_("Size")); gtk_widget_set_name (ld_size, "ld_size"); gtk_widget_show (ld_size); gtk_clist_set_column_widget (GTK_CLIST (lst_drivers), 3, ld_size); gtk_widget_set_size_request (ld_size, 80, -1); label32 = gtk_label_new (_(" ODBC Drivers that are installed on your system :")); gtk_widget_set_name (label32, "label32"); gtk_widget_show (label32); gtk_frame_set_label_widget (GTK_FRAME (frame9), label32); gtk_label_set_use_markup (GTK_LABEL (label32), TRUE); frame10 = gtk_frame_new (NULL); gtk_widget_set_name (frame10, "frame10"); gtk_widget_show (frame10); gtk_box_pack_start (GTK_BOX (vbox9), frame10, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame10), 3); alignment10 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment10, "alignment10"); gtk_widget_show (alignment10); gtk_container_add (GTK_CONTAINER (frame10), alignment10); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment10), 0, 0, 10, 10); hbox13 = gtk_hbox_new (FALSE, 50); gtk_widget_set_name (hbox13, "hbox13"); gtk_widget_show (hbox13); gtk_container_add (GTK_CONTAINER (alignment10), hbox13); gtk_container_set_border_width (GTK_CONTAINER (hbox13), 4); b_add_driver = gtk_button_new_with_mnemonic (_(" _Add a driver ")); gtk_widget_set_name (b_add_driver, "b_add_driver"); gtk_widget_show (b_add_driver); gtk_box_pack_start (GTK_BOX (hbox13), b_add_driver, FALSE, TRUE, 0); GTK_WIDGET_SET_FLAGS (b_add_driver, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (b_add_driver, "clicked", accel_group, GDK_A, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); b_remove_driver = gtk_button_new_with_mnemonic (_(" _Remove the driver ")); gtk_widget_set_name (b_remove_driver, "b_remove_driver"); gtk_widget_show (b_remove_driver); gtk_box_pack_start (GTK_BOX (hbox13), b_remove_driver, FALSE, TRUE, 0); GTK_WIDGET_SET_FLAGS (b_remove_driver, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (b_remove_driver, "clicked", accel_group, GDK_R, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); b_configure_driver = gtk_button_new_with_mnemonic (_(" Confi_gure the driver ")); gtk_widget_set_name (b_configure_driver, "b_configure_driver"); gtk_widget_show (b_configure_driver); gtk_box_pack_start (GTK_BOX (hbox13), b_configure_driver, FALSE, TRUE, 0); GTK_WIDGET_SET_FLAGS (b_configure_driver, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (b_configure_driver, "clicked", accel_group, GDK_G, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); gtk_widget_add_accelerator (b_configure_driver, "clicked", accel_group, GDK_g, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); frame17 = gtk_frame_new (NULL); gtk_widget_set_name (frame17, "frame17"); gtk_widget_show (frame17); gtk_box_pack_start (GTK_BOX (vbox9), frame17, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame17), 3); alignment17 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment17, "alignment17"); gtk_widget_show (alignment17); gtk_container_add (GTK_CONTAINER (frame17), alignment17); hbox20 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox20, "hbox20"); gtk_widget_show (hbox20); gtk_container_add (GTK_CONTAINER (alignment17), hbox20); gtk_container_set_border_width (GTK_CONTAINER (hbox20), 10); pixmap4 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap4, "pixmap4"); gtk_widget_show (pixmap4); gtk_box_pack_start (GTK_BOX (hbox20), pixmap4, FALSE, TRUE, 10); label54 = gtk_label_new (_("An ODBC driver allows ODBC-enabled programs to get information from\nODBC data sources. To install new drivers, use the driver's setup\nprogram if available, or add it with the 'Add' button.")); gtk_widget_set_name (label54, "label54"); gtk_widget_show (label54); gtk_box_pack_start (GTK_BOX (hbox20), label54, FALSE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label54), GTK_JUSTIFY_FILL); label4 = gtk_label_new (_("ODBC Drivers")); gtk_widget_set_name (label4, "label4"); gtk_widget_show (label4); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 3), label4); driverchoose_t.driverlist = lst_drivers; driverchoose_t.mainwnd = admin; driverchoose_t.b_add = b_add_driver; driverchoose_t.b_remove = b_remove_driver; driverchoose_t.b_configure = b_configure_driver; vbox11 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox11, "vbox11"); gtk_widget_show (vbox11); gtk_container_add (GTK_CONTAINER (notebook1), vbox11); hbox21 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox21, "hbox21"); gtk_widget_show (hbox21); gtk_box_pack_start (GTK_BOX (vbox11), hbox21, TRUE, TRUE, 0); frame21 = gtk_frame_new (NULL); gtk_widget_set_name (frame21, "frame21"); gtk_widget_show (frame21); gtk_box_pack_start (GTK_BOX (hbox21), frame21, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame21), 2); alignment21 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment21, "alignment21"); gtk_widget_show (alignment21); gtk_container_add (GTK_CONTAINER (frame21), alignment21); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment21), 0, 0, 6, 0); frame24 = gtk_frame_new (NULL); gtk_widget_set_name (frame24, "frame24"); gtk_widget_show (frame24); gtk_container_add (GTK_CONTAINER (alignment21), frame24); gtk_frame_set_shadow_type (GTK_FRAME (frame24), GTK_SHADOW_NONE); alignment24 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment24, "alignment24"); gtk_widget_show (alignment24); gtk_container_add (GTK_CONTAINER (frame24), alignment24); scrolledwindow9 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow9, "scrolledwindow9"); gtk_widget_show (scrolledwindow9); gtk_container_add (GTK_CONTAINER (alignment24), scrolledwindow9); gtk_widget_set_size_request (scrolledwindow9, 427, 160); lst_pool = gtk_clist_new (3); gtk_widget_set_name (lst_pool, "lst_pool"); gtk_widget_show (lst_pool); gtk_container_add (GTK_CONTAINER (scrolledwindow9), lst_pool); gtk_clist_set_column_width (GTK_CLIST (lst_pool), 0, 80); gtk_clist_set_column_width (GTK_CLIST (lst_pool), 1, 80); gtk_clist_set_column_width (GTK_CLIST (lst_pool), 2, 80); gtk_clist_column_titles_show (GTK_CLIST (lst_pool)); lp_name = gtk_label_new (_("Name")); gtk_widget_set_name (lp_name, "lp_name"); gtk_widget_show (lp_name); gtk_clist_set_column_widget (GTK_CLIST (lst_pool), 0, lp_name); lp_timeout = gtk_label_new (_("Pool timeout")); gtk_widget_set_name (lp_timeout, "lp_timeout"); gtk_widget_show (lp_timeout); gtk_clist_set_column_widget (GTK_CLIST (lst_pool), 1, lp_timeout); lp_probe = gtk_label_new (_("Probe query")); gtk_widget_set_name (lp_probe, "lp_probe"); gtk_widget_show (lp_probe); gtk_clist_set_column_widget (GTK_CLIST (lst_pool), 2, lp_probe); label58 = gtk_label_new (_("ODBC Drivers")); gtk_widget_set_name (label58, "label58"); gtk_widget_show (label58); gtk_frame_set_label_widget (GTK_FRAME (frame24), label58); gtk_label_set_use_markup (GTK_LABEL (label58), TRUE); label55 = gtk_label_new (_(" Connection Pooling Timeout ")); gtk_widget_set_name (label55, "label55"); gtk_widget_show (label55); gtk_frame_set_label_widget (GTK_FRAME (frame21), label55); gtk_label_set_use_markup (GTK_LABEL (label55), TRUE); vbox17 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox17, "vbox17"); gtk_widget_show (vbox17); gtk_box_pack_start (GTK_BOX (hbox21), vbox17, TRUE, TRUE, 0); frame22 = gtk_frame_new (NULL); gtk_widget_set_name (frame22, "frame22"); gtk_widget_show (frame22); gtk_box_pack_start (GTK_BOX (vbox17), frame22, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame22), 3); alignment22 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment22, "alignment22"); gtk_widget_show (alignment22); gtk_container_add (GTK_CONTAINER (frame22), alignment22); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment22), 0, 0, 12, 0); vbox18 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox18, "vbox18"); gtk_widget_show (vbox18); gtk_container_add (GTK_CONTAINER (alignment22), vbox18); br_enable = gtk_radio_button_new_with_mnemonic (NULL, _("_Enable")); gtk_widget_set_name (br_enable, "br_enable"); gtk_widget_show (br_enable); gtk_box_pack_start (GTK_BOX (vbox18), br_enable, FALSE, FALSE, 0); GTK_WIDGET_SET_FLAGS (br_enable, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (br_enable, "clicked", accel_group, GDK_E, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); gtk_radio_button_set_group (GTK_RADIO_BUTTON (br_enable), br_enable_group); br_enable_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (br_enable)); br_disable = gtk_radio_button_new_with_mnemonic (NULL, _("_Disable")); gtk_widget_set_name (br_disable, "br_disable"); gtk_widget_show (br_disable); gtk_box_pack_start (GTK_BOX (vbox18), br_disable, FALSE, FALSE, 0); GTK_WIDGET_SET_FLAGS (br_disable, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (br_disable, "clicked", accel_group, GDK_D, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); gtk_radio_button_set_group (GTK_RADIO_BUTTON (br_disable), br_enable_group); br_enable_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (br_disable)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (br_disable), TRUE); label56 = gtk_label_new (_(" PerfMon ")); gtk_widget_set_name (label56, "label56"); gtk_widget_show (label56); gtk_frame_set_label_widget (GTK_FRAME (frame22), label56); gtk_label_set_use_markup (GTK_LABEL (label56), TRUE); frame23 = gtk_frame_new (NULL); gtk_widget_set_name (frame23, "frame23"); gtk_widget_show (frame23); gtk_box_pack_start (GTK_BOX (vbox17), frame23, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame23), 3); alignment23 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment23, "alignment23"); gtk_widget_show (alignment23); gtk_container_add (GTK_CONTAINER (frame23), alignment23); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment23), 0, 0, 12, 0); t_retrywait = gtk_entry_new (); gtk_widget_set_name (t_retrywait, "t_retrywait"); gtk_widget_show (t_retrywait); gtk_container_add (GTK_CONTAINER (alignment23), t_retrywait); label57 = gtk_label_new (_(" Retry Wait time ")); gtk_widget_set_name (label57, "label57"); gtk_widget_show (label57); gtk_frame_set_label_widget (GTK_FRAME (frame23), label57); gtk_label_set_use_markup (GTK_LABEL (label57), TRUE); frame12 = gtk_frame_new (NULL); gtk_widget_set_name (frame12, "frame12"); gtk_widget_show (frame12); gtk_box_pack_start (GTK_BOX (vbox11), frame12, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame12), 3); alignment12 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment12, "alignment12"); gtk_widget_show (alignment12); gtk_container_add (GTK_CONTAINER (frame12), alignment12); hbox15 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox15, "hbox15"); gtk_widget_show (hbox15); gtk_container_add (GTK_CONTAINER (alignment12), hbox15); gtk_container_set_border_width (GTK_CONTAINER (hbox15), 15); pixmap5 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap5, "pixmap5"); gtk_widget_show (pixmap5); gtk_box_pack_start (GTK_BOX (hbox15), pixmap5, FALSE, TRUE, 10); label38 = gtk_label_new (_("Connection pooling allows an application to reuse open connection\nhandles, which saves round-trips to the server.")); gtk_widget_set_name (label38, "label38"); gtk_widget_show (label38); gtk_box_pack_start (GTK_BOX (hbox15), label38, FALSE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label38), GTK_JUSTIFY_FILL); label5 = gtk_label_new (_("Connection Pooling")); gtk_widget_set_name (label5, "label5"); gtk_widget_show (label5); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 4), label5); connectionpool_t.driverlist = lst_pool; connectionpool_t.enperfmon_rb = br_enable; connectionpool_t.disperfmon_rb = br_disable; connectionpool_t.retwait_entry = t_retrywait; connectionpool_t.changed = FALSE; connectionpool_t.mainwnd = admin; vbox13 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox13, "vbox13"); gtk_widget_show (vbox13); gtk_container_add (GTK_CONTAINER (notebook1), vbox13); table1 = gtk_table_new (3, 2, FALSE); gtk_widget_set_name (table1, "table1"); gtk_widget_show (table1); gtk_box_pack_start (GTK_BOX (vbox13), table1, TRUE, TRUE, 0); gtk_widget_set_size_request (table1, -1, 250); frame30 = gtk_frame_new (NULL); gtk_widget_set_name (frame30, "frame30"); gtk_widget_show (frame30); gtk_table_attach (GTK_TABLE (table1), frame30, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame30), GTK_SHADOW_NONE); frame25 = gtk_frame_new (NULL); gtk_widget_set_name (frame25, "frame25"); gtk_widget_show (frame25); gtk_table_attach (GTK_TABLE (table1), frame25, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (frame25), 3); alignment25 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment25, "alignment25"); gtk_widget_show (alignment25); gtk_container_add (GTK_CONTAINER (frame25), alignment25); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment25), 0, 0, 12, 0); table2 = gtk_table_new (4, 2, FALSE); gtk_widget_set_name (table2, "table2"); gtk_widget_show (table2); gtk_container_add (GTK_CONTAINER (alignment25), table2); gtk_container_set_border_width (GTK_CONTAINER (table2), 4); gtk_table_set_col_spacings (GTK_TABLE (table2), 13); b_donottrace = gtk_radio_button_new_with_mnemonic (NULL, _("_Don't trace")); gtk_widget_set_name (b_donottrace, "b_donottrace"); gtk_widget_show (b_donottrace); gtk_table_attach (GTK_TABLE (table2), b_donottrace, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 0, 0); gtk_radio_button_set_group (GTK_RADIO_BUTTON (b_donottrace), b_donottrace_group); b_donottrace_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (b_donottrace)); b_allthetime = gtk_radio_button_new_with_mnemonic (NULL, _("All the t_ime")); gtk_widget_set_name (b_allthetime, "b_allthetime"); gtk_widget_show (b_allthetime); gtk_table_attach (GTK_TABLE (table2), b_allthetime, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 0, 0); gtk_radio_button_set_group (GTK_RADIO_BUTTON (b_allthetime), b_donottrace_group); b_donottrace_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (b_allthetime)); b_onetime = gtk_radio_button_new_with_mnemonic (NULL, _("One-_time only")); gtk_widget_set_name (b_onetime, "b_onetime"); gtk_widget_show (b_onetime); gtk_table_attach (GTK_TABLE (table2), b_onetime, 0, 1, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 0, 0); gtk_radio_button_set_group (GTK_RADIO_BUTTON (b_onetime), b_donottrace_group); b_donottrace_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (b_onetime)); b_start = gtk_button_new_with_mnemonic (_("_Apply tracing settings")); gtk_widget_set_name (b_start, "b_start"); gtk_widget_show (b_start); gtk_table_attach (GTK_TABLE (table2), b_start, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (b_start), 2); frame28 = gtk_frame_new (NULL); gtk_widget_set_name (frame28, "frame28"); gtk_widget_show (frame28); gtk_table_attach (GTK_TABLE (table2), frame28, 0, 1, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame28), GTK_SHADOW_NONE); label59 = gtk_label_new (_(" When to trace ")); gtk_widget_set_name (label59, "label59"); gtk_widget_show (label59); gtk_frame_set_label_widget (GTK_FRAME (frame25), label59); gtk_label_set_use_markup (GTK_LABEL (label59), TRUE); frame27 = gtk_frame_new (NULL); gtk_widget_set_name (frame27, "frame27"); gtk_widget_show (frame27); gtk_table_attach (GTK_TABLE (table1), frame27, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); gtk_widget_set_size_request (frame27, -1, 110); gtk_container_set_border_width (GTK_CONTAINER (frame27), 3); alignment27 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment27, "alignment27"); gtk_widget_show (alignment27); gtk_container_add (GTK_CONTAINER (frame27), alignment27); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment27), 0, 0, 10, 0); vbox20 = gtk_vbox_new (FALSE, 5); gtk_widget_set_name (vbox20, "vbox20"); gtk_widget_show (vbox20); gtk_container_add (GTK_CONTAINER (alignment27), vbox20); gtk_widget_set_size_request (vbox20, -1, 70); gtk_container_set_border_width (GTK_CONTAINER(vbox20), 2); t_tracelib = gtk_entry_new (); gtk_widget_set_name (t_tracelib, "t_tracelib"); gtk_widget_show (t_tracelib); gtk_box_pack_start (GTK_BOX (vbox20), t_tracelib, FALSE, TRUE, 0); hbox23 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox23, "hbox23"); gtk_widget_show (hbox23); gtk_box_pack_start (GTK_BOX (vbox20), hbox23, FALSE, TRUE, 0); frame34 = gtk_frame_new (NULL); gtk_widget_set_name (frame34, "frame34"); gtk_widget_show (frame34); gtk_box_pack_start (GTK_BOX (hbox23), frame34, TRUE, TRUE, 0); gtk_widget_set_size_request (frame34, -1, 30); gtk_frame_set_shadow_type (GTK_FRAME (frame34), GTK_SHADOW_NONE); bt_select_library = gtk_button_new_with_mnemonic (_("_Select library")); gtk_widget_set_name (bt_select_library, "bt_select_library"); gtk_widget_show (bt_select_library); gtk_box_pack_start (GTK_BOX (hbox23), bt_select_library, FALSE, TRUE, 0); GTK_WIDGET_SET_FLAGS (bt_select_library, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bt_select_library, "clicked", accel_group, GDK_S, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); frame35 = gtk_frame_new (NULL); gtk_widget_set_name (frame35, "frame35"); gtk_widget_show (frame35); gtk_box_pack_start (GTK_BOX (hbox23), frame35, TRUE, TRUE, 0); gtk_widget_set_size_request (frame35, -1, 30); gtk_frame_set_shadow_type (GTK_FRAME (frame35), GTK_SHADOW_NONE); frame31 = gtk_frame_new (NULL); gtk_widget_set_name (frame31, "frame31"); gtk_widget_show (frame31); gtk_box_pack_start (GTK_BOX (vbox20), frame31, TRUE, TRUE, 0); gtk_widget_set_size_request (frame31, -1, 30); gtk_frame_set_shadow_type (GTK_FRAME (frame31), GTK_SHADOW_NONE); label61 = gtk_label_new (_(" Custom trace library ")); gtk_widget_set_name (label61, "label61"); gtk_widget_show (label61); gtk_frame_set_label_widget (GTK_FRAME (frame27), label61); gtk_label_set_use_markup (GTK_LABEL (label61), TRUE); frame26 = gtk_frame_new (NULL); gtk_widget_set_name (frame26, "frame26"); gtk_widget_show (frame26); gtk_table_attach (GTK_TABLE (table1), frame26, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (frame26), 3); alignment26 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment26, "alignment26"); gtk_widget_show (alignment26); gtk_container_add (GTK_CONTAINER (frame26), alignment26); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment26), 0, 0, 12, 0); vbox19 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox19, "vbox19"); gtk_widget_show (vbox19); gtk_container_add (GTK_CONTAINER (alignment26), vbox19); t_logfile = gtk_entry_new (); gtk_widget_set_name (t_logfile, "t_logfile"); gtk_widget_show (t_logfile); gtk_box_pack_start (GTK_BOX (vbox19), t_logfile, TRUE, TRUE, 0); gtk_entry_set_text (GTK_ENTRY (t_logfile), _("sql.log")); hbox22 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox22, "hbox22"); gtk_widget_show (hbox22); gtk_box_pack_start (GTK_BOX (vbox19), hbox22, FALSE, TRUE, 0); frame32 = gtk_frame_new (NULL); gtk_widget_set_name (frame32, "frame32"); gtk_widget_show (frame32); gtk_box_pack_start (GTK_BOX (hbox22), frame32, TRUE, TRUE, 0); gtk_widget_set_size_request (frame32, -1, 30); gtk_frame_set_shadow_type (GTK_FRAME (frame32), GTK_SHADOW_NONE); bt_browse = gtk_button_new_with_mnemonic (_("_Browse")); gtk_widget_set_name (bt_browse, "bt_browse"); gtk_widget_show (bt_browse); gtk_box_pack_start (GTK_BOX (hbox22), bt_browse, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER(bt_browse), 2); GTK_WIDGET_SET_FLAGS (bt_browse, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bt_browse, "clicked", accel_group, GDK_B, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); frame33 = gtk_frame_new (NULL); gtk_widget_set_name (frame33, "frame33"); gtk_widget_show (frame33); gtk_box_pack_start (GTK_BOX (hbox22), frame33, TRUE, TRUE, 0); gtk_widget_set_size_request (frame33, -1, 30); gtk_frame_set_shadow_type (GTK_FRAME (frame33), GTK_SHADOW_NONE); frame29 = gtk_frame_new (NULL); gtk_widget_set_name (frame29, "frame29"); gtk_widget_show (frame29); gtk_box_pack_start (GTK_BOX (vbox19), frame29, TRUE, TRUE, 0); gtk_widget_set_size_request (frame29, -1, 30); gtk_frame_set_shadow_type (GTK_FRAME (frame29), GTK_SHADOW_NONE); label60 = gtk_label_new (_(" Log file path ")); gtk_widget_set_name (label60, "label60"); gtk_widget_show (label60); gtk_frame_set_label_widget (GTK_FRAME (frame26), label60); gtk_label_set_use_markup (GTK_LABEL (label60), TRUE); frame14 = gtk_frame_new (NULL); gtk_widget_set_name (frame14, "frame14"); gtk_widget_show (frame14); gtk_box_pack_start (GTK_BOX (vbox13), frame14, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame14), 3); alignment14 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment14, "alignment14"); gtk_widget_show (alignment14); gtk_container_add (GTK_CONTAINER (frame14), alignment14); hbox17 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox17, "hbox17"); gtk_widget_show (hbox17); gtk_container_add (GTK_CONTAINER (alignment14), hbox17); gtk_container_set_border_width (GTK_CONTAINER (hbox17), 10); pixmap6 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap6, "pixmap6"); gtk_widget_show (pixmap6); gtk_box_pack_start (GTK_BOX (hbox17), pixmap6, FALSE, TRUE, 10); label43 = gtk_label_new (_("ODBC tracing allows you to create logs of the calls to ODBC drivers for\nuse by support personnel or to aid you in debugging your applications.\nNote: log files can become very large.")); gtk_widget_set_name (label43, "label43"); gtk_widget_show (label43); gtk_box_pack_start (GTK_BOX (hbox17), label43, FALSE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label43), GTK_JUSTIFY_FILL); label6 = gtk_label_new (_("Tracing")); gtk_widget_set_name (label6, "label6"); gtk_widget_show (label6); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 5), label6); tracing_t.logfile_entry = t_logfile; tracing_t.tracelib_entry = t_tracelib; tracing_t.b_start_stop = b_start; tracing_t.donttrace_rb = b_donottrace; tracing_t.allthetime_rb = b_allthetime; tracing_t.onetime_rb = b_onetime; tracing_t.changed = FALSE; vbox15 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox15, "vbox15"); gtk_widget_show (vbox15); gtk_container_add (GTK_CONTAINER (notebook1), vbox15); frame15 = gtk_frame_new (NULL); gtk_widget_set_name (frame15, "frame15"); gtk_widget_show (frame15); gtk_box_pack_start (GTK_BOX (vbox15), frame15, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame15), GTK_SHADOW_NONE); alignment15 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment15, "alignment15"); gtk_widget_show (alignment15); gtk_container_add (GTK_CONTAINER (frame15), alignment15); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment15), 0, 0, 4, 0); hbox18 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox18, "hbox18"); gtk_widget_show (hbox18); gtk_container_add (GTK_CONTAINER (alignment15), hbox18); scrolledwindow8 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow8, "scrolledwindow8"); gtk_widget_show (scrolledwindow8); gtk_box_pack_start (GTK_BOX (hbox18), scrolledwindow8, TRUE, TRUE, 0); gtk_widget_set_size_request (scrolledwindow8, 440, 219); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow8), GTK_SHADOW_IN); lst_about = gtk_clist_new (5); gtk_widget_set_name (lst_about, "lst_about"); gtk_widget_show (lst_about); gtk_container_add (GTK_CONTAINER (scrolledwindow8), lst_about); gtk_clist_set_column_width (GTK_CLIST (lst_about), 0, 80); gtk_clist_set_column_width (GTK_CLIST (lst_about), 1, 80); gtk_clist_set_column_width (GTK_CLIST (lst_about), 2, 80); gtk_clist_set_column_width (GTK_CLIST (lst_about), 3, 80); gtk_clist_set_column_width (GTK_CLIST (lst_about), 4, 80); gtk_clist_column_titles_show (GTK_CLIST (lst_about)); la_name = gtk_label_new (_("Name")); gtk_widget_set_name (la_name, "la_name"); gtk_widget_show (la_name); gtk_clist_set_column_widget (GTK_CLIST (lst_about), 0, la_name); la_version = gtk_label_new (_("Version")); gtk_widget_set_name (la_version, "la_version"); gtk_widget_show (la_version); gtk_clist_set_column_widget (GTK_CLIST (lst_about), 1, la_version); la_file = gtk_label_new (_("File")); gtk_widget_set_name (la_file, "la_file"); gtk_widget_show (la_file); gtk_clist_set_column_widget (GTK_CLIST (lst_about), 2, la_file); la_date = gtk_label_new (_("Date")); gtk_widget_set_name (la_date, "la_date"); gtk_widget_show (la_date); gtk_clist_set_column_widget (GTK_CLIST (lst_about), 3, la_date); la_size = gtk_label_new (_("Size")); gtk_widget_set_name (la_size, "la_size"); gtk_widget_show (la_size); gtk_clist_set_column_widget (GTK_CLIST (lst_about), 4, la_size); label47 = gtk_label_new (_(" ODBC components installed on your system :")); gtk_widget_set_name (label47, "label47"); gtk_widget_show (label47); gtk_frame_set_label_widget (GTK_FRAME (frame15), label47); gtk_label_set_use_markup (GTK_LABEL (label47), TRUE); frame16 = gtk_frame_new (NULL); gtk_widget_set_name (frame16, "frame16"); gtk_widget_show (frame16); gtk_box_pack_start (GTK_BOX (vbox15), frame16, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame16), 3); alignment16 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment16, "alignment16"); gtk_widget_show (alignment16); gtk_container_add (GTK_CONTAINER (frame16), alignment16); hbox19 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox19, "hbox19"); gtk_widget_show (hbox19); gtk_container_add (GTK_CONTAINER (alignment16), hbox19); gtk_container_set_border_width (GTK_CONTAINER (hbox19), 10); pixmap7 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap7, "pixmap7"); gtk_widget_show (pixmap7); gtk_box_pack_start (GTK_BOX (hbox19), pixmap7, FALSE, TRUE, 10); label48 = gtk_label_new (_("ODBC is a programming interface that enables applications to access\ndata in database management systems that use Structured Query\nLanguage (SQL) as a data access standard.")); gtk_widget_set_name (label48, "label48"); gtk_widget_show (label48); gtk_box_pack_start (GTK_BOX (hbox19), label48, FALSE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label48), GTK_JUSTIFY_FILL); label7 = gtk_label_new (_("About")); gtk_widget_set_name (label7, "label7"); gtk_widget_show (label7); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 6), label7); dialog_action_area1 = GTK_DIALOG (admin)->action_area; gtk_widget_set_name (dialog_action_area1, "dialog_action_area1"); gtk_widget_show (dialog_action_area1); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END); cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_set_name (cancelbutton1, "cancelbutton1"); gtk_widget_show (cancelbutton1); gtk_dialog_add_action_widget (GTK_DIALOG (admin), cancelbutton1, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT); okbutton1 = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_set_name (okbutton1, "okbutton1"); gtk_widget_show (okbutton1); gtk_dialog_add_action_widget (GTK_DIALOG (admin), okbutton1, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (admin, admin, "admin"); GLADE_HOOKUP_OBJECT_NO_REF (admin, dialog_vbox1, "dialog_vbox1"); GLADE_HOOKUP_OBJECT (admin, notebook1, "notebook1"); GLADE_HOOKUP_OBJECT (admin, vbox1, "vbox1"); GLADE_HOOKUP_OBJECT (admin, frame1, "frame1"); GLADE_HOOKUP_OBJECT (admin, alignment1, "alignment1"); GLADE_HOOKUP_OBJECT (admin, hbox2, "hbox2"); GLADE_HOOKUP_OBJECT (admin, scrolledwindow1, "scrolledwindow1"); GLADE_HOOKUP_OBJECT (admin, lst_usources, "lst_usources"); GLADE_HOOKUP_OBJECT (admin, lu_name, "lu_name"); GLADE_HOOKUP_OBJECT (admin, lu_description, "lu_description"); GLADE_HOOKUP_OBJECT (admin, lu_driver, "lu_driver"); GLADE_HOOKUP_OBJECT (admin, vbox3, "vbox3"); GLADE_HOOKUP_OBJECT (admin, bu_add, "bu_add"); GLADE_HOOKUP_OBJECT (admin, bu_remove, "bu_remove"); GLADE_HOOKUP_OBJECT (admin, bu_config, "bu_config"); GLADE_HOOKUP_OBJECT (admin, bu_test, "bu_test"); GLADE_HOOKUP_OBJECT (admin, frame18, "frame18"); GLADE_HOOKUP_OBJECT (admin, alignment18, "alignment18"); GLADE_HOOKUP_OBJECT (admin, l_usdsn, "l_usdsn"); GLADE_HOOKUP_OBJECT (admin, frame2, "frame2"); GLADE_HOOKUP_OBJECT (admin, alignment2, "alignment2"); GLADE_HOOKUP_OBJECT (admin, hbox3, "hbox3"); GLADE_HOOKUP_OBJECT (admin, pixmap1, "pixmap1"); GLADE_HOOKUP_OBJECT (admin, label14, "label14"); GLADE_HOOKUP_OBJECT (admin, label1, "label1"); GLADE_HOOKUP_OBJECT (admin, vbox4, "vbox4"); GLADE_HOOKUP_OBJECT (admin, frame3, "frame3"); GLADE_HOOKUP_OBJECT (admin, alignment3, "alignment3"); GLADE_HOOKUP_OBJECT (admin, hbox4, "hbox4"); GLADE_HOOKUP_OBJECT (admin, scrolledwindow2, "scrolledwindow2"); GLADE_HOOKUP_OBJECT (admin, lst_ssources, "lst_ssources"); GLADE_HOOKUP_OBJECT (admin, ls_name, "ls_name"); GLADE_HOOKUP_OBJECT (admin, ls_description, "ls_description"); GLADE_HOOKUP_OBJECT (admin, ls_driver, "ls_driver"); GLADE_HOOKUP_OBJECT (admin, vbox5, "vbox5"); GLADE_HOOKUP_OBJECT (admin, bs_add, "bs_add"); GLADE_HOOKUP_OBJECT (admin, bs_remove, "bs_remove"); GLADE_HOOKUP_OBJECT (admin, bs_config, "bs_config"); GLADE_HOOKUP_OBJECT (admin, bs_test, "bs_test"); GLADE_HOOKUP_OBJECT (admin, frame19, "frame19"); GLADE_HOOKUP_OBJECT (admin, alignment19, "alignment19"); GLADE_HOOKUP_OBJECT (admin, label18, "label18"); GLADE_HOOKUP_OBJECT (admin, frame4, "frame4"); GLADE_HOOKUP_OBJECT (admin, alignment4, "alignment4"); GLADE_HOOKUP_OBJECT (admin, hbox5, "hbox5"); GLADE_HOOKUP_OBJECT (admin, pixmap2, "pixmap2"); GLADE_HOOKUP_OBJECT (admin, label19, "label19"); GLADE_HOOKUP_OBJECT (admin, label2, "label2"); GLADE_HOOKUP_OBJECT (admin, vbox6, "vbox6"); GLADE_HOOKUP_OBJECT (admin, frame5, "frame5"); GLADE_HOOKUP_OBJECT (admin, alignment5, "alignment5"); GLADE_HOOKUP_OBJECT (admin, hbox6, "hbox6"); GLADE_HOOKUP_OBJECT (admin, vbox8, "vbox8"); GLADE_HOOKUP_OBJECT (admin, hbox8, "hbox8"); GLADE_HOOKUP_OBJECT (admin, frame7, "frame7"); GLADE_HOOKUP_OBJECT (admin, alignment7, "alignment7"); GLADE_HOOKUP_OBJECT (admin, hbox9, "hbox9"); GLADE_HOOKUP_OBJECT (admin, l_lookin, "l_lookin"); GLADE_HOOKUP_OBJECT (admin, optionmenu1, "optionmenu1"); GLADE_HOOKUP_OBJECT (admin, menu1, "menu1"); GLADE_HOOKUP_OBJECT (admin, hbox11, "hbox11"); GLADE_HOOKUP_OBJECT (admin, scrolledwindow3, "scrolledwindow3"); GLADE_HOOKUP_OBJECT (admin, lst_fdir, "lst_fdir"); GLADE_HOOKUP_OBJECT (admin, l_directory, "l_directory"); GLADE_HOOKUP_OBJECT (admin, scrolledwindow4, "scrolledwindow4"); GLADE_HOOKUP_OBJECT (admin, lst_ffiles, "lst_ffiles"); GLADE_HOOKUP_OBJECT (admin, l_files, "l_files"); GLADE_HOOKUP_OBJECT (admin, frame8, "frame8"); GLADE_HOOKUP_OBJECT (admin, alignment8, "alignment8"); GLADE_HOOKUP_OBJECT (admin, hbox10, "hbox10"); GLADE_HOOKUP_OBJECT (admin, l_selected, "l_selected"); GLADE_HOOKUP_OBJECT (admin, t_fileselected, "t_fileselected"); GLADE_HOOKUP_OBJECT (admin, vbox7, "vbox7"); GLADE_HOOKUP_OBJECT (admin, bf_add, "bf_add"); GLADE_HOOKUP_OBJECT (admin, bf_remove, "bf_remove"); GLADE_HOOKUP_OBJECT (admin, bf_config, "bf_config"); GLADE_HOOKUP_OBJECT (admin, bf_test, "bf_test"); GLADE_HOOKUP_OBJECT (admin, bf_setdir, "bf_setdir"); GLADE_HOOKUP_OBJECT (admin, frame20, "frame20"); GLADE_HOOKUP_OBJECT (admin, alignment20, "alignment20"); GLADE_HOOKUP_OBJECT (admin, frame6, "frame6"); GLADE_HOOKUP_OBJECT (admin, alignment6, "alignment6"); GLADE_HOOKUP_OBJECT (admin, hbox7, "hbox7"); GLADE_HOOKUP_OBJECT (admin, pixmap3, "pixmap3"); GLADE_HOOKUP_OBJECT (admin, label24, "label24"); GLADE_HOOKUP_OBJECT (admin, label53, "label53"); GLADE_HOOKUP_OBJECT (admin, vbox9, "vbox9"); GLADE_HOOKUP_OBJECT (admin, frame9, "frame9"); GLADE_HOOKUP_OBJECT (admin, alignment9, "alignment9"); GLADE_HOOKUP_OBJECT (admin, hbox12, "hbox12"); GLADE_HOOKUP_OBJECT (admin, scrolledwindow5, "scrolledwindow5"); GLADE_HOOKUP_OBJECT (admin, lst_drivers, "lst_drivers"); GLADE_HOOKUP_OBJECT (admin, ld_name, "ld_name"); GLADE_HOOKUP_OBJECT (admin, ld_file, "ld_file"); GLADE_HOOKUP_OBJECT (admin, ld_date, "ld_date"); GLADE_HOOKUP_OBJECT (admin, ld_size, "ld_size"); GLADE_HOOKUP_OBJECT (admin, label32, "label32"); GLADE_HOOKUP_OBJECT (admin, frame10, "frame10"); GLADE_HOOKUP_OBJECT (admin, alignment10, "alignment10"); GLADE_HOOKUP_OBJECT (admin, hbox13, "hbox13"); GLADE_HOOKUP_OBJECT (admin, b_add_driver, "b_add_driver"); GLADE_HOOKUP_OBJECT (admin, b_remove_driver, "b_remove_driver"); GLADE_HOOKUP_OBJECT (admin, b_configure_driver, "b_configure_driver"); GLADE_HOOKUP_OBJECT (admin, frame17, "frame17"); GLADE_HOOKUP_OBJECT (admin, alignment17, "alignment17"); GLADE_HOOKUP_OBJECT (admin, hbox20, "hbox20"); GLADE_HOOKUP_OBJECT (admin, pixmap4, "pixmap4"); GLADE_HOOKUP_OBJECT (admin, label54, "label54"); GLADE_HOOKUP_OBJECT (admin, label4, "label4"); GLADE_HOOKUP_OBJECT (admin, vbox11, "vbox11"); GLADE_HOOKUP_OBJECT (admin, hbox21, "hbox21"); GLADE_HOOKUP_OBJECT (admin, frame21, "frame21"); GLADE_HOOKUP_OBJECT (admin, alignment21, "alignment21"); GLADE_HOOKUP_OBJECT (admin, frame24, "frame24"); GLADE_HOOKUP_OBJECT (admin, alignment24, "alignment24"); GLADE_HOOKUP_OBJECT (admin, scrolledwindow9, "scrolledwindow9"); GLADE_HOOKUP_OBJECT (admin, lst_pool, "lst_pool"); GLADE_HOOKUP_OBJECT (admin, lp_name, "lp_name"); GLADE_HOOKUP_OBJECT (admin, lp_timeout, "lp_timeout"); GLADE_HOOKUP_OBJECT (admin, lp_probe, "lp_probe"); GLADE_HOOKUP_OBJECT (admin, label58, "label58"); GLADE_HOOKUP_OBJECT (admin, label55, "label55"); GLADE_HOOKUP_OBJECT (admin, vbox17, "vbox17"); GLADE_HOOKUP_OBJECT (admin, frame22, "frame22"); GLADE_HOOKUP_OBJECT (admin, alignment22, "alignment22"); GLADE_HOOKUP_OBJECT (admin, vbox18, "vbox18"); GLADE_HOOKUP_OBJECT (admin, br_enable, "br_enable"); GLADE_HOOKUP_OBJECT (admin, br_disable, "br_disable"); GLADE_HOOKUP_OBJECT (admin, label56, "label56"); GLADE_HOOKUP_OBJECT (admin, frame23, "frame23"); GLADE_HOOKUP_OBJECT (admin, alignment23, "alignment23"); GLADE_HOOKUP_OBJECT (admin, t_retrywait, "t_retrywait"); GLADE_HOOKUP_OBJECT (admin, label57, "label57"); GLADE_HOOKUP_OBJECT (admin, frame12, "frame12"); GLADE_HOOKUP_OBJECT (admin, alignment12, "alignment12"); GLADE_HOOKUP_OBJECT (admin, hbox15, "hbox15"); GLADE_HOOKUP_OBJECT (admin, pixmap5, "pixmap5"); GLADE_HOOKUP_OBJECT (admin, label38, "label38"); GLADE_HOOKUP_OBJECT (admin, label5, "label5"); GLADE_HOOKUP_OBJECT (admin, vbox13, "vbox13"); GLADE_HOOKUP_OBJECT (admin, table1, "table1"); GLADE_HOOKUP_OBJECT (admin, frame25, "frame25"); GLADE_HOOKUP_OBJECT (admin, alignment25, "alignment25"); GLADE_HOOKUP_OBJECT (admin, table2, "table2"); GLADE_HOOKUP_OBJECT (admin, b_donottrace, "b_donottrace"); GLADE_HOOKUP_OBJECT (admin, b_allthetime, "b_allthetime"); GLADE_HOOKUP_OBJECT (admin, b_onetime, "b_onetime"); GLADE_HOOKUP_OBJECT (admin, b_start, "b_start"); GLADE_HOOKUP_OBJECT (admin, frame28, "frame28"); GLADE_HOOKUP_OBJECT (admin, label59, "label59"); GLADE_HOOKUP_OBJECT (admin, frame26, "frame26"); GLADE_HOOKUP_OBJECT (admin, alignment26, "alignment26"); GLADE_HOOKUP_OBJECT (admin, vbox19, "vbox19"); GLADE_HOOKUP_OBJECT (admin, t_logfile, "t_logfile"); GLADE_HOOKUP_OBJECT (admin, hbox22, "hbox22"); GLADE_HOOKUP_OBJECT (admin, frame32, "frame32"); GLADE_HOOKUP_OBJECT (admin, bt_browse, "bt_browse"); GLADE_HOOKUP_OBJECT (admin, frame33, "frame33"); GLADE_HOOKUP_OBJECT (admin, frame29, "frame29"); GLADE_HOOKUP_OBJECT (admin, label60, "label60"); GLADE_HOOKUP_OBJECT (admin, frame27, "frame27"); GLADE_HOOKUP_OBJECT (admin, alignment27, "alignment27"); GLADE_HOOKUP_OBJECT (admin, vbox20, "vbox20"); GLADE_HOOKUP_OBJECT (admin, t_tracelib, "t_tracelib"); GLADE_HOOKUP_OBJECT (admin, hbox23, "hbox23"); GLADE_HOOKUP_OBJECT (admin, frame34, "frame34"); GLADE_HOOKUP_OBJECT (admin, bt_select_library, "bt_select_library"); GLADE_HOOKUP_OBJECT (admin, frame35, "frame35"); GLADE_HOOKUP_OBJECT (admin, frame31, "frame31"); GLADE_HOOKUP_OBJECT (admin, label61, "label61"); GLADE_HOOKUP_OBJECT (admin, frame30, "frame30"); GLADE_HOOKUP_OBJECT (admin, frame14, "frame14"); GLADE_HOOKUP_OBJECT (admin, alignment14, "alignment14"); GLADE_HOOKUP_OBJECT (admin, hbox17, "hbox17"); GLADE_HOOKUP_OBJECT (admin, pixmap6, "pixmap6"); GLADE_HOOKUP_OBJECT (admin, label43, "label43"); GLADE_HOOKUP_OBJECT (admin, label6, "label6"); GLADE_HOOKUP_OBJECT (admin, vbox15, "vbox15"); GLADE_HOOKUP_OBJECT (admin, frame15, "frame15"); GLADE_HOOKUP_OBJECT (admin, alignment15, "alignment15"); GLADE_HOOKUP_OBJECT (admin, hbox18, "hbox18"); GLADE_HOOKUP_OBJECT (admin, scrolledwindow8, "scrolledwindow8"); GLADE_HOOKUP_OBJECT (admin, lst_about, "lst_about"); GLADE_HOOKUP_OBJECT (admin, la_name, "la_name"); GLADE_HOOKUP_OBJECT (admin, la_version, "la_version"); GLADE_HOOKUP_OBJECT (admin, la_file, "la_file"); GLADE_HOOKUP_OBJECT (admin, la_date, "la_date"); GLADE_HOOKUP_OBJECT (admin, la_size, "la_size"); GLADE_HOOKUP_OBJECT (admin, label47, "label47"); GLADE_HOOKUP_OBJECT (admin, frame16, "frame16"); GLADE_HOOKUP_OBJECT (admin, alignment16, "alignment16"); GLADE_HOOKUP_OBJECT (admin, hbox19, "hbox19"); GLADE_HOOKUP_OBJECT (admin, pixmap7, "pixmap7"); GLADE_HOOKUP_OBJECT (admin, label48, "label48"); GLADE_HOOKUP_OBJECT (admin, label7, "label7"); GLADE_HOOKUP_OBJECT_NO_REF (admin, dialog_action_area1, "dialog_action_area1"); GLADE_HOOKUP_OBJECT (admin, cancelbutton1, "cancelbutton1"); GLADE_HOOKUP_OBJECT (admin, okbutton1, "okbutton1"); /* Notebook events */ gtk_signal_connect_after (GTK_OBJECT (notebook1), "switch_page", GTK_SIGNAL_FUNC (admin_switch_page), inparams); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (okbutton1), "clicked", GTK_SIGNAL_FUNC (admin_ok_clicked), inparams); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (cancelbutton1), "clicked", GTK_SIGNAL_FUNC (admin_cancel_clicked), inparams); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (admin), "delete_event", GTK_SIGNAL_FUNC (delete_event), inparams); gtk_signal_connect (GTK_OBJECT (admin), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Add user DSN button events */ gtk_signal_connect (GTK_OBJECT (dsnchoose_t.uadd), "clicked", GTK_SIGNAL_FUNC (userdsn_add_clicked), &dsnchoose_t); /* Remove user DSN button events */ gtk_signal_connect (GTK_OBJECT (dsnchoose_t.uremove), "clicked", GTK_SIGNAL_FUNC (userdsn_remove_clicked), &dsnchoose_t); /* Test user DSN button events */ gtk_signal_connect (GTK_OBJECT (dsnchoose_t.utest), "clicked", GTK_SIGNAL_FUNC (userdsn_test_clicked), &dsnchoose_t); /* Configure user DSN button events */ gtk_signal_connect (GTK_OBJECT (dsnchoose_t.uconfigure), "clicked", GTK_SIGNAL_FUNC (userdsn_configure_clicked), &dsnchoose_t); /* Add system DSN button events */ gtk_signal_connect (GTK_OBJECT (dsnchoose_t.sadd), "clicked", GTK_SIGNAL_FUNC (systemdsn_add_clicked), &dsnchoose_t); /* Remove system DSN button events */ gtk_signal_connect (GTK_OBJECT (dsnchoose_t.sremove), "clicked", GTK_SIGNAL_FUNC (systemdsn_remove_clicked), &dsnchoose_t); /* Test system DSN button events */ gtk_signal_connect (GTK_OBJECT (dsnchoose_t.stest), "clicked", GTK_SIGNAL_FUNC (systemdsn_test_clicked), &dsnchoose_t); /* Configure system DSN button events */ gtk_signal_connect (GTK_OBJECT (dsnchoose_t.sconfigure), "clicked", GTK_SIGNAL_FUNC (systemdsn_configure_clicked), &dsnchoose_t); /* Add file DSN button events */ gtk_signal_connect (GTK_OBJECT (dsnchoose_t.fadd), "clicked", GTK_SIGNAL_FUNC (filedsn_add_clicked), &dsnchoose_t); /* Remove file DSN button events */ gtk_signal_connect (GTK_OBJECT (dsnchoose_t.fremove), "clicked", GTK_SIGNAL_FUNC (filedsn_remove_clicked), &dsnchoose_t); /* Test file DSN button events */ gtk_signal_connect (GTK_OBJECT (dsnchoose_t.ftest), "clicked", GTK_SIGNAL_FUNC (filedsn_test_clicked), &dsnchoose_t); /* Configure file DSN button events */ gtk_signal_connect (GTK_OBJECT (dsnchoose_t.fconfigure), "clicked", GTK_SIGNAL_FUNC (filedsn_configure_clicked), &dsnchoose_t); /* Configure file DSN button events */ gtk_signal_connect (GTK_OBJECT (dsnchoose_t.fsetdir), "clicked", GTK_SIGNAL_FUNC (filedsn_setdir_clicked), &dsnchoose_t); /* Add driver button events */ gtk_signal_connect (GTK_OBJECT (driverchoose_t.b_add), "clicked", GTK_SIGNAL_FUNC (driver_add_clicked), &driverchoose_t); /* Remove driver button events */ gtk_signal_connect (GTK_OBJECT (driverchoose_t.b_remove), "clicked", GTK_SIGNAL_FUNC (driver_remove_clicked), &driverchoose_t); /* Configure driver button events */ gtk_signal_connect (GTK_OBJECT (driverchoose_t.b_configure), "clicked", GTK_SIGNAL_FUNC (driver_configure_clicked), &driverchoose_t); /* User DSN list events */ gtk_signal_connect (GTK_OBJECT (lst_usources), "select_row", GTK_SIGNAL_FUNC (userdsn_list_select), &dsnchoose_t); gtk_signal_connect (GTK_OBJECT (lst_usources), "unselect_row", GTK_SIGNAL_FUNC (userdsn_list_unselect), &dsnchoose_t); /* System DSN list events */ gtk_signal_connect (GTK_OBJECT (lst_ssources), "select_row", GTK_SIGNAL_FUNC (systemdsn_list_select), &dsnchoose_t); gtk_signal_connect (GTK_OBJECT (lst_ssources), "unselect_row", GTK_SIGNAL_FUNC (systemdsn_list_unselect), &dsnchoose_t); /* Directories file DSN list events */ gtk_signal_connect (GTK_OBJECT (lst_fdir), "select_row", GTK_SIGNAL_FUNC (filedsn_dirlist_select), &dsnchoose_t); /* Files file DSN list events */ gtk_signal_connect (GTK_OBJECT (lst_ffiles), "select_row", GTK_SIGNAL_FUNC (filedsn_filelist_select), &dsnchoose_t); gtk_signal_connect (GTK_OBJECT (lst_ffiles), "unselect_row", GTK_SIGNAL_FUNC (filedsn_filelist_unselect), &dsnchoose_t); /* Start tracing button events */ gtk_signal_connect (GTK_OBJECT (b_start), "clicked", GTK_SIGNAL_FUNC (tracing_start_clicked), &tracing_t); /* Browse file entry events */ gtk_signal_connect (GTK_OBJECT (bt_browse), "clicked", GTK_SIGNAL_FUNC (tracing_browse_clicked), &tracing_t); /* Driver list events */ gtk_signal_connect (GTK_OBJECT (lst_drivers), "select_row", GTK_SIGNAL_FUNC (driver_list_select), &driverchoose_t); gtk_signal_connect (GTK_OBJECT (lst_drivers), "unselect_row", GTK_SIGNAL_FUNC (driver_list_unselect), &driverchoose_t); /* Connection pooling list events */ gtk_signal_connect (GTK_OBJECT (lst_pool), "select_row", GTK_SIGNAL_FUNC (cpdriver_list_select), &connectionpool_t); SQLSetConfigMode (ODBC_BOTH_DSN); if (!SQLGetPrivateProfileString("ODBC", "FileDSNPath", "", dsnchoose_t.curr_dir, sizeof(dsnchoose_t.curr_dir), "odbcinst.ini")) strcpy(dsnchoose_t.curr_dir, DEFAULT_FILEDSNPATH); adddsns_to_list (lst_usources, FALSE); component_t.componentlist = lst_about; inparams[0] = &dsnchoose_t; inparams[1] = &driverchoose_t; inparams[2] = &tracing_t; inparams[3] = &component_t; inparams[4] = &connectionpool_t; inparams[5] = admin; gtk_widget_show_all (admin); gtk_main (); } libiodbc-3.52.9/iodbcadm/gtk/question.xpm0000644000076400007640000001066512323210535015242 00000000000000/* * question.xpm * * $Id$ * * Questionmark in XPM format * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ /* XPM */ static char * question_xpm[] = { "32 32 2 1", " c None", ". c #000000", " ", " ", " ...... ", " ............ ", " ................ ", " ................. ", " ...... ....... ", " ...... ...... ", " ...... ....... ", " ...... ....... ", " ...... ....... ", " ..... ...... ", " ... ....... ", " ....... ", " ........ ", " ......... ", " ........ ", " ...... ", " ..... ", " .... ", " .... ", " ", " ", " ", " ..... ", " ....... ", " ....... ", " ....... ", " ...... ", " ..... ", " ", " "}; libiodbc-3.52.9/iodbcadm/gtk/odbc4.xpm0000644000076400007640000001133612323210535014362 00000000000000/* * odbc4.xpm * * $Id$ * * ODBC logo in XPM format * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ /* XPM */ static char *odbc4_xpm[] = { "32 29 17 1", " c None", ". c #000000", "+ c #800000", "@ c #008000", "# c #808000", "$ c #000080", "% c #800080", "& c #008080", "* c #808080", "= c #C0C0C0", "- c #FF0000", "; c #00FF00", "> c #FFFF00", ", c #0000FF", "' c #FF00FF", ") c #00FFFF", "! c #FFFFFF", " ", " ", " ", " $$$$$$$$$$$$$$$$$$ ", " $,,, ,, ,, ,, ,,,.* ", " $$$$$$$$$$$$$$$$$.* ", " ....... =* ** ***.* ", " ..)=)==&.. .* ", " ..)==)=@@@@@. ** ***.* ", " )=))=@@@@@@@. .* ", " . )=)@@@)@@@@@@@. .* ", " .))=)=@@))@@@@@@@. ***.* ", " .)==)=)))@@@@@@@@@& .* ", " .=))=)&=@@@@@@)@@@@=***.* ", " .)=))=)=@@@@)@@@@&@&.***.* ", " .=)==)=&#@@)@#@#@@&&.= .* ", " .)=))=)@@)))@#@)#@&&.***.* ", " .=)==)=@#)@##@@@#&&&.= .* ", " .)=))=)==##@@@@#&&&&.***.* ", " .)=))=)==@#@@@@@&&&&.....* ", " .)==)=))=)@@@@@&&&&****** ", " .=))=)==)=&@@@@&&&&* ", " .==)=)&=&=@@@@&&&.* ", " .=&=&&=&&@@@@&&.* ", " &=&=&&&&&@@&&.** ", " ..&&&&&&&&&&.** ", " ..&&&&&&..** ", " ******* ", " " }; libiodbc-3.52.9/iodbcadm/gtk/messagebox.c0000644000076400007640000001703412323210535015143 00000000000000/* * messagebox.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "gui.h" static gint delete_event (GtkWidget *widget, GdkEvent *event) { return FALSE; } static void message_ok_clicked (GtkWidget *widget, GtkWidget *message) { gtk_signal_disconnect_by_func (GTK_OBJECT (message), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (message); } void create_message (HWND hwnd, LPCSTR dsn, LPCSTR text) { GtkWidget *message, *dialog_vbox1, *hbox1, *vbox1; GtkWidget *l_message, *dialog_action_area1, *hbuttonbox1, *b_ok; GtkAccelGroup *accel_group; guint b_ok_key; char msg[1024]; if (hwnd == NULL || !GTK_IS_WIDGET (hwnd)) return; accel_group = gtk_accel_group_new (); message = gtk_dialog_new (); if (dsn) sprintf (msg, "Message on DSN %s", dsn); else sprintf (msg, "Message ..."); gtk_object_set_data (GTK_OBJECT (message), "message", message); gtk_window_set_title (GTK_WINDOW (message), msg); gtk_widget_set_size_request (message, 400, 150); gtk_window_set_position (GTK_WINDOW (message), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (message), TRUE); gtk_window_set_default_size (GTK_WINDOW (message), 400, 150); gtk_window_set_type_hint (GTK_WINDOW (message), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (message); #endif dialog_vbox1 = GTK_DIALOG (message)->vbox; gtk_object_set_data (GTK_OBJECT (message), "dialog_vbox1", dialog_vbox1); gtk_widget_show (dialog_vbox1); hbox1 = gtk_hbox_new (FALSE, 6); gtk_widget_ref (hbox1); gtk_object_set_data_full (GTK_OBJECT (message), "hbox1", hbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox1, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox1), 6); vbox1 = gtk_vbox_new (TRUE, 0); gtk_widget_ref (vbox1); gtk_object_set_data_full (GTK_OBJECT (message), "vbox1", vbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox1); gtk_box_pack_start (GTK_BOX (hbox1), vbox1, TRUE, TRUE, 0); l_message = gtk_label_new (""); gtk_label_parse_uline (GTK_LABEL (l_message), (text) ? text : ""); gtk_widget_ref (l_message); gtk_object_set_data_full (GTK_OBJECT (message), "l_message", l_message, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (l_message); gtk_box_pack_start (GTK_BOX (vbox1), l_message, FALSE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (l_message), GTK_JUSTIFY_LEFT); gtk_label_set_line_wrap (GTK_LABEL (l_message), TRUE); dialog_action_area1 = GTK_DIALOG (message)->action_area; gtk_object_set_data (GTK_OBJECT (message), "dialog_action_area1", dialog_action_area1); gtk_widget_show (dialog_action_area1); gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area1), 5); hbuttonbox1 = gtk_hbutton_box_new (); gtk_widget_ref (hbuttonbox1); gtk_object_set_data_full (GTK_OBJECT (message), "hbuttonbox1", hbuttonbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbuttonbox1); gtk_box_pack_start (GTK_BOX (dialog_action_area1), hbuttonbox1, TRUE, TRUE, 0); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_END); gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbuttonbox1), 10); b_ok = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_ref (b_ok); gtk_object_set_data_full (GTK_OBJECT (message), "b_ok", b_ok, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (b_ok); gtk_container_add (GTK_CONTAINER (hbuttonbox1), b_ok); gtk_dialog_add_action_widget (GTK_DIALOG (message), b_ok, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (b_ok, GTK_CAN_DEFAULT); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (b_ok), "clicked", GTK_SIGNAL_FUNC (message_ok_clicked), message); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (message), "delete_event", GTK_SIGNAL_FUNC (delete_event), NULL); gtk_signal_connect (GTK_OBJECT (message), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_window_add_accel_group (GTK_WINDOW (message), accel_group); gtk_widget_show_all (message); gtk_main (); } void create_messagew (HWND hwnd, LPCWSTR dsn, LPCWSTR text) { LPSTR _dsn = NULL; LPSTR _text = NULL; _dsn = dm_SQL_WtoU8((SQLWCHAR*)dsn, SQL_NTS); _text = dm_SQL_WtoU8((SQLWCHAR*)text, SQL_NTS); create_message(hwnd, _dsn, _text); if (_dsn) free(_dsn); if (_text) free(_text); } libiodbc-3.52.9/iodbcadm/gtk/gui.h0000644000076400007640000002012512323210535013572 00000000000000/* * gui.h * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #ifndef _GTKGUI_H #define _GTKGUI_H #define GLADE_HOOKUP_OBJECT(component,widget,name) \ gtk_widget_ref(widget); \ gtk_object_set_data_full (GTK_OBJECT (component), name, \ widget, (GtkDestroyNotify) gtk_widget_unref) #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ gtk_object_set_data (GTK_OBJECT (component), name, widget) #define _(X) X extern char* szDSNColumnNames[]; extern char* szTabNames[]; extern char* szDSNButtons[]; extern char* szDriverColumnNames[]; typedef struct TFILEDSN { GtkWidget *name_entry, *mainwnd; char *name; } TFILEDSN; typedef struct TDSNCHOOSER { GtkWidget *mainwnd, *udsnlist, *sdsnlist; GtkWidget *uadd, *uremove, *utest, *uconfigure; GtkWidget *sadd, *sremove, *stest, *sconfigure; GtkWidget *fadd, *fremove, *ftest, *fconfigure, *fsetdir; GtkWidget *dir_list, *file_list, *file_entry, *dir_combo; wchar_t *dsn; wchar_t *fdsn; char curr_dir[1024]; int type_dsn; } TDSNCHOOSER; typedef struct TDRIVERCHOOSER { GtkWidget *driverlist, *mainwnd, *b_add, *b_remove, *b_configure, *b_finish; wchar_t *driver; } TDRIVERCHOOSER; typedef struct TFDRIVERCHOOSER { GtkWidget *driverlist, *mainwnd; GtkWidget *dsn_entry, *b_back, *b_continue; GtkWidget *mess_entry, *tab_panel, *browse_sel; char *curr_dir; char *attrs; char *dsn; BOOL verify_conn; wchar_t *driver; BOOL ok; } TFDRIVERCHOOSER; typedef struct TCONNECTIONPOOLING { GtkWidget *driverlist, *mainwnd, *enperfmon_rb, *disperfmon_rb, *retwait_entry, *timeout_entry, *probe_entry; BOOL changed; char timeout[64]; char probe[512]; char driver[1024]; } TCONNECTIONPOOLING; typedef struct TTRANSLATORCHOOSER { GtkWidget *translatorlist, *mainwnd, *b_finish; wchar_t *translator; } TTRANSLATORCHOOSER; typedef struct TCOMPONENT { GtkWidget *componentlist; } TCOMPONENT; typedef struct TTRACING { GtkWidget *logfile_entry, *tracelib_entry, *b_start_stop; GtkWidget *donttrace_rb, *allthetime_rb, *onetime_rb; GtkWidget *filesel; BOOL changed; } TTRACING; typedef struct TCONFIRM { GtkWidget *mainwnd; BOOL yes_no; } TCONFIRM; typedef struct TDRIVERSETUP { GtkWidget *name_entry, *driver_entry, *setup_entry, *key_list, *bupdate; GtkWidget *key_entry, *value_entry; GtkWidget *mainwnd, *filesel; LPSTR connstr; } TDRIVERSETUP; typedef struct TGENSETUP { GtkWidget *dsn_entry, *key_list, *bupdate; GtkWidget *key_entry, *value_entry; GtkWidget *mainwnd; GtkWidget *verify_conn_cb; LPSTR connstr; BOOL verify_conn; } TGENSETUP; void adddsns_to_list(GtkWidget* widget, BOOL systemDSN); void userdsn_add_clicked(GtkWidget* widget, TDSNCHOOSER *choose_t); void userdsn_remove_clicked(GtkWidget* widget, TDSNCHOOSER *choose_t); void userdsn_configure_clicked(GtkWidget* widget, TDSNCHOOSER *choose_t); void userdsn_test_clicked(GtkWidget* widget, TDSNCHOOSER *choose_t); void systemdsn_add_clicked(GtkWidget* widget, TDSNCHOOSER *choose_t); void systemdsn_remove_clicked(GtkWidget* widget, TDSNCHOOSER *choose_t); void systemdsn_configure_clicked(GtkWidget* widget, TDSNCHOOSER *choose_t); void systemdsn_test_clicked(GtkWidget* widget, TDSNCHOOSER *choose_t); void filedsn_add_clicked(GtkWidget* widget, TDSNCHOOSER *choose_t); void filedsn_remove_clicked(GtkWidget* widget, TDSNCHOOSER *choose_t); void filedsn_configure_clicked(GtkWidget* widget, TDSNCHOOSER *choose_t); void filedsn_test_clicked(GtkWidget* widget, TDSNCHOOSER *choose_t); void filedsn_setdir_clicked(GtkWidget* widget, TDSNCHOOSER *choose_t); void userdsn_list_select(GtkWidget* widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t); void userdsn_list_unselect(GtkWidget* widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t); void systemdsn_list_select(GtkWidget* widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t); void systemdsn_list_unselect(GtkWidget* widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t); void filedsn_filelist_select(GtkWidget* widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t); void filedsn_filelist_unselect(GtkWidget* widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t); void filedsn_dirlist_select(GtkWidget* widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t); void filedsn_lookin_clicked(GtkWidget* widget, void **array); void adddrivers_to_list(GtkWidget* widget, GtkWidget* dlg); void addtranslators_to_list(GtkWidget* widget, GtkWidget* dlg); void adddirectories_to_list(HWND hwnd, GtkWidget* widget, LPCSTR path); void addfiles_to_list(HWND hwnd, GtkWidget* widget, LPCSTR path); void addlistofdir_to_optionmenu(GtkWidget* widget, LPCSTR path, TDSNCHOOSER *choose_t); LPSTR create_keyval (HWND wnd, LPCSTR attrs, BOOL *verify_conn); LPSTR create_fgensetup (HWND hwnd, LPCSTR dsn, LPCSTR attrs, BOOL add, BOOL *verify_conn); void create_message (HWND hwnd, LPCSTR dsn, LPCSTR text); #endif libiodbc-3.52.9/iodbcadm/gtk/errorbox.c0000644000076400007640000002143712323210535014652 00000000000000/* * errorbox.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "gui.h" #include "error.xpm" static gint delete_event (GtkWidget *widget, GdkEvent *event) { return FALSE; } static void error_ok_clicked (GtkWidget *widget, GtkWidget *error) { gtk_signal_disconnect_by_func (GTK_OBJECT (error), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (error); } void create_error (HWND hwnd, LPCSTR dsn, LPCSTR text, LPCSTR errmsg) { GtkWidget *error, *dialog_vbox1, *hbox1, *pixmap1, *vbox1; GtkWidget *l_text, *l_error, *dialog_action_area1, *hbuttonbox1, *b_ok; GtkAccelGroup *accel_group; GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; guint b_ok_key; char msg[1024]; if (hwnd == NULL || !GTK_IS_WIDGET (hwnd)) return; accel_group = gtk_accel_group_new (); error = gtk_dialog_new (); if (dsn) sprintf (msg, "Error : %s", dsn); else sprintf (msg, "Error ..."); gtk_object_set_data (GTK_OBJECT (error), "error", error); gtk_window_set_title (GTK_WINDOW (error), msg); gtk_widget_set_size_request (error, 400, 150); gtk_window_set_position (GTK_WINDOW (error), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (error), TRUE); gtk_window_set_default_size (GTK_WINDOW (error), 400, 150); gtk_window_set_type_hint (GTK_WINDOW (error), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (error); #endif dialog_vbox1 = GTK_DIALOG (error)->vbox; gtk_object_set_data (GTK_OBJECT (error), "dialog_vbox1", dialog_vbox1); gtk_widget_show (dialog_vbox1); hbox1 = gtk_hbox_new (FALSE, 6); gtk_widget_ref (hbox1); gtk_object_set_data_full (GTK_OBJECT (error), "hbox1", hbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox1, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox1), 6); #if GTK_CHECK_VERSION(2,0,0) style = gtk_widget_get_style (error); pixmap = gdk_pixmap_create_from_xpm_d (error->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) error_xpm); #else style = gtk_widget_get_style (GTK_WIDGET (hwnd)); pixmap = gdk_pixmap_create_from_xpm_d (GTK_WIDGET (hwnd)->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) error_xpm); #endif pixmap1 = gtk_pixmap_new (pixmap, mask); gtk_widget_ref (pixmap1); gtk_object_set_data_full (GTK_OBJECT (error), "pixmap1", pixmap1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (pixmap1); gtk_box_pack_start (GTK_BOX (hbox1), pixmap1, FALSE, FALSE, 0); vbox1 = gtk_vbox_new (TRUE, 0); gtk_widget_ref (vbox1); gtk_object_set_data_full (GTK_OBJECT (error), "vbox1", vbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox1); gtk_box_pack_start (GTK_BOX (hbox1), vbox1, TRUE, TRUE, 0); l_text = gtk_label_new (""); gtk_label_parse_uline (GTK_LABEL (l_text), (text) ? text : ""); gtk_widget_ref (l_text); gtk_object_set_data_full (GTK_OBJECT (error), "l_text", l_text, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (l_text); gtk_box_pack_start (GTK_BOX (vbox1), l_text, FALSE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (l_text), GTK_JUSTIFY_LEFT); gtk_label_set_line_wrap (GTK_LABEL (l_text), TRUE); l_error = gtk_label_new (""); gtk_label_parse_uline (GTK_LABEL (l_error), (errmsg) ? errmsg : ""); gtk_widget_ref (l_error); gtk_object_set_data_full (GTK_OBJECT (error), "l_error", l_error, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (l_error); gtk_box_pack_start (GTK_BOX (vbox1), l_error, FALSE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (l_error), GTK_JUSTIFY_LEFT); gtk_label_set_line_wrap (GTK_LABEL (l_error), TRUE); dialog_action_area1 = GTK_DIALOG (error)->action_area; gtk_object_set_data (GTK_OBJECT (error), "dialog_action_area1", dialog_action_area1); gtk_widget_show (dialog_action_area1); gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area1), 5); hbuttonbox1 = gtk_hbutton_box_new (); gtk_widget_ref (hbuttonbox1); gtk_object_set_data_full (GTK_OBJECT (error), "hbuttonbox1", hbuttonbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbuttonbox1); gtk_box_pack_start (GTK_BOX (dialog_action_area1), hbuttonbox1, TRUE, TRUE, 0); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_END); gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbuttonbox1), 10); b_ok = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_ref (b_ok); gtk_object_set_data_full (GTK_OBJECT (error), "b_ok", b_ok, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (b_ok); gtk_container_add (GTK_CONTAINER (hbuttonbox1), b_ok); gtk_dialog_add_action_widget (GTK_DIALOG (error), b_ok, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (b_ok, GTK_CAN_DEFAULT); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (b_ok), "clicked", GTK_SIGNAL_FUNC (error_ok_clicked), error); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (error), "delete_event", GTK_SIGNAL_FUNC (delete_event), NULL); gtk_signal_connect (GTK_OBJECT (error), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_window_add_accel_group (GTK_WINDOW (error), accel_group); gtk_widget_show_all (error); gtk_main (); } void create_errorw (HWND hwnd, LPCWSTR dsn, LPCWSTR text, LPCWSTR errmsg) { LPSTR _dsn = NULL; LPSTR _text = NULL; LPSTR _errmsg = NULL; _dsn = dm_SQL_WtoU8((SQLWCHAR*)dsn, SQL_NTS); _text = dm_SQL_WtoU8((SQLWCHAR*)text, SQL_NTS); _errmsg = dm_SQL_WtoU8((SQLWCHAR*)errmsg, SQL_NTS); create_error(hwnd, _dsn, _text, _errmsg); if (_dsn) free(_dsn); if (_text) free(_text); if (_errmsg) free(_errmsg); } libiodbc-3.52.9/iodbcadm/gtk/img.xpm0000644000076400007640000010477612323210535014156 00000000000000/* * img.xpm * * $Id$ * * ODBC logo in XPM format * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ /* XPM */ static char * img_xpm[] = { "117 260 35 1", " c None", ". c #CCCC33", "+ c #999999", "@ c #333366", "# c #777777", "$ c #CCCCFF", "% c #555555", "& c #999966", "* c #6666CC", "= c #EEEEEE", "- c #333333", "; c #FFFF66", "> c #CCCCCC", ", c #111111", "' c #999933", ") c #666699", "! c #AAAAAA", "~ c #FFFF33", "{ c #888888", "] c #CCCC99", "^ c #000055", "/ c #9999FF", "( c #666666", "_ c #000044", ": c #3333CC", "< c #FFFFFF", "[ c #000033", "} c #444444", "| c #CCCC66", "1 c #000022", "2 c #9999CC", "3 c #DDDDDD", "4 c #222222", "5 c #333399", "6 c #BBBBBB", "_@)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*223", "4^5**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**2**)2$>", "[45))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*2>2", "[,_555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555222", ",[@555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555*22", "41_55555555555555555555555555555555555555555555555555555555555555555)*)*))5555555555555555)5)555555555555555555555222", "[,@555555555555555555555555555555555555555555555555555555555555555)**)*)***)55555555555))****)*5555555555555555555*22", "14_55555555555555555555555555555555555555555555555555555555555555)**))*)*)*)*555555555)***)))*)*)55555555555555555222", ",[@5555555555555555555555555555555555555555555555555555555555555)*))**)*)*)*))5555555*)*))***)*)*)5555555555555)5)*22", "[,^5555555555555555555555555555555555555555555555555555555555555****{*2)*{*)**555555)*)**{*{*2)***)555555555)****)262", "4[-555555555555555555555555555555555555555555555555555555555555*))))*)*)**)*)*)55555*)*))***))*+))*5555555)*)*)))*2$>", "14^555555555555555555555555555555555555555555555555555555555555)**2**)*)*)**)*)55555)*)2**))**)***)5555555*)*)*2**2>2", "1[@555555555555555555555555555555555555555555555555555555555555*)))*{*)2)*{*)*)5555)*)*)))2*)**))*))55555*)**+*)))2$2", "41_55555555555555555555555555555555555555555555)*)**))555555555)***)**)**)*{***5555)**)***)*{*)**{*55555)*))*)****66$", "[,@555555555555555555555555555555555555555555)**)*))***55555555**{*)*{*)*)**2))55555*{**{)*)**)2)**)5555*)*2)*))))2/6", "14_55555555555555555555555555555555555555555)*))*)2**))*)555555*{*)*)***{**)))*5555))**)***)*{*)*)*)5555*)*)*{**2*2>>", ",[@55555555555555555555555555555555555555555*)**)*)))**)*555555)**)2)*))*))***)5555)*))2))2)**)*)*))5555)*)***))*)2$2", "[,_5555555555555555555555555555555555555555)**)*+***2)*{*)55555*)*)**{**{*2))**55555***)**)*)*)**{*55555*)*{)**)**2>$", "41@5555555555555555555555555555555555555555*{*)*)*))*)**)*55555*{*)*)*{**)**)2)5555)*{*)*)*{*)*+)**)5555)2)**)2*{)262", "[4_555555555555555555555555555555555555555))*)2)**)**{*)**)5555)**2)*)**)**)*)*5555)*)*)*)**)2)**)*55555*)**))*)**2$>", ",[@5555555555555555555555555555555555555555**)**){*{**)*{*55555*)))*)*))*{*)*)*55555*)*2)*)**)*)**{*5555)*))2*)*)*2>/", "[,_555555555555555555555555555555555555555)*)*)*****))*)*))5555)***)*2**)*)2)*)5555)*))*)2))*)**{**55555*)**)*)**{2>6", "41@555555555555555555555555555555555555555*)*)*{))))**2)**)5555*)*{*)))2)**)*)*5555))**)*)**)*{*)*))5555)*2)*)*{**2>/", "14_555555555555555555555555555555555555555))*2)****2*))*)*55555)2)*)****)*)*2)*5555)**{*)*)*+**)*)*)5555**)*)2)**)2/>", "1[@5555555555555555555555555555555555555555*)**)*{)))**)*{*5555*)***{*))*{*))*)55555*{***{*)*)*)**)*5555))*)**)*)*6>2", "41_555555555555555555555555555555555555555)*))*{*****{*)**)5555*)*{**)*)**)**)*5555)**))**)**)*2)*))5555*)2*)*)*{*2$6", "[,@555555555555555555555555555555555555555*)2*)**{*))**+*)55555)*)*))*+**{**{**5555)))*2))2*{*))*)*55555)*))*{*)**22$", "14_5555555555555555555555555555555555555555)*)**))*+**)*)*)5555*{*)***)*)**{**)5555)***)***)*)**{**)5555*)**)**)*)2$6", ",[@555555555555555555555555555555555555555)*)*{*)**)*{*)*)*5555***{*{*)*{*)*))*55555*))*)))*)*{**))*5555*)2)*)2*)*66/", "[,_5555555555555555555555555555555555555555**)*)*{**)*)**))5555))**)*)*)*)*)*2)5555)**{**2)****)**))5555)*)*{*)*{*2>6", "41@555555555555555555555555555555555555555)*{*)***))*)*+)*55555**{*)**{***{**)*5555)))**))*{*{)*+)*55555*)***)*)**22$", "[4_5555555555555555555555555))*))555555555))*)*2))*2)*)***)5555))**+*)**{)**)*)55555*2*))***)**)***)5555*+*))**)*)2$6", ",[@5555555555555555555555)****)**)555555555***{*)*)**)*))*)5555**))*)*)***))2)*5555)*))*2))*)*)*))*)5555)*)*2))2)*66/", "[,_555555555555555555555)*)))*)*)**)555555)*{**)**))*2)*2)55555)***)*+*))*2)*)*55555**)*)**{*)2)**))5555*)*)**)*)*2$6", "41@555555555555555555555*)***)*)**)*)55555))*))*))2*))**)*)5555*{*{*)*)2*))*)*)5555){*)*)*)***)**{*55555)*)*))**)*226", "14_55555555555555555555*)*)*{*)*))*)*55555**22222222222222*)*)52*)****)*)****)*55555*)2*)2)*{*)*)**)5555*2*{**{*{*2>$", "1[@5555555555555555555)*)*+**)*+**+*2*)*)*2222222222222222*)*)*22222+2*)*{*))2)5555)**))*)*)*)*{*)*)5555))**)**)**6/6", "41_5555555555555555555)**)*)*)2*222222)**)*222*222222222222)**)22222222222*2)**55555)***)*)*)2**)*))5555*))**{**))2>/", "[,@5555555555555555555)*{*)22222222222*))*{222222*2*2*2*22**))*22222222222222{25555)*)*{**+**))*+**55555)**{*)*{**2>>", "14_5555555555555555555*2*2222222222*22)**)*2*22222222222222)**)222*22*222222222)*55)*{*)*)**)**)*)*)5555**)*)*)**)2$2", ",[@555555555555555555)222222*22*222222*)**22222*2222222+2*)*))*222222222*22*22**)***2*)*)*))*{*)*)*)5555))2**)*))226$", "[,_5555555555555555*)*2222*222222*2222)*)))*{*)+))))))**)*)5)*52)22222222222222)*))2222*+**{**)*)*))5555**))*+***)2$2", "41@5555555555555))*)*)2*222222222+22)*5555)**)********)*)*)5555)**))*)*2+*22222*)**)*22222)**)**+**55555))**)**{)*22>", "[4_55555555555*)***)*)22+222+2*2)**))*5555))*)*))*))*))*)*)5555**))**{*)**+2*22*{*)22222*222*{*)*)*)5555***{)*)***2$6", ",[@555555555)*)*))*)**222*2***))*)*)*)55555*)*)**)**)**)*))5555))**))**)*{**{22)**)2222222222*)2)*))5555){***)*{*{26/", "[,_5555555)**)*)**)*))222*{*{*)**)****5555)*2)*{*))2))*+**55555**{***{*{**)**)*5))**22*222*2222**)*)5555**))*+**)*2>>", "41@55555)2*)*)*)*)*)***)*)*)*{**{*{*{)5555))*)**{**)**)*)*)5555)*)*))*)**)*))*)5555)2222+222222222*55555*)**)*)*)*2$2", "14_55)*2222222)*)*)*)5*)*)**)**{***)**55555**)*)**{**{**)*)5555*)*)2*)**{*)**)*5555)*)22*22+2222222)5555*{*{**)*)*22>", "1[@5)2222222222*)*)555)*{*)2*))*))*)*)5555)*)*{*)**))*))*))5555)2)*)**{*)*2)*)*55555*)*)222*2222222*)555)***))2)*{2$6", "414*22222*222*22555555*)**))***)**{*)*5555)*)**)*{***)2*)*)5555*)*)*{**)*)*)*+*5555)*)**)*222*2*222**)55*))**)**)*2>/", "[4)2222*22222+*))55555{**{**))*+*)***)5555)*)2)*)*)*{**)**55555)**)**))*)*)*)*)5555))*))*)*)2222+222)**)+**{*)*{**26>", "@%{22*22222***)**55555**)**)2*)**{*){*55555*)*)*2)*)**)*{*)5555**)2*)**+*{*)*)*5555)**)2*)*)*)222*2*)*)*2*{*)*)**)2$/", "%%*222222*)))*)*)55555))*{*)*)*))**)**5555)*)*)*)*)2))*)*))5555))*))*{**)**2)*)55555*{*))*)*)*)*222{*)*)222**{*))2266", "%){22222)2**)*)*))5555**)*)*)*{**)*2)*5555)*)**{*)*)**{***)5555**{**)*)**))*)**5555)**)**{*)*)*)*+2**)**2222)**2*)2$2", "%({222*)*){*)2)**)5555)2)**{*)**{*))*)5555)*)2)*)*)*)**{)*55555))**{**)*{**)*))5555)))**)***)2)*)**2)*))222222)))*26>", "%))22*)*)**)*)*)*55555**)2)*)**)*)**)*55555)**)**+**{*)***)5555***)**{*)**{*)2*5555)***+)*){**)*)*))*)**22*2222***2$/", "%(+2)*)**)**)*)2))5555))*)***{*)**{**{5555)*))*)*)*)*)*))))5555){*)*)**)*)**)*)55555*{*)**{**)*{*)*555*)22222*22))2>6", "%))*)*+*{*)2*)***)5555**)*){**)2)**{**5555)***{*)*)**{**2*55555**)2)*)2)*)*{*)*5555)*)**)**)*{***)*)555)222*22222*2>/", "@}))*)*)*)*))2))*55555*)*)**))*)*))*))5555)*))**2)*+)**))*)5555*)*)*)*)*)2)***)5555))*))*{*)**))2)*)5555*22222222222>", "4-))**)*)**)**)**)5555{*)2*)*2)*)**)**55555*+**))*)***))**55555)*)**{*)*)*)*){*5555)*)*2)**{*)***)*55555)*+222*222>$>", "[-5)*{***{*)*)*)))5555**)*)*)**222+22*))5)*2*)2)**)*){*2)))5555*{*)**)*{**)***)55555**)*)*)**{*))*))5555*)*22+22222$2", "1}(*)*){**)*{*)2*55555)2*222222222*222***)*222222222**)***)5555**)2)**)*)*2))**5555)*)*)*{*)**)**{*)5555)*))*222*2>$3", "[-))****))2)***)*)555)2222222222*22222)))*{2222222222222+*55555))*)*))2**))*2))5555)*)2)**)*)*)2)**55555*)**)*22222>$", "[-))*{*)**)**))*2*)***22+*2222+2222222*****2222222*2222222*)555**)**{**)+)**)**5555))*)**{*)2)*)*)*)5555)**)**)222>$>", ",@(*)*)2)**)+2222)*))*222222*22*222*22))))22*2*22+2222*2222**))*{*))**)***))*))55555**)*)**)*)*)*)*)5555*{*{*{**222$>", "1-))*)*)*)22*22222**))2222222222222222****)22222*222*222*2))**)222**))*))**)*2*5555)*)*{*)*)**{**+*55555**)*)*))*2>$$", "1@(*)*)*222222222*))**2*22*222*2*)*{*)5)))*+*2+222222222222*))*222222*+*)*+*)))5555)*{***)*+*)*)*)*)5555)*)**)**)*>>>", "[-(*)*22222*222*22)**)222)2)))))*{**)*5555))*)**)*)*2+2222*)**)2*222*+***)*)***55555)**))2)*)2*)*)*)5555*{**{*)2)*2$$", ",@))2222*2222*222)*)))*)*)******)*)**{55555*)*))*)*{**)*22)*)**222222222{*)*))*5555)*)*{**)**))*{*)55555)*)**)*)*)2>>", "1-)222222+2222222*)555*)*))))))2)**{**5555)**)**)2**)*)))**)*))222*2222222*{*2)5555)**)*)**))****)*)5555**)+**)*)*2$>", "-()222*222*222{*))5555)*)******)*{*)*)5555))*{*)*)))*)***))55)*2222222*22222*)*55555*{**)*{***{))**)5555))*)*{*)2*2>2", "@){222222222*)*)*55555*)*{*{*{*)**)*)*5555)*)**+*)***)2))*)5555)*2+222222*222*)5555))**{*)**{)***{*55555*2**)**)*)22$", "%(+2*222*2)))***))5555)*2*)*)*)*)*)*+*55555**)*)**{*{*)**)*5555*)**2*22222222225555)*)**)*))**)*{**)5555)))*)*{*)*6$2", "%))2222{*)***))**)5555*))**)*)2*)2*)*)5555))*{**)**)**)*{*55555*){*)222*222*222)5555*))*2)**)*+**)*)5555***{***)*)2>>", "%({22+**)*)*{**{*55555)**)*+**))*))*)*5555)*)**{*))*))*)**)5555)**)*)))222222*2**)5*)2*))**+*)*)*)*55555))**))*+**2$2", "@(22)**)*)*)**)**)5555**))*)*)**)***)*5555)*)*)*)2*{**{**))5555)*)*)***)2)22222)*)*5)*)**))*)*)*{*)55555***{**)**)22>", "%)))*))*+*)2))*)))5555){**)*)*{**{*{*)55555**{*)*)***)**{*555555*+**{*)*)22222)*)*)*2)*)*2*)**)**)*55555)){**{*))22$2", "%})*)**)*)*)**{**)5555**)2)*2)*)**)***5555))**)**)*)*+*)*)*55555)*)**)2**)*)2*)*)*)**2)*))*)2)*{**)55555***)**)**)2>$", "[-()*)2)**)**)*)*55555*)*)*))*)*{*)*))5555)*{*)2)*{*)*)*)*)555555)*))*))*)*)*)*)*)*))22{*)*)*)**))555555)*)*))2*)*226", "[-)***)*{*{*)2)**)5555)*)*)****)*)**{*55555**)**)**)*)*)**55555555*+**)**)*)55)*)**)***2**{**)*)*5555555))*{**)*{*2>$", ",@%*))***)**)**)))5555*{**+*){*2)*{***5555)*)*))*{**{**+*))555555555))*))*55555)*))*))*22)*))2))555555555***)*)**)2$2", "1-))**{)**)*))*2*55555**)*)***)*)**))*5555)*)*2*)*)**)*)**)555555555555555555555)**)**))*)*)*555555555555))*)2))**66$", "[-))*)*)*{*)2*))*)5555*{*)*)))*)*))2*)55555)*)))**)*{*)*)*555555555555555555555555)*))**)*)555555555555555))*)**)*2>2", ",@(**{**)*)*)*)**55555)*)2)*2**)2)**)*55555*{****)2)***{*)555555555555555555555555))***))*)*5555555555555555*)*)2)2/2", "1-)))**{***{*)*){*5555*)**)*)))*)*))*)55555)**{){*)*)))**)55555555555555555555555555)))**)*))55555555555555555))5)222", "[-)**)**){**)*+**55555**)*)***2)***)2*555555)****)*)*2*))5555555555555555555555555555**)**)**)55555555555555555555*22", "[-())2))**)*)**)*)5555){*)*{))*)*+)*))5555555))*)*)**))*555555555555555555555555555555)*)*)*)*55555555555555555555222", "[-)**)*2*)*{*)*)*55555**)2)***)*)**)**55555555*{*)2*{**55555555555555555555555555555555)*)*)*)*5555555555555555555*22", ",@%*)*)))*)**{**{)5555)**)*)*{*)*)**))5555555555*))):55555555555555555555555555555555555)*)*)*)*555555555555555555222", "1-))*)***{*)**)**)5555*)**)*)**+*)+***555555555555555555555555555555555555555555555555555*)**{*)*55555555555555555)22", "1@(*)*{*)**)*{*)*55555)2))*+*)*)**)*{)555555555555555555555555555555555555555555555555555)*{**)*))555555)5)5)5)5)5262", "[-(**)**)*)2)**)*)5555*)**)**{*)*)*)**55555555555555555555555555555555555555555555555555555**)**2*)*)*)**)**)**)**2$2", ",@)))2)*+*)**))*))5555)*)2*)**)*{**)*)55555)5)*))*))*5)555555555555555555555555555555555555)2222222)*)*)):)):)):))226", "1-%**)*)*)*)**+**)5555*)*)*))**)*)2*{*))*2222*2*2*2*22*2222**)*55555555555555555555555555)*)*2+*2*2*)*):))*)*)*)*52$2", "[-)*)**)**{*))*)*55555)*)*)2)*{**2)222*)*2*2*222*222*2222*22222)5555555555555555555555))*)*))2*22+*2*5))**):)*5*)*226", "1@(*)*{**)*)2**)*)5555*2)*)**)*2222222)*22+222*+2*+*+2)2*2{2)2****)55555555555555555*)**)*5)*)2)2*22*)**)5))*)))*)2>/", ",-))*)*)+***))*{*)5555))*)*)2222222222*22*2*+*22*!222*2222*2222)))**)*555555555555)*)*5)*)**)**2222)2*))***)5**5)*22>", "[-))**)**))**)**)55555**)22222222*2*22222+*222)22*2*22*2)22*2*2)**)*)*)*55555555)*))5)*)5*)5*))*2)2222*5))5*)))*)52>2", "[-(*)*+*)**+)*{**)5555)*22222222222226*2*22*)2**)*)*)*+*2*22*+2*)*)*)*)*)*55555*)*)***)**))*5)*)22*2)2*)**)*)*:)**2/6", "%!$>2)**{*)2>2**)*526$>2222*222622222$3>62))*)))262))*)*23>6222)*6$3>2)*)*)*26*)*):26>22)5*)22$66*22222*2)*):))*)22>2", "662>$6*)*22$$2))*)6$2>$322226$3$2222>$>/$>2*):*2$$2*))*>36$$>*)*>$>>$$2*)22>3$)*5)2>$2$>2*)*>$2$$>2*2*2622)*)*)**26/>", "6()2$>2*)6$>>2*)*2$6**>$>222$3=3*222$32)2$>*))6$>>2)*)2$>*56$2*)>>**2>>*)*3$3$2)**3$2)2$>*)$>2))2$22{2>$62*5)*)2226>/", "6%%*>$2)**23$2*)*>$2)*>3$22226$32)223$)*)>$2)**)$>**5*>$2)*2$>)2/255*$32*22$33*2)2$6*)*>$2*>$***>6>*222>/2))*)*)*2$26", ">()*3$6*)*)$>2)*6$32**2$3222*2$3*22>$>):)$>2*))*>$2))*$>**)2>>*$>255)>>2{2223$222>>$):)$>22$>*))22$22*22>2:*):))*22$2", "6))2>>6**)*3$22223$2))2$32)*)23322*>$>*)*>$2)*)*>>2*)*>$2):2$$*66255)/>**2*6$32*2$$>*))$>22>>*)*2$62*222$2))*)*)*262>", "6%{*3$/{*)*>322223>2**2>$*)*26$$2*22>$)*5$>2*5*)$$*)**3>2))26>2/$255)>$2))*6$322*63$)*)$>22$>*)*26/)2226$2*)5*)*)2$22", "6({2$3>*)*)3$2222$$2))*>6)*+2/3>2))2$>:))>$2)*):>>2*){$>**)2$>*>6255:$>2*)*2$3*{2$$32**>$22$>**)2$>)2*22>6*)*)*)*26$>", "6))23$2)2)*3$>222332*526$*):)2$>*)*2$>*)*$>2*)))>$25)*>$2)*2>$)2$255*>>*5*)2>$22*63322)$>2*>>*)*2>2**222$2*)*)5)*2$22", "=>>$332***233>222$3>)*6$6*))*2>$)*)*>$62$==2*)**$>2)**>$>*)>$>*26>552$$)*))*3$2>$==$6223$2)$$2))$>$6>3>$322*)**)*226$", "=33===22)22$$$$333=$$3==*)*))*>>:)*)$==3==$3>25)>$*))*3==3$==$>$2$22>>2))**23=>$>$=<=$$3>*)26>22$$>$>$$3=$2)*5)*)2>22", "3====$2222233>=$=$$====$)*):)2$$)))2>$===3$>$$2)$>2**2>$====>$>2)2$>$2)**5)6=3$>$3$===$>2*)*2$/33$>2$>3$=3>*))*)*22$6", "6>3$$3$622222$$3$>>$>$$>*5)*)*)))**$>$>$$$6$>6$25*)5)22$>$$$$6$>5))**)*5)*2$$$6$>6$3$3=2*22:))2>$6$>$>$33$$2*)*))*2>2", "{{>$333$62>2>>333$>>$6>/)**)*5*):)>>$6$2222>/$>2*)*)**3>$6>6>$6/5**)))*)*)2>6$>2222$3$3$22)2)*6$>$6/2*>$$333*):)*)2/6", "@()3$$3=$2/6/22222*>$$>>*)5))*)*)*$6$>2*))*6>>$>2):))***)*2$2$>6*)22222**2$$6$2*)*)6$3$>222***$6$6$))**33$$32*)*):26/", "+{{23=$3$2>222222*2$>>$$+*2**+**26$$>$2)*)**$6$>2*)**)))*)*>$>$$622222266>$>$>2):)**>>3$>*222>>$>$22*+26$3333*2)*)2>6", "+2>23$3=36/222*2*2>$3$332262>2262$33$3*)):)*>$6$2)*5))*)*)*$>$33$2>/6/6/2$33$$)*)*)*>$$3>222>=$=$322622/===$3222)522/", "+!6$==$=$>2222222)>$=3=$>/6/2$2>/==$=3*)*)))/>$6$*))*:)*)*)3$3=$26/62>2>>=3=33*)*)5*6$6$$2)2$3=3=32$22263$===22255*62", "!+6$3==$=/62*2)2**>3$=$=26/6226/>33=3$*)*):)2>$>>*)*))*5)*23=$==226/6/6/2=$$=$6*)*)*2>$>>222>==$=$222222$=$3=$22)5222", "+26$====3>*222222)/=3=33$26/6$22>$=$=3)*5*)*2$>/>2):)*)*)*6$3=$=2$262622>$==33/6*)*)2/>>$222$$==$322222233==$62255*22", "+!63$==$=222*+**)*>=$3$=22>26226$=$333**))*)2$6$>**))*5)*2>$=33=26/6/6/6$=3$=$262*)*2>>$>2*23===3>222222$$=$3$22)5222", "+26$====$62*22*))*>$===$6/2>/6/6$3==$$))*)*)2>$>$2)*5)**)2$33$=$6/62>/62$33=3$6/62))2$$6$222$==$=$222222>=$==>22:5*22", "!66>$===$222)*)*)*6=$3$=2>226/62>$3$=3*)*5)*2$6$6*)**))*22>$==3=26/6222>>$=$=326/2**2>$6$*)23$==$>22*222$3=$=$22)5+22", "662$=$===2*)*)*))*2$333$22222>22$=3=33*))**)2$6$>2:))*522$2=$3$=/6***)**$=$33$$2622)2$6$62*2>=$3$>**{*22>$==$>2255*22", "666>3==$32)))*))*)*$>$$>)*)*/2$2>$=$3$*)*)5*2>>/>2)):)*262>=3===22))5*))23==$326/>2*2$6$>2))2$>$32)55522$==3=$22)5222", "666$$=$=32**)5*:)*)>$6>$*)*)6226$33==$)*5*))2$$>$*)*)*)2/6/=$=$32*)*))**2$3$=32262$22>$6$*)*2>$>$2*555226$3$=>>2:5*22", "626>$=3$=2)**)))*)*>>$2>5*5*2>/2>$=$33*)*)**2>>$62)*))262>>$=33=*)*)*5)5*33=$32$22222$6$6**)*>$>$6*)5522$3==$$22)5222", "666$3$==$>*)5)**))*$$>$>*)))/266/=3=$3*)):))2>/>>*:):)/6/2$3=$=$)*):)**)*>$3=$22>/62>6$>3*):)$6$6$)*5522>=$==2>255)22", "262>3=$3=2*)**)5)**>26$>*)**6>2/63=$==*)*))*$$>>$))*)*222623$3=3*5))*)))*>$=3=2>2262$$$2$)))52>$>$)*5522$$==$>/2)5222", "!6>$$=3=$62)*5*)*)*>$$6$5*)52/66/3$=332)*)*)>>$/6*))*)6$2$>$==$3)**)):*)*2=3$=$2/>/>$6>$2**552$>$6*)*522333$32>2:5*22", "+623=3$=$22:))*):)2>>$6$))**62/62$33$=2*5*52$2>>25*)**2262$3$=3$))*:)))*)2$3=$>6262$3$6>2))55*6$>$2*)526$===$>/6)5222", "+63=$3=$622)*)*22222$6$>*2*2$>2$26$==$>2*)2$>$>$*)*5)2$>$$>==$3$2*+22**5)*3$3=$$>/>3$6$>*5*5552$>$3!*:6$3$3$>26255*22", "333$==$32>2*)*>$6>6$6/62>266>22226$=$3$>>6$6$6$2)*))*233$33$33=$6$>$>5))*)23=3=3$3==$>$2)*55552>6$>$>3$3$3=$6/6/)5+22", ">=3=3$=2$22*)2=3$/$2>3<=$$>/$22>=$6$=3$$===$>$2*2>$$2>$=3$==<=$>$>$$==/*)**=$$===3$3=$322*)5555/$>$>$>3$=3$>/>/655*22", ">3$=$3>22>222<=$>>>$====<=>632$$<=2>$3=====<$>*6==>==$=$====<==$6$===$==*)*>=<==$==$=32222*5555)$3$>$>$3$=>2>2>2*5222", "3=33$6/>2/6$==<$>$>$==$2=<$/=2=<=<22>$=<3$$==2*=$2*2====$=<<<=$>$3<=>)$36*)$==<<3=$==$2)*22555*)2$6$>$=332/6$2$2)5*22", "26>26/622622*=32*5*=32552$3522>$=2$==222==22=3*)*==$226$==$6)*3=2**23$)*26$=$>$>>$2)*)2*)5555*)2*22$2226$2>6255222", "{!26/62$2$22)=$2))*=$255233*222$==622==$)))$=>>$=)*)$==6/62==$2*23=2))2=3**6/>==222$3$*)*2)*5555)2*)*)6222$2>/2/)5*!2", "{!226/62626**==2*)233*55*=$)2223==2$2===*:)=$$6=$)5*==$62/6==>2*2$=2*)2$=2)>2$3$>/6$36):)2*)5555**+*)*$22262>>>2)5222", "{!!/>26/6/22)$=2)*2==6*)2$3)222$<=>2>$==)2*==6$==**)===/6>$<<==22==25*2=$22/6$==2>6$3/*))2+*5555)22222>>22/>/2$255*22", "+266$6/2626*)==2*22==6*22=3*222>=<$3$===$2>=$$6=$)))$<$6$$3=<=3$3=$2*)23326=3===3$$=$>))***)5555*22222$$/>>/6>22*5222", "+!6/626$2$22*$32222==/2*>==5222$==$3$=<=6$6==22==***==3$3=3<<=$3>==2)*2=$2$$3===$3333$):)2*)555)222222>>6$2>2$2655*62", "{26>$222226*)==$222$<3*+$=$)2223=<3$3===$2$<322$=*)*==$33$==<=3$$=<3*)$3$26$$==<3$$$32*)*+*)55)*226222$$6>$>/6$2)522>", "{!62>2$2>/6**==22222==6$==6*222$==3$3$===3==$*)$=323==3$==$<=$$>6$=<22332*>3$===$333$3222**555*222222*>$2$>$>622552/2", "{!2>$2262622)$=>2*2)23$=$6*2222>=$==>$3==$3==32>$>$===$2))2$6$==33$$62222)55552*222)*)2>$>$6$2/2*5266", "#26/62$2/22*)*2222)*)5**22222222/262622/>$$2**5*)*2**>$3$3>22262$>$>/2)*)**2226$$$>32***)5555*+*+*2*)*>26$6$2>625)22/", "{!!>/62262>*)22*22)**555**2*>2262622/6*>2>6$)))*))))5$=3=$2$2/2*>/>>>*)5*))26/6$33$$22)))5555*2***)**)/>/>$6$2225*262", ")!22>222222*)*2222*5))55+*+2/22222/62226$2$2):*):*5**=3$3=22262)$>>$6*)*)**222233$>32*)*55555+*{2+*))*226>/6$2225)2/6", "#!2>/26/622)*22)2*)*):55*2*2622/2622222/6/>6*))*))*)*3$=3$22222*26$/>*)*5)*622>$$>3$2))*555552*2*)*)**2>2$6$>22**)262", "{+!26222222*)2222)*)*)55)22*>22222222226$6$2*)*5)*))233$3$2222222$>>$*))**)2222$>$$>2*)*5555)*2)**)*))6/6/>2>/2+5*22/", "{+22/222222)*2*222)5)*55*)222222222222*62$6$):)*)*5*2$33$>22222*6$6$62*5))*22223$>>$*):)5555)*2*+*)***22>>/>/6**)5266", ")+!2622222**)2+22*)**)55)2*222222222222/>2>2*))):)*)*>3$3>2222222>/>>**)**22222>$>$>2))*5555)2)2**)*{*222/>262+**)2/2", "++22222222*)**2*2**))*55**+2222*222222*>6$2$))**)*))2>$$3$22222*2>$6$2)*))*2222$>>$>*)*)5555)*2*+)**)*222>2>/2*)5*266", "+{+222*2*2))*!222{):))55)22*62*+2*2*2*+/>/>6*:)))):*2$>3$6*2*2222$>$6*)5*)*22*23$$6$)*5*5555)*{***))*)22>/>/62)*))2/2", "+{2222*+2*)*)2*22**)**55*2*222*2*+*+22*6$6/>))*:*)))*>$3$>2*+*{22>$6$2*))*2)222>6$2>:)))5555)*22{***)*2226262**)*5262", "!){22)2*2)*)*2!*22)*5))5*)222)2)22*2*)262$6$5*))):*)2$>$>$)22*2*6$2$>*)**)*2)*2$/>>$))**5555)2***+*{*)2222$22*)*5)2$2", "!)+222*2)*)*)2*22)*))*55)2*22*)2**)2)2*2$6/6*):)*)))*6>>$6*2*)2*6$>>>)*)52*2*226>>/2)*))55555**+*2)*)**222222)))5*222", "+#)22)*)*)*)*2222*)**)552*2+2***{2**2*+$2>>$)*)*)*:**>/$>6*)*2)*>$2$/*)**)2)*{*$2$62*5*55555)2+*22***{2*22622*5*5)22>", "+{{2*2)2)*)5)*+*22)*)**)22222))**)2))**>>/62*)*)*))))$6>$$*+*)2*>>$6>*))**)2**26$2>2*)*)55555222)22{2*2)6/22*)5)**2>/", "+{)22)***))*)2*+22*)*)*)*2*2*5)2)*)**)26/6$${***)5*)*2>/662*{**)$$6$6)*2*{*)2)*62$22)*)*55555**2222**)*22222*5*55)2$6", "+{)2***))):)*)2*2*+*2)*)2*+2*)*)*{**{**/6>26**)))*)*52/>2$2)**)2>2$22**))**)*)2/>222*5*)55555)2)222*{2*2222)))555)262", "{+)*+)2)**)*)**2222*)**2)2*255)***2222262/>/2222*)*)*)62$262*)2>/>6$*))**)2222222226*2)*)5555)**2222**+222**555):52/6", "+{)2*2**)2):))*+*)2222+**+*)55*))*!22226$2262626/)):)*262$26>/6/6/62)**)*222222622222222*55555)22222222222))5*55)526/", ")+{*{*)2***))*)*222*2222)*25)5)*)*222622226/62/62**)))*/626/2>2>662**)*))*26262222222222*555555)222222*2*2*5555555226", "{+{2*)2*+*)):))*{**+*2*)**5555)*)222222226/62/622))):*))26/26/>2/2*)))*)**622/2222222222)555555*222*22222)55)55555222", "{)2*)2*)*2)*)**)**+22{2*))5555*)*)222222222226222*:)*)***22622222*)***)*))2/2222222222*2)55555)*)*2+2*+*2555555)55*22", "##)2))*))):)*5)*))*)**)55555555*)*)*)***)*)*)***))*))5)))***2*2*)*))))*)**))*)*)*)*)5))55555555*)*)*)**))555555555222", ")#)2*:)*)*)*))*5)*)*))*5555555))*5*)*)))*)*)*))*)*)***)*:)))))))))**)*)*))*)*))*)*)*)**)555555*)*)**+*)*5555555555*22", "##{2*)):):)):)*)*)5*5*)5555555):)*)5):)*5*):)5*)5*5)5)*)))**:)*:**))5*)5)*)*)5*5*5):)*))555555*)*)*)*)*)5555555555222", "##)2{*))*)*)*):)*5*)*)*5555555))*)**))*)))*)**)*)*)**):)*5)))*)))5***)**):)5**)))*))*5*555555)*)2*)*)*)55555555555*22", "{{)2***))*5*)))*)*))):)5555555:))5))*):)*5)*)5)*))*))*)*)**:)*5**))5)*5)*)*)))**)**))*)*55555*)*)*)*)*)55555555555222", "##{222):)*)5*)*5)*)**))5555555))****5*)*)**5*)*5*:)5*5)):))*))*))**)*))*))*)**5):)5*:))55555*)*)*)*)*)555555555555)22", "#{{2)2*)*))*){{)*5):))*5555555):))5))*)5*))))*)*)))**)**)):)):)):)5*):)*5*5*5))*))*)))*)5555)*)*)*{**5555555555555222", "##{2222)*5*)){{{)**)*5*5555555)*)*)**)*)*5**)5*))**))*5)**)*)*)*)*))*)*)*)*)**)*)*)*):):555**)2*)**))5555555555555*22", "%#{++2*2)*)*){{+))))*))55555555*):))5*5*)*)5*)):)5):))*)5)*):)*5*)*5)*5))*)))5*5*5*5*)*)55))*)*)*)**55555555555555222", "@()22++**):)**{{{)*5*)*5555555*))*)**)))*))*)**)**)*5*)**)5*))*)):)**))**5*5**)))*)))*))55**)*)*)*))55555555555555*22", "}%)22+22+*)*)){{+))*):)55555555):)*5))**5):)*)5*))*)*):)))*))*5)*)*)5)*5)))*)))**))**5):5*))*)*)**)555555555555555+22", "@})2)2++2*)):)*{{{*)))*5555555)*)*)**5*))*)*5*)):))*))*):*)*:)*)*))***)**)*):*5*5*5*)*))))**)*)2))5555555555555555*22", "}@%*2222+!*)*)))+{{**))555&&555*)):))*):)*))*)*)**5):))*)):))*):):)))5*)5*5*))*))*))5*****)*)2*)*55555555555555555222", "@%@)2)2+2+2*)**){{{)*5*55(&)*5*))*)*))*5*)):))*)*)*:))*)*))*))*):)*))*)*))*)*)*)**))*))*)*))*)55555555555555555*22", "}@(*)22+2+22*5)*{{{{)*)55)&&&5:))*):):)):))*5*))*5*)*)))*5)*):))*)*))*):)*)):)5*5):)))*+**)*)**)555555555555555555222", "}}%*)2+2+22)2)*)){+&))*555&&&)))*))*))**)**)*)**5)):)***5*)5*)*))))*))*)*5**)*))*)*)**22)**)*))5555555555555555555*!2", "%%%)))2+2{222*)*){{+{))555&&&(5*):))*)5)*)5)):))**))*5))*)*)*))*)*))*)5*)))5*)*)*)):22***))2**55555555555555555555222", "}@))*))*2*2*22*)**{&+))555(|&#))*)**5*)*5*)**)5*))*))*5*)*)*))))*):))*))**)*)*):):*+*+22)**))555555555555555555555*22", "%%%*))*)2+2+2+!!)#{+&+)555)&&&):)*5)*)*)*)):))*)*5*5*)*)5):)))*))*))*))*5)5*)5*))*+*22*2)*)*555555555555555555555522>", "}@@)*)){{2+++!!+!++&+{55555&&|))*))*)*5))**))*)*5)*))*)**))))*)):)*)))*)**)*)*)***222*2{*)*)555555555555555555555526$", "@})))*)*){2!!+!!!!++{)*5555&'&{)5*):))**5))*5*5)*))*5):))){){)*)*))*))))))*5*)5)2+*2*+2***)555555555555555555555552/6", "}}@:*)))*))222+2+2++)*)5555#|&{**)*)){{)**5*)*)*)**)**))*{*{*))*)5*)))))*:)))**2*2222*22{55555555555555555555555)*2$6", "}@%))*)*))*)*2*22+222*55555(&&|))):)+|.{)))*))*)*5):)))*{{{)*)*5)**)*){*)))**)222*2)2222555555555555555555555555*)2>2", "@%5*))*)*))*)22++!+++++55555&.|)*))*&|;{**)*5*5))*))*:)*#{)*)*)**))*)+))*)**222*+222*2)*5555555555555555555555)*)*2>/", "%}%*5*5)*:))*)*!]&]|]]+&{)55&&|{):)*&..+)5*)*)**5)*))*))))*))5*)))))*{{{)**+*2)22*2*+2*)555555555555555555555)*)*)2>>", ")(5))*)*))*)*))2+!!!+||!|&|&&&|&*)*)&;|{)*)5)*))**):)*5***))**))){)))){+)22*2222*+22*)))55555555555555555555)*)*)*2$2", "##{**)*)5*)*5)*)*22+!!+|&|||&.|&)*)*&|.{)*)**5):))*)*)*)))):))){+{{{*{+!!2*2+*2*2*2)*):*5555555555555555555)***)**262", "#))2)*):)*5)**5)))*22+{)++&|||&{*5)*&;.+*5*))*)*):))):)*)**)*){+{{+++2!!+222*22+22)*)*))555555555555555555**)))*))2/2", "##{22*2)*)*)))***))*2***)+*)++!*2*))&|;{))):)*))*)*:))*5*5)*5)+{+++!+2+22*+*22*2*)*)5*)*5555555555555555)*)****)**222", ")#)*2222*)*):*))5**))2*{+|++))*22*2*]..{**)*))*:)))*)*)*))*))!&]+2+]|!*2)2222)2*))*)*):)555555555555555)*)*))))*)5)22", "#){22*+*22**)):)*)5*)*))||||!)22)222|.;+*)*)):)))*:)):))****!|]!+22|+]+222*+*2*))*)5*))*55555555555555**)*)****)55222", "##)2*+222*+2**)*)*)):)55{&||||++22*2||;&22*2*2****+*222*222!]]&!2*2+]|+2*22**))*:):*)*))555555555555)*))*)*))*)555*22", "#){22*2*+2*2222*))*))*555)&||.||+2+*|;.]*22*22222222*2*22)2&|]!+*22++||+2)2))*)))*))):*)55555555555*)**)**)**)5555222", ")#{*2222*222*+*222***)55555(&||;||+2].;!2)22++|++*2*+22)22!|]|+222*2+]||2)*)*)*5*))**))*)55555555)*)*)*)*{*)555555*22", "##)22)2*222)222*2*2+2*:)55555#|.|;||||;&222*+;~]*2+22*222*|]|+2*2)222!||&)5*)5*)*5*5)*5*55555555)*)*)*)*)*)5555555+22", "(){2*22+*2*22*2+22*2*+)**)*))5)+|.|;.~|]*2*+|.;&22*2*2+*2!|||222*22*){&|&+*)*))*)*)*))*))55555***)*)*)**))55555555*22", "}%)22*2*2+2*2+*2*+222**)*)****22+].;|;.!2+22|;~!2*22+*22+|||!2)22)+{*)+||&)*5*)5*))*5*):)555*)))**)*)*{*5555555555222", "@@()*+222*22*2222*2)2*)*)*)))))|]2+|~|]22*2+;.|+222*22*2!||])22*)+&||))&||))*)**)):)*)*)*5)*)***))*{**555555555555*22", "}}@*)2*2)2*2+*2*22*22)*)*)****]|||2*2+*+*22].;|2*+*+2*22+||+2*)){|||||){|+)*):))5**)):))*)**)*))2***)5555555555555222", "@}))*)*+222+*22{2*22*)*{**)))*+;.;|!2*222*+|;.]*222*2+2*2*+*))**{||||||)*))*))**)))*)*222*))*{**)))555555555555555*!2", "}@@*5)*)**222*2*22+22)**)***)*++;.||!22*222|.;+2*2*2**)))*)*5*))||.&&|||#*5)*)5)*:)*22*2*{**)*)**)5555555555555555222", "@%@))*5*)))*2+22*2*2**)*))))))*2+;~||+2+*++|;|)2)*))))**)*5)*):)|||{)|.||{*):)**)2222*+22**)*)*)555555555555555555*22", "}%@**))*)**)**2*2+2*+)*)**)*:5))){|.||)*)*&~.&*)*))*)*)):))*))){|.|*))||.|{*)2*222*2)22*2*{**)55555555555555555555222", "@}5)):)):))*))*+2*22**)*)*)*)****){||.|)*)|||+)))**):)*5)**):*)&|.&)*))||.|!2*2+*22*22*2+*))5555555555555555555555*22", "}}(*)**))*))*)*)*2*+)*)*)*)*)*22222+||||))||.)**5)5*)*)*))5*))*|~|+*)*2+|;~|!+*22*+2*2+*2)555555555555555555555555+22", "@@@5*)5**)*:)*)*)))**)*{*)*)*)+*2*22!|;||||||*))*)*)*5)*)**)**{~||+222*2!||~.!2*22*2+2**)*555555555555555555555555*22", "}}(*))*)):))))*5)**)5*)***)*)**2+22)2!||||||!222*22*222*2*+222]|;|2*2*22*!|;|;+2)22)**))*)555555555555555555555555222", "@}5)*5*):)*):*)*)))55555))**)*22*2*]|+!|;|;|!+*22+||+*22*22*2)|~.]22+22{22+||~+22)*)*))*5*555555555555555555555555*22", "}@%*)*)))*)*))5**:)55555555)*)2*22+|||2+|||]*22*2|||!2*+22*222|;.!*2*2+|||22|!{)*))*):))))555555555555555555555555222", "@%@)*)5**))5*)*)))555555555555)*{*2|||+22+2+2*22+|||+222*22+*+~~|2+22+;~|~|&))):)*:)*)5***)55555555555555555555555)22", "}%@*5)*))5**)*)5**555555555555)))*)+|||+*2*2*2{2|||!2*+*2)2*2]~||22*)+.|~|.||+)*)))*))*)5)*55555555555555555555555222", "@@%*)*):*)*)5*)*))5555555555555**)*)+||+)*)*+*2+|]|2222222*+*|.;{))*)+~||&;.|.|{):)):*)**))55555555555555555555555*22", "}}5)*)*))*5*)):)*5555555555555))*5)*)&&|{*)*)))&|&{))5))5)*)))+&**5)*{..|))||||||{*)))*)):*55555555555555555555555222", "}@%*)5*):)))**))*5555555555555):))*))+|+&)*)*)+|+&*:)****)*)**)))))*)+|;&)*){|.|||&)*:)5*)))5555555555555555555555*22", "%@%:)*))*)**)5)*)55555555555555*)**5*)+&+{)5*{+&&)))*))5)*5):))*:**)){~.&*)*)){||&||{))**)**5555555555555555555555+22", "@}@*)*5*)*5)**):55555555555555)*)5)*)*)&&+)*){&++**)*5*)*)*))*)*))5**{|||*))*)*)&||&|)*)):)))555555555555555555555*22", "}%()*)*)5)*)5)*)55555555555555))**))*))++&+){+&&)))*)*)*)5**)5*))*))5+~|&):)*5)*))&|{)):))*:)555555555555555555555222", "@@@*)5*)**)**)*)555555555555555*5)**5)*)&+{{{++))*5*5)*5)*))**)5*5**){|~&*)*)*){{)*))*)*)*))*)55555555555555555555*22", "}}@*)*):))*5)*)555555555555555)*)*5){+{)){{{{{{)*)*))*))*))*5))*)*)))+.|+)*)))||||&+{)))):)*)*55555555555555555555222", "@%@)*)))*5)*)5*555555555555555)5*)*)){{)*{+{+{)*)*)**5**5*:)**:)*):)*{.;&)5**&||&||&|++{)))*5)*5555555555555555555*22", "}@))5**)*)*)*)5555555555555555*))*)*)+{+)){{{{*)*5)5)*))*))*)))*5)*)5+|.&*)))&||&&|&&|&+|+{{)*))555555555555555555+22", "@}@**)5*5*):)*55555555555555555**)5*){{)*)*))*)))**{))):)*)):)*))*)*)+.;+)*:*{||&*)++{|&+&+{+#*)*55555555555555555*22", "}%@)))*)))*))55555555555555555))5)*)*)){))*)*5):*)){{)*)*)5*))*5*))*){;.&*))))|&|)*)*))){+&+{{:)*)5555555555555555222", "@}5*):)**5)**55555555555555555)**)*)))+))*5*)**))){{)*):)*)*):)*):*5*{.|+))*))&||))*)**)*))){*))*)*)55555555555555*22", "}@%)*)*5)*)55555555555555555555)*5):*))*))*)*))*)))+)*))):))*)))*)))))+&)*5***&||{*5)))*)))*))))))))*))55555555555266", "@%@*5*))*)*)555555555555555555)*)**))*){)*))):)))+))):)**)*5*5**5)***)*)*)*5))+&|&)**5*){++{{{{{){){)))))*)5))5)*)2$2", "}%@)*))**5*5555555555555555555:):)))*))*))):*)))*))**)*)5*)*)*)5)*5)5*)5*))*)*)||+)))*){&{&{+{+)+)2)){))*5)*****))262", "@}5))*:)))55555555555555555555)))*:):)*))*)*))*){)*))*)*))*))*)5*)*)*)**):))*5*&|&{*5*){++{{))*)))))**)*)*)))))5*:22$", "}}(*5))*5*555555555555555555555*))*)*))*))*))*))*)*)*5)5*)5*5)*55)*)*5))*)*5*))+||{*))*{{&{*)*)**)*)))*)))*)*)*)))262", "@@@)**)*)555555555555555555555*)*5)*)*))*))*)))*)*):))**)**)**)555):))*5)*)*))*{&&{)*:)){++#*)*)))*)*)))*))))):)**2/6", "}%@*)5*)5555555555555555555555)5*)*)5*5*))*)*)*)*))*)*))*5)*)5)555:))**)*5)*)*))|||))))*{&{{)))5**))){)))))*)*)*5)2>2", "@}))*)*55555555555555555555555)*)*):))*))*5))*)5):)):):))*)5***5555)*5)*)*)5*5*)+&&)***5*{+{{*:*)5*){*)*)**):)*)*)2/>", "}@@)*)5555555555555555555555555*)5*)*)*):)*)*5**)**)*))*5)*))))55555)*))*)*)*)*){||{)5)*)){+{)))*)))){*)*))*))5*)*26/", "@%@*5*555555555555555555555555))**)*)*5)*))*)))*))*5)**)**)**5*555555):*5*5*)*5*)&{*)**))*{{{{)*)**{*)))*):))**):)226", "}}5))55555555555555555555555555*5)*)5*)*)):)5**5):))*5):))*5)*)5555555))))*)5)*))*))*))5*)){{{)):))*){))))*):))*))2$2", "}@%*55555555555555555555555555)*)*5)*)*):*)**))*)*)*)*))*5)*))*55555555**))**))**)*):)**)*))+{)*))*)*)*))*)*)*5)**22>", "}@@5555555555555555555555555555)*)*)*5)*))*)):)*)):)*)*)*)*):))555555555):))):)5)*5*)*)):)*){+{)*):))*){*)))*)*)5)26/", "}-@555555555555555555555555555)*5)*)*):))*):)*)):)*)):):)*5*)**5555555555*):*)**)*))*)5*)*)*){{{)*))*)*)))*)5*)*)*2/6", "@4_5555555555555555555555555555*)*):))*)*5))*)5*)*)5*)))*)))*5)55555555555:))*)):))*5*)*)):)*{+{)5)*:))*))))*)*5*)2>6", "11@555555555555555555555555555))*)5)**)*5**))**)*)**)**)5**))*)555555555555)*5*))*:)))*5*))*)){{**)*))*)*))))))*):22/", ",1_555555555555555555555555555:)5**))5*)*)):)5)*5)5)*5)*)):*))*55555555555555))*)))**)*)):)):*)*))*5*):))*)*)*))*)2>6", "[,@555555555555555555555555555)**))*)*5*))*)***))***)):)*)))*:)555555555555555:):**)5*5)*)**))*))*)))*))*)*)))):))2/2", "[4_5555555555555555555555555555))*):)*))5*5*)))5*))5)*)*5*):)))55555555555555555))5*)*)*5*)5)*5):*5*):)*5)*))*)*)*26>", ",[@555555555555555555555555555)*5)*)*)**)*)):)**)*)**)*)*)*)***5555555555555555555*)*)*)*)**)*)*))*)*)*)**)*))*)*52/2", "[,_5555555555555555555555555555**):)):))*)*)*)5)*5*)5*)5)*5*)5)555555555555555555555):)*)5)):)*)*)):)):))5*)*)5*)*2>6", "41@555555555555555555555555555)))*))*)):):)5*)**)*))*))**)))*)*55555555555555555555555)5)**)*)):):)*)*)**)):)**5))2$2", "[4_555555555555555555555555555:):))*5)*)*))*):))5*):)):*)5**5*)5555555555555555555555555*)5*)5*)*)*)*5*)5)*)*)))**262", ",[@5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555):*)))*)5)*)***)5)*:)*522$", "[,_55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555:)5**))5))5**)))*))262", "41@5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555:5*5*)5):):)5*2/2", "14_555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555*22", "1[@555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555222", "41,@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@@^@5)2", ",[1141[,11411,1[,11411,1[,11411,1[,11411,1[,11411,1[,11411,1[,11411,1[,11411,1[,11411,1[,11411,1[,11411,1[,11411,1,55", ",[4,[,14[,1[4[414[,1[4[414[,1[4[414[,1[4[414[,1[4[414[,1[4[414[,1[4[414[,1[4[414[,1[4[414[,1[4[414[,1[4[414[411[4[4[@"}; libiodbc-3.52.9/iodbcadm/gtk/error.xpm0000644000076400007640000001573612323210535014530 00000000000000/* * error.xpm * * $Id$ * * ODBC logo in XPM format * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ /* XPM */ static char * error_xpm[] = { "48 48 62 1", " c None", ". c #B6DAB6DAB6DA", "X c #D75CD75CD75C", "o c #C71BC71BC71B", "O c #BEFBBAEABEFB", "+ c #BEFBBEFBBEFB", "@ c #8E388E388E38", "# c #CF3CCB2BCF3C", "$ c #AEBAAEBAAEBA", "% c #DF7DDB6CDF7D", "& c #E79DE79DE79D", "* c #EFBEEBADEFBE", "= c #F7DEF7DEF7DE", "- c #DF7DDF7DDF7D", "; c #EFBEEFBEEFBE", ": c #FFFFFBEEFFFF", "> c #965896589658", ", c #CF3CCF3CCF3C", "< c #410341034103", "1 c #104014511040", "2 c #71C675D671C6", "3 c #8E388A288E38", "4 c #71C671C671C6", "5 c #9E799E799E79", "6 c #618561856185", "7 c #AEBAA699AEBA", "8 c #A699A289A699", "9 c #69A66DB669A6", "0 c #861782078617", "q c #9E799A699E79", "w c #A699A699A699", "e c #596559655965", "r c #69A669A669A6", "t c #514455555144", "y c #861786178617", "u c #492449244924", "i c #69A6659569A6", "p c #618565956185", "a c #79E779E779E7", "s c #28A228A228A2", "d c #082008200820", "f c #965892489658", "g c #410345144103", "h c #30C234D330C2", "j c #104010401040", "k c #71C679E771C6", "l c #BEFBB6DABEFB", "z c #30C230C230C2", "x c #208120812081", "c c #000000000000", "v c #38E338E338E3", "b c #208124922081", "n c #514451445144", "m c #186118611861", "M c #596555555965", "N c #A699AAAAA699", "B c #BEFBBAEAB6DA", "V c #E79DE38DE79D", "C c #CF3CCB2BC71B", "Z c #59655D755965", "A c #B6DAB2CAB6DA", "S c #000004100000", " .X..o .o O + @@ # $+ +.OXo ", ".#%$+&*=%oX--;:.O&>- #;,+,;&&%-.oOo#%*&:&+. ", "OO#%+-*& ::*-&;::,*;&*=+$O +$$ O$O$#+,- ", " -%-&=%&-== : -=;=#$. #O+OXX-O%X X%O$++ ", " o=:X+X*;&,%;##-&,;: ;+&=:-, &# &=&-%X:*&;;;<12 ", "O :;: ,34- +.X*X=-* -- X* ::;-;o#&:XoX ,X 5236 ", "*- ==:-78- -9O05**%+qO%;- %&&w0> q $werty u0 ", "+ :=+%=:+#OX-O X: :*y4i>*;yqq@524t6p>@03ya s 22", "=::##4 o3+@y+ & = **w%%- +4 5>56w5eya3p> 62rdr", "#& o%*:O$X*$e@+ : q a0=-0f5p>agg rhs 5j<0s1hd<<", "X=; kl=%,.o $ $r6s0h56bjxv<032pwqhu>+ 65u1cxuhh21mueytssh3>s ", " $&--$ o3q#,a0a1cy1sxxcchr 6> 35 ", " +,;O*+%+y5y0wo$M>#*5>d6 4<6rd2 ", " , $ %&#+O .+O+22>Oz=0td3sx ", " $o%#X-.++$O$ q>g Xs:&txxu xh5 ", " .o &# oX**+y 3rO64qxdsusr ", " $$ +...&6@r03$v1@ du><3 ", " $ $+.a 0hq&5<1t1u5r<5 ", " #X-q+o2re h<6c0>0 ", " .+,#X--%;;$y 5g05>w >us> ", " .$O+,*;++.2w2 s0qyw q>@avd3 ", " O:*;=&&XX#.,$-%*=+ $.2y4prajr@> ", " .X.+.;:=;,=-.rX> > .-fNw>+@>w6buqew ", " $.-,-X ,-ow%-*,o&%@=B,t+ ;a5htu6p> ", " $O+%+$&:& >+#%*:VXC ; #epgdcOra6mcddxccxmh6636 ", " ;.# g3v11dx , ", " *O:&u06tduu%. ", " $* :@rrpd1o:$ ", " X -d s1uusxh1t ", " $+; - ;< hsvuthust6 ", " .+#o ,,&,*=o%Xq. 2@at1tccr2 >5 30 ", " +*-,&-*:* ;;%Xw.=,55ux0-x6611ddhss2ssu1< ", " $ . .oX3w0q4rap5az2ey >t< "}; libiodbc-3.52.9/iodbcadm/gtk/Makefile.am0000644000076400007640000000740512323210535014677 00000000000000# # Makefile.am # # $Id$ # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # DATEBUILD = `date +%d/%m/%Y_%T` if GTK noinst_LTLIBRARIES = libiodbcadm-gtk.la endif AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/iodbc \ -I$(top_srcdir)/iodbcadm \ -I$(top_srcdir)/iodbcinst \ @GTK_CFLAGS@ AM_CFLAGS = \ @CFLAGS@ -D__GTK__ -DDATEBUILD=\"$(DATEBUILD)\" libiodbcadm_gtk_la_LDFLAGS = #-static libiodbcadm_gtk_la_LIBADD = @GTK_LIBS@ libiodbcadm_gtk_la_SOURCES = \ administrator.c \ confirm.c \ connectionpooling.c \ driverchooser.c \ driversetup.c \ dsnchooser.c \ errorbox.c \ gensetup.c \ main.c \ messagebox.c \ translatorchooser.c noinst_HEADERS = error.xpm img.xpm odbc4.xpm question.xpm gui.h libiodbc-3.52.9/iodbcadm/gtk/main.c0000644000076400007640000001546112323210535013734 00000000000000/* * main.c * * $Id$ * * Main program * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include "gui.h" int gtk_gui (int *argc, char **argv[]) { GtkWidget *mainwnd; #if GTK_CHECK_VERSION(2,0,0) gtk_set_locale(); #endif gtk_init (argc, argv); mainwnd = gtk_window_new (GTK_WINDOW_TOPLEVEL); return SQLManageDataSources (mainwnd); } int kde_gui (int *argc, char **argv[]) { return -1; } void display_help (void) { printf ("-help\t\t\tDisplay the list of options.\n\r"); printf ("-odbc filename\t\tSet the location of the user ODBC.INI file.\n\r"); printf ("-odbcinst filename\tSet the location of the user ODBCINST.INI file.\n\r"); printf ("-sysodbc filename\tSet the location of the system ODBC.INI file.\n\r"); printf ("-sysodbcinst filename\tSet the location of the system ODBCINST.INI file.\n\r"); printf ("-gui guitype\t\tSet the GUI type : GTK, KDE.\n\r"); printf ("-debug\t\t\tThe error messages are displayed on the console.\n\r"); printf ("-admin odbcinstfile\tUsed to administrate the system odbcinst.ini file.\n\r\n\r"); _exit (1); } #if !defined(HAVE_SETENV) static int setenv (const char *name, const char *value, int overwrite) { int rc; char *entry; /* * Allocate some space for new environment variable */ if ((entry = (char *) malloc (strlen (name) + strlen (value) + 2)) == NULL) return -1; strcpy (entry, name); strcat (entry, "="); strcat (entry, value); /* * Check if variable already exists in current environment and whether * we want to overwrite it with a new value if it exists. */ if (getenv (name) != NULL && !overwrite) { free (entry); return 0; } /* * Add the variable to the environment. */ rc = putenv (entry); free (entry); return (rc == 0) ? 0 : -1; } #endif /* HAVE_SETENV */ int main (int argc, char *argv[]) { BOOL debug = FALSE; char path[4096]; char *gui = NULL; int i = 1; printf ("iODBC Administrator (GTK)\n"); printf ("%s\n", PACKAGE_STRING); printf ("Copyright (C) 2000-2014 OpenLink Software\n"); printf ("Please report all bugs to <%s>\n\n", PACKAGE_BUGREPORT); /* Check options commands */ if (argc > 1) { for (; i < argc; i++) { if (!strcasecmp (argv[i], "-help")) display_help (); if (!strcasecmp (argv[i], "-debug")) debug = TRUE; if (!strcasecmp (argv[i], "-odbc")) { if (i + 1 >= argc) display_help (); setenv ("ODBCINI", argv[++i], TRUE); } if (!strcasecmp (argv[i], "-admin")) { if (i + 1 >= argc) display_help (); setenv ("ODBCINSTINI", argv[++i], TRUE); setenv ("SYSODBCINSTINI", argv[i], TRUE); } if (!strcasecmp (argv[i], "-odbcinst")) { if (i + 1 >= argc) display_help (); setenv ("ODBCINSTINI", argv[++i], TRUE); } if (!strcasecmp (argv[i], "-sysodbc")) { if (i + 1 >= argc) display_help (); setenv ("SYSODBCINI", argv[++i], TRUE); } if (!strcasecmp (argv[i], "-sysodbcinst")) { if (i + 1 >= argc) display_help (); setenv ("SYSODBCINSTINI", argv[++i], TRUE); } if (!strcasecmp (argv[i], "-gui")) { if (i + 2 >= argc) display_help (); gui = argv[++i]; } } } if (!getenv ("ODBCINI") && getenv ("HOME")) { STRCPY (path, getenv ("HOME")); STRCAT (path, "/.odbc.ini"); setenv ("ODBCINI", path, TRUE); } if (!debug) { close (STDOUT_FILENO); close (STDERR_FILENO); } if (gui && !strcasecmp (gui, "KDE")) return kde_gui (&argc, &argv); return gtk_gui (&argc, &argv); } libiodbc-3.52.9/iodbcadm/gtk/driversetup.c0000644000076400007640000007056212323210535015367 00000000000000/* * driversetup.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "gui.h" static char* STRCONN = "%s\0Driver=%s\0Setup=%s\0\0"; static int STRCONN_NB_TOKENS = 3; char *szKeysColumnNames[] = { "Keyword", "Value" }; char *szKeysButtons[] = { "_Add", "_Update" }; static void addkeywords_to_list (GtkWidget *widget, LPCSTR attrs, TDRIVERSETUP *driversetup_t) { char *curr, *cour; char *data[2]; if (!GTK_IS_CLIST (widget)) return; gtk_clist_clear (GTK_CLIST (widget)); for (curr = (LPSTR) attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "Driver=", STRLEN ("Driver="))) { gtk_entry_set_text (GTK_ENTRY (driversetup_t->driver_entry), curr + STRLEN ("Driver=")); continue; } if (!strncasecmp (curr, "Setup=", STRLEN ("Setup="))) { gtk_entry_set_text (GTK_ENTRY (driversetup_t->setup_entry), curr + STRLEN ("Setup=")); continue; } data[0] = curr; if ((cour = strchr (curr, '='))) { data[1] = cour + 1; *cour = 0; gtk_clist_append (GTK_CLIST (widget), data); *cour = '='; } else { data[1] = ""; gtk_clist_append (GTK_CLIST (widget), data); } } if (GTK_CLIST (widget)->rows > 0) gtk_clist_sort (GTK_CLIST (widget)); } static void parse_attribute_line (TDRIVERSETUP *driversetup_t, LPCSTR driver, LPCSTR attrs, BOOL add) { if (driver) { gtk_entry_set_text (GTK_ENTRY (driversetup_t->name_entry), driver); if (add) gtk_entry_set_editable (GTK_ENTRY (driversetup_t->name_entry), FALSE); else gtk_entry_set_editable (GTK_ENTRY (driversetup_t->name_entry), TRUE); } addkeywords_to_list (driversetup_t->key_list, attrs, driversetup_t); } static void driver_file_choosen (GtkWidget *widget, TDRIVERSETUP *driversetup_t) { if (driversetup_t) { gtk_entry_set_text (GTK_ENTRY (driversetup_t->driver_entry), gtk_file_selection_get_filename (GTK_FILE_SELECTION (driversetup_t-> filesel))); driversetup_t->filesel = NULL; } } static void setup_file_choosen (GtkWidget *widget, TDRIVERSETUP *driversetup_t) { if (driversetup_t) { gtk_entry_set_text (GTK_ENTRY (driversetup_t->setup_entry), gtk_file_selection_get_filename (GTK_FILE_SELECTION (driversetup_t-> filesel))); driversetup_t->filesel = NULL; } } static void driversetup_browsedriver_clicked (GtkWidget *widget, TDRIVERSETUP *driversetup_t) { GtkWidget *filesel; if (driversetup_t) { filesel = gtk_file_selection_new ("Choose your driver library ..."); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); gtk_file_selection_set_filename (GTK_FILE_SELECTION (filesel), gtk_entry_get_text (GTK_ENTRY (driversetup_t->driver_entry))); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)-> ok_button), "clicked", GTK_SIGNAL_FUNC (driver_file_choosen), driversetup_t); gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)-> ok_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)-> cancel_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (filesel), "delete_event", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); driversetup_t->filesel = filesel; gtk_widget_show_all (filesel); gtk_main (); gtk_widget_destroy (filesel); driversetup_t->filesel = NULL; } } static void driversetup_browsesetup_clicked (GtkWidget *widget, TDRIVERSETUP *driversetup_t) { GtkWidget *filesel; if (driversetup_t) { filesel = gtk_file_selection_new ("Choose your setup library ..."); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); gtk_file_selection_set_filename (GTK_FILE_SELECTION (filesel), gtk_entry_get_text (GTK_ENTRY (driversetup_t->setup_entry))); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)-> ok_button), "clicked", GTK_SIGNAL_FUNC (setup_file_choosen), driversetup_t); gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)-> ok_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)-> cancel_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (filesel), "delete_event", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); driversetup_t->filesel = filesel; gtk_widget_show_all (filesel); gtk_main (); gtk_widget_destroy (filesel); driversetup_t->filesel = NULL; } } static void driversetup_add_clicked (GtkWidget *widget, TDRIVERSETUP *driversetup_t) { char *szKey; char *data[2]; int i = 0; if (driversetup_t) { data[0] = (char*)gtk_entry_get_text (GTK_ENTRY (driversetup_t->key_entry)); if (!STRLEN (data[0])) goto done; data[1] = (char*)gtk_entry_get_text (GTK_ENTRY (driversetup_t->value_entry)); for (i = 0; i < GTK_CLIST (driversetup_t->key_list)->rows; i++) { gtk_clist_get_text (GTK_CLIST (driversetup_t->key_list), i, 0, &szKey); if (!strcmp (szKey, data[0])) { gtk_clist_remove (GTK_CLIST (driversetup_t->key_list), i); break; } } gtk_clist_append (GTK_CLIST (driversetup_t->key_list), data); if (GTK_CLIST (driversetup_t->key_list)->rows > 0) gtk_clist_sort (GTK_CLIST (driversetup_t->key_list)); done: gtk_entry_set_text (GTK_ENTRY (driversetup_t->key_entry), ""); gtk_entry_set_text (GTK_ENTRY (driversetup_t->value_entry), ""); } } static void driversetup_update_clicked (GtkWidget *widget, TDRIVERSETUP *driversetup_t) { char *data[2]; int i; if (driversetup_t) { data[0] = (char*)gtk_entry_get_text (GTK_ENTRY (driversetup_t->key_entry)); if (STRLEN (data[0])) { data[1] = (char*)gtk_entry_get_text (GTK_ENTRY (driversetup_t->value_entry)); if (GTK_CLIST (driversetup_t->key_list)->selection != NULL) i = GPOINTER_TO_INT (GTK_CLIST (driversetup_t->key_list)->selection-> data); else i = 0; /* An update operation */ if (i < GTK_CLIST (driversetup_t->key_list)->rows) { gtk_clist_set_text (GTK_CLIST (driversetup_t->key_list), i, 0, data[0]); gtk_clist_set_text (GTK_CLIST (driversetup_t->key_list), i, 1, data[1]); } } gtk_entry_set_text (GTK_ENTRY (driversetup_t->key_entry), ""); gtk_entry_set_text (GTK_ENTRY (driversetup_t->value_entry), ""); } } static void driversetup_list_select (GtkWidget *widget, gint row, gint column, GdkEvent *event, TDRIVERSETUP *driversetup_t) { char *szKey, *szValue; if (driversetup_t && GTK_CLIST (driversetup_t->key_list)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (driversetup_t->key_list), GPOINTER_TO_INT (GTK_CLIST (driversetup_t->key_list)->selection-> data), 0, &szKey); gtk_clist_get_text (GTK_CLIST (driversetup_t->key_list), GPOINTER_TO_INT (GTK_CLIST (driversetup_t->key_list)->selection-> data), 1, &szValue); gtk_entry_set_text (GTK_ENTRY (driversetup_t->key_entry), szKey); gtk_entry_set_text (GTK_ENTRY (driversetup_t->value_entry), szValue); gtk_widget_set_sensitive (driversetup_t->bupdate, TRUE); } } static void driversetup_list_unselect (GtkWidget *widget, gint row, gint column, GdkEvent *event, TDRIVERSETUP *driversetup_t) { if (driversetup_t) { gtk_widget_set_sensitive (driversetup_t->bupdate, FALSE); gtk_entry_set_text (GTK_ENTRY (driversetup_t->key_entry), ""); gtk_entry_set_text (GTK_ENTRY (driversetup_t->value_entry), ""); } } static void driversetup_ok_clicked (GtkWidget *widget, TDRIVERSETUP *driversetup_t) { char *curr, *cour, *szKey, *szValue; int i = 0, size; if (driversetup_t) { driversetup_t->connstr = (char *) malloc (sizeof (char) * (size = ((STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t-> name_entry))) ? STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t-> name_entry))) + 1 : 0) + (STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t-> driver_entry))) ? STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t-> driver_entry))) + STRLEN ("Driver=") + 1 : 0) + (STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t-> setup_entry))) ? STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t-> setup_entry))) + STRLEN ("Setup=") + 1 : 0) + 1))); if (driversetup_t->connstr) { for (curr = STRCONN, cour = driversetup_t->connstr; i < STRCONN_NB_TOKENS; i++, curr += (STRLEN (curr) + 1)) switch (i) { case 0: if (STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t-> name_entry)))) { sprintf (cour, curr, gtk_entry_get_text (GTK_ENTRY (driversetup_t-> name_entry))); cour += (STRLEN (cour) + 1); } break; case 1: if (STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t-> driver_entry)))) { sprintf (cour, curr, gtk_entry_get_text (GTK_ENTRY (driversetup_t-> driver_entry))); cour += (STRLEN (cour) + 1); } break; case 2: if (STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t-> setup_entry)))) { sprintf (cour, curr, gtk_entry_get_text (GTK_ENTRY (driversetup_t-> setup_entry))); cour += (STRLEN (cour) + 1); } break; }; for (i = 0; i < GTK_CLIST (driversetup_t->key_list)->rows; i++) { gtk_clist_get_text (GTK_CLIST (driversetup_t->key_list), i, 0, &szKey); gtk_clist_get_text (GTK_CLIST (driversetup_t->key_list), i, 1, &szValue); cour = (char *) driversetup_t->connstr; driversetup_t->connstr = (LPSTR) malloc (size + STRLEN (szKey) + STRLEN (szValue) + 2); if (driversetup_t->connstr) { memcpy (driversetup_t->connstr, cour, size); sprintf (driversetup_t->connstr + size - 1, "%s=%s", szKey, szValue); free (cour); size += STRLEN (szKey) + STRLEN (szValue) + 2; } else driversetup_t->connstr = cour; } driversetup_t->connstr[size - 1] = 0; } driversetup_t->name_entry = driversetup_t->driver_entry = driversetup_t->setup_entry = NULL; driversetup_t->key_list = driversetup_t->filesel = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (driversetup_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (driversetup_t->mainwnd); } } static void driversetup_cancel_clicked (GtkWidget *widget, TDRIVERSETUP *driversetup_t) { if (driversetup_t) { driversetup_t->connstr = (LPSTR) - 1L; driversetup_t->name_entry = driversetup_t->driver_entry = driversetup_t->setup_entry = NULL; driversetup_t->key_list = driversetup_t->filesel = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (driversetup_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (driversetup_t->mainwnd); } } static gint delete_event (GtkWidget *widget, GdkEvent *event, TDRIVERSETUP *driversetup_t) { driversetup_cancel_clicked (widget, driversetup_t); return FALSE; } LPSTR create_driversetup (HWND hwnd, LPCSTR driver, LPCSTR attrs, BOOL add, BOOL user) { GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; GtkWidget *driversetup; GtkWidget *dialog_vbox6; GtkWidget *vbox26; GtkWidget *frame57; GtkWidget *alignment49; GtkWidget *table6; GtkWidget *label99; GtkWidget *label100; GtkWidget *label101; GtkWidget *t_name; GtkWidget *t_driver; GtkWidget *t_setup; GtkWidget *b_browse; GtkWidget *b_browse1; GtkWidget *frame58; GtkWidget *alignment50; GtkWidget *scrolledwindow16; GtkWidget *clist1; GtkWidget *label97; GtkWidget *label98; GtkWidget *frame59; GtkWidget *alignment51; GtkWidget *table7; GtkWidget *label102; GtkWidget *label103; GtkWidget *t_keyword; GtkWidget *t_value; GtkWidget *b_add; GtkWidget *b_update; GtkWidget *dialog_action_area6; GtkWidget *b_cancel; GtkWidget *b_ok; TDRIVERSETUP driversetup_t; if (hwnd == NULL || !GTK_IS_WIDGET (hwnd)) return (LPSTR) attrs; driversetup = gtk_dialog_new (); gtk_widget_set_name (driversetup, "driversetup"); gtk_widget_set_size_request (driversetup, 505, 480); gtk_window_set_title (GTK_WINDOW (driversetup), _("ODBC Driver Add/Setup")); gtk_window_set_position (GTK_WINDOW (driversetup), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (driversetup), TRUE); gtk_window_set_default_size (GTK_WINDOW (driversetup), 600, 450); gtk_window_set_type_hint (GTK_WINDOW (driversetup), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (driversetup); #endif dialog_vbox6 = GTK_DIALOG (driversetup)->vbox; gtk_widget_set_name (dialog_vbox6, "dialog_vbox6"); gtk_widget_show (dialog_vbox6); vbox26 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox26, "vbox26"); gtk_widget_show (vbox26); gtk_box_pack_start (GTK_BOX (dialog_vbox6), vbox26, TRUE, TRUE, 0); frame57 = gtk_frame_new (NULL); gtk_widget_set_name (frame57, "frame57"); gtk_widget_show (frame57); gtk_box_pack_start (GTK_BOX (vbox26), frame57, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame57), GTK_SHADOW_NONE); alignment49 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment49, "alignment49"); gtk_widget_show (alignment49); gtk_container_add (GTK_CONTAINER (frame57), alignment49); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment49), 16, 0, 4, 4); table6 = gtk_table_new (3, 3, FALSE); gtk_widget_set_name (table6, "table6"); gtk_widget_show (table6); gtk_container_add (GTK_CONTAINER (alignment49), table6); gtk_table_set_row_spacings (GTK_TABLE (table6), 6); gtk_table_set_col_spacings (GTK_TABLE (table6), 10); label99 = gtk_label_new (_("Description of the driver :")); gtk_widget_set_name (label99, "label99"); gtk_widget_show (label99); gtk_table_attach (GTK_TABLE (table6), label99, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label99), 0, 0.5); label100 = gtk_label_new (_(" Driver file name :")); gtk_widget_set_name (label100, "label100"); gtk_widget_show (label100); gtk_table_attach (GTK_TABLE (table6), label100, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_justify (GTK_LABEL (label100), GTK_JUSTIFY_RIGHT); gtk_misc_set_alignment (GTK_MISC (label100), 0, 0.5); label101 = gtk_label_new (_(" Setup file name :")); gtk_widget_set_name (label101, "label101"); gtk_widget_show (label101); gtk_table_attach (GTK_TABLE (table6), label101, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_justify (GTK_LABEL (label101), GTK_JUSTIFY_RIGHT); gtk_misc_set_alignment (GTK_MISC (label101), 0, 0.5); t_name = gtk_entry_new (); gtk_widget_set_name (t_name, "t_name"); gtk_widget_show (t_name); gtk_table_attach (GTK_TABLE (table6), t_name, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); t_driver = gtk_entry_new (); gtk_widget_set_name (t_driver, "t_driver"); gtk_widget_show (t_driver); gtk_table_attach (GTK_TABLE (table6), t_driver, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); t_setup = gtk_entry_new (); gtk_widget_set_name (t_setup, "t_setup"); gtk_widget_show (t_setup); gtk_table_attach (GTK_TABLE (table6), t_setup, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); b_browse = gtk_button_new_with_mnemonic (_("Browse . . .")); gtk_widget_set_name (b_browse, "b_browse"); gtk_widget_show (b_browse); gtk_table_attach (GTK_TABLE (table6), b_browse, 2, 3, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); b_browse1 = gtk_button_new_with_mnemonic (_(" Browse . . . ")); gtk_widget_set_name (b_browse1, "b_browse1"); gtk_widget_show (b_browse1); gtk_table_attach (GTK_TABLE (table6), b_browse1, 2, 3, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); frame58 = gtk_frame_new (NULL); gtk_widget_set_name (frame58, "frame58"); gtk_widget_show (frame58); gtk_box_pack_start (GTK_BOX (vbox26), frame58, TRUE, TRUE, 0); gtk_widget_set_size_request (frame58, -1, 220); gtk_frame_set_shadow_type (GTK_FRAME (frame58), GTK_SHADOW_NONE); alignment50 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment50, "alignment50"); gtk_widget_show (alignment50); gtk_container_add (GTK_CONTAINER (frame58), alignment50); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment50), 0, 0, 4, 4); scrolledwindow16 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow16, "scrolledwindow16"); gtk_widget_show (scrolledwindow16); gtk_container_add (GTK_CONTAINER (alignment50), scrolledwindow16); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow16), GTK_SHADOW_IN); clist1 = gtk_clist_new (2); gtk_widget_set_name (clist1, "clist1"); gtk_widget_show (clist1); gtk_container_add (GTK_CONTAINER (scrolledwindow16), clist1); gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 134); gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 80); gtk_clist_column_titles_show (GTK_CLIST (clist1)); label97 = gtk_label_new (_("Keyword")); gtk_widget_set_name (label97, "label97"); gtk_widget_show (label97); gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, label97); gtk_widget_set_size_request (label97, 134, -1); label98 = gtk_label_new (_("Value")); gtk_widget_set_name (label98, "label98"); gtk_widget_show (label98); gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, label98); gtk_widget_set_size_request (label98, 80, -1); frame59 = gtk_frame_new (NULL); gtk_widget_set_name (frame59, "frame59"); gtk_widget_show (frame59); gtk_box_pack_start (GTK_BOX (vbox26), frame59, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame59), GTK_SHADOW_NONE); alignment51 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment51, "alignment51"); gtk_widget_show (alignment51); gtk_container_add (GTK_CONTAINER (frame59), alignment51); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment51), 10, 10, 4, 4); table7 = gtk_table_new (2, 3, FALSE); gtk_widget_set_name (table7, "table7"); gtk_widget_show (table7); gtk_container_add (GTK_CONTAINER (alignment51), table7); gtk_table_set_row_spacings (GTK_TABLE (table7), 6); gtk_table_set_col_spacings (GTK_TABLE (table7), 10); label102 = gtk_label_new (_("Keyword :")); gtk_widget_set_name (label102, "label102"); gtk_widget_show (label102); gtk_table_attach (GTK_TABLE (table7), label102, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label102), 0, 0.5); label103 = gtk_label_new (_(" Value :")); gtk_widget_set_name (label103, "label103"); gtk_widget_show (label103); gtk_table_attach (GTK_TABLE (table7), label103, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label103), 0, 0.5); t_keyword = gtk_entry_new (); gtk_widget_set_name (t_keyword, "t_keyword"); gtk_widget_show (t_keyword); gtk_table_attach (GTK_TABLE (table7), t_keyword, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); t_value = gtk_entry_new (); gtk_widget_set_name (t_value, "t_value"); gtk_widget_show (t_value); gtk_table_attach (GTK_TABLE (table7), t_value, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); b_add = gtk_button_new_from_stock ("gtk-add"); gtk_widget_set_name (b_add, "b_add"); gtk_widget_show (b_add); gtk_table_attach (GTK_TABLE (table7), b_add, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); b_update = gtk_button_new_with_mnemonic (_("_Update")); gtk_widget_set_name (b_update, "b_update"); gtk_widget_show (b_update); gtk_table_attach (GTK_TABLE (table7), b_update, 2, 3, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); dialog_action_area6 = GTK_DIALOG (driversetup)->action_area; gtk_widget_set_name (dialog_action_area6, "dialog_action_area6"); gtk_widget_show (dialog_action_area6); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area6), GTK_BUTTONBOX_END); b_cancel = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_set_name (b_cancel, "b_cancel"); gtk_widget_show (b_cancel); gtk_dialog_add_action_widget (GTK_DIALOG (driversetup), b_cancel, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (b_cancel, GTK_CAN_DEFAULT); b_ok = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_set_name (b_ok, "b_ok"); gtk_widget_show (b_ok); gtk_dialog_add_action_widget (GTK_DIALOG (driversetup), b_ok, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (b_ok, GTK_CAN_DEFAULT); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (driversetup, driversetup, "driversetup"); GLADE_HOOKUP_OBJECT_NO_REF (driversetup, dialog_vbox6, "dialog_vbox6"); GLADE_HOOKUP_OBJECT (driversetup, vbox26, "vbox26"); GLADE_HOOKUP_OBJECT (driversetup, frame57, "frame57"); GLADE_HOOKUP_OBJECT (driversetup, alignment49, "alignment49"); GLADE_HOOKUP_OBJECT (driversetup, table6, "table6"); GLADE_HOOKUP_OBJECT (driversetup, label99, "label99"); GLADE_HOOKUP_OBJECT (driversetup, label100, "label100"); GLADE_HOOKUP_OBJECT (driversetup, label101, "label101"); GLADE_HOOKUP_OBJECT (driversetup, t_name, "t_name"); GLADE_HOOKUP_OBJECT (driversetup, t_driver, "t_driver"); GLADE_HOOKUP_OBJECT (driversetup, t_setup, "t_setup"); GLADE_HOOKUP_OBJECT (driversetup, b_browse, "b_browse"); GLADE_HOOKUP_OBJECT (driversetup, b_browse1, "b_browse1"); GLADE_HOOKUP_OBJECT (driversetup, frame58, "frame58"); GLADE_HOOKUP_OBJECT (driversetup, alignment50, "alignment50"); GLADE_HOOKUP_OBJECT (driversetup, scrolledwindow16, "scrolledwindow16"); GLADE_HOOKUP_OBJECT (driversetup, clist1, "clist1"); GLADE_HOOKUP_OBJECT (driversetup, label97, "label97"); GLADE_HOOKUP_OBJECT (driversetup, label98, "label98"); GLADE_HOOKUP_OBJECT (driversetup, frame59, "frame59"); GLADE_HOOKUP_OBJECT (driversetup, alignment51, "alignment51"); GLADE_HOOKUP_OBJECT (driversetup, table7, "table7"); GLADE_HOOKUP_OBJECT (driversetup, label102, "label102"); GLADE_HOOKUP_OBJECT (driversetup, label103, "label103"); GLADE_HOOKUP_OBJECT (driversetup, t_keyword, "t_keyword"); GLADE_HOOKUP_OBJECT (driversetup, t_value, "t_value"); GLADE_HOOKUP_OBJECT (driversetup, b_add, "b_add"); GLADE_HOOKUP_OBJECT (driversetup, b_update, "b_update"); GLADE_HOOKUP_OBJECT_NO_REF (driversetup, dialog_action_area6, "dialog_action_area6"); GLADE_HOOKUP_OBJECT (driversetup, b_cancel, "b_cancel"); GLADE_HOOKUP_OBJECT (driversetup, b_ok, "b_ok"); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (b_ok), "clicked", GTK_SIGNAL_FUNC (driversetup_ok_clicked), &driversetup_t); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (b_cancel), "clicked", GTK_SIGNAL_FUNC (driversetup_cancel_clicked), &driversetup_t); /* Add button events */ gtk_signal_connect (GTK_OBJECT (b_add), "clicked", GTK_SIGNAL_FUNC (driversetup_add_clicked), &driversetup_t); /* Update button events */ gtk_signal_connect (GTK_OBJECT (b_update), "clicked", GTK_SIGNAL_FUNC (driversetup_update_clicked), &driversetup_t); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (driversetup), "delete_event", GTK_SIGNAL_FUNC (delete_event), &driversetup_t); gtk_signal_connect (GTK_OBJECT (driversetup), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* List events */ gtk_signal_connect (GTK_OBJECT (clist1), "select_row", GTK_SIGNAL_FUNC (driversetup_list_select), &driversetup_t); gtk_signal_connect (GTK_OBJECT (clist1), "unselect_row", GTK_SIGNAL_FUNC (driversetup_list_unselect), &driversetup_t); /* Browse button events */ gtk_signal_connect (GTK_OBJECT (b_browse), "clicked", GTK_SIGNAL_FUNC (driversetup_browsedriver_clicked), &driversetup_t); gtk_signal_connect (GTK_OBJECT (b_browse1), "clicked", GTK_SIGNAL_FUNC (driversetup_browsesetup_clicked), &driversetup_t); driversetup_t.name_entry = t_name; driversetup_t.driver_entry = t_driver; driversetup_t.key_list = clist1; driversetup_t.bupdate = b_update; driversetup_t.key_entry = t_keyword; driversetup_t.value_entry = t_value; driversetup_t.mainwnd = driversetup; driversetup_t.setup_entry = t_setup; /* Parse the attributes line */ parse_attribute_line (&driversetup_t, driver, attrs, add); gtk_widget_show_all (driversetup); gtk_main (); return driversetup_t.connstr; } libiodbc-3.52.9/iodbcadm/gtk/dsnchooser.c0000644000076400007640000024326112323210535015160 00000000000000/* * dsnchooser.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include #include "../gui.h" #include "odbc4.xpm" #ifndef MAXPATHLEN #define MAXPATHLEN 1024 #endif /* * Linux glibc has the function, but does not have the prototype * with the default header files. */ #if defined(HAVE_ASPRINTF) && defined(__GLIBC__) extern int asprintf (char **ret, const char *format, ...); #endif char *szDSNColumnNames[] = { "Name", "Description", "Driver" }; char *szTabNames[] = { "User DSN", "System DSN", "File DSN", "ODBC Drivers", "Connection Pooling", "Tracing", "About" }; char *szDSNButtons[] = { "_Add", "_Remove", "Confi_gure", "_Test", "_Set Dir", }; void addlistofdir_to_optionmenu (GtkWidget *widget, LPCSTR path, TDSNCHOOSER *choose_t) { GtkWidget *menu, *menu_item; char *curr_dir, *prov, *dir; void **array; if (!path || !GTK_IS_OPTION_MENU (widget) || !(prov = strdup (path))) return; if (prov[STRLEN (prov) - 1] == '/' && STRLEN (prov) > 1) prov[STRLEN (prov) - 1] = 0; /* Add the root directory */ menu = gtk_menu_new (); menu_item = gtk_menu_item_new_with_label ("/"); gtk_widget_show (menu_item); gtk_menu_prepend (GTK_MENU (menu), menu_item); if (!(array = (void **) malloc (sizeof (void *) * 2))) return; array[0] = g_strdup ("/"); array[1] = choose_t; gtk_signal_connect (GTK_OBJECT (menu_item), "activate", GTK_SIGNAL_FUNC (filedsn_lookin_clicked), array); for (curr_dir = prov, dir = NULL; curr_dir; curr_dir = strchr (curr_dir + 1, '/')) { if (strchr (curr_dir + 1, '/')) { dir = strchr (curr_dir + 1, '/'); *dir = 0; } menu_item = gtk_menu_item_new_with_label (prov); gtk_widget_show (menu_item); gtk_menu_prepend (GTK_MENU (menu), menu_item); if (!(array = (void **) malloc (sizeof (void *) * 2))) return; array[0] = g_strdup (prov); array[1] = choose_t; gtk_signal_connect (GTK_OBJECT (menu_item), "activate", GTK_SIGNAL_FUNC (filedsn_lookin_clicked), array); if (dir) *dir = '/'; } gtk_option_menu_remove_menu (GTK_OPTION_MENU (widget)); gtk_option_menu_set_menu (GTK_OPTION_MENU (widget), menu); free (prov); } void adddirectories_to_list (HWND hwnd, GtkWidget *widget, LPCSTR path) { DIR *dir; #if defined (HAVE_ASPRINTF) char *path_buf; #else char path_buf[MAXPATHLEN]; #endif struct dirent *dir_entry; struct stat fstat; char *data[1]; if (!path || !GTK_IS_CLIST (widget)) return; if ((dir = opendir (path))) { /* Remove all the entries */ gtk_clist_clear (GTK_CLIST (widget)); while ((dir_entry = readdir (dir))) { #if defined (HAVE_ASPRINTF) asprintf (&path_buf, "%s/%s", path, dir_entry->d_name); #elif defined (HAVE_SNPRINTF) snprintf (path_buf, sizeof (path_buf), "%s/%s", path, dir_entry->d_name); #else STRCPY (path_buf, path); if (path[STRLEN (path) - 1] != '/') STRCAT (path_buf, "/"); STRCAT (path_buf, dir_entry->d_name); #endif if (stat ((LPCSTR) path_buf, &fstat) >= 0 && S_ISDIR (fstat.st_mode)) if (strcmp (path, "/") || strcmp (dir_entry->d_name, "..")) { data[0] = dir_entry->d_name; gtk_clist_append (GTK_CLIST (widget), data); } #if defined (HAVE_ASPRINTF) free (path_buf); #endif } /* Close the directory entry */ closedir (dir); if (GTK_CLIST (widget)->rows > 0) gtk_clist_sort (GTK_CLIST (widget)); } else create_error (hwnd, NULL, "Error during accessing directory information:", strerror (errno)); } void addfiles_to_list (HWND hwnd, GtkWidget *widget, LPCSTR path) { DIR *dir; #if defined (HAVE_ASPRINTF) char *path_buf; #else char path_buf[MAXPATHLEN]; #endif struct dirent *dir_entry; struct stat fstat; char *data[1]; if (!path || !GTK_IS_CLIST (widget)) return; if ((dir = opendir (path))) { /* Remove all the entries */ gtk_clist_clear (GTK_CLIST (widget)); while ((dir_entry = readdir (dir))) { #if defined (HAVE_ASPRINTF) asprintf (&path_buf, "%s/%s", path, dir_entry->d_name); #elif defined (HAVE_SNPRINTF) snprintf (path_buf, sizeof (path_buf), "%s/%s", path, dir_entry->d_name); #else STRCPY (path_buf, path); if (path[STRLEN (path) - 1] != '/') STRCAT (path_buf, "/"); STRCAT (path_buf, dir_entry->d_name); #endif if (stat ((LPCSTR) path_buf, &fstat) >= 0 && !S_ISDIR (fstat.st_mode) && strstr (dir_entry->d_name, ".dsn")) { data[0] = dir_entry->d_name; gtk_clist_append (GTK_CLIST (widget), data); } #if defined (HAVE_ASPRINTF) free (path_buf); #endif } /* Close the directory entry */ closedir (dir); if (GTK_CLIST (widget)->rows > 0) gtk_clist_sort (GTK_CLIST (widget)); } } void adddsns_to_list (GtkWidget *widget, BOOL systemDSN) { char *curr, *buffer = (char *) malloc (sizeof (char) * 65536); char diz[1024], driver[1024]; char *data[3]; int len, _case = 0; if (!buffer || !GTK_IS_CLIST (widget)) return; gtk_clist_clear (GTK_CLIST (widget)); /* Get the list of DSN in the user context */ SQLSetConfigMode (systemDSN ? ODBC_SYSTEM_DSN : ODBC_USER_DSN); len = SQLGetPrivateProfileString ("ODBC Data Sources", NULL, "", buffer, 65536, NULL); if (len) goto process; _case = 1; SQLSetConfigMode (systemDSN ? ODBC_SYSTEM_DSN : ODBC_USER_DSN); len = SQLGetPrivateProfileString ("ODBC 32 bit Data Sources", NULL, "", buffer, 65536, NULL); if (len) goto process; goto end; process: for (curr = buffer; *curr; curr += (STRLEN (curr) + 1)) { SQLSetConfigMode (systemDSN ? ODBC_SYSTEM_DSN : ODBC_USER_DSN); SQLGetPrivateProfileString (curr, "Description", "", diz, sizeof (diz), NULL); SQLSetConfigMode (systemDSN ? ODBC_SYSTEM_DSN : ODBC_USER_DSN); switch (_case) { case 0: SQLGetPrivateProfileString ("ODBC Data Sources", curr, "", driver, sizeof (driver), NULL); break; case 1: SQLGetPrivateProfileString ("ODBC 32 bit Data Sources", curr, "", driver, sizeof (driver), NULL); break; }; if (STRLEN (curr) && STRLEN (driver)) { data[0] = curr; data[1] = diz; data[2] = driver; gtk_clist_append (GTK_CLIST (widget), data); } } end: SQLSetConfigMode (ODBC_BOTH_DSN); if (GTK_CLIST (widget)->rows > 0) { gtk_clist_columns_autosize (GTK_CLIST (widget)); gtk_clist_sort (GTK_CLIST (widget)); } /* Make the clean up */ free (buffer); } static void dsnchooser_switch_page (GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, TDSNCHOOSER *choose_t) { switch (page_num) { case 0: if (choose_t) { choose_t->type_dsn = USER_DSN; adddsns_to_list (choose_t->udsnlist, FALSE); } break; case 1: if (choose_t) { choose_t->type_dsn = SYSTEM_DSN; adddsns_to_list (choose_t->sdsnlist, TRUE); } break; case 2: if (choose_t) { choose_t->type_dsn = FILE_DSN; addlistofdir_to_optionmenu(choose_t->dir_combo, choose_t->curr_dir, choose_t); adddirectories_to_list(choose_t->mainwnd, choose_t->dir_list, choose_t->curr_dir); addfiles_to_list(choose_t->mainwnd, choose_t->file_list, choose_t->curr_dir); } break; }; if (choose_t) { if (choose_t->uremove) gtk_widget_set_sensitive (choose_t->uremove, FALSE); if (choose_t->uconfigure) gtk_widget_set_sensitive (choose_t->uconfigure, FALSE); if (choose_t->utest) gtk_widget_set_sensitive (choose_t->utest, FALSE); if (choose_t->sremove) gtk_widget_set_sensitive (choose_t->sremove, FALSE); if (choose_t->sconfigure) gtk_widget_set_sensitive (choose_t->sconfigure, FALSE); if (choose_t->stest) gtk_widget_set_sensitive (choose_t->stest, FALSE); if (choose_t->fremove) gtk_widget_set_sensitive(choose_t->fremove, FALSE); if (choose_t->fconfigure) gtk_widget_set_sensitive(choose_t->fconfigure, FALSE); if (choose_t->ftest) gtk_widget_set_sensitive(choose_t->ftest, FALSE); } } static BOOL test_driver_connect (TDSNCHOOSER *choose_t, char *connstr) { HENV henv; HDBC hdbc; #if (ODBCVER < 0x300) if (SQLAllocEnv (&henv) != SQL_SUCCESS) #else if (SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv) != SQL_SUCCESS) #endif { _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, SQL_NULL_HDBC, SQL_NULL_HSTMT); return FALSE; } #if (ODBCVER < 0x300) if (SQLAllocConnect (henv, &hdbc) != SQL_SUCCESS) #else SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER); if (SQLAllocHandle (SQL_HANDLE_DBC, henv, &hdbc) != SQL_SUCCESS) #endif { _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, hdbc, SQL_NULL_HSTMT); SQLFreeEnv (henv); return FALSE; } switch (choose_t->type_dsn) { case USER_DSN: SQLSetConfigMode (ODBC_USER_DSN); break; case SYSTEM_DSN: SQLSetConfigMode (ODBC_SYSTEM_DSN); break; case FILE_DSN: SQLSetConfigMode (ODBC_BOTH_DSN); break; } if (SQLDriverConnect (hdbc, choose_t->mainwnd, connstr, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_PROMPT) != SQL_SUCCESS) { _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, hdbc, SQL_NULL_HSTMT); SQLFreeEnv (henv); return FALSE; } else SQLDisconnect (hdbc); #if (ODBCVER < 0x300) SQLFreeConnect (hdbc); SQLFreeEnv (henv); #else SQLFreeHandle (SQL_HANDLE_DBC, hdbc); SQLFreeHandle (SQL_HANDLE_ENV, henv); #endif return TRUE; } void userdsn_add_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { char connstr[4096] = { "" }; char drv[1024] = { ""}; int sqlstat; DWORD error; if (choose_t) { /* Try first to get the driver name */ SQLSetConfigMode (ODBC_USER_DSN); if (_iodbcdm_drvchoose_dialbox (choose_t->mainwnd, drv, sizeof (drv), &sqlstat) == SQL_SUCCESS) { SQLSetConfigMode (ODBC_USER_DSN); if (!SQLConfigDataSource (choose_t->mainwnd, ODBC_ADD_DSN, drv + STRLEN ("DRIVER="), connstr)) { if (SQLInstallerError (1, &error, connstr, sizeof (connstr), NULL) != SQL_NO_DATA) _iodbcdm_errorbox (choose_t->mainwnd, NULL, "An error occurred when trying to add the DSN : "); goto done; } adddsns_to_list (choose_t->udsnlist, FALSE); } done: if (GTK_CLIST (choose_t->udsnlist)->selection == NULL) { if (choose_t->uremove) gtk_widget_set_sensitive (choose_t->uremove, FALSE); if (choose_t->uconfigure) gtk_widget_set_sensitive (choose_t->uconfigure, FALSE); if (choose_t->utest) gtk_widget_set_sensitive (choose_t->utest, FALSE); } } return; } void userdsn_remove_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { char dsn[1024] = { "\0" }; char *szDSN = NULL, *szDriver = NULL; if (choose_t) { /* Retrieve the DSN name */ if (GTK_CLIST (choose_t->udsnlist)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection-> data), 0, &szDSN); gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection-> data), 2, &szDriver); } /* Call the right function */ if (szDSN && create_confirm (choose_t->mainwnd, szDSN, "Are you sure you want to remove this DSN ?")) { sprintf (dsn, "DSN=%s", szDSN); if (!SQLConfigDataSource (choose_t->mainwnd, ODBC_REMOVE_DSN, szDriver, dsn)) _iodbcdm_errorbox (choose_t->mainwnd, szDSN, "An error occurred when trying to remove the DSN : "); adddsns_to_list (choose_t->udsnlist, FALSE); } if (GTK_CLIST (choose_t->udsnlist)->selection == NULL) { if (choose_t->uremove) gtk_widget_set_sensitive (choose_t->uremove, FALSE); if (choose_t->uconfigure) gtk_widget_set_sensitive (choose_t->uconfigure, FALSE); if (choose_t->utest) gtk_widget_set_sensitive (choose_t->utest, FALSE); } } } void userdsn_configure_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { char connstr[4096] = { 0 }; char tokenstr[4096] = { 0 }; char *szDSN = NULL, *szDriver = NULL, *curr, *cour; int size = sizeof (connstr); DWORD error; if (choose_t) { /* Retrieve the DSN name */ if (GTK_CLIST (choose_t->udsnlist)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection-> data), 0, &szDSN); gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection-> data), 2, &szDriver); } /* Call the right function */ if (szDSN) { sprintf (connstr, "DSN=%s", szDSN); size -= (STRLEN (connstr) + 1); SQLSetConfigMode (ODBC_USER_DSN); if (!SQLGetPrivateProfileString (szDSN, NULL, "", tokenstr, sizeof (tokenstr), NULL)) { _iodbcdm_errorbox (choose_t->mainwnd, szDSN, "An error occurred when trying to configure the DSN : "); goto done; } for (curr = tokenstr, cour = connstr + STRLEN (connstr) + 1; *curr; curr += (STRLEN (curr) + 1), cour += (STRLEN (cour) + 1)) { STRCPY (cour, curr); cour[STRLEN (curr)] = '='; SQLSetConfigMode (ODBC_USER_DSN); SQLGetPrivateProfileString (szDSN, curr, "", cour + STRLEN (curr) + 1, size - STRLEN (curr) - 1, NULL); size -= (STRLEN (cour) + 1); } *cour = 0; SQLSetConfigMode (ODBC_USER_DSN); if (!SQLConfigDataSource (choose_t->mainwnd, ODBC_CONFIG_DSN, szDriver, connstr)) { if (SQLInstallerError (1, &error, connstr, sizeof (connstr), NULL) != SQL_NO_DATA && error != ODBC_ERROR_REQUEST_FAILED) _iodbcdm_errorbox (choose_t->mainwnd, szDSN, "An error occurred when trying to configure the DSN : "); goto done; } adddsns_to_list (choose_t->udsnlist, FALSE); } done: if (GTK_CLIST (choose_t->udsnlist)->selection == NULL) { if (choose_t->uremove) gtk_widget_set_sensitive (choose_t->uremove, FALSE); if (choose_t->uconfigure) gtk_widget_set_sensitive (choose_t->uconfigure, FALSE); if (choose_t->utest) gtk_widget_set_sensitive (choose_t->utest, FALSE); } } return; } void userdsn_test_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { HENV henv; HDBC hdbc; SWORD buflen; char connstr[4096] = { 0 }; char outconnstr[4096] = { 0 }; char *szDSN; if (choose_t) { /* Retrieve the DSN name */ if (GTK_CLIST (choose_t->udsnlist)->selection != NULL) gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection->data), 0, &szDSN); if (szDSN && STRLEN (szDSN)) { snprintf (connstr, sizeof (connstr), "DSN=%s", szDSN); if (test_driver_connect (choose_t, connstr)) { _iodbcdm_messagebox (choose_t->mainwnd, szDSN, "The connection DSN was tested successfully, and can be used at this time."); } } if (GTK_CLIST (choose_t->udsnlist)->selection == NULL) { if (choose_t->uremove) gtk_widget_set_sensitive (choose_t->uremove, FALSE); if (choose_t->uconfigure) gtk_widget_set_sensitive (choose_t->uconfigure, FALSE); if (choose_t->utest) gtk_widget_set_sensitive (choose_t->utest, FALSE); } } } void systemdsn_add_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { char connstr[4096] = { 0 }; char drv[1024] = { 0 }; int sqlstat; DWORD error; if (choose_t) { /* Try first to get the driver name */ SQLSetConfigMode (ODBC_SYSTEM_DSN); if (_iodbcdm_drvchoose_dialbox (choose_t->mainwnd, drv, sizeof (drv), &sqlstat) == SQL_SUCCESS) { if (!SQLConfigDataSource (choose_t->mainwnd, ODBC_ADD_SYS_DSN, drv + STRLEN ("DRIVER="), connstr)) { if (SQLInstallerError (1, &error, connstr, sizeof (connstr), NULL) != SQL_NO_DATA) _iodbcdm_errorbox (choose_t->mainwnd, NULL, "An error occurred when trying to add the DSN : "); goto done; } adddsns_to_list (choose_t->sdsnlist, TRUE); } done: if (GTK_CLIST (choose_t->sdsnlist)->selection == NULL) { if (choose_t->sremove) gtk_widget_set_sensitive (choose_t->sremove, FALSE); if (choose_t->sconfigure) gtk_widget_set_sensitive (choose_t->sconfigure, FALSE); if (choose_t->stest) gtk_widget_set_sensitive (choose_t->stest, FALSE); } } return; } void systemdsn_remove_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { char dsn[1024] = { 0 }; char *szDSN = NULL, *szDriver = NULL; if (choose_t) { /* Retrieve the DSN name */ if (GTK_CLIST (choose_t->sdsnlist)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection-> data), 0, &szDSN); gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection-> data), 2, &szDriver); } /* Call the right function */ if (szDSN && create_confirm (choose_t->mainwnd, szDSN, "Are you sure you want to remove this DSN ?")) { sprintf (dsn, "DSN=%s", szDSN); if (!SQLConfigDataSource (choose_t->mainwnd, ODBC_REMOVE_SYS_DSN, szDriver, dsn)) _iodbcdm_errorbox (choose_t->mainwnd, szDSN, "An error occurred when trying to remove the DSN : "); adddsns_to_list (choose_t->sdsnlist, TRUE); } if (GTK_CLIST (choose_t->sdsnlist)->selection == NULL) { if (choose_t->sremove) gtk_widget_set_sensitive (choose_t->sremove, FALSE); if (choose_t->sconfigure) gtk_widget_set_sensitive (choose_t->sconfigure, FALSE); if (choose_t->stest) gtk_widget_set_sensitive (choose_t->stest, FALSE); } } } void systemdsn_configure_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { char connstr[4096] = { 0 }; char tokenstr[4096] = { 0 }; char *szDSN = NULL, *szDriver = NULL, *curr, *cour; int size = sizeof (connstr); DWORD error; if (choose_t) { /* Retrieve the DSN name */ if (GTK_CLIST (choose_t->sdsnlist)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection-> data), 0, &szDSN); gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection-> data), 2, &szDriver); } /* Call the right function */ if (szDSN) { sprintf (connstr, "DSN=%s", szDSN); size -= (STRLEN (connstr) + 1); SQLSetConfigMode (ODBC_SYSTEM_DSN); if (!SQLGetPrivateProfileString (szDSN, NULL, "", tokenstr, sizeof (tokenstr), NULL)) { _iodbcdm_errorbox (choose_t->mainwnd, szDSN, "An error occurred when trying to configure the DSN : "); goto done; } for (curr = tokenstr, cour = connstr + STRLEN (connstr) + 1; *curr; curr += (STRLEN (curr) + 1), cour += (STRLEN (cour) + 1)) { STRCPY (cour, curr); cour[STRLEN (curr)] = '='; SQLSetConfigMode (ODBC_SYSTEM_DSN); SQLGetPrivateProfileString (szDSN, curr, "", cour + STRLEN (curr) + 1, size - STRLEN (curr) - 1, NULL); size -= (STRLEN (cour) + 1); } *cour = 0; if (!SQLConfigDataSource (choose_t->mainwnd, ODBC_CONFIG_SYS_DSN, szDriver, connstr)) { if (SQLInstallerError (1, &error, connstr, sizeof (connstr), NULL) != SQL_NO_DATA && error != ODBC_ERROR_REQUEST_FAILED) _iodbcdm_errorbox (choose_t->mainwnd, szDSN, "An error occurred when trying to configure the DSN : "); goto done; } adddsns_to_list (choose_t->sdsnlist, TRUE); } done: if (GTK_CLIST (choose_t->sdsnlist)->selection == NULL) { if (choose_t->sremove) gtk_widget_set_sensitive (choose_t->sremove, FALSE); if (choose_t->sconfigure) gtk_widget_set_sensitive (choose_t->sconfigure, FALSE); if (choose_t->stest) gtk_widget_set_sensitive (choose_t->stest, FALSE); } } return; } void systemdsn_test_clicked (GtkWidget * widget, TDSNCHOOSER * choose_t) { HENV henv; HDBC hdbc; SWORD buflen; SQLCHAR connstr[4096] = { 0 }; SQLCHAR outconnstr[4096] = { 0 }; char *szDSN = NULL; if (choose_t) { /* Retrieve the DSN name */ if (GTK_CLIST (choose_t->sdsnlist)->selection != NULL) gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection->data), 0, &szDSN); if (szDSN && STRLEN (szDSN)) { snprintf (connstr, sizeof (connstr), "DSN=%s", szDSN); if (test_driver_connect (choose_t, connstr)) { _iodbcdm_messagebox (choose_t->mainwnd, szDSN, "The connection DSN was tested successfully, and can be used at this time."); } } if (GTK_CLIST (choose_t->sdsnlist)->selection == NULL) { if (choose_t->sremove) gtk_widget_set_sensitive (choose_t->sremove, FALSE); if (choose_t->sconfigure) gtk_widget_set_sensitive (choose_t->sconfigure, FALSE); if (choose_t->stest) gtk_widget_set_sensitive (choose_t->stest, FALSE); } } } static void filedsn_get_dsn (char *filename, char *dsn, size_t dsn_sz) { char *p; /* Cut everything up to the last slash */ p = strrchr (filename, '/'); if (p != NULL) p++; else p = filename; snprintf (dsn, dsn_sz, "%s", p); /* Cut .dsn extension */ p = strrchr (dsn, '.'); if (p != NULL && !strcasecmp (p, ".dsn")) *p = '\0'; } static BOOL _CheckDriverLoginDlg (char *drv); static void filedsn_configure (TDSNCHOOSER *choose_t, char *drv, char *dsn, char *in_attrs, BOOL b_add, BOOL verify_conn) { char *connstr = NULL; size_t len; /* current connstr len */ size_t add_len; /* len of appended string */ LPSTR attrs = NULL, curr, tmp, attr_lst = NULL; BOOL b_Save = TRUE; attrs = in_attrs; if (!b_add && !_CheckDriverLoginDlg(drv + STRLEN("DRIVER="))) { /* Get DSN name and additional attributes */ attr_lst = create_fgensetup (choose_t->mainwnd, dsn, in_attrs, b_add, &verify_conn); attrs = attr_lst; } if (!attrs) { create_error (choose_t->mainwnd, NULL, "Error adding File DSN:", strerror (ENOMEM)); return; } if (attrs == (LPSTR) - 1L) return; /* Build the connection string */ connstr = strdup (drv); len = strlen (connstr); for (curr = attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "DSN=", STRLEN ("DSN="))) { if (dsn == NULL) { /* got dsn name */ dsn = curr + STRLEN ("DSN="); } continue; } /* append attr */ add_len = 1 + strlen (curr); /* +1 for ';' */ tmp = realloc (connstr, len + add_len + 1); /* +1 for NUL */ if (tmp == NULL) { create_error (choose_t->mainwnd, NULL, "Error adding File DSN:", strerror (errno)); goto done; } connstr = tmp; snprintf (connstr + len, add_len + 1, ";%s", curr); len += add_len; } /* Nothing to do if no DSN */ if (!dsn || STRLEN (dsn) == 0) goto done; if (verify_conn) { BOOL ret; /* Append SAVEFILE */ add_len = strlen (";SAVEFILE=") + strlen (dsn); tmp = realloc (connstr, len + add_len + 1); /* +1 for NUL */ if (tmp == NULL) { create_error (choose_t->mainwnd, NULL, "Error adding file DSN:", strerror (errno)); goto done; } connstr = tmp; snprintf (connstr + len, add_len + 1, ";SAVEFILE=%s", dsn); len += add_len; /* Connect to data source */ ret = test_driver_connect (choose_t, connstr); if (!ret && b_add) { if (create_confirm (choose_t->mainwnd, dsn, "Can't check the connection. Do you want to store the FileDSN without verification ?")) b_Save = TRUE; else b_Save = FALSE; } else b_Save = FALSE; } if (b_Save) { char key[512]; char *p; size_t sz; if (drv) { p = strchr(drv, '='); if (!SQLWriteFileDSN (dsn, "ODBC", "DRIVER", p + 1)) { create_error (choose_t->mainwnd, NULL, "Error writing File DSN:", strerror (errno)); goto done; } } for (curr = attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "DSN=", STRLEN ("DSN="))) continue; else if (!strncasecmp (curr, "PWD=", STRLEN ("PWD="))) continue; else if (!strncasecmp (curr, "SAVEFILE=", STRLEN ("SAVEFILE="))) continue; else if (!strncasecmp (curr, "FILEDSN=", STRLEN ("FILEDSN="))) continue; p = strchr(curr, '='); sz = p - curr < sizeof(key) ? p - curr : sizeof(key); memset(key, 0, sizeof(key)); strncpy(key, curr, sz); if (!SQLWriteFileDSN (dsn, "ODBC", key, p + 1)) { create_error (choose_t->mainwnd, NULL, "Error writing File DSN:", strerror (errno)); goto done; } } } done: if (attr_lst != NULL) free (attr_lst); if (connstr != NULL) free (connstr); } static void filedsn_update_file_list (TDSNCHOOSER *choose_t) { /* Reset current file */ gtk_entry_set_text (GTK_ENTRY (choose_t->file_entry), ""); if (choose_t->fremove) gtk_widget_set_sensitive(choose_t->fremove, FALSE); if (choose_t->fconfigure) gtk_widget_set_sensitive(choose_t->fconfigure, FALSE); if (choose_t->ftest) gtk_widget_set_sensitive(choose_t->ftest, FALSE); /* Update file list */ addfiles_to_list (choose_t->mainwnd, choose_t->file_list, choose_t->curr_dir); } void filedsn_add_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { SQLCHAR drv[1024] = { 0 }; int sqlstat; LPSTR s, attrs; TFDRIVERCHOOSER drvchoose_t; if (!choose_t) return; /* Try first to get the driver name */ SQLSetConfigMode (ODBC_USER_DSN); drvchoose_t.attrs = NULL; drvchoose_t.dsn = NULL; drvchoose_t.driver = NULL; drvchoose_t.curr_dir = choose_t->curr_dir; create_fdriverchooser (choose_t->mainwnd, &drvchoose_t); /* Check output parameters */ if (drvchoose_t.ok) { if (sizeof(drv) > WCSLEN(drvchoose_t.driver) + strlen("DRIVER=")) { s = strcpy(drv, "DRIVER="); s += strlen("DRIVER="); dm_strcpy_W2A(s, drvchoose_t.driver); attrs = drvchoose_t.attrs; filedsn_configure(choose_t, drv, drvchoose_t.dsn, attrs ? attrs :"\0\0", TRUE, drvchoose_t.verify_conn); filedsn_update_file_list(choose_t); } } if (drvchoose_t.driver) free (drvchoose_t.driver); if (drvchoose_t.attrs) free (drvchoose_t.attrs); if (drvchoose_t.dsn) free (drvchoose_t.dsn); } void filedsn_remove_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { char msg[4096]; char *filedsn; if (!choose_t) return; /* Retrieve filedsn file name */ filedsn = (char*)gtk_entry_get_text (GTK_ENTRY (choose_t->file_entry)); /* Confirm removing a file dsn */ snprintf (msg, sizeof (msg), "Are you sure you want to remove the '%s' data source?", filedsn); if (!create_confirm (choose_t->mainwnd, NULL, msg)) return; /* Remove file */ if (unlink (filedsn) < 0) { create_error (choose_t->mainwnd, NULL, "Error removing file DSN:", strerror (errno)); return; } /* Update file list */ filedsn_update_file_list(choose_t); } void filedsn_configure_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { char dsn[1024]; char *filedsn; char *drv = NULL; char *attrs = NULL; char *_attrs = NULL; /* attr list */ size_t len = 0; /* current attr list length (w/o list-terminating NUL) */ char *p, *p_next; WORD read_len; char entries[1024]; if (!choose_t) return; /* Retrieve filedsn file name */ filedsn = (char*)gtk_entry_get_text (GTK_ENTRY (choose_t->file_entry)); filedsn_get_dsn (filedsn, dsn, sizeof (dsn)); /* Get list of entries in .dsn file */ if (!SQLReadFileDSN (filedsn, "ODBC", NULL, entries, sizeof (entries), &read_len)) { create_error (choose_t->mainwnd, NULL, "SQLReadFileDSN failed", NULL); goto done; } /* add params from the .dsn file */ for (p = entries; *p != '\0'; p = p_next) { char *tmp; size_t add_len; /* length of added attribute */ char value[1024]; /* get next entry */ p_next = strchr (p, ';'); if (p_next) *p_next++ = '\0'; if (!SQLReadFileDSN (filedsn, "ODBC", p, value, sizeof(value), &read_len)) { create_error (choose_t->mainwnd, NULL, "SQLReadFileDSN failed", NULL); goto done; } if (!strcasecmp (p, "DRIVER")) { /* got driver keyword */ add_len = strlen ("DRIVER=") + strlen (value) + 1; drv = malloc (add_len); snprintf (drv, add_len, "DRIVER=%s", value); continue; } /* +1 for '=', +1 for NUL */ add_len = strlen (p) + 1 + strlen (value) + 1; /* +1 for list-terminating NUL */; tmp = realloc (attrs, len + add_len + 1); if (tmp == NULL) { create_error (choose_t->mainwnd, NULL, "Error adding file DSN:", strerror (errno)); goto done; } attrs = tmp; snprintf (attrs + len, add_len, "%s=%s", p, value); len += add_len; } if (drv == NULL) { /* no driver found, probably unshareable file data source */ create_error (choose_t->mainwnd, NULL, "Can't configure file DSN without DRIVER keyword (probably unshareable data source?)", NULL); goto done; } if (attrs == NULL) attrs = "\0\0"; else { /* NUL-terminate the list */ attrs[len] = '\0'; _attrs = attrs; } /* Configure file DSN */ filedsn_configure (choose_t, drv, dsn, attrs, FALSE, TRUE); done: if (drv != NULL) free (drv); if (_attrs != NULL) free (_attrs); } void filedsn_test_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { char dsn[1024]; char connstr[4096] = { 0 }; char *filedsn; if (!choose_t) return; /* Retrieve filedsn file name */ filedsn = (char*)gtk_entry_get_text (GTK_ENTRY (choose_t->file_entry)); filedsn_get_dsn (filedsn, dsn, sizeof (dsn)); /* Create connection string and connect to data source */ snprintf (connstr, sizeof (connstr), "FILEDSN=%s", filedsn); if (test_driver_connect(choose_t, connstr)) { _iodbcdm_messagebox (choose_t->mainwnd, filedsn, "The connection DSN was tested successfully, and can be used at this time."); } } void filedsn_setdir_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { char msg[4096]; if (!choose_t) return; /* confirm setting a directory */ snprintf (msg, sizeof (msg), "Are you sure that you want to make '%s' the default file DSN directory?", choose_t->curr_dir); if (!create_confirm (choose_t->mainwnd, NULL, msg)) return; /* write FileDSNPath value */ if (!SQLWritePrivateProfileString ("ODBC", "FileDSNPath", choose_t->curr_dir, "odbcinst.ini")) { create_error (choose_t->mainwnd, NULL, "Error setting default file DSN directory", NULL); return; } } void filedsn_filelist_select (GtkWidget *widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t) { LPSTR filename = NULL, temp = NULL; if (choose_t) { /* Get the file name */ gtk_clist_get_text (GTK_CLIST (choose_t->file_list), row, 0, &filename); /* Update the directory and file list */ temp = (LPSTR) malloc (STRLEN (filename) + STRLEN (choose_t->curr_dir) + 2); if (temp) { STRCPY (temp, choose_t->curr_dir); if (temp[STRLEN (temp) - 1] != '/') STRCAT (temp, "/"); STRCAT (temp, filename); /* Check if it's a valid file */ gtk_entry_set_text (GTK_ENTRY (choose_t->file_entry), temp); /* And activate buttons */ if (choose_t->fremove) gtk_widget_set_sensitive (choose_t->fremove, TRUE); if (choose_t->fconfigure) gtk_widget_set_sensitive (choose_t->fconfigure, TRUE); if (choose_t->ftest) gtk_widget_set_sensitive (choose_t->ftest, TRUE); free (temp); } } } void filedsn_filelist_unselect (GtkWidget *widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t) { if (choose_t) { /* Check if it's a valid file */ gtk_entry_set_text (GTK_ENTRY (choose_t->file_entry), ""); /* And des-activate buttons */ if (choose_t->fremove) gtk_widget_set_sensitive (choose_t->fremove, FALSE); if (choose_t->fconfigure) gtk_widget_set_sensitive (choose_t->fconfigure, FALSE); if (choose_t->ftest) gtk_widget_set_sensitive (choose_t->ftest, FALSE); } } void filedsn_dirlist_select (GtkWidget *widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t) { LPSTR filename = NULL, temp = NULL; int i; if (choose_t) { /* Get the directory name */ gtk_clist_get_text (GTK_CLIST (choose_t->dir_list), row, 0, &filename); if (filename && event && event->type == GDK_2BUTTON_PRESS) { /* Update the directory and file list */ temp = (LPSTR) malloc (STRLEN (filename) + STRLEN (choose_t->curr_dir) + 2); if (temp) { if (!strcmp (filename, ".")) STRCPY (temp, choose_t->curr_dir); else if (!strcmp (filename, "..")) { STRCPY (temp, choose_t->curr_dir); for (i = STRLEN (temp) - 1; i - 1 && temp[i] != '/'; i--); temp[i] = 0; } else { STRCPY (temp, choose_t->curr_dir); if (temp[STRLEN (temp) - 1] != '/') STRCAT (temp, "/"); STRCAT (temp, filename); } strncpy(choose_t->curr_dir, temp, sizeof(choose_t->curr_dir)); addlistofdir_to_optionmenu (choose_t->dir_combo, choose_t->curr_dir, choose_t); adddirectories_to_list (choose_t->mainwnd, choose_t->dir_list, choose_t->curr_dir); addfiles_to_list (choose_t->mainwnd, choose_t->file_list, choose_t->curr_dir); } } } } void filedsn_lookin_clicked (GtkWidget *widget, void **array) { if (array && array[0] && array[1] && ((TDSNCHOOSER *) array[1])->curr_dir && strcmp (((TDSNCHOOSER *) array[1])->curr_dir, array[0])) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) array[1]; /* Update the directory and file list */ strncpy(choose_t->curr_dir, array[0], sizeof(choose_t->curr_dir)); addlistofdir_to_optionmenu (choose_t->dir_combo, (LPCSTR) array[0], choose_t); adddirectories_to_list (choose_t->mainwnd, choose_t->dir_list, (LPCSTR) array[0]); addfiles_to_list (choose_t->mainwnd, choose_t->file_list, (LPCSTR) array[0]); } } void userdsn_list_select (GtkWidget *widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t) { char *szDSN = NULL; if (choose_t) { if (GTK_CLIST (choose_t->udsnlist)->selection != NULL) gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection->data), 0, &szDSN); if (szDSN && event && event->type == GDK_2BUTTON_PRESS) gtk_signal_emit_by_name (GTK_OBJECT (choose_t->uconfigure), "clicked", choose_t); gtk_widget_set_sensitive (choose_t->uremove, TRUE); gtk_widget_set_sensitive (choose_t->uconfigure, TRUE); gtk_widget_set_sensitive (choose_t->utest, TRUE); } } void userdsn_list_unselect (GtkWidget *widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t) { if (choose_t) { gtk_widget_set_sensitive (choose_t->uremove, FALSE); gtk_widget_set_sensitive (choose_t->uconfigure, FALSE); gtk_widget_set_sensitive (choose_t->utest, FALSE); } } void systemdsn_list_select (GtkWidget *widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t) { char *szDSN = NULL; if (choose_t) { if (GTK_CLIST (choose_t->sdsnlist)->selection != NULL) gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection->data), 0, &szDSN); if (szDSN && event && event->type == GDK_2BUTTON_PRESS) gtk_signal_emit_by_name (GTK_OBJECT (choose_t->sconfigure), "clicked", choose_t); gtk_widget_set_sensitive (choose_t->sremove, TRUE); gtk_widget_set_sensitive (choose_t->sconfigure, TRUE); gtk_widget_set_sensitive (choose_t->stest, TRUE); } } void systemdsn_list_unselect (GtkWidget *widget, gint row, gint column, GdkEvent *event, TDSNCHOOSER *choose_t) { if (choose_t) { gtk_widget_set_sensitive (choose_t->sremove, FALSE); gtk_widget_set_sensitive (choose_t->sconfigure, FALSE); gtk_widget_set_sensitive (choose_t->stest, FALSE); } } static void dsnchooser_ok_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { char *szDSN; if (choose_t) { switch (choose_t->type_dsn) { case USER_DSN: if (GTK_CLIST (choose_t->udsnlist)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection-> data), 0, &szDSN); choose_t->dsn = dm_SQL_A2W(szDSN, SQL_NTS); } else choose_t->dsn = NULL; break; case SYSTEM_DSN: if (GTK_CLIST (choose_t->sdsnlist)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist), GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection-> data), 0, &szDSN); choose_t->dsn = dm_SQL_A2W (szDSN, SQL_NTS); } else choose_t->dsn = NULL; break; default: choose_t->dsn = NULL; break; }; done: choose_t->udsnlist = choose_t->sdsnlist = NULL; choose_t->uadd = choose_t->uremove = choose_t->utest = choose_t->uconfigure = NULL; choose_t->sadd = choose_t->sremove = choose_t->stest = choose_t->sconfigure = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (choose_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (choose_t->mainwnd); } } static void dsnchooser_cancel_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t) { if (choose_t) { choose_t->udsnlist = choose_t->sdsnlist = NULL; choose_t->uadd = choose_t->uremove = choose_t->utest = choose_t->uconfigure = NULL; choose_t->sadd = choose_t->sremove = choose_t->stest = choose_t->sconfigure = NULL; choose_t->type_dsn = -1; choose_t->dsn = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (choose_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (choose_t->mainwnd); } } static gint delete_event (GtkWidget *widget, GdkEvent *event, TDSNCHOOSER *choose_t) { dsnchooser_cancel_clicked (widget, choose_t); return FALSE; } void create_dsnchooser (HWND hwnd, TDSNCHOOSER * choose_t) { GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; GtkWidget *dsnchooser; GtkWidget *vbox27; GtkWidget *notebook1; GtkWidget *vbox28; GtkWidget *frame60; GtkWidget *alignment52; GtkWidget *hbox36; GtkWidget *scrolledwindow17; GtkWidget *clist1; GtkWidget *label104; GtkWidget *label105; GtkWidget *label106; GtkWidget *vbox29; GtkWidget *b_add; GtkWidget *b_remove; GtkWidget *b_configure; GtkWidget *b_test; GtkWidget *frame61; GtkWidget *alignment53; GtkWidget *label107; GtkWidget *frame62; GtkWidget *alignment54; GtkWidget *hbox37; GtkWidget *pixmap1; GtkWidget *label108; GtkWidget *label109; GtkWidget *vbox30; GtkWidget *frame63; GtkWidget *alignment55; GtkWidget *hbox38; GtkWidget *scrolledwindow18; GtkWidget *clist2; GtkWidget *label110; GtkWidget *label111; GtkWidget *label112; GtkWidget *vbox31; GtkWidget *bs_add; GtkWidget *bs_remove; GtkWidget *bs_configure; GtkWidget *bs_test; GtkWidget *frame64; GtkWidget *alignment56; GtkWidget *label113; GtkWidget *frame65; GtkWidget *alignment57; GtkWidget *hbox39; GtkWidget *pixmap2; GtkWidget *label114; GtkWidget *label115; GtkWidget *vbox32; GtkWidget *frame66; GtkWidget *alignment58; GtkWidget *hbox40; GtkWidget *vbox33; GtkWidget *hbox41; GtkWidget *frame67; GtkWidget *alignment59; GtkWidget *hbox42; GtkWidget *label116; GtkWidget *optionmenu1; GtkWidget *menu2; GtkWidget *hbox43; GtkWidget *scrolledwindow19; GtkWidget *clist3; GtkWidget *label117; GtkWidget *scrolledwindow20; GtkWidget *clist4; GtkWidget *label118; GtkWidget *frame68; GtkWidget *alignment60; GtkWidget *hbox44; GtkWidget *label119; GtkWidget *t_fileselected; GtkWidget *vbox34; GtkWidget *bf_add; GtkWidget *bf_remove; GtkWidget *bf_configure; GtkWidget *bf_test; GtkWidget *bf_setdir; GtkWidget *frame69; GtkWidget *alignment61; GtkWidget *frame70; GtkWidget *alignment62; GtkWidget *hbox45; GtkWidget *pixmap3; GtkWidget *label120; GtkWidget *label121; GtkWidget *hbuttonbox2; GtkWidget *b_cancel; GtkWidget *b_ok; GtkAccelGroup *accel_group; if (!GTK_IS_WIDGET (hwnd)) { gtk_init (0, NULL); hwnd = gtk_window_new (GTK_WINDOW_TOPLEVEL); } if (hwnd == NULL || !GTK_IS_WIDGET (hwnd)) return; accel_group = gtk_accel_group_new (); dsnchooser = gtk_dialog_new (); gtk_widget_set_name (dsnchooser, "dsnchooser"); gtk_widget_set_size_request (dsnchooser, 570, 420); gtk_window_set_title (GTK_WINDOW (dsnchooser), _("Select Data Source")); gtk_window_set_position (GTK_WINDOW (dsnchooser), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (dsnchooser), TRUE); gtk_window_set_default_size (GTK_WINDOW (dsnchooser), 600, 450); gtk_window_set_type_hint (GTK_WINDOW (dsnchooser), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (dsnchooser); #endif vbox27 = GTK_DIALOG (dsnchooser)->vbox; gtk_widget_set_name (vbox27, "vbox27"); gtk_widget_show (vbox27); notebook1 = gtk_notebook_new (); gtk_widget_set_name (notebook1, "notebook1"); gtk_widget_show (notebook1); gtk_box_pack_start (GTK_BOX (vbox27), notebook1, TRUE, TRUE, 0); vbox28 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox28, "vbox28"); gtk_widget_show (vbox28); gtk_container_add (GTK_CONTAINER (notebook1), vbox28); frame60 = gtk_frame_new (NULL); gtk_widget_set_name (frame60, "frame60"); gtk_widget_show (frame60); gtk_box_pack_start (GTK_BOX (vbox28), frame60, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame60), GTK_SHADOW_NONE); alignment52 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment52, "alignment52"); gtk_widget_show (alignment52); gtk_container_add (GTK_CONTAINER (frame60), alignment52); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment52), 0, 0, 4, 0); hbox36 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox36, "hbox36"); gtk_widget_show (hbox36); gtk_container_add (GTK_CONTAINER (alignment52), hbox36); scrolledwindow17 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow17, "scrolledwindow17"); gtk_widget_show (scrolledwindow17); gtk_box_pack_start (GTK_BOX (hbox36), scrolledwindow17, TRUE, TRUE, 0); gtk_widget_set_size_request (scrolledwindow17, 440, 219); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow17), GTK_SHADOW_IN); clist1 = gtk_clist_new (3); gtk_widget_set_name (clist1, "clist1"); gtk_widget_show (clist1); gtk_container_add (GTK_CONTAINER (scrolledwindow17), clist1); gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 100); gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 162); gtk_clist_set_column_width (GTK_CLIST (clist1), 2, 80); gtk_clist_column_titles_show (GTK_CLIST (clist1)); label104 = gtk_label_new (_("Name")); gtk_widget_set_name (label104, "label104"); gtk_widget_show (label104); gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, label104); gtk_widget_set_size_request (label104, 100, -1); label105 = gtk_label_new (_("Description")); gtk_widget_set_name (label105, "label105"); gtk_widget_show (label105); gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, label105); gtk_widget_set_size_request (label105, 162, -1); label106 = gtk_label_new (_("Driver")); gtk_widget_set_name (label106, "label106"); gtk_widget_show (label106); gtk_clist_set_column_widget (GTK_CLIST (clist1), 2, label106); gtk_widget_set_size_request (label106, 80, -1); vbox29 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox29, "vbox29"); gtk_widget_show (vbox29); gtk_box_pack_start (GTK_BOX (hbox36), vbox29, FALSE, TRUE, 0); b_add = gtk_button_new_from_stock ("gtk-add"); gtk_widget_set_name (b_add, "b_add"); gtk_widget_show (b_add); gtk_box_pack_start (GTK_BOX (vbox29), b_add, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (b_add), 4); GTK_WIDGET_SET_FLAGS (b_add, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (b_add, "clicked", accel_group, GDK_A, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); b_remove = gtk_button_new_from_stock ("gtk-remove"); gtk_widget_set_name (b_remove, "b_remove"); gtk_widget_show (b_remove); gtk_box_pack_start (GTK_BOX (vbox29), b_remove, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (b_remove), 4); gtk_widget_set_sensitive (b_remove, FALSE); GTK_WIDGET_SET_FLAGS (b_remove, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (b_remove, "clicked", accel_group, GDK_R, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); b_configure = gtk_button_new_with_mnemonic (_("Confi_gure")); gtk_widget_set_name (b_configure, "b_configure"); gtk_widget_show (b_configure); gtk_box_pack_start (GTK_BOX (vbox29), b_configure, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (b_configure), 4); gtk_widget_set_sensitive (b_configure, FALSE); GTK_WIDGET_SET_FLAGS (b_configure, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (b_configure, "clicked", accel_group, GDK_G, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); gtk_widget_add_accelerator (b_configure, "clicked", accel_group, GDK_g, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); b_test = gtk_button_new_with_mnemonic (_("_Test")); gtk_widget_set_name (b_test, "b_test"); gtk_widget_show (b_test); gtk_box_pack_start (GTK_BOX (vbox29), b_test, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (b_test), 4); gtk_widget_set_sensitive (b_test, FALSE); GTK_WIDGET_SET_FLAGS (b_test, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (b_test, "clicked", accel_group, GDK_T, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); frame61 = gtk_frame_new (NULL); gtk_widget_set_name (frame61, "frame61"); gtk_widget_show (frame61); gtk_box_pack_start (GTK_BOX (vbox29), frame61, TRUE, TRUE, 0); gtk_widget_set_size_request (frame61, -1, 80); gtk_frame_set_shadow_type (GTK_FRAME (frame61), GTK_SHADOW_NONE); alignment53 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment53, "alignment53"); gtk_widget_show (alignment53); gtk_container_add (GTK_CONTAINER (frame61), alignment53); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment53), 0, 0, 12, 0); label107 = gtk_label_new (_(" User Data Sources:")); gtk_widget_set_name (label107, "label107"); gtk_widget_show (label107); gtk_frame_set_label_widget (GTK_FRAME (frame60), label107); gtk_label_set_use_markup (GTK_LABEL (label107), TRUE); frame62 = gtk_frame_new (NULL); gtk_widget_set_name (frame62, "frame62"); gtk_widget_show (frame62); gtk_box_pack_start (GTK_BOX (vbox28), frame62, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame62), 3); alignment54 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment54, "alignment54"); gtk_widget_show (alignment54); gtk_container_add (GTK_CONTAINER (frame62), alignment54); hbox37 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox37, "hbox37"); gtk_widget_show (hbox37); gtk_container_add (GTK_CONTAINER (alignment54), hbox37); #if GTK_CHECK_VERSION(2,0,0) style = gtk_widget_get_style (dsnchooser); pixmap = gdk_pixmap_create_from_xpm_d (dsnchooser->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) odbc4_xpm); #else style = gtk_widget_get_style (GTK_WIDGET (hwnd)); pixmap = gdk_pixmap_create_from_xpm_d (GTK_WIDGET (hwnd)->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) odbc4_xpm); #endif pixmap1 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap1, "pixmap1"); gtk_widget_show (pixmap1); gtk_box_pack_start (GTK_BOX (hbox37), pixmap1, FALSE, TRUE, 10); label108 = gtk_label_new (_("An ODBC User data source stores information about to connect to\nthe indicated data provider. A User data source is only available to you,\nand can only be used on the current machine.")); gtk_widget_set_name (label108, "label108"); gtk_widget_show (label108); gtk_box_pack_start (GTK_BOX (hbox37), label108, FALSE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label108), GTK_JUSTIFY_FILL); label109 = gtk_label_new (_("User DSN")); gtk_widget_set_name (label109, "label109"); gtk_widget_show (label109); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label109); choose_t->uadd = b_add; choose_t->uremove = b_remove; choose_t->utest = b_test; choose_t->uconfigure = b_configure; vbox30 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox30, "vbox30"); gtk_widget_show (vbox30); gtk_container_add (GTK_CONTAINER (notebook1), vbox30); frame63 = gtk_frame_new (NULL); gtk_widget_set_name (frame63, "frame63"); gtk_widget_show (frame63); gtk_box_pack_start (GTK_BOX (vbox30), frame63, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame63), GTK_SHADOW_NONE); alignment55 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment55, "alignment55"); gtk_widget_show (alignment55); gtk_container_add (GTK_CONTAINER (frame63), alignment55); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment55), 0, 0, 4, 0); hbox38 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox38, "hbox38"); gtk_widget_show (hbox38); gtk_container_add (GTK_CONTAINER (alignment55), hbox38); scrolledwindow18 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow18, "scrolledwindow18"); gtk_widget_show (scrolledwindow18); gtk_box_pack_start (GTK_BOX (hbox38), scrolledwindow18, TRUE, TRUE, 0); gtk_widget_set_size_request (scrolledwindow18, 440, 219); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow18), GTK_SHADOW_IN); clist2 = gtk_clist_new (3); gtk_widget_set_name (clist2, "clist2"); gtk_widget_show (clist2); gtk_container_add (GTK_CONTAINER (scrolledwindow18), clist2); gtk_clist_set_column_width (GTK_CLIST (clist2), 0, 100); gtk_clist_set_column_width (GTK_CLIST (clist2), 1, 163); gtk_clist_set_column_width (GTK_CLIST (clist2), 2, 80); gtk_clist_column_titles_show (GTK_CLIST (clist2)); label110 = gtk_label_new (_("Name")); gtk_widget_set_name (label110, "label110"); gtk_widget_show (label110); gtk_clist_set_column_widget (GTK_CLIST (clist2), 0, label110); gtk_widget_set_size_request (label110, 100, -1); label111 = gtk_label_new (_("Description")); gtk_widget_set_name (label111, "label111"); gtk_widget_show (label111); gtk_clist_set_column_widget (GTK_CLIST (clist2), 1, label111); gtk_widget_set_size_request (label111, 162, -1); label112 = gtk_label_new (_("Driver")); gtk_widget_set_name (label112, "label112"); gtk_widget_show (label112); gtk_clist_set_column_widget (GTK_CLIST (clist2), 2, label112); gtk_widget_set_size_request (label112, 80, -1); vbox31 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox31, "vbox31"); gtk_widget_show (vbox31); gtk_box_pack_start (GTK_BOX (hbox38), vbox31, FALSE, TRUE, 0); bs_add = gtk_button_new_from_stock ("gtk-add"); gtk_widget_set_name (bs_add, "bs_add"); gtk_widget_show (bs_add); gtk_box_pack_start (GTK_BOX (vbox31), bs_add, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bs_add), 4); GTK_WIDGET_SET_FLAGS (bs_add, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bs_add, "clicked", accel_group, GDK_A, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bs_remove = gtk_button_new_from_stock ("gtk-remove"); gtk_widget_set_name (bs_remove, "bs_remove"); gtk_widget_show (bs_remove); gtk_box_pack_start (GTK_BOX (vbox31), bs_remove, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bs_remove), 4); gtk_widget_set_sensitive (bs_remove, FALSE); GTK_WIDGET_SET_FLAGS (bs_remove, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bs_remove, "clicked", accel_group, GDK_R, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bs_configure = gtk_button_new_with_mnemonic (_("Confi_gure")); gtk_widget_set_name (bs_configure, "bs_configure"); gtk_widget_show (bs_configure); gtk_box_pack_start (GTK_BOX (vbox31), bs_configure, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bs_configure), 4); gtk_widget_set_sensitive (bs_configure, FALSE); GTK_WIDGET_SET_FLAGS (bs_configure, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bs_configure, "clicked", accel_group, GDK_G, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); gtk_widget_add_accelerator (bs_configure, "clicked", accel_group, GDK_g, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bs_test = gtk_button_new_with_mnemonic (_("_Test")); gtk_widget_set_name (bs_test, "bs_test"); gtk_widget_show (bs_test); gtk_box_pack_start (GTK_BOX (vbox31), bs_test, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bs_test), 4); gtk_widget_set_sensitive (bs_test, FALSE); GTK_WIDGET_SET_FLAGS (bs_test, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bs_test, "clicked", accel_group, GDK_T, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); frame64 = gtk_frame_new (NULL); gtk_widget_set_name (frame64, "frame64"); gtk_widget_show (frame64); gtk_box_pack_start (GTK_BOX (vbox31), frame64, TRUE, TRUE, 0); gtk_widget_set_size_request (frame64, -1, 80); gtk_frame_set_shadow_type (GTK_FRAME (frame64), GTK_SHADOW_NONE); alignment56 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment56, "alignment56"); gtk_widget_show (alignment56); gtk_container_add (GTK_CONTAINER (frame64), alignment56); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment56), 0, 0, 12, 0); label113 = gtk_label_new (_(" System Data Sources:")); gtk_widget_set_name (label113, "label113"); gtk_widget_show (label113); gtk_frame_set_label_widget (GTK_FRAME (frame63), label113); gtk_label_set_use_markup (GTK_LABEL (label113), TRUE); frame65 = gtk_frame_new (NULL); gtk_widget_set_name (frame65, "frame65"); gtk_widget_show (frame65); gtk_box_pack_start (GTK_BOX (vbox30), frame65, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame65), 3); alignment57 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment57, "alignment57"); gtk_widget_show (alignment57); gtk_container_add (GTK_CONTAINER (frame65), alignment57); hbox39 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox39, "hbox39"); gtk_widget_show (hbox39); gtk_container_add (GTK_CONTAINER (alignment57), hbox39); gtk_container_set_border_width (GTK_CONTAINER (hbox39), 10); pixmap2 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap2, "pixmap2"); gtk_widget_show (pixmap2); gtk_box_pack_start (GTK_BOX (hbox39), pixmap2, FALSE, TRUE, 10); label114 = gtk_label_new (_("An ODBC System data source stores information about to connect to\nthe indicated data provider. A System data source is visible to all\nusers on this machine, including daemons.")); gtk_widget_set_name (label114, "label114"); gtk_widget_show (label114); gtk_box_pack_start (GTK_BOX (hbox39), label114, FALSE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label114), GTK_JUSTIFY_FILL); label115 = gtk_label_new (_("System DSN")); gtk_widget_set_name (label115, "label115"); gtk_widget_show (label115); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), label115); choose_t->sadd = bs_add; choose_t->sremove = bs_remove; choose_t->stest = bs_test; choose_t->sconfigure = bs_configure; vbox32 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox32, "vbox32"); gtk_widget_show (vbox32); gtk_container_add (GTK_CONTAINER (notebook1), vbox32); frame66 = gtk_frame_new (NULL); gtk_widget_set_name (frame66, "frame66"); gtk_widget_show (frame66); gtk_box_pack_start (GTK_BOX (vbox32), frame66, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame66), 2); gtk_frame_set_shadow_type (GTK_FRAME (frame66), GTK_SHADOW_NONE); alignment58 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment58, "alignment58"); gtk_widget_show (alignment58); gtk_container_add (GTK_CONTAINER (frame66), alignment58); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment58), 0, 0, 4, 0); hbox40 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox40, "hbox40"); gtk_widget_show (hbox40); gtk_container_add (GTK_CONTAINER (alignment58), hbox40); vbox33 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox33, "vbox33"); gtk_widget_show (vbox33); gtk_box_pack_start (GTK_BOX (hbox40), vbox33, TRUE, TRUE, 0); gtk_widget_set_size_request (vbox33, 436, 250); hbox41 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox41, "hbox41"); gtk_widget_show (hbox41); gtk_box_pack_start (GTK_BOX (vbox33), hbox41, FALSE, FALSE, 0); frame67 = gtk_frame_new (NULL); gtk_widget_set_name (frame67, "frame67"); gtk_widget_show (frame67); gtk_box_pack_start (GTK_BOX (hbox41), frame67, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame67), 4); gtk_frame_set_shadow_type (GTK_FRAME (frame67), GTK_SHADOW_NONE); alignment59 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment59, "alignment59"); gtk_widget_show (alignment59); gtk_container_add (GTK_CONTAINER (frame67), alignment59); gtk_container_set_border_width (GTK_CONTAINER (alignment59), 2); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment59), 0, 0, 6, 0); hbox42 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox42, "hbox42"); gtk_widget_show (hbox42); gtk_container_add (GTK_CONTAINER (alignment59), hbox42); label116 = gtk_label_new (_("Look in : ")); gtk_widget_set_name (label116, "label116"); gtk_widget_show (label116); gtk_box_pack_start (GTK_BOX (hbox42), label116, FALSE, FALSE, 0); optionmenu1 = gtk_option_menu_new (); gtk_widget_set_name (optionmenu1, "optionmenu1"); gtk_widget_show (optionmenu1); gtk_box_pack_start (GTK_BOX (hbox42), optionmenu1, TRUE, TRUE, 0); menu2 = gtk_menu_new (); gtk_widget_set_name (menu2, "menu2"); gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu1), menu2); hbox43 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox43, "hbox43"); gtk_widget_show (hbox43); gtk_box_pack_start (GTK_BOX (vbox33), hbox43, TRUE, TRUE, 0); scrolledwindow19 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow19, "scrolledwindow19"); gtk_widget_show (scrolledwindow19); gtk_box_pack_start (GTK_BOX (hbox43), scrolledwindow19, TRUE, TRUE, 0); gtk_widget_set_size_request (scrolledwindow19, 96, -1); gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow19), 4); clist3 = gtk_clist_new (1); gtk_widget_set_name (clist3, "clist3"); gtk_widget_show (clist3); gtk_container_add (GTK_CONTAINER (scrolledwindow19), clist3); gtk_clist_set_column_width (GTK_CLIST (clist3), 0, 80); gtk_clist_column_titles_show (GTK_CLIST (clist3)); label117 = gtk_label_new (_("Directories")); gtk_widget_set_name (label117, "label117"); gtk_widget_show (label117); gtk_clist_set_column_widget (GTK_CLIST (clist3), 0, label117); scrolledwindow20 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow20, "scrolledwindow20"); gtk_widget_show (scrolledwindow20); gtk_box_pack_start (GTK_BOX (hbox43), scrolledwindow20, TRUE, TRUE, 0); gtk_widget_set_size_request (scrolledwindow20, 102, -1); gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow20), 4); clist4 = gtk_clist_new (1); gtk_widget_set_name (clist4, "clist4"); gtk_widget_show (clist4); gtk_container_add (GTK_CONTAINER (scrolledwindow20), clist4); gtk_clist_set_column_width (GTK_CLIST (clist4), 0, 80); gtk_clist_column_titles_show (GTK_CLIST (clist4)); label118 = gtk_label_new (_("Files")); gtk_widget_set_name (label118, "label118"); gtk_widget_show (label118); gtk_clist_set_column_widget (GTK_CLIST (clist4), 0, label118); frame68 = gtk_frame_new (NULL); gtk_widget_set_name (frame68, "frame68"); gtk_widget_show (frame68); gtk_box_pack_start (GTK_BOX (vbox33), frame68, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame68), 4); gtk_frame_set_shadow_type (GTK_FRAME (frame68), GTK_SHADOW_NONE); alignment60 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment60, "alignment60"); gtk_widget_show (alignment60); gtk_container_add (GTK_CONTAINER (frame68), alignment60); gtk_container_set_border_width (GTK_CONTAINER (alignment60), 2); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment60), 0, 0, 6, 0); hbox44 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox44, "hbox44"); gtk_widget_show (hbox44); gtk_container_add (GTK_CONTAINER (alignment60), hbox44); label119 = gtk_label_new (_("File selected:")); gtk_widget_set_name (label119, "label119"); gtk_widget_show (label119); gtk_box_pack_start (GTK_BOX (hbox44), label119, FALSE, FALSE, 0); t_fileselected = gtk_entry_new (); gtk_widget_set_name (t_fileselected, "t_fileselected"); gtk_widget_show (t_fileselected); gtk_box_pack_start (GTK_BOX (hbox44), t_fileselected, TRUE, TRUE, 0); vbox34 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox34, "vbox34"); gtk_widget_show (vbox34); gtk_box_pack_start (GTK_BOX (hbox40), vbox34, FALSE, TRUE, 0); bf_add = gtk_button_new_from_stock ("gtk-add"); gtk_widget_set_name (bf_add, "bf_add"); gtk_widget_show (bf_add); gtk_box_pack_start (GTK_BOX (vbox34), bf_add, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bf_add), 4); GTK_WIDGET_SET_FLAGS (bf_add, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bf_add, "clicked", accel_group, GDK_A, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bf_remove = gtk_button_new_from_stock ("gtk-remove"); gtk_widget_set_name (bf_remove, "bf_remove"); gtk_widget_show (bf_remove); gtk_box_pack_start (GTK_BOX (vbox34), bf_remove, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bf_remove), 4); GTK_WIDGET_SET_FLAGS (bf_remove, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bf_remove, "clicked", accel_group, GDK_R, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bf_configure = gtk_button_new_with_mnemonic (_("Confi_gure")); gtk_widget_set_name (bf_configure, "bf_configure"); gtk_widget_show (bf_configure); gtk_box_pack_start (GTK_BOX (vbox34), bf_configure, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bf_configure), 4); GTK_WIDGET_SET_FLAGS (bf_configure, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bf_configure, "clicked", accel_group, GDK_G, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); gtk_widget_add_accelerator (bf_configure, "clicked", accel_group, GDK_g, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bf_test = gtk_button_new_with_mnemonic (_("_Test")); gtk_widget_set_name (bf_test, "bf_test"); gtk_widget_show (bf_test); gtk_box_pack_start (GTK_BOX (vbox34), bf_test, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bf_test), 4); GTK_WIDGET_SET_FLAGS (bf_test, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bf_test, "clicked", accel_group, GDK_T, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); bf_setdir = gtk_button_new_with_mnemonic (_("_Set Dir")); gtk_widget_set_name (bf_setdir, "bf_setdir"); gtk_widget_show (bf_setdir); gtk_box_pack_start (GTK_BOX (vbox34), bf_setdir, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (bf_setdir), 4); GTK_WIDGET_SET_FLAGS (bf_setdir, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (bf_setdir, "clicked", accel_group, GDK_S, (GdkModifierType) GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); frame69 = gtk_frame_new (NULL); gtk_widget_set_name (frame69, "frame69"); gtk_widget_show (frame69); gtk_box_pack_start (GTK_BOX (vbox34), frame69, TRUE, TRUE, 0); gtk_widget_set_size_request (frame69, -1, 80); gtk_frame_set_shadow_type (GTK_FRAME (frame69), GTK_SHADOW_NONE); alignment61 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment61, "alignment61"); gtk_widget_show (alignment61); gtk_container_add (GTK_CONTAINER (frame69), alignment61); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment61), 0, 0, 12, 0); frame70 = gtk_frame_new (NULL); gtk_widget_set_name (frame70, "frame70"); gtk_widget_show (frame70); gtk_box_pack_start (GTK_BOX (vbox32), frame70, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame70), 3); alignment62 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment62, "alignment62"); gtk_widget_show (alignment62); gtk_container_add (GTK_CONTAINER (frame70), alignment62); hbox45 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox45, "hbox45"); gtk_widget_show (hbox45); gtk_container_add (GTK_CONTAINER (alignment62), hbox45); gtk_container_set_border_width (GTK_CONTAINER (hbox45), 10); pixmap3 = gtk_pixmap_new (pixmap, mask); gtk_widget_set_name (pixmap3, "pixmap3"); gtk_widget_show (pixmap3); gtk_box_pack_start (GTK_BOX (hbox45), pixmap3, FALSE, TRUE, 10); label120 = gtk_label_new (_("Select the file data source that describes the driver that you wish to\nconnect to. You can use any file data source that refers to an ODBC\ndriver which is installed on your machine.")); gtk_widget_set_name (label120, "label120"); gtk_widget_show (label120); gtk_box_pack_start (GTK_BOX (hbox45), label120, FALSE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label120), GTK_JUSTIFY_FILL); label121 = gtk_label_new (_("File DSN")); gtk_widget_set_name (label121, "label121"); gtk_widget_show (label121); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 2), label121); choose_t->fadd = bf_add; choose_t->fremove = bf_remove; choose_t->fconfigure = bf_configure; choose_t->ftest = bf_test; choose_t->dir_list = clist3; choose_t->dir_combo = optionmenu1; choose_t->file_list = clist4; choose_t->file_entry = t_fileselected; choose_t->fsetdir = bf_setdir; hbuttonbox2 = GTK_DIALOG (dsnchooser)->action_area; gtk_widget_set_name (hbuttonbox2, "hbuttonbox2"); gtk_widget_show (hbuttonbox2); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox2), GTK_BUTTONBOX_END); b_cancel = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_set_name (b_cancel, "b_cancel"); gtk_widget_show (b_cancel); gtk_dialog_add_action_widget (GTK_DIALOG (dsnchooser), b_cancel, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (b_cancel, GTK_CAN_DEFAULT); b_ok = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_set_name (b_ok, "b_ok"); gtk_widget_show (b_ok); gtk_dialog_add_action_widget (GTK_DIALOG (dsnchooser), b_ok, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (b_ok, GTK_CAN_DEFAULT); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (dsnchooser, dsnchooser, "dsnchooser"); GLADE_HOOKUP_OBJECT_NO_REF (dsnchooser, vbox27, "vbox27"); GLADE_HOOKUP_OBJECT (dsnchooser, notebook1, "notebook1"); GLADE_HOOKUP_OBJECT (dsnchooser, vbox28, "vbox28"); GLADE_HOOKUP_OBJECT (dsnchooser, frame60, "frame60"); GLADE_HOOKUP_OBJECT (dsnchooser, alignment52, "alignment52"); GLADE_HOOKUP_OBJECT (dsnchooser, hbox36, "hbox36"); GLADE_HOOKUP_OBJECT (dsnchooser, scrolledwindow17, "scrolledwindow17"); GLADE_HOOKUP_OBJECT (dsnchooser, clist1, "clist1"); GLADE_HOOKUP_OBJECT (dsnchooser, label104, "label104"); GLADE_HOOKUP_OBJECT (dsnchooser, label105, "label105"); GLADE_HOOKUP_OBJECT (dsnchooser, label106, "label106"); GLADE_HOOKUP_OBJECT (dsnchooser, vbox29, "vbox29"); GLADE_HOOKUP_OBJECT (dsnchooser, b_add, "b_add"); GLADE_HOOKUP_OBJECT (dsnchooser, b_remove, "b_remove"); GLADE_HOOKUP_OBJECT (dsnchooser, b_configure, "b_configure"); GLADE_HOOKUP_OBJECT (dsnchooser, b_test, "b_test"); GLADE_HOOKUP_OBJECT (dsnchooser, frame61, "frame61"); GLADE_HOOKUP_OBJECT (dsnchooser, alignment53, "alignment53"); GLADE_HOOKUP_OBJECT (dsnchooser, label107, "label107"); GLADE_HOOKUP_OBJECT (dsnchooser, frame62, "frame62"); GLADE_HOOKUP_OBJECT (dsnchooser, alignment54, "alignment54"); GLADE_HOOKUP_OBJECT (dsnchooser, hbox37, "hbox37"); GLADE_HOOKUP_OBJECT (dsnchooser, pixmap1, "pixmap1"); GLADE_HOOKUP_OBJECT (dsnchooser, label108, "label108"); GLADE_HOOKUP_OBJECT (dsnchooser, label109, "label109"); GLADE_HOOKUP_OBJECT (dsnchooser, vbox30, "vbox30"); GLADE_HOOKUP_OBJECT (dsnchooser, frame63, "frame63"); GLADE_HOOKUP_OBJECT (dsnchooser, alignment55, "alignment55"); GLADE_HOOKUP_OBJECT (dsnchooser, hbox38, "hbox38"); GLADE_HOOKUP_OBJECT (dsnchooser, scrolledwindow18, "scrolledwindow18"); GLADE_HOOKUP_OBJECT (dsnchooser, clist2, "clist2"); GLADE_HOOKUP_OBJECT (dsnchooser, label110, "label110"); GLADE_HOOKUP_OBJECT (dsnchooser, label111, "label111"); GLADE_HOOKUP_OBJECT (dsnchooser, label112, "label112"); GLADE_HOOKUP_OBJECT (dsnchooser, vbox31, "vbox31"); GLADE_HOOKUP_OBJECT (dsnchooser, bs_add, "bs_add"); GLADE_HOOKUP_OBJECT (dsnchooser, bs_remove, "bs_remove"); GLADE_HOOKUP_OBJECT (dsnchooser, bs_configure, "bs_configure"); GLADE_HOOKUP_OBJECT (dsnchooser, bs_test, "bs_test"); GLADE_HOOKUP_OBJECT (dsnchooser, frame64, "frame64"); GLADE_HOOKUP_OBJECT (dsnchooser, alignment56, "alignment56"); GLADE_HOOKUP_OBJECT (dsnchooser, label113, "label113"); GLADE_HOOKUP_OBJECT (dsnchooser, frame65, "frame65"); GLADE_HOOKUP_OBJECT (dsnchooser, alignment57, "alignment57"); GLADE_HOOKUP_OBJECT (dsnchooser, hbox39, "hbox39"); GLADE_HOOKUP_OBJECT (dsnchooser, pixmap2, "pixmap2"); GLADE_HOOKUP_OBJECT (dsnchooser, label114, "label114"); GLADE_HOOKUP_OBJECT (dsnchooser, label115, "label115"); GLADE_HOOKUP_OBJECT (dsnchooser, vbox32, "vbox32"); GLADE_HOOKUP_OBJECT (dsnchooser, frame66, "frame66"); GLADE_HOOKUP_OBJECT (dsnchooser, alignment58, "alignment58"); GLADE_HOOKUP_OBJECT (dsnchooser, hbox40, "hbox40"); GLADE_HOOKUP_OBJECT (dsnchooser, vbox33, "vbox33"); GLADE_HOOKUP_OBJECT (dsnchooser, hbox41, "hbox41"); GLADE_HOOKUP_OBJECT (dsnchooser, frame67, "frame67"); GLADE_HOOKUP_OBJECT (dsnchooser, alignment59, "alignment59"); GLADE_HOOKUP_OBJECT (dsnchooser, hbox42, "hbox42"); GLADE_HOOKUP_OBJECT (dsnchooser, label116, "label116"); GLADE_HOOKUP_OBJECT (dsnchooser, optionmenu1, "optionmenu1"); GLADE_HOOKUP_OBJECT (dsnchooser, menu2, "menu2"); GLADE_HOOKUP_OBJECT (dsnchooser, hbox43, "hbox43"); GLADE_HOOKUP_OBJECT (dsnchooser, scrolledwindow19, "scrolledwindow19"); GLADE_HOOKUP_OBJECT (dsnchooser, clist3, "clist3"); GLADE_HOOKUP_OBJECT (dsnchooser, label117, "label117"); GLADE_HOOKUP_OBJECT (dsnchooser, scrolledwindow20, "scrolledwindow20"); GLADE_HOOKUP_OBJECT (dsnchooser, clist4, "clist4"); GLADE_HOOKUP_OBJECT (dsnchooser, label118, "label118"); GLADE_HOOKUP_OBJECT (dsnchooser, frame68, "frame68"); GLADE_HOOKUP_OBJECT (dsnchooser, alignment60, "alignment60"); GLADE_HOOKUP_OBJECT (dsnchooser, hbox44, "hbox44"); GLADE_HOOKUP_OBJECT (dsnchooser, label119, "label119"); GLADE_HOOKUP_OBJECT (dsnchooser, t_fileselected, "t_fileselected"); GLADE_HOOKUP_OBJECT (dsnchooser, vbox34, "vbox34"); GLADE_HOOKUP_OBJECT (dsnchooser, bf_add, "bf_add"); GLADE_HOOKUP_OBJECT (dsnchooser, bf_remove, "bf_remove"); GLADE_HOOKUP_OBJECT (dsnchooser, bf_configure, "bf_configure"); GLADE_HOOKUP_OBJECT (dsnchooser, bf_test, "bf_test"); GLADE_HOOKUP_OBJECT (dsnchooser, bf_setdir, "bf_setdir"); GLADE_HOOKUP_OBJECT (dsnchooser, frame69, "frame69"); GLADE_HOOKUP_OBJECT (dsnchooser, alignment61, "alignment61"); GLADE_HOOKUP_OBJECT (dsnchooser, frame70, "frame70"); GLADE_HOOKUP_OBJECT (dsnchooser, alignment62, "alignment62"); GLADE_HOOKUP_OBJECT (dsnchooser, hbox45, "hbox45"); GLADE_HOOKUP_OBJECT (dsnchooser, pixmap3, "pixmap3"); GLADE_HOOKUP_OBJECT (dsnchooser, label120, "label120"); GLADE_HOOKUP_OBJECT (dsnchooser, label121, "label121"); GLADE_HOOKUP_OBJECT_NO_REF (dsnchooser, hbuttonbox2, "hbuttonbox2"); GLADE_HOOKUP_OBJECT (dsnchooser, b_cancel, "b_cancel"); GLADE_HOOKUP_OBJECT (dsnchooser, b_ok, "b_ok"); /* Notebook events */ gtk_signal_connect_after (GTK_OBJECT (notebook1), "switch_page", GTK_SIGNAL_FUNC (dsnchooser_switch_page), choose_t); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (b_ok), "clicked", GTK_SIGNAL_FUNC (dsnchooser_ok_clicked), choose_t); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (b_cancel), "clicked", GTK_SIGNAL_FUNC (dsnchooser_cancel_clicked), choose_t); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (dsnchooser), "delete_event", GTK_SIGNAL_FUNC (delete_event), choose_t); gtk_signal_connect (GTK_OBJECT (dsnchooser), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Add user DSN button events */ gtk_signal_connect (GTK_OBJECT (choose_t->uadd), "clicked", GTK_SIGNAL_FUNC (userdsn_add_clicked), choose_t); /* Remove user DSN button events */ gtk_signal_connect (GTK_OBJECT (choose_t->uremove), "clicked", GTK_SIGNAL_FUNC (userdsn_remove_clicked), choose_t); /* Test user DSN button events */ gtk_signal_connect (GTK_OBJECT (choose_t->utest), "clicked", GTK_SIGNAL_FUNC (userdsn_test_clicked), choose_t); /* Configure user DSN button events */ gtk_signal_connect (GTK_OBJECT (choose_t->uconfigure), "clicked", GTK_SIGNAL_FUNC (userdsn_configure_clicked), choose_t); /* Add system DSN button events */ gtk_signal_connect (GTK_OBJECT (choose_t->sadd), "clicked", GTK_SIGNAL_FUNC (systemdsn_add_clicked), choose_t); /* Remove system DSN button events */ gtk_signal_connect (GTK_OBJECT (choose_t->sremove), "clicked", GTK_SIGNAL_FUNC (systemdsn_remove_clicked), choose_t); /* Test system DSN button events */ gtk_signal_connect (GTK_OBJECT (choose_t->stest), "clicked", GTK_SIGNAL_FUNC (systemdsn_test_clicked), choose_t); /* Configure system DSN button events */ gtk_signal_connect (GTK_OBJECT (choose_t->sconfigure), "clicked", GTK_SIGNAL_FUNC (systemdsn_configure_clicked), choose_t); /* User DSN list events */ gtk_signal_connect (GTK_OBJECT (clist1), "select_row", GTK_SIGNAL_FUNC (userdsn_list_select), choose_t); gtk_signal_connect (GTK_OBJECT (clist1), "unselect_row", GTK_SIGNAL_FUNC (userdsn_list_unselect), choose_t); /* System DSN list events */ gtk_signal_connect (GTK_OBJECT (clist2), "select_row", GTK_SIGNAL_FUNC (systemdsn_list_select), choose_t); gtk_signal_connect (GTK_OBJECT (clist2), "unselect_row", GTK_SIGNAL_FUNC (systemdsn_list_unselect), choose_t); /* Add file DSN button events */ gtk_signal_connect (GTK_OBJECT (choose_t->fadd), "clicked", GTK_SIGNAL_FUNC (filedsn_add_clicked), choose_t); /* Remove file DSN button events */ gtk_signal_connect (GTK_OBJECT (choose_t->fremove), "clicked", GTK_SIGNAL_FUNC (filedsn_remove_clicked), choose_t); /* Test file DSN button events */ gtk_signal_connect (GTK_OBJECT (choose_t->ftest), "clicked", GTK_SIGNAL_FUNC (filedsn_test_clicked), choose_t); /* Configure file DSN button events */ gtk_signal_connect (GTK_OBJECT (choose_t->fconfigure), "clicked", GTK_SIGNAL_FUNC (filedsn_configure_clicked), choose_t); /* Configure file DSN button events */ gtk_signal_connect (GTK_OBJECT (choose_t->fsetdir), "clicked", GTK_SIGNAL_FUNC (filedsn_setdir_clicked), choose_t); /* Directories file DSN list events */ gtk_signal_connect (GTK_OBJECT (clist3), "select_row", GTK_SIGNAL_FUNC (filedsn_dirlist_select), choose_t); /* Files file DSN list events */ gtk_signal_connect (GTK_OBJECT (clist4), "select_row", GTK_SIGNAL_FUNC (filedsn_filelist_select), choose_t); gtk_signal_connect (GTK_OBJECT (clist4), "unselect_row", GTK_SIGNAL_FUNC (filedsn_filelist_unselect), choose_t); gtk_window_add_accel_group (GTK_WINDOW (dsnchooser), accel_group); SQLSetConfigMode (ODBC_BOTH_DSN); if (!SQLGetPrivateProfileString("ODBC", "FileDSNPath", "", choose_t->curr_dir, sizeof(choose_t->curr_dir), "odbcinst.ini")) strcpy(choose_t->curr_dir, DEFAULT_FILEDSNPATH); adddsns_to_list (clist1, FALSE); choose_t->udsnlist = clist1; choose_t->sdsnlist = clist2; choose_t->type_dsn = USER_DSN; choose_t->mainwnd = dsnchooser; gtk_widget_show_all (dsnchooser); gtk_main (); } #define CHECK_DRVCONN_DIALBOX(path) \ { \ if ((handle = DLL_OPEN(path)) != NULL) \ { \ if (DLL_PROC(handle, "_iodbcdm_drvconn_dialboxw") != NULL) \ { \ DLL_CLOSE(handle); \ retVal = TRUE; \ goto quit; \ } \ else \ { \ if (DLL_PROC(handle, "_iodbcdm_drvconn_dialbox") != NULL) \ { \ DLL_CLOSE(handle); \ retVal = TRUE; \ goto quit; \ } \ } \ DLL_CLOSE(handle); \ } \ } static BOOL _CheckDriverLoginDlg ( char *drv ) { char drvbuf[4096] = { L'\0'}; HDLL handle; BOOL retVal = FALSE; if (!drv) return FALSE; SQLSetConfigMode (ODBC_USER_DSN); if (!access (drv, X_OK)) { CHECK_DRVCONN_DIALBOX (drv); } if (SQLGetPrivateProfileString (drv, "Driver", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } if (SQLGetPrivateProfileString (drv, "Setup", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } SQLSetConfigMode (ODBC_SYSTEM_DSN); if (!access (drv, X_OK)) { CHECK_DRVCONN_DIALBOX (drv); } if (SQLGetPrivateProfileString (drv, "Driver", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } if (SQLGetPrivateProfileString (drv, "Setup", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } quit: return retVal; } libiodbc-3.52.9/iodbcadm/Makefile.in0000644000076400007640000007360312323210643014126 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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@ @GUI_TRUE@bin_PROGRAMS = iodbcadm-gtk$(EXEEXT) subdir = iodbcadm DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = 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__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @GTK_FALSE@libiodbcadm_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @GTK_FALSE@ ../iodbcinst/libiodbc_common.la \ @GTK_FALSE@ ../iodbcinst/libiodbcinst.la ../iodbc/libiodbc.la @GTK_TRUE@libiodbcadm_la_DEPENDENCIES = gtk/libiodbcadm-gtk.la \ @GTK_TRUE@ $(am__DEPENDENCIES_1) \ @GTK_TRUE@ ../iodbcinst/libiodbc_common.la \ @GTK_TRUE@ ../iodbcinst/libiodbcinst.la ../iodbc/libiodbc.la am_libiodbcadm_la_OBJECTS = Info.lo drvconn.lo error.lo libiodbcadm_la_OBJECTS = $(am_libiodbcadm_la_OBJECTS) libiodbcadm_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libiodbcadm_la_LDFLAGS) $(LDFLAGS) -o $@ @GUI_TRUE@am_libiodbcadm_la_rpath = -rpath $(libdir) PROGRAMS = $(bin_PROGRAMS) am_iodbcadm_gtk_OBJECTS = iodbcadm_gtk_OBJECTS = $(am_iodbcadm_gtk_OBJECTS) iodbcadm_gtk_DEPENDENCIES = gtk/main.lo libiodbcadm.la \ ../iodbcinst/libiodbcinst.la ../iodbc/libiodbc.la iodbcadm_gtk_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(iodbcadm_gtk_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/admin/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 = $(libiodbcadm_la_SOURCES) $(iodbcadm_gtk_SOURCES) DIST_SOURCES = $(libiodbcadm_la_SOURCES) $(iodbcadm_gtk_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 HEADERS = $(noinst_HEADERS) 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 = gtk 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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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@ @GUI_TRUE@SUBDIRS = gtk @GUI_TRUE@lib_LTLIBRARIES = libiodbcadm.la @GTK_FALSE@AM_CPPFLAGS = \ @GTK_FALSE@ -I$(top_srcdir)/include \ @GTK_FALSE@ -I$(top_srcdir)/iodbc \ @GTK_FALSE@ -I$(top_srcdir)/iodbcinst @GTK_TRUE@AM_CPPFLAGS = \ @GTK_TRUE@ -I$(top_srcdir)/include \ @GTK_TRUE@ -I$(top_srcdir)/iodbc \ @GTK_TRUE@ -I$(top_srcdir)/iodbcinst \ @GTK_TRUE@ @GTK_CFLAGS@ -D__GTK__ libiodbcadm_la_LDFLAGS = \ -version-info @lib_version@ \ -export-symbols $(srcdir)/iodbcadm.exp @GTK_FALSE@libiodbcadm_la_LIBADD = \ @GTK_FALSE@ $(LIBADD_DL) \ @GTK_FALSE@ ../iodbcinst/libiodbc_common.la \ @GTK_FALSE@ ../iodbcinst/libiodbcinst.la \ @GTK_FALSE@ ../iodbc/libiodbc.la @GTK_TRUE@libiodbcadm_la_LIBADD = \ @GTK_TRUE@ gtk/libiodbcadm-gtk.la \ @GTK_TRUE@ $(LIBADD_DL) \ @GTK_TRUE@ @GTK_LIBS@ \ @GTK_TRUE@ ../iodbcinst/libiodbc_common.la \ @GTK_TRUE@ ../iodbcinst/libiodbcinst.la \ @GTK_TRUE@ ../iodbc/libiodbc.la libiodbcadm_la_SOURCES = \ Info.c \ drvconn.c \ error.c iodbcadm_gtk_SOURCES = iodbcadm_gtk_LDADD = \ gtk/main.lo \ libiodbcadm.la \ ../iodbcinst/libiodbcinst.la \ ../iodbc/libiodbc.la \ @GTK_LIBS@ iodbcadm_gtk_LDFLAGS = # -static noinst_HEADERS = \ gui.h \ iodbcadm.h EXTRA_DIST = \ $(srcdir)/iodbcadm.exp \ $(srcdir)/macosx/administrator.c \ $(srcdir)/macosx/confirm.c \ $(srcdir)/macosx/driverchooser.c \ $(srcdir)/macosx/driversetup.c \ $(srcdir)/macosx/dsnchooser.c \ $(srcdir)/macosx/errorbox.c \ $(srcdir)/macosx/fdriverchoose.c \ $(srcdir)/macosx/filedsn.c \ $(srcdir)/macosx/gensetup.c \ $(srcdir)/macosx/getfpn.c \ $(srcdir)/macosx/getfpn.h \ $(srcdir)/macosx/gui.h \ $(srcdir)/macosx/iodbcadm.r \ $(srcdir)/macosx/keyval.c \ $(srcdir)/macosx/main.c \ $(srcdir)/macosx/messagebox.c \ $(srcdir)/macosx/odbcdriverf.c \ $(srcdir)/macosx/translatorchooser.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 iodbcadm/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu iodbcadm/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libiodbcadm.la: $(libiodbcadm_la_OBJECTS) $(libiodbcadm_la_DEPENDENCIES) $(libiodbcadm_la_LINK) $(am_libiodbcadm_la_rpath) $(libiodbcadm_la_OBJECTS) $(libiodbcadm_la_LIBADD) $(LIBS) 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 iodbcadm-gtk$(EXEEXT): $(iodbcadm_gtk_OBJECTS) $(iodbcadm_gtk_DEPENDENCIES) @rm -f iodbcadm-gtk$(EXEEXT) $(iodbcadm_gtk_LINK) $(iodbcadm_gtk_OBJECTS) $(iodbcadm_gtk_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Info.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drvconn.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@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 # 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) @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 check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) install-binPROGRAMS: install-libLTLIBRARIES installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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-binPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libLTLIBRARIES clean-libtool ctags \ ctags-recursive 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-libLTLIBRARIES \ install-man 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-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-libLTLIBRARIES # 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: libiodbc-3.52.9/iodbcadm/drvconn.c0000644000076400007640000004730412323210535013675 00000000000000/* * drvconn.c * * $Id$ * * The data_sources dialog for SQLDriverConnect * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "gui.h" #include #include #include #ifndef WIN32 #include typedef SQLRETURN SQL_API (*pDriverConnFunc) (HWND hwnd, LPSTR szInOutConnStr, DWORD cbInOutConnStr, int FAR * sqlStat, SQLUSMALLINT fDriverCompletion, UWORD *config); typedef SQLRETURN SQL_API (*pDriverConnWFunc) (HWND hwnd, LPWSTR szInOutConnStr, DWORD cbInOutConnStr, int FAR * sqlStat, SQLUSMALLINT fDriverCompletion, UWORD *config); #define CALL_DRVCONN_DIALBOXW(path, a) \ { \ char *_path_u8 = (a == 'A') ? NULL : dm_SQL_W2A ((wchar_t*)path, SQL_NTS); \ if ((handle = DLL_OPEN((a == 'A') ? (char*)path : _path_u8)) != NULL) \ { \ if ((pDrvConnW = (pDriverConnWFunc)DLL_PROC(handle, "_iodbcdm_drvconn_dialboxw")) != NULL) \ { \ SQLSetConfigMode (*config); \ if (pDrvConnW (hwnd, szInOutConnStr, cbInOutConnStr, sqlStat, fDriverCompletion, config) == SQL_SUCCESS) \ { \ MEM_FREE (_path_u8); \ DLL_CLOSE(handle); \ retcode = SQL_SUCCESS; \ goto quit; \ } \ else \ { \ MEM_FREE (_path_u8); \ DLL_CLOSE(handle); \ retcode = SQL_NO_DATA_FOUND; \ goto quit; \ } \ } \ else \ { \ if ((pDrvConn = (pDriverConnFunc)DLL_PROC(handle, "_iodbcdm_drvconn_dialbox")) != NULL) \ { \ char *_szinoutconstr_u8 = malloc (cbInOutConnStr + 1); \ wchar_t *_prvw; char *_prvu8; \ for (_prvw = szInOutConnStr, _prvu8 = _szinoutconstr_u8 ; \ *_prvw != L'\0' ; _prvw += WCSLEN (_prvw) + 1, \ _prvu8 += STRLEN (_prvu8) + 1) \ dm_StrCopyOut2_W2A (_prvw, _prvu8, cbInOutConnStr, NULL); \ *_prvu8 = '\0'; \ SQLSetConfigMode (*config); \ if (pDrvConn (hwnd, _szinoutconstr_u8, cbInOutConnStr, sqlStat, fDriverCompletion, config) == SQL_SUCCESS) \ { \ dm_StrCopyOut2_A2W (_szinoutconstr_u8, szInOutConnStr, cbInOutConnStr, NULL); \ MEM_FREE (_path_u8); \ MEM_FREE (_szinoutconstr_u8); \ DLL_CLOSE(handle); \ retcode = SQL_SUCCESS; \ goto quit; \ } \ else \ { \ MEM_FREE (_path_u8); \ MEM_FREE (_szinoutconstr_u8); \ DLL_CLOSE(handle); \ retcode = SQL_NO_DATA_FOUND; \ goto quit; \ } \ } \ } \ DLL_CLOSE(handle); \ } \ MEM_FREE (_path_u8); \ } #endif SQLRETURN SQL_API iodbcdm_drvconn_dialbox ( HWND hwnd, LPSTR szInOutConnStr, DWORD cbInOutConnStr, int * sqlStat, SQLUSMALLINT fDriverCompletion, UWORD *config) { RETCODE retcode = SQL_ERROR; wchar_t *_string_w = NULL; if (cbInOutConnStr > 0) { if ((_string_w = malloc (cbInOutConnStr * sizeof(wchar_t) + 1)) == NULL) goto done; } dm_StrCopyOut2_A2W (szInOutConnStr, _string_w, cbInOutConnStr * sizeof(wchar_t), NULL); retcode = iodbcdm_drvconn_dialboxw (hwnd, _string_w, cbInOutConnStr, sqlStat, fDriverCompletion, config); if (retcode == SQL_SUCCESS) { dm_StrCopyOut2_W2A (_string_w, szInOutConnStr, cbInOutConnStr - 1, NULL); } done: MEM_FREE (_string_w); return retcode; } SQLRETURN SQL_API iodbcdm_drvconn_dialboxw ( HWND hwnd, LPWSTR szInOutConnStr, DWORD cbInOutConnStr, int * sqlStat, SQLUSMALLINT fDriverCompletion, UWORD *config) { RETCODE retcode = SQL_ERROR; TDSNCHOOSER choose_t; wchar_t *string = NULL, *prov, *prov1, *szDSN = NULL, *szDriver = NULL; wchar_t *szFILEDSN = NULL, *szSAVEFILE = NULL; wchar_t tokenstr[4096]; wchar_t drvbuf[4096] = { L'\0'}; char *_szdriver_u8 = NULL; wchar_t *_szdriver_w = NULL; HDLL handle; pDriverConnFunc pDrvConn; pDriverConnWFunc pDrvConnW; int i, skip; #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) CFStringRef libname = NULL; CFBundleRef bundle = NULL; CFURLRef liburl = NULL; char name[1024] = { '\0' }; #endif /* Check input parameters */ if (!szInOutConnStr || cbInOutConnStr < 1) goto quit; /* Transform the string connection to list of key pairs */ string = (wchar_t*) malloc((cbInOutConnStr + 1) * sizeof(wchar_t)); if (string == NULL) { if (sqlStat) #if (ODBCVER>=0x3000) *sqlStat = en_HY092; #else *sqlStat = en_S1000; #endif retcode = SQL_ERROR; goto quit; } /* Conversion to the list of key pairs */ wcsncpy (string, szInOutConnStr, cbInOutConnStr); string[WCSLEN (string) + 1] = L'\0'; skip = 0; for (i = WCSLEN (string) - 1 ; i >= 0 ; i--) { if (string[i] == L'}') skip = 1; else if (string[i] == L'{') skip = 0; else if (skip == 0 && string[i] == L';') string[i] = L'\0'; } /* Look for the DSN and DRIVER keyword */ for (prov = string ; *prov != L'\0' ; prov += WCSLEN (prov) + 1) { if (!wcsncasecmp (prov, L"DSN=", WCSLEN (L"DSN="))) { szDSN = prov + WCSLEN (L"DSN="); continue; } if (!wcsncasecmp (prov, L"DRIVER=", WCSLEN (L"DRIVER="))) { szDriver = prov + WCSLEN (L"DRIVER="); continue; } if (!wcsncasecmp (prov, L"FILEDSN=", WCSLEN (L"FILEDSN="))) { szFILEDSN = prov + WCSLEN (L"FILEDSN="); continue; } if (!wcsncasecmp (prov, L"SAVEFILE=", WCSLEN (L"SAVEFILE="))) { szSAVEFILE = prov + WCSLEN (L"SAVEFILE="); continue; } } if (!szDSN && !szDriver) { /* Display the DSN chooser dialog box */ create_dsnchooser (hwnd, &choose_t); /* Check output parameters */ if (choose_t.dsn || choose_t.fdsn) { #if (ODBCVER>=0x3000) int errSqlStat = en_HY092; #else int errSqlStat = en_HY092; #endif /* Change the config mode */ switch (choose_t.type_dsn) { case USER_DSN: *config = ODBC_USER_DSN; break; case SYSTEM_DSN: *config = ODBC_SYSTEM_DSN; break; }; if (choose_t.dsn && (choose_t.type_dsn == USER_DSN || choose_t.type_dsn == SYSTEM_DSN)) { /* Try to copy the DSN */ if (cbInOutConnStr > WCSLEN (choose_t.dsn) + WCSLEN (L"DSN=") + 2) { WCSCPY (string, L"DSN="); WCSCAT (string, choose_t.dsn); string[WCSLEN (string) + 1] = L'\0'; szDSN = string + WCSLEN (L"DSN="); retcode = SQL_SUCCESS; } else { if (sqlStat) *sqlStat = errSqlStat; } } else if (choose_t.fdsn && choose_t.type_dsn == FILE_DSN) { DWORD sz, sz_entry; wchar_t entries[4096]; WORD read_len; wchar_t *p, *p_next; sz = WCSLEN(choose_t.fdsn) + WCSLEN(L"FILEDSN=") + 2; if (cbInOutConnStr > sz) { WCSCPY (string, L"FILEDSN="); WCSCAT (string, choose_t.fdsn); WCSCAT (string, L";"); retcode = SQL_SUCCESS; } /* Get list of entries in .dsn file */ if (retcode == SQL_SUCCESS && SQLReadFileDSNW (choose_t.fdsn, L"ODBC", NULL, entries, sizeof (entries)/sizeof(wchar_t), &read_len)) { /* add params from the .dsn file */ for (p = entries; *p != '\0'; p = p_next) { wchar_t value[1024]; /* get next entry */ p_next = wcschr (p, L';'); if (p_next) *p_next++ = L'\0'; if (!SQLReadFileDSNW (choose_t.fdsn, L"ODBC", p, value, sizeof(value)/sizeof(wchar_t), &read_len)) { retcode = SQL_ERROR; break; } if (!wcsncasecmp (p, L"DRIVER", WCSLEN(L"DRIVER"))) { szDriver = _szdriver_w = (wchar_t*) malloc((WCSLEN(value) + 1) * sizeof(wchar_t)); if (szDriver) WCSCPY(szDriver, value); } sz_entry = WCSLEN(p) + 1 + WCSLEN(value) + 2; if (cbInOutConnStr > sz + sz_entry) { WCSCAT (string, p); WCSCAT (string, L"="); WCSCAT (string, value); WCSCAT (string, L";"); sz += sz_entry; } else { retcode = SQL_ERROR; } } } if (retcode == SQL_SUCCESS) { string[WCSLEN (string) + 1] = L'\0'; for (i = WCSLEN (string) - 1 ; i >= 0 ; i--) if (string[i] == L';') string[i] = L'\0'; } else if (sqlStat) *sqlStat = errSqlStat; } else { if (sqlStat) *sqlStat = errSqlStat; } } else retcode = SQL_NO_DATA_FOUND; if (choose_t.dsn) free (choose_t.dsn); if (choose_t.fdsn) free (choose_t.fdsn); if (retcode != SQL_SUCCESS) goto quit; } /* Constitute the string connection */ for (prov = szInOutConnStr, prov1 = string, i = 0 ; *prov1 != L'\0' ; prov1 += WCSLEN (prov) + 1, i += WCSLEN (prov) + 1, prov += WCSLEN (prov) + 1) WCSCPY (prov, prov1); *prov = L'\0'; /* Check if the driver is provided */ if (szDriver == NULL) { SQLSetConfigMode (ODBC_BOTH_DSN); SQLGetPrivateProfileStringW (L"ODBC Data Sources", szDSN && szDSN[0] != L'\0' ? szDSN : L"default", L"", tokenstr, sizeof (tokenstr)/sizeof(wchar_t), NULL); szDriver = tokenstr; } /* Call the iodbcdm_drvconn_dialbox */ _szdriver_u8 = dm_SQL_W2A (szDriver, SQL_NTS); SQLSetConfigMode (ODBC_USER_DSN); if (!access (_szdriver_u8, X_OK)) { CALL_DRVCONN_DIALBOXW (_szdriver_u8, 'A'); } if (SQLGetPrivateProfileStringW (szDriver, L"Driver", L"", drvbuf, sizeof (drvbuf) / sizeof(wchar_t), L"odbcinst.ini")) { CALL_DRVCONN_DIALBOXW (drvbuf, 'W'); } if (SQLGetPrivateProfileStringW (szDriver, L"Setup", L"", drvbuf, sizeof (drvbuf) / sizeof(wchar_t), L"odbcinst.ini")) { CALL_DRVCONN_DIALBOXW (drvbuf, 'W'); } if (SQLGetPrivateProfileStringW (L"Default", L"Driver", L"", drvbuf, sizeof (drvbuf) / sizeof(wchar_t), L"odbcinst.ini")) { CALL_DRVCONN_DIALBOXW (drvbuf, 'W'); } if (SQLGetPrivateProfileStringW (L"Default", L"Setup", L"", drvbuf, sizeof (drvbuf) / sizeof(wchar_t), L"odbcinst.ini")) { CALL_DRVCONN_DIALBOXW (drvbuf, 'W'); } SQLSetConfigMode (ODBC_SYSTEM_DSN); if (!access (_szdriver_u8, X_OK)) { CALL_DRVCONN_DIALBOXW (_szdriver_u8, 'A'); } if (SQLGetPrivateProfileStringW (szDriver, L"Driver", L"", drvbuf, sizeof (drvbuf) / sizeof(wchar_t), L"odbcinst.ini")) { CALL_DRVCONN_DIALBOXW (drvbuf, 'W'); } if (SQLGetPrivateProfileStringW (szDriver, L"Setup", L"", drvbuf, sizeof (drvbuf) / sizeof(wchar_t), L"odbcinst.ini")) { CALL_DRVCONN_DIALBOXW (drvbuf, 'W'); } if (SQLGetPrivateProfileStringW (L"Default", L"Driver", L"", drvbuf, sizeof (drvbuf) / sizeof(wchar_t), L"odbcinst.ini")) { CALL_DRVCONN_DIALBOXW (drvbuf, 'W'); } if (SQLGetPrivateProfileStringW (L"Default", L"Setup", L"", drvbuf, sizeof (drvbuf) / sizeof(wchar_t), L"odbcinst.ini")) { CALL_DRVCONN_DIALBOXW (drvbuf, 'W'); } /* The last ressort, a proxy driver */ #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) bundle = CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.core")); if (!bundle) bundle = CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.inst")); if (bundle) { /* Search for the drvproxy library */ liburl = CFBundleCopyResourceURL (bundle, CFSTR ("iODBCdrvproxy.bundle"), NULL, NULL); if (liburl && (libname = CFURLCopyFileSystemPath (liburl, kCFURLPOSIXPathStyle))) { CFStringGetCString (libname, name, sizeof (name), kCFStringEncodingASCII); STRCAT (name, "/Contents/MacOS/iODBCdrvproxy"); CALL_DRVCONN_DIALBOXW (name, 'A'); } } #else CALL_DRVCONN_DIALBOXW ("libdrvproxy.so.2", 'A'); #endif /* __APPLE__ */ if (sqlStat) *sqlStat = en_IM003; quit: #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) if (liburl) CFRelease (liburl); if (libname) CFRelease (libname); #endif MEM_FREE (string); MEM_FREE (_szdriver_u8); MEM_FREE (_szdriver_w); return retcode; } SQLRETURN SQL_API _iodbcdm_drvchoose_dialbox ( HWND hwnd, LPSTR szInOutConnStr, DWORD cbInOutConnStr, int * sqlStat) { RETCODE retcode = SQL_ERROR; wchar_t *_string_w = NULL; WORD len; if (cbInOutConnStr > 0) { if ((_string_w = malloc (cbInOutConnStr * sizeof(wchar_t) + 1)) == NULL) goto done; } retcode = _iodbcdm_drvchoose_dialboxw (hwnd, _string_w, cbInOutConnStr * sizeof(wchar_t), sqlStat); if (retcode == SQL_SUCCESS) { dm_StrCopyOut2_W2A (_string_w, szInOutConnStr, cbInOutConnStr - 1, &len); } done: MEM_FREE (_string_w); return retcode; } SQLRETURN SQL_API _iodbcdm_drvchoose_dialboxw (HWND hwnd, LPWSTR szInOutConnStr, DWORD cbInOutConnStr, int FAR * sqlStat) { RETCODE retcode = SQL_ERROR; TDRIVERCHOOSER choose_t; /* Check input parameters */ if (!hwnd || !szInOutConnStr || cbInOutConnStr < 1) goto quit; create_driverchooser (hwnd, &choose_t); /* Check output parameters */ if (choose_t.driver) { if (cbInOutConnStr > WCSLEN (choose_t.driver) + WCSLEN (L"DRIVER=")) { WCSCPY (szInOutConnStr, L"DRIVER="); WCSCAT (szInOutConnStr, choose_t.driver); retcode = SQL_SUCCESS; } else { if (sqlStat) #if (ODBCVER>=0x3000) *sqlStat = en_HY092; #else *sqlStat = en_S1000; #endif retcode = SQL_ERROR; } } else retcode = SQL_NO_DATA; if (choose_t.driver) free (choose_t.driver); quit: return retcode; } SQLRETURN SQL_API _iodbcdm_admin_dialbox (HWND hwnd) { RETCODE retcode = SQL_ERROR; /* Check input parameters */ if (!hwnd) goto quit; create_administrator (hwnd); retcode = SQL_SUCCESS; quit: return retcode; } SQLRETURN SQL_API _iodbcdm_trschoose_dialbox ( HWND hwnd, LPSTR szInOutConnStr, DWORD cbInOutConnStr, int FAR * sqlStat) { RETCODE retcode = SQL_ERROR; wchar_t *_string_w = NULL; WORD len; if (cbInOutConnStr > 0) { if ((_string_w = malloc (cbInOutConnStr * sizeof(wchar_t) + 1)) == NULL) goto done; } retcode = _iodbcdm_trschoose_dialboxw (hwnd, _string_w, cbInOutConnStr * sizeof(wchar_t), sqlStat); if (retcode == SQL_SUCCESS) { dm_StrCopyOut2_W2A (_string_w, szInOutConnStr, cbInOutConnStr - 1, &len); } done: MEM_FREE (_string_w); return retcode; } SQLRETURN SQL_API _iodbcdm_trschoose_dialboxw ( HWND hwnd, LPWSTR szInOutConnStr, DWORD cbInOutConnStr, int * sqlStat) { RETCODE retcode = SQL_ERROR; TTRANSLATORCHOOSER choose_t; /* Check input parameters */ if (!hwnd || !szInOutConnStr || cbInOutConnStr < 1) goto quit; create_translatorchooser (hwnd, &choose_t); /* Check output parameters */ if (choose_t.translator) { if (cbInOutConnStr > WCSLEN (choose_t.translator) + WCSLEN (L"TranslationName=")) { WCSCPY (szInOutConnStr, L"TranslationName"); WCSCAT (szInOutConnStr, choose_t.translator); retcode = SQL_SUCCESS; } else { if (sqlStat) #if (ODBCVER>=0x3000) *sqlStat = en_HY092; #else *sqlStat = en_S1000; #endif retcode = SQL_ERROR; } } else retcode = SQL_NO_DATA; if (choose_t.translator) free (choose_t.translator); quit: return retcode; } libiodbc-3.52.9/iodbcadm/gui.h0000644000076400007640000001221712323210535013010 00000000000000/* * gui.h * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include "iodbcadm.h" #if defined(__BEOS__) # include "be/gui.h" #elif defined(_MAC) # include "mac/gui.h" #elif defined(__GTK__) # include # include "gtk/gui.h" #elif defined(_MACX) # include "macosx/gui.h" #else # error GUI for this platform not supported ... #endif #ifndef _GUI_H #define _GUI_H BOOL create_confirm (HWND hwnd, LPCSTR dsn, LPCSTR text); BOOL create_confirmw (HWND hwnd, LPCWSTR dsn, LPCWSTR text); #if 0 void create_login (HWND hwnd, LPCSTR username, LPCSTR password, LPCSTR dsn, TLOGIN * log_t); #endif void create_dsnchooser (HWND hwnd, TDSNCHOOSER * choose_t); void create_driverchooser (HWND hwnd, TDRIVERCHOOSER * choose_t); void create_fdriverchooser (HWND hwnd, TFDRIVERCHOOSER * choose_t); void create_translatorchooser (HWND hwnd, TTRANSLATORCHOOSER * choose_t); void create_administrator (HWND hwnd); void create_error (HWND hwnd, LPCSTR dsn, LPCSTR text, LPCSTR errmsg); void create_errorw (HWND hwnd, LPCWSTR dsn, LPCWSTR text, LPCWSTR errmsg); void create_message (HWND hwnd, LPCSTR dsn, LPCSTR text); void create_messagew (HWND hwnd, LPCWSTR dsn, LPCWSTR text); LPSTR create_driversetup (HWND hwnd, LPCSTR driver, LPCSTR attrs, BOOL add, BOOL user); LPSTR create_filedsn (HWND hwnd); BOOL create_connectionpool (HWND hwnd, TCONNECTIONPOOLING *choose_t); typedef SQLRETURN SQL_API (*pSQLGetInfoFunc) (SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue); typedef SQLRETURN SQL_API (*pSQLAllocHandle) (SQLSMALLINT hdl_type, SQLHANDLE hdl_in, SQLHANDLE * hdl_out); typedef SQLRETURN SQL_API (*pSQLAllocEnv) (SQLHENV * henv); typedef SQLRETURN SQL_API (*pSQLAllocConnect) (SQLHENV henv, SQLHDBC * hdbc); typedef SQLRETURN SQL_API (*pSQLFreeHandle) (SQLSMALLINT hdl_type, SQLHANDLE hdl_in); typedef SQLRETURN SQL_API (*pSQLFreeEnv) (SQLHENV henv); typedef SQLRETURN SQL_API (*pSQLFreeConnect) (SQLHDBC hdbc); #endif libiodbc-3.52.9/iodbcadm/iodbcadm.h0000644000076400007640000001243012323210535013763 00000000000000/* * iodbcadm.h * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #ifndef _IODBCADM_H #define _IODBCADM_H #define USER_DSN 0 #define SYSTEM_DSN 1 #define FILE_DSN 2 SQLRETURN SQL_API iodbcdm_drvconn_dialbox (HWND hwnd, LPSTR szInOutConnStr, DWORD cbInOutConnStr, int *sqlStat, SQLUSMALLINT fDriverCompletion, UWORD * config); SQLRETURN SQL_API iodbcdm_drvconn_dialboxw (HWND hwnd, LPWSTR szInOutConnStr, DWORD cbInOutConnStr, int *sqlStat, SQLUSMALLINT fDriverCompletion, UWORD * config); SQLRETURN SQL_API _iodbcdm_drvchoose_dialbox (HWND hwnd, LPSTR szInOutDrvStr, DWORD cbInOutDrvStr, int *sqlStat); SQLRETURN SQL_API _iodbcdm_drvchoose_dialboxw (HWND hwnd, LPWSTR szInOutConnStr, DWORD cbInOutConnStr, int * sqlStat); SQLRETURN SQL_API _iodbcdm_trschoose_dialbox (HWND hwnd, LPSTR szInOutDrvStr, DWORD cbInOutDrvStr, int *sqlStat); SQLRETURN SQL_API _iodbcdm_trschoose_dialboxw (HWND hwnd, LPWSTR szInOutDrvStr, DWORD cbInOutDrvStr, int * sqlStat); void SQL_API _iodbcdm_errorbox (HWND hwnd, LPCSTR szDSN, LPCSTR szText); void SQL_API _iodbcdm_errorboxw (HWND hwnd, LPCWSTR szDSN, LPCWSTR szText); void SQL_API _iodbcdm_messagebox (HWND hwnd, LPCSTR szDSN, LPCSTR szText); void SQL_API _iodbcdm_messageboxw (HWND hwnd, LPCWSTR szDSN, LPCWSTR szText); BOOL SQL_API _iodbcdm_confirmbox (HWND hwnd, LPCSTR szDSN, LPCSTR szText); BOOL SQL_API _iodbcdm_confirmboxw (HWND hwnd, LPCWSTR szDSN, LPCWSTR szText); void _iodbcdm_nativeerrorbox (HWND hwnd, HENV henv, HDBC hdbc, HSTMT hstmt); SQLRETURN SQL_API _iodbcdm_admin_dialbox (HWND hwnd); typedef SQLRETURN SQL_API (*pAdminBoxFunc) (HWND hwnd); typedef SQLRETURN SQL_API (*pTrsChooseFunc) (HWND hwnd, LPSTR szInOutDrvStr, DWORD cbInOutDrvStr, int *sqlStat); typedef SQLRETURN SQL_API (*pDrvConnFunc) (HWND hwnd, LPSTR szInOutConnStr, DWORD cbInOutConnStr, int *sqlStat, SQLUSMALLINT fDriverCompletion, UWORD * config); typedef SQLRETURN SQL_API (*pDrvConnWFunc) (HWND hwnd, LPWSTR szInOutConnStr, DWORD cbInOutConnStr, int * sqlStat, SQLUSMALLINT fDriverCompletion, UWORD *config); #endif libiodbc-3.52.9/iodbcadm/Makefile.am0000644000076400007640000001133312323210535014105 00000000000000# # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # if GUI SUBDIRS = gtk bin_PROGRAMS = iodbcadm-gtk lib_LTLIBRARIES = libiodbcadm.la endif if GTK AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/iodbc \ -I$(top_srcdir)/iodbcinst \ @GTK_CFLAGS@ -D__GTK__ else AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/iodbc \ -I$(top_srcdir)/iodbcinst endif libiodbcadm_la_LDFLAGS = \ -version-info @lib_version@ \ -export-symbols $(srcdir)/iodbcadm.exp if GTK libiodbcadm_la_LIBADD = \ gtk/libiodbcadm-gtk.la \ $(LIBADD_DL) \ @GTK_LIBS@ \ ../iodbcinst/libiodbc_common.la \ ../iodbcinst/libiodbcinst.la \ ../iodbc/libiodbc.la else libiodbcadm_la_LIBADD = \ $(LIBADD_DL) \ ../iodbcinst/libiodbc_common.la \ ../iodbcinst/libiodbcinst.la \ ../iodbc/libiodbc.la endif libiodbcadm_la_SOURCES = \ Info.c \ drvconn.c \ error.c iodbcadm_gtk_SOURCES = iodbcadm_gtk_LDADD = \ gtk/main.lo \ libiodbcadm.la \ ../iodbcinst/libiodbcinst.la \ ../iodbc/libiodbc.la \ @GTK_LIBS@ iodbcadm_gtk_LDFLAGS = # -static noinst_HEADERS = \ gui.h \ iodbcadm.h EXTRA_DIST = \ $(srcdir)/iodbcadm.exp \ $(srcdir)/macosx/administrator.c \ $(srcdir)/macosx/confirm.c \ $(srcdir)/macosx/driverchooser.c \ $(srcdir)/macosx/driversetup.c \ $(srcdir)/macosx/dsnchooser.c \ $(srcdir)/macosx/errorbox.c \ $(srcdir)/macosx/fdriverchoose.c \ $(srcdir)/macosx/filedsn.c \ $(srcdir)/macosx/gensetup.c \ $(srcdir)/macosx/getfpn.c \ $(srcdir)/macosx/getfpn.h \ $(srcdir)/macosx/gui.h \ $(srcdir)/macosx/iodbcadm.r \ $(srcdir)/macosx/keyval.c \ $(srcdir)/macosx/main.c \ $(srcdir)/macosx/messagebox.c \ $(srcdir)/macosx/odbcdriverf.c \ $(srcdir)/macosx/translatorchooser.c libiodbc-3.52.9/iodbcadm/error.c0000644000076400007640000001221412323210535013345 00000000000000/* * error.c * * $Id$ * * The data_sources dialog for SQLDriverConnect and a login box procedures * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "gui.h" void SQL_API _iodbcdm_nativeerrorbox ( HWND hwnd, HENV henv, HDBC hdbc, HSTMT hstmt) { SQLCHAR buf[250]; SQLCHAR sqlstate[15]; /* * Get statement errors */ if (SQLError (henv, hdbc, hstmt, sqlstate, NULL, buf, sizeof (buf), NULL) == SQL_SUCCESS) create_error (hwnd, "Native ODBC Error", (LPCSTR) sqlstate, (LPCSTR) buf); /* * Get connection errors */ if (SQLError (henv, hdbc, SQL_NULL_HSTMT, sqlstate, NULL, buf, sizeof (buf), NULL) == SQL_SUCCESS) create_error (hwnd, "Native ODBC Error", (LPCSTR) sqlstate, (LPCSTR) buf); /* * Get environmental errors */ if (SQLError (henv, SQL_NULL_HDBC, SQL_NULL_HSTMT, sqlstate, NULL, buf, sizeof (buf), NULL) == SQL_SUCCESS) create_error (hwnd, "Native ODBC Error", (LPCSTR) sqlstate, (LPCSTR) buf); } void SQL_API _iodbcdm_errorbox ( HWND hwnd, LPCSTR szDSN, LPCSTR szText) { char msg[4096]; if (SQLInstallerError (1, NULL, msg, sizeof (msg), NULL) == SQL_SUCCESS) create_error (hwnd, szDSN, szText, msg); } void SQL_API _iodbcdm_errorboxw ( HWND hwnd, LPCWSTR szDSN, LPCWSTR szText) { wchar_t msg[4096]; if (SQLInstallerErrorW (1, NULL, msg, sizeof (msg) / sizeof(wchar_t), NULL) == SQL_SUCCESS) create_errorw (hwnd, szDSN, szText, msg); } void SQL_API _iodbcdm_messagebox ( HWND hwnd, LPCSTR szDSN, LPCSTR szText) { create_message (hwnd, szDSN, szText); } void SQL_API _iodbcdm_messageboxw ( HWND hwnd, LPCWSTR szDSN, LPCWSTR szText) { create_messagew (hwnd, szDSN, szText); } BOOL SQL_API _iodbcdm_confirmbox ( HWND hwnd, LPCSTR szDSN, LPCSTR szText) { return create_confirm (hwnd, (SQLPOINTER) szDSN, (SQLPOINTER) szText); } BOOL SQL_API _iodbcdm_confirmboxw ( HWND hwnd, LPCWSTR szDSN, LPCWSTR szText) { return create_confirmw (hwnd, (SQLPOINTER)szDSN, (SQLPOINTER)szText); } libiodbc-3.52.9/iodbcadm/iodbcadm.exp0000644000076400007640000000040412323204667014337 00000000000000iodbcdm_drvconn_dialbox iodbcdm_drvconn_dialboxw _iodbcdm_drvchoose_dialbox _iodbcdm_trschoose_dialbox _iodbcdm_nativeerrorbox _iodbcdm_errorbox _iodbcdm_errorboxw _iodbcdm_messagebox _iodbcdm_messageboxw _iodbcdm_admin_dialbox iodbcadm_version create_confirm libiodbc-3.52.9/iodbcadm/macosx/0000755000076400007640000000000012323210721013417 500000000000000libiodbc-3.52.9/iodbcadm/macosx/confirm.c0000644000076400007640000001551712323210535015154 00000000000000/* * confirm.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #define CONFYES_CNTL 3000 #define CONFNO_CNTL 3001 #define CONFTEXT_CNTL 3002 wchar_t* convert_CFString_to_wchar(const CFStringRef str); CFStringRef convert_wchar_to_CFString(wchar_t *str); pascal OSStatus confirmadm_yes_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TCONFIRM *confirm_t = (TCONFIRM *) inUserData; if (confirm_t) { DisposeWindow (confirm_t->mainwnd); confirm_t->mainwnd = NULL; confirm_t->yes_no = true; } return noErr; } pascal OSStatus confirmadm_no_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TCONFIRM *confirm_t = (TCONFIRM *) inUserData; if (confirm_t) { DisposeWindow (confirm_t->mainwnd); confirm_t->mainwnd = NULL; confirm_t->yes_no = false; } return noErr; } BOOL create_confirm_Internal (HWND hwnd, SQLPOINTER dsn, SQLPOINTER text, SQLCHAR waMode) { EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; RgnHandle cursorRgn = NULL; ControlID controlID; ControlRef control; WindowRef wconfirm; TCONFIRM confirm_t; EventRecord event; IBNibRef nibRef; CFStringRef msg; OSStatus err; /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.adm")), CFSTR ("confirmation"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ CreateWindowFromNib (nibRef, CFSTR ("Dialog"), &wconfirm); DisposeNibReference (nibRef); /* Set the title with the DSN name */ if (dsn) { if (waMode == 'A') msg = CFStringCreateWithBytes (NULL, (unsigned char*)dsn, STRLEN(dsn), kCFStringEncodingUTF8, false); else msg = convert_wchar_to_CFString((wchar_t*)dsn); SetWindowTitleWithCFString (wconfirm, msg); CFRelease(msg); } /* Install handlers for the finish button, the cancel */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, CONFYES_CNTL, wconfirm, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (confirmadm_yes_clicked), 1, &controlSpec, &confirm_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, CONFNO_CNTL, wconfirm, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (confirmadm_no_clicked), 1, &controlSpec, &confirm_t, NULL); /* Change the static field with the message */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, CONFTEXT_CNTL, wconfirm, control); if (waMode == 'A') SetControlData (control, 0, kControlEditTextTextTag, STRLEN (text), text); else { msg = convert_wchar_to_CFString((wchar_t*)text); SetControlData (control, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &msg); CFRelease(msg); } DrawOneControl (control); confirm_t.yes_no = FALSE; confirm_t.mainwnd = wconfirm; /* Show the window and run the loop */ ShowWindow (wconfirm); /* The main loop */ while (confirm_t.mainwnd) WaitNextEvent (everyEvent, &event, 60L, cursorRgn); } else goto error; return confirm_t.yes_no; error: fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); return confirm_t.yes_no; } BOOL create_confirm (HWND hwnd, LPCSTR dsn, LPCSTR text) { return create_confirm_Internal (hwnd, (SQLPOINTER)dsn, (SQLPOINTER)text, 'A'); } BOOL create_confirmw (HWND hwnd, LPCWSTR dsn, LPCWSTR text) { return create_confirm_Internal (hwnd, (SQLPOINTER)dsn, (SQLPOINTER)text, 'W'); } libiodbc-3.52.9/iodbcadm/macosx/getfpn.h0000644000076400007640000000702712323210535015004 00000000000000/* * getfpn.h * * $Id$ * * Functions to get the full path name of a file * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifdef __APPLE__ # include #else # include # include #endif #include #include #ifndef _GETFPN_H #define _GETFPN_H char *get_full_pathname (long dirID, short volID); #ifndef strdup char *strdup (const char *src); #endif #endif libiodbc-3.52.9/iodbcadm/macosx/keyval.c0000644000076400007640000004671312323210535015014 00000000000000/* * keyval.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #define GSVERIFYCONN_CNTL 4008 #define GSLIST_CNTL 4006 #define GSKEYWORD_CNTL 4004 #define GSVALUE_CNTL 4005 #define GSADD_CNTL 4002 #define GSUPDATE_CNTL 4003 #define GSOK_CNTL 4000 #define GSCANCEL_CNTL 4001 UInt32 KEYVAL_nrows; CFStringRef KEYVAL_array[2][256]; TKEYVAL *KEYVAL = NULL; static pascal OSStatus keyval_getset_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean changeValue) { OSStatus err = noErr; if (!changeValue) switch (property) { case GSKEYWORD_ID: SetDataBrowserItemDataText (itemData, KEYVAL_array[0][itemID - DBITEM_ID - 1]); break; case GSVALUE_ID: SetDataBrowserItemDataText (itemData, KEYVAL_array[1][itemID - DBITEM_ID - 1]); break; case kDataBrowserItemIsActiveProperty: if (itemID > DBITEM_ID && itemID <= DBITEM_ID + KEYVAL_nrows) err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsEditableProperty: err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsContainerProperty: err = SetDataBrowserItemDataBooleanValue (itemData, itemID == DBITEM_ID); break; case kDataBrowserContainerAliasIDProperty: break; case kDataBrowserItemParentContainerProperty: break; default: err = errDataBrowserPropertyNotSupported; break; } else err = errDataBrowserPropertyNotSupported; return err; } static void keyval_notification_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message) { static Boolean ignore_next = false, selected = false; switch (message) { case kDataBrowserItemSelected: if (KEYVAL) { ActivateControl (KEYVAL->bupdate); DrawOneControl (KEYVAL->bupdate); SetControlData (KEYVAL->key_entry, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &KEYVAL_array[0][itemID - DBITEM_ID - 1]); DrawOneControl (KEYVAL->key_entry); SetControlData (KEYVAL->value_entry, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &KEYVAL_array[1][itemID - DBITEM_ID - 1]); DrawOneControl (KEYVAL->value_entry); } if (selected) ignore_next = true; else selected = true; break; case kDataBrowserItemDeselected: if (!ignore_next && KEYVAL) { DeactivateControl (KEYVAL->bupdate); DrawOneControl (KEYVAL->bupdate); SetControlData (KEYVAL->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (KEYVAL->key_entry); SetControlData (KEYVAL->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (KEYVAL->value_entry); selected = false; } else { ignore_next = false; selected = true; } break; }; } static void addkeywords_to_list (ControlRef widget, LPCSTR attrs, TKEYVAL * keyval_t) { DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; char *curr, *cour; int i; if (!widget) return; GetThemeDrawingState (&outState); /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (keyval_notification_item); /* On Mac OS X 10.0.x : this is clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (keyval_getset_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, DBITEM_ID); /* Make the clean up */ for (i = 0; i < KEYVAL_nrows; i++) { CFRelease (KEYVAL_array[0][i]); KEYVAL_array[0][i] = NULL; CFRelease (KEYVAL_array[1][i]); KEYVAL_array[1][i] = NULL; } /* Global Initialization */ KEYVAL_nrows = 0; item = DBITEM_ID + 1; for (curr = (LPSTR) attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "DSN=", STRLEN ("DSN=")) || !strncasecmp (curr, "Driver=", STRLEN ("Driver=")) || !strncasecmp (curr, "Description=", STRLEN ("Description="))) continue; if ((cour = strchr ((char*)curr, '='))) { *cour = '\0'; KEYVAL_array[0][KEYVAL_nrows] = CFStringCreateWithCString (NULL, curr, kCFStringEncodingUTF8); *cour = '='; KEYVAL_array[1][KEYVAL_nrows] = CFStringCreateWithCString (NULL, ((char*)cour) + 1, kCFStringEncodingUTF8); } else KEYVAL_array[0][KEYVAL_nrows] = CFStringCreateWithCString (NULL, "", kCFStringEncodingUTF8); for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (KEYVAL_array[i][KEYVAL_nrows], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } AddDataBrowserItems (widget, DBITEM_ID, 1, &item, GSKEYWORD_ID); item++; KEYVAL_nrows++; } ActivateControl (widget); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (widget, GSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, GSVALUE_ID, colSize[1] + 20); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); } pascal OSStatus keyval_add_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TKEYVAL *keyval_t = (TKEYVAL *) inUserData; DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; CFStringRef data[2]; Size len; int i = 0, j; if (keyval_t) { GetThemeDrawingState (&outState); GetControlData (keyval_t->key_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[0], &len); if (CFStringGetLength(data[0])) { GetControlData (keyval_t->value_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[1], &len); /* Try to see if the keyword already exists */ for (i = 0; i < KEYVAL_nrows; i++, item++) if (CFStringCompare (data[0], KEYVAL_array[0][i], 0) == kCFCompareEqualTo) goto done; /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (keyval_notification_item); /* On Mac OS X 10.0.x : this is clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (keyval_getset_item); SetDataBrowserCallbacks (keyval_t->key_list, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (keyval_t->key_list, DBITEM_ID); /* An update operation */ if(ikey_list, DBITEM_ID, 1, &item, GSKEYWORD_ID, kDataBrowserItemNoProperty); } else if(len) { KEYVAL_array[0][i] = data[0]; KEYVAL_array[1][i] = data[1]; AddDataBrowserItems (keyval_t->key_list, DBITEM_ID, 1, &item, GSKEYWORD_ID); KEYVAL_nrows++; } for(j = 0 ; j < KEYVAL_nrows ; j++) { for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (KEYVAL_array[i][j], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } } ActivateControl (keyval_t->key_list); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (keyval_t->key_list, GSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (keyval_t->key_list, GSVALUE_ID, colSize[1] + 20); DrawOneControl (keyval_t->key_list); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); } done: SetControlData (keyval_t->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (keyval_t->key_entry); SetControlData (keyval_t->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (keyval_t->value_entry); DeactivateControl (KEYVAL->bupdate); DrawOneControl (KEYVAL->bupdate); } return noErr; } pascal OSStatus keyval_update_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TKEYVAL *keyval_t = (TKEYVAL *) inUserData; DataBrowserItemID item = DBITEM_ID + 1, first, last; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; CFStringRef data[2]; Size len; int i = 0, j; if (keyval_t) { GetThemeDrawingState (&outState); GetControlData (keyval_t->key_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[0], &len); if (CFStringGetLength(data[0])) { GetControlData (keyval_t->value_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[1], &len); if(GetDataBrowserSelectionAnchor (keyval_t->key_list, &first, &last) == noErr) { i = first - DBITEM_ID - 1; item += i; } else i = 0; /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (keyval_notification_item); /* On Mac OS X 10.0.x : this is clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (keyval_getset_item); SetDataBrowserCallbacks (keyval_t->key_list, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (keyval_t->key_list, DBITEM_ID); /* An update operation */ if(ikey_list, DBITEM_ID, 1, &item, GSKEYWORD_ID, kDataBrowserItemNoProperty); } for(j = 0 ; j < KEYVAL_nrows ; j++) { for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (KEYVAL_array[i][j], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } } ActivateControl (keyval_t->key_list); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (keyval_t->key_list, GSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (keyval_t->key_list, GSVALUE_ID, colSize[1] + 20); DrawOneControl (keyval_t->key_list); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); } SetControlData (keyval_t->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (keyval_t->key_entry); SetControlData (keyval_t->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (keyval_t->value_entry); DeactivateControl (KEYVAL->bupdate); DrawOneControl (KEYVAL->bupdate); } return noErr; } pascal OSStatus keyval_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TKEYVAL *keyval_t = (TKEYVAL *) inUserData; char *cour; int i = 0, size = 1; char msg[1024], msg1[1024]; if (keyval_t) { /* What is the size of the block to malloc */ keyval_t->connstr = calloc(sizeof(char), 2); for (i = 0; i < KEYVAL_nrows; i++) { CFStringGetCString (KEYVAL_array[0][i], msg, sizeof (msg), kCFStringEncodingUTF8); CFStringGetCString (KEYVAL_array[1][i], msg1, sizeof (msg1), kCFStringEncodingUTF8); cour = (char *) keyval_t->connstr; keyval_t->connstr = (LPSTR) malloc (size + STRLEN (msg) + STRLEN (msg1) + 2); if (keyval_t->connstr) { memcpy (keyval_t->connstr, cour, size); sprintf (((char*)keyval_t->connstr) + size - 1, "%s=%s", msg, msg1); if (cour) free (cour); size += STRLEN (msg) + STRLEN (msg1) + 2; } else keyval_t->connstr = cour; } ((char*)keyval_t->connstr)[size - 1] = '\0'; keyval_t->verify_conn = GetControlValue (keyval_t->verify_conn_cb) != 0; DisposeWindow (keyval_t->mainwnd); keyval_t->mainwnd = NULL; keyval_t->verify_conn_cb = NULL; keyval_t->key_list = NULL; KEYVAL = NULL; } return noErr; } pascal OSStatus keyval_cancel_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TKEYVAL *keyval_t = (TKEYVAL *) inUserData; if (keyval_t) { keyval_t->connstr = NULL; keyval_t->verify_conn_cb = NULL; keyval_t->key_list = NULL; KEYVAL = NULL; DisposeWindow (keyval_t->mainwnd); keyval_t->mainwnd = NULL; } return noErr; } LPSTR create_keyval (WindowRef wnd, LPCSTR attrs, BOOL *verify_conn) { EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; RgnHandle cursorRgn = NULL; TKEYVAL keyval_t; ControlID controlID; WindowRef wkeyval; ControlRef control; EventRecord event; IBNibRef nibRef; OSStatus err; /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier ( CFSTR ("org.iodbc.adm")), CFSTR ("keyval"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ CreateWindowFromNib (nibRef, CFSTR ("Dialog"), &wkeyval); DisposeNibReference (nibRef); /* Install handlers for the finish button, the cancel */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSVERIFYCONN_CNTL, wkeyval, keyval_t.verify_conn_cb); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSLIST_CNTL, wkeyval, keyval_t.key_list); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSKEYWORD_CNTL, wkeyval, keyval_t.key_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSVALUE_CNTL, wkeyval, keyval_t.value_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSUPDATE_CNTL, wkeyval, keyval_t.bupdate); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSADD_CNTL, wkeyval, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (keyval_add_clicked), 1, &controlSpec, &keyval_t, NULL); InstallEventHandler (GetControlEventTarget (keyval_t.bupdate), NewEventHandlerUPP (keyval_update_clicked), 1, &controlSpec, &keyval_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSOK_CNTL, wkeyval, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (keyval_ok_clicked), 1, &controlSpec, &keyval_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSCANCEL_CNTL, wkeyval, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (keyval_cancel_clicked), 1, &controlSpec, &keyval_t, NULL); /* Parse the attributes line */ keyval_t.mainwnd = wkeyval; addkeywords_to_list (keyval_t.key_list, attrs, &keyval_t); AdvanceKeyboardFocus (wkeyval); /* Show the window and run the loop */ DeactivateControl (keyval_t.bupdate); KEYVAL = &keyval_t; ShowSheetWindow(wkeyval, wnd); /* The main loop */ while (keyval_t.mainwnd) WaitNextEvent (everyEvent, &event, 60L, cursorRgn); if (keyval_t.connstr) *verify_conn = keyval_t.verify_conn; } else goto error; return keyval_t.connstr; error: fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); return keyval_t.connstr; } libiodbc-3.52.9/iodbcadm/macosx/driverchooser.c0000644000076400007640000004632612323210535016377 00000000000000/* * driverchooser.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include "dlf.h" #include "dlproc.h" #include #include #include extern wchar_t* convert_CFString_to_wchar(const CFStringRef str); extern CFStringRef convert_wchar_to_CFString(wchar_t *str); UInt32 Drivers_nrows; CFStringRef Drivers_array[5][100]; TDRIVERCHOOSER *DRIVERCHOOSER = NULL; static pascal OSStatus drivers_getset_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean changeValue) { OSStatus err = noErr; if (!changeValue) switch (property) { case DBNAME_ID: SetDataBrowserItemDataText (itemData, Drivers_array[0][itemID - DBITEM_ID - 1]); break; case DBFILE_ID: SetDataBrowserItemDataText (itemData, Drivers_array[1][itemID - DBITEM_ID - 1]); break; case DBVERSION_ID: SetDataBrowserItemDataText (itemData, Drivers_array[2][itemID - DBITEM_ID - 1]); break; case DBSIZE_ID: SetDataBrowserItemDataText (itemData, Drivers_array[3][itemID - DBITEM_ID - 1]); break; case DBDATE_ID: SetDataBrowserItemDataText (itemData, Drivers_array[4][itemID - DBITEM_ID - 1]); break; case kDataBrowserItemIsActiveProperty: if (itemID > DBITEM_ID && itemID <= DBITEM_ID + Drivers_nrows) err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsEditableProperty: err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsContainerProperty: err = SetDataBrowserItemDataBooleanValue (itemData, itemID == DBITEM_ID); break; case kDataBrowserContainerAliasIDProperty: break; case kDataBrowserItemParentContainerProperty: break; default: err = errDataBrowserPropertyNotSupported; break; } else err = errDataBrowserPropertyNotSupported; return err; } void drivers_notification_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message) { static Boolean ignore_next = false, selected = false; switch (message) { case kDataBrowserItemSelected: if (DRIVERCHOOSER->b_configure) { ActivateControl (DRIVERCHOOSER->b_remove); DrawOneControl (DRIVERCHOOSER->b_remove); ActivateControl (DRIVERCHOOSER->b_configure); DrawOneControl (DRIVERCHOOSER->b_configure); } else { ActivateControl (DRIVERCHOOSER->b_add); DrawOneControl (DRIVERCHOOSER->b_add); } if (selected) ignore_next = true; else selected = true; break; case kDataBrowserItemDeselected: if (!ignore_next) { if (DRIVERCHOOSER->b_configure) { DeactivateControl (DRIVERCHOOSER->b_remove); DrawOneControl (DRIVERCHOOSER->b_remove); DeactivateControl (DRIVERCHOOSER->b_configure); DrawOneControl (DRIVERCHOOSER->b_configure); } else { DeactivateControl (DRIVERCHOOSER->b_add); DrawOneControl (DRIVERCHOOSER->b_add); } selected = false; } else { ignore_next = false; selected = true; } break; case kDataBrowserItemDoubleClicked: if (DRIVERCHOOSER->b_configure) driver_configure_clicked (NULL, NULL, DRIVERCHOOSER); break; }; } /* Changed ... Have to implement the same for translators */ void adddrivers_to_list (ControlRef widget, WindowRef dlg, BOOL addNotify) { wchar_t drvdesc[1024], drvattrs[1024], driver[1024]; DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[5] = { 150, 150, 100, 50 , 50}; void *handle; SInt16 outBaseline; Point ioBound; struct stat _stat; SQLSMALLINT len, len1; SQLRETURN ret; HENV henv, drv_henv; HDBC drv_hdbc; pSQLGetInfoFunc funcHdl; pSQLAllocHandle allocHdl; pSQLAllocEnv allocEnvHdl = NULL; pSQLAllocConnect allocConnectHdl = NULL; pSQLFreeHandle freeHdl; pSQLFreeEnv freeEnvHdl; pSQLFreeConnect freeConnectHdl; char *_drv_u8 = NULL; int i; if (!widget) return; GetThemeDrawingState (&outState); /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); if (addNotify) dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (drivers_notification_item); /* On Mac OS X 10.0.x : clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (drivers_getset_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, DBITEM_ID); /* Make the clean up */ for (i = 0; i < Drivers_nrows; i++, item++) { CFRelease (Drivers_array[0][i]); Drivers_array[0][i] = NULL; CFRelease (Drivers_array[1][i]); Drivers_array[1][i] = NULL; CFRelease (Drivers_array[2][i]); Drivers_array[2][i] = NULL; CFRelease (Drivers_array[3][i]); Drivers_array[3][i] = NULL; CFRelease (Drivers_array[4][i]); Drivers_array[4][i] = NULL; RemoveDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); } /* Global Initialization */ Drivers_nrows = 0; item = DBITEM_ID + 1; /* Create a HENV to get the list of drivers then */ ret = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto end; } /* Set the version ODBC API to use */ SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER); /* Get the list of drivers */ ret = SQLDriversW (henv, SQL_FETCH_FIRST, drvdesc, sizeof (drvdesc)/sizeof(wchar_t), &len, drvattrs, sizeof (drvattrs)/sizeof(wchar_t), &len1); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO && ret != SQL_NO_DATA) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto error; } while (ret != SQL_NO_DATA) { Drivers_array[0][Drivers_nrows] = convert_wchar_to_CFString(drvdesc); /* Get the driver library name */ SQLSetConfigMode (ODBC_BOTH_DSN); SQLGetPrivateProfileStringW (drvdesc, L"Driver", L"", driver, sizeof (driver)/sizeof(wchar_t), L"odbcinst.ini"); if (driver[0] == L'\0') SQLGetPrivateProfileStringW (L"Default", L"Driver", L"", driver, sizeof (driver)/sizeof(wchar_t), L"odbcinst.ini"); if (driver[0] == L'\0') { if (Drivers_array[0][Drivers_nrows]) { CFRelease (Drivers_array[0][Drivers_nrows]); Drivers_array[0][Drivers_nrows] = NULL; } goto skip; } Drivers_array[1][Drivers_nrows] = convert_wchar_to_CFString(driver); /* Alloc a connection handle */ drv_hdbc = NULL; drv_henv = NULL; _drv_u8 = (char *) dm_SQL_WtoU8((SQLWCHAR*)driver, SQL_NTS); if (_drv_u8 == NULL) goto skip; if ((handle = DLL_OPEN(_drv_u8)) != NULL) { if ((allocHdl = (pSQLAllocHandle)DLL_PROC(handle, "SQLAllocHandle")) != NULL) { ret = allocHdl(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &drv_henv); if (ret == SQL_ERROR) goto nodriverver; ret = allocHdl(SQL_HANDLE_DBC, drv_henv, &drv_hdbc); if (ret == SQL_ERROR) goto nodriverver; } else { if ((allocEnvHdl = (pSQLAllocEnv)DLL_PROC(handle, "SQLAllocEnv")) != NULL) { ret = allocEnvHdl(&drv_henv); if (ret == SQL_ERROR) goto nodriverver; } else goto nodriverver; if ((allocConnectHdl = (pSQLAllocConnect)DLL_PROC(handle, "SQLAllocConnect")) != NULL) { ret = allocConnectHdl(drv_henv, &drv_hdbc); if (ret == SQL_ERROR) goto nodriverver; } else goto nodriverver; } /* * Use SQLGetInfoA for Unicode drivers * and SQLGetInfo for ANSI drivers */ funcHdl = (pSQLGetInfoFunc)DLL_PROC(handle, "SQLGetInfoA"); if (!funcHdl) funcHdl = (pSQLGetInfoFunc)DLL_PROC(handle, "SQLGetInfo"); if (funcHdl) { /* Retrieve some informations */ ret = funcHdl (drv_hdbc, SQL_DRIVER_VER, drvattrs, sizeof(drvattrs), &len); if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { char *p = drvattrs; /* Find the description if one provided */ for (; *p ; p++) { if (*p == ' ') { *p++ = '\0'; break; } } /* * Store Version */ Drivers_array[2][Drivers_nrows] = CFStringCreateWithCString(NULL, (char *)drvattrs, kCFStringEncodingUTF8); } else goto nodriverver; } else if ((funcHdl = (pSQLGetInfoFunc)DLL_PROC(handle, "SQLGetInfoW")) != NULL) { /* Retrieve some informations */ ret = funcHdl (drv_hdbc, SQL_DRIVER_VER, drvattrs, sizeof(drvattrs), &len); if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { wchar_t *p = drvattrs; /* Find the description if one provided */ for (; *p ; p++) { if (*p == L' ') { *p++ = L'\0'; break; } } /* * Store Version */ Drivers_array[2][Drivers_nrows] = convert_wchar_to_CFString(drvattrs); } else goto nodriverver; } else goto nodriverver; } else { nodriverver: Drivers_array[2][Drivers_nrows] = CFStringCreateWithCString(NULL, "##.##", kCFStringEncodingUTF8); } if(drv_hdbc || drv_henv) { if(allocConnectHdl && (freeConnectHdl = (pSQLFreeConnect)DLL_PROC(handle, "SQLFreeConnect")) != NULL) { freeConnectHdl(drv_hdbc); drv_hdbc = NULL; } if(allocEnvHdl && (freeEnvHdl = (pSQLFreeEnv)DLL_PROC(handle, "SQLFreeEnv")) != NULL) { freeEnvHdl(drv_henv); drv_henv = NULL; } } if ((drv_hdbc || drv_henv) && (freeHdl = (pSQLFreeHandle)DLL_PROC(handle, "SQLFreeHandle")) != NULL) { if(drv_hdbc) freeHdl(SQL_HANDLE_DBC, drv_hdbc); if(drv_henv) freeHdl(SQL_HANDLE_ENV, drv_henv); } DLL_CLOSE(handle); /* Get the size and date of the driver */ if (!stat (_drv_u8, &_stat)) { CFStringRef strRef; struct tm drivertime; char buf[100]; Drivers_array[3][Drivers_nrows] = CFStringCreateWithFormat(NULL, NULL, strRef = CFStringCreateWithCString(NULL, "%d Kb", kCFStringEncodingUTF8), (int) (_stat.st_size / 1024)); CFRelease(strRef); localtime_r (&_stat.st_mtime, &drivertime); strftime (buf, sizeof (buf), "%c", &drivertime); Drivers_array[4][Drivers_nrows] = CFStringCreateWithCString(NULL, buf, kCFStringEncodingUTF8); } else { Drivers_array[3][Drivers_nrows] = CFStringCreateWithCString(NULL, "-", kCFStringEncodingUTF8); Drivers_array[4][Drivers_nrows] = CFStringCreateWithCString(NULL, "-", kCFStringEncodingUTF8); } for(i = 0 ; i < 5 ; i++) { GetThemeTextDimensions (Drivers_array[i][Drivers_nrows], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } AddDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); item++; Drivers_nrows++; /* Process next one */ skip: MEM_FREE (_drv_u8); _drv_u8 = NULL; ret = SQLDriversW (henv, SQL_FETCH_NEXT, drvdesc, sizeof (drvdesc)/sizeof(wchar_t), &len, drvattrs, sizeof (drvattrs)/sizeof(wchar_t), &len1); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO && ret != SQL_NO_DATA) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto error; } } error: /* Clean all that */ SQLFreeHandle (SQL_HANDLE_ENV, henv); end: ActivateControl (widget); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (widget, DBNAME_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBFILE_ID, colSize[1] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBVERSION_ID, colSize[2] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBSIZE_ID, colSize[3] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBDATE_ID, colSize[4] + 20); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); if(outState) DisposeThemeDrawingState (outState); } pascal OSStatus driverchooser_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDRIVERCHOOSER *choose_t = (TDRIVERCHOOSER *) inUserData; DataBrowserItemID first, last; OSStatus err; if (choose_t) { /* Get the selection */ if ((err = GetDataBrowserSelectionAnchor (choose_t->driverlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + Drivers_nrows) { /* Get the driver name */ choose_t->driver = convert_CFString_to_wchar(Drivers_array[0][first - DBITEM_ID - 1]); } else choose_t->driver = NULL; } else choose_t->driver = NULL; DisposeWindow (choose_t->mainwnd); choose_t->mainwnd = NULL; choose_t->driverlist = NULL; Drivers_nrows = 0; } return noErr; } pascal OSStatus driverchooser_cancel_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDRIVERCHOOSER *choose_t = (TDRIVERCHOOSER *) inUserData; if (choose_t) { DisposeWindow (choose_t->mainwnd); choose_t->mainwnd = NULL; /* No driver choosen ... cancel pressed */ choose_t->driver = NULL; choose_t->driverlist = NULL; Drivers_nrows = 0; } return noErr; } void create_driverchooser (HWND hwnd, TDRIVERCHOOSER * choose_t) { EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; RgnHandle cursorRgn = NULL; WindowRef wdrvchooser; ControlID controlID; EventRecord event; IBNibRef nibRef; OSStatus err; if (hwnd == NULL) return; /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.adm")), CFSTR ("odbcdriver"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ CreateWindowFromNib (nibRef, CFSTR ("Dialog"), &wdrvchooser); DisposeNibReference (nibRef); /* Set the control into the structure */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, DCLIST_CNTL, wdrvchooser, choose_t->driverlist); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DCFINISH_CNTL, wdrvchooser, choose_t->b_add); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DCCANCEL_CNTL, wdrvchooser, choose_t->b_remove); choose_t->driver = NULL; choose_t->mainwnd = wdrvchooser; /* Install handlers for the finish button, the cancel */ InstallEventHandler (GetControlEventTarget (choose_t->b_add), NewEventHandlerUPP (driverchooser_ok_clicked), 1, &controlSpec, choose_t, NULL); InstallEventHandler (GetControlEventTarget (choose_t->b_remove), NewEventHandlerUPP (driverchooser_cancel_clicked), 1, &controlSpec, choose_t, NULL); Drivers_nrows = 0; adddrivers_to_list (choose_t->driverlist, choose_t->mainwnd, TRUE); /* Show the window and run the loop */ choose_t->b_configure = NULL; DRIVERCHOOSER = choose_t; DeactivateControl (DRIVERCHOOSER->b_add); ShowWindow (wdrvchooser); /* The main loop */ while (choose_t->mainwnd) WaitNextEvent (everyEvent, &event, 60L, cursorRgn); } else goto error; return; error: choose_t->driver = NULL; fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); return; } libiodbc-3.52.9/iodbcadm/macosx/getfpn.c0000644000076400007640000001343712323210535015001 00000000000000/* * getfpn.c * * $Id$ * * Get full path name of a file functions. * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #ifdef __APPLE__ # define PATH_SEPARATOR "/" #else # define PATH_SEPARATOR ":" #endif char * get_full_pathname (long dirID, short volID) { FSVolumeInfoParam vol; HFSUniStr255 volname; CInfoPBRec pb; OSErr result; Str255 dir; char *pathname = NULL; char *prov = NULL; SInt16 vdefNum; SInt32 dummy; pb.dirInfo.ioNamePtr = dir; pb.dirInfo.ioVRefNum = volID; pb.dirInfo.ioDrParID = dirID; pb.dirInfo.ioFDirIndex = -1; do { pb.dirInfo.ioDrDirID = pb.dirInfo.ioDrParID; result = PBGetCatInfo (&pb, false); if (result != noErr) return NULL; if (pb.dirInfo.ioDrDirID != fsRtDirID) { prov = pathname; pathname = (char *) malloc ((pathname ? strlen (pathname) : 0) + (unsigned char) dir[0] + 2); strcpy (pathname, PATH_SEPARATOR); strncat (pathname, (char *) dir + 1, (unsigned char) dir[0]); } #ifdef macintosh else { prov = pathname; pathname = (char *) malloc ((pathname ? strlen (pathname) : 0) + (unsigned char) dir[0] + 1); pathname[0] = 0; strncat (pathname, (char *) dir + 1, (unsigned char) dir[0]); } #endif if (prov) { strcat (pathname, prov); free (prov); prov = NULL; } } while (pb.dirInfo.ioDrDirID != fsRtDirID); #ifdef __APPLE__ /* Get also the volume name */ FindFolder (kOnSystemDisk, kSystemFolderType, FALSE, &vdefNum, &dummy); if(vdefNum != volID) { vol.ioVRefNum = volID; vol.volumeIndex = 0; vol.whichInfo = kFSVolInfoNone; vol.volumeName = &volname; vol.ref = NULL; PBGetVolumeInfoSync(&vol); if(volname.length) { wchar_t volwchar[1024]; char *volutf8 = NULL; /* Convert the UniString255 to wchar */ for(dummy = 0 ; dummy < volname.length ; dummy++) volwchar[dummy] = volname.unicode[dummy]; volwchar[dummy] = L'\0'; /* Then transform it in UTF8 */ volutf8 = dm_SQL_WtoU8 (volwchar, SQL_NTS); if(volutf8) { prov = pathname; pathname = (char*) malloc ((pathname ? strlen (pathname) : 0) + volname.length + strlen("/Volumes/") + 2); strcpy(pathname, "/Volumes/"); strcat(pathname, volutf8); if(prov) { strcat(pathname, prov); free(prov); } free(volutf8); } } } #endif return pathname; } libiodbc-3.52.9/iodbcadm/macosx/fdriverchoose.c0000644000076400007640000005747512323210535016372 00000000000000/* * fdriverchooser.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include "dlf.h" #include "dlproc.h" #include #include #include extern wchar_t* convert_CFString_to_wchar(const CFStringRef str); extern CFStringRef convert_wchar_to_CFString(wchar_t *str); extern UInt32 Drivers_nrows; extern CFStringRef Drivers_array[4][100]; #define NDCONTINUE_CNTL 1000 #define NDBACK_CNTL 1001 #define NDCANCEL_CNTL 1002 #define NDADVANCED_CNTL 1003 #define NDLIST_CNTL 2000 #define NDDSN_CNTL 2001 #define NDBROWSE_CNTL 2002 #define NDMESS_CNTL 2003 #define GLOBAL_TAB 128 #define NDDRV_TAB 129 #define NDNAME_TAB 130 #define NDFINISH_TAB 131 #define MESSITEM_ID 'OPLs' #define MESSLINE_ID 'mess' CFStringRef Mess_array[512]; UInt32 Mess_nrows; void SQL_API _iodbcdm_messagebox (HWND hwnd, LPCSTR szDSN, LPCSTR szText); static pascal OSStatus mess_getset_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean changeValue) { OSStatus err = noErr; if (!changeValue) switch (property) { case MESSLINE_ID: if (Mess_nrows) SetDataBrowserItemDataText (itemData, Mess_array[itemID - MESSITEM_ID - 1]); break; case kDataBrowserItemIsActiveProperty: if (Mess_nrows && itemID > MESSITEM_ID && itemID <= MESSITEM_ID + Mess_nrows) err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsEditableProperty: err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsContainerProperty: err = SetDataBrowserItemDataBooleanValue (itemData, itemID == MESSITEM_ID); break; case kDataBrowserContainerAliasIDProperty: break; case kDataBrowserItemParentContainerProperty: break; default: err = errDataBrowserPropertyNotSupported; break; } else { err = errDataBrowserPropertyNotSupported; } return err; } static void UpdateMessagePage(TFDRIVERCHOOSER *choose_t) { int i; CFStringRef driver_str; DataBrowserItemID item = MESSITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ControlRef widget = choose_t->mess_entry; LPSTR curr; DataBrowserItemID first, last; OSStatus err; char dsn[1024]; char path[1024]; Size len; /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (mess_getset_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, MESSITEM_ID); for(i = 0; i < Mess_nrows; i++, item++) { if (Mess_array[i]) CFRelease(Mess_array[i]); RemoveDataBrowserItems (widget, MESSITEM_ID, 1, &item, MESSLINE_ID); } Mess_nrows = 0; Mess_array[Mess_nrows] = CFStringCreateWithCString (NULL, "File Data Source", kCFStringEncodingUTF8); Mess_nrows++; GetControlData (choose_t->dsn_entry, 0, kControlEditTextTextTag, sizeof (dsn), dsn, &len); dsn[len] = '\0'; if (strchr (dsn, '/') != NULL) snprintf(path, sizeof(path), "Filename: %s", dsn); else snprintf(path, sizeof(path), "Filename: %s/%s", choose_t->curr_dir, dsn); Mess_array[Mess_nrows] = CFStringCreateWithCString (NULL, path, kCFStringEncodingUTF8); Mess_nrows++; driver_str = CFSTR(""); if ((err = GetDataBrowserSelectionAnchor (choose_t->driverlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + Drivers_nrows) driver_str = Drivers_array[0][first - DBITEM_ID - 1]; } Mess_array[Mess_nrows] = CFStringCreateMutable(NULL, 0); CFStringAppend(Mess_array[Mess_nrows], CFSTR("Driver: ")); CFStringAppend(Mess_array[Mess_nrows], driver_str); Mess_nrows++; Mess_array[Mess_nrows] = CFStringCreateWithCString (NULL, "Driver-specific Keywords:", kCFStringEncodingUTF8); Mess_nrows++; if (choose_t->attrs) { for (curr = choose_t->attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "PWD=", STRLEN ("PWD="))) { continue; } Mess_array[Mess_nrows] = CFStringCreateWithCString (NULL, curr, kCFStringEncodingUTF8); Mess_nrows++; } } item = MESSITEM_ID + 1; for(i = 0; i < Mess_nrows; i++) { AddDataBrowserItems (widget, MESSITEM_ID, 1, &item, MESSLINE_ID); item++; } ActivateControl (widget); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); } pascal OSStatus fdriverchooser_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus fdriverchooser_switch_page (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TFDRIVERCHOOSER *choose_t = (TFDRIVERCHOOSER *) inUserData; int tabs[] = { 3, NDDRV_TAB, NDNAME_TAB, NDFINISH_TAB }; ControlRef tabControl; ControlID controlID; int tab_index; CFStringRef str; char dsn[1024]; Size len; DataBrowserItemID first, last; Boolean selected; /* Search which tab is activated */ controlID.signature = TABS_SIGNATURE; controlID.id = GLOBAL_TAB; GetControlByID (choose_t->mainwnd, &controlID, &tabControl); DisplayTabControlNumber (tab_index = GetControlValue (tabControl), tabControl, choose_t->mainwnd, tabs); /* Is the panel has been changed */ if(choose_t->tab_number == tab_index) return noErr; ClearKeyboardFocus (choose_t->mainwnd); selected = false; /* Get the selection */ if (GetDataBrowserSelectionAnchor(choose_t->driverlist, &first, &last) == noErr && first > DBITEM_ID && first <= DBITEM_ID + Drivers_nrows) { selected = true; } switch ((choose_t->tab_number = tab_index)) { case 1: DeactivateControl (choose_t->back_button); DrawOneControl (choose_t->back_button); str = CFStringCreateWithCString(NULL, "Continue", kCFStringEncodingUTF8); SetControlTitleWithCFString(choose_t->continue_button, str); CFRelease(str); break; case 2: if (!selected) { _iodbcdm_messagebox (choose_t->mainwnd, NULL, "Driver wasn't selected!"); SetControlValue (tabControl, 1); DisplayTabControlNumber (choose_t->tab_number = 1, tabControl, choose_t->mainwnd, tabs); return noErr; } ActivateControl (choose_t->back_button); DrawOneControl (choose_t->back_button); str = CFStringCreateWithCString(NULL, "Continue", kCFStringEncodingUTF8); SetControlTitleWithCFString(choose_t->continue_button, str); CFRelease(str); break; case 3: if (!selected) { _iodbcdm_messagebox (choose_t->mainwnd, NULL, "Driver wasn't selected!"); SetControlValue (tabControl, 1); DisplayTabControlNumber (choose_t->tab_number = 1, tabControl, choose_t->mainwnd, tabs); return noErr; } GetControlData (choose_t->dsn_entry, 0, kControlEditTextTextTag, sizeof (dsn), dsn, &len); if (strlen(dsn) < 1) { _iodbcdm_messagebox (choose_t->mainwnd, NULL, "Enter File DSN Name..."); SetControlValue (tabControl, 2); DisplayTabControlNumber (choose_t->tab_number = 2, tabControl, choose_t->mainwnd, tabs); return noErr; } ActivateControl (choose_t->back_button); DrawOneControl (choose_t->back_button); str = CFStringCreateWithCString(NULL, "Finish", kCFStringEncodingUTF8); SetControlTitleWithCFString(choose_t->continue_button, str); CFRelease(str); UpdateMessagePage(choose_t); break; }; ClearKeyboardFocus (choose_t->mainwnd); AdvanceKeyboardFocus (choose_t->mainwnd); return noErr; } pascal OSStatus fdriverchooser_back_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TFDRIVERCHOOSER *choose_t = (TFDRIVERCHOOSER *) inUserData; int tabs[] = { 3, NDDRV_TAB, NDNAME_TAB, NDFINISH_TAB }; CFStringRef str; if (choose_t) { ClearKeyboardFocus (choose_t->mainwnd); str = CFStringCreateWithCString(NULL, "Continue", kCFStringEncodingUTF8); SetControlTitleWithCFString(choose_t->continue_button, str); CFRelease(str); /* Go to the next tab */ if (choose_t->tab_number <= 1) { choose_t->tab_number = tabs[0]; ActivateControl (choose_t->back_button); } else { choose_t->tab_number--; if (choose_t->tab_number == 1) DeactivateControl (choose_t->back_button); else ActivateControl (choose_t->back_button); } DrawOneControl (choose_t->back_button); SetControlValue (choose_t->tab_panel, choose_t->tab_number); DisplayTabControlNumber (choose_t->tab_number, choose_t->tab_panel, choose_t->mainwnd, tabs); ClearKeyboardFocus (choose_t->mainwnd); AdvanceKeyboardFocus (choose_t->mainwnd); } return noErr; } pascal OSStatus fdriverchooser_continue_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TFDRIVERCHOOSER *choose_t = (TFDRIVERCHOOSER *) inUserData; int tabs[] = { 3, NDDRV_TAB, NDNAME_TAB, NDFINISH_TAB }; CFStringRef str; ControlRef tabControl; ControlID controlID; if (choose_t) { if (choose_t->tab_number == tabs[0]) return fdriverchooser_ok_clicked(inHandlerRef, inEvent, inUserData); ClearKeyboardFocus (choose_t->mainwnd); /* Go to the next tab */ if (choose_t->tab_number >= tabs[0]) { choose_t->tab_number = 1; DeactivateControl (choose_t->back_button); } else { char dsn[1024]; Size len; if (choose_t->tab_number == 2) { controlID.signature = TABS_SIGNATURE; controlID.id = GLOBAL_TAB; GetControlByID (choose_t->mainwnd, &controlID, &tabControl); GetControlData (choose_t->dsn_entry, 0, kControlEditTextTextTag, sizeof (dsn), dsn, &len); if (strlen(dsn) < 1) { _iodbcdm_messagebox (choose_t->mainwnd, NULL, "Enter File DSN Name..."); SetControlValue (tabControl, 2); DisplayTabControlNumber (2, tabControl, choose_t->mainwnd, tabs); return noErr; } } choose_t->tab_number++; ActivateControl (choose_t->back_button); if (choose_t->tab_number == tabs[0]) { str = CFStringCreateWithCString(NULL, "Finish", kCFStringEncodingUTF8); SetControlTitleWithCFString(choose_t->continue_button, str); CFRelease(str); UpdateMessagePage(choose_t); } else { str = CFStringCreateWithCString(NULL, "Continue", kCFStringEncodingUTF8); SetControlTitleWithCFString(choose_t->continue_button, str); CFRelease(str); } } DrawOneControl (choose_t->back_button); SetControlValue (choose_t->tab_panel, choose_t->tab_number); DisplayTabControlNumber (choose_t->tab_number, choose_t->tab_panel, choose_t->mainwnd, tabs); ClearKeyboardFocus (choose_t->mainwnd); AdvanceKeyboardFocus (choose_t->mainwnd); } return noErr; } pascal OSStatus fdriverchooser_advanced_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TFDRIVERCHOOSER *choose_t = (TFDRIVERCHOOSER *) inUserData; DataBrowserItemID first, last; OSStatus err; if (choose_t) { /* Get the selection */ if ((err = GetDataBrowserSelectionAnchor (choose_t->driverlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + Drivers_nrows) { LPSTR attr_lst = NULL; LPSTR in_attrs = choose_t->attrs ? choose_t->attrs : "\0\0"; attr_lst = create_keyval(choose_t->mainwnd, in_attrs, &choose_t->verify_conn); if (attr_lst) { if (choose_t->attrs) free(choose_t->attrs); choose_t->attrs = attr_lst; } } else _iodbcdm_messagebox (choose_t->mainwnd, NULL, "Driver wasn't selected!"); } } return noErr; } pascal OSStatus fdriverchooser_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TFDRIVERCHOOSER *choose_t = (TFDRIVERCHOOSER *) inUserData; DataBrowserItemID first, last; OSStatus err; char dsn[1024]; char path[1024]; Size len; if (choose_t) { /* Get the selection */ if ((err = GetDataBrowserSelectionAnchor (choose_t->driverlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + Drivers_nrows) { /* Get the driver name */ choose_t->driver = convert_CFString_to_wchar(Drivers_array[0][first - DBITEM_ID - 1]); } else choose_t->driver = NULL; } else choose_t->driver = NULL; GetControlData (choose_t->dsn_entry, 0, kControlEditTextTextTag, sizeof (dsn), dsn, &len); dsn[len] = '\0'; if (strchr (dsn, '/') != NULL) snprintf(path, sizeof(path), "%s", dsn); else snprintf(path, sizeof(path), "%s/%s", choose_t->curr_dir, dsn); choose_t->dsn = strdup(path); DisposeWindow (choose_t->mainwnd); choose_t->mainwnd = NULL; choose_t->driverlist = NULL; choose_t->dsn_entry = NULL; Drivers_nrows = 0; choose_t->ok = TRUE; } return noErr; } pascal OSStatus fdriverchooser_cancel_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TFDRIVERCHOOSER *choose_t = (TFDRIVERCHOOSER *) inUserData; if (choose_t) { DisposeWindow (choose_t->mainwnd); choose_t->mainwnd = NULL; /* No driver choosen ... cancel pressed */ if (choose_t->driver) { free(choose_t->driver); choose_t->driver = NULL; } if (choose_t->dsn) { free(choose_t->dsn); choose_t->dsn = NULL; } if (choose_t->attrs) { free(choose_t->attrs); choose_t->attrs = NULL; } choose_t->driverlist = NULL; Drivers_nrows = 0; choose_t->ok = FALSE; } return noErr; } static pascal void fdriverchooser_nav_events (NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, NavCallBackUserData callBackUD) { switch (callBackSelector) { case kNavCBEvent: switch (callBackParms->eventData.eventDataParms.event->what) { case nullEvent: break; case updateEvt: break; case activateEvt: break; default: break; }; break; }; } pascal OSStatus fdriverchooser_browse_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { NavDialogOptions dialogOptions; TFDRIVERCHOOSER *choose_t = (TFDRIVERCHOOSER *) inUserData; NavReplyRecord reply; char tokenstr[4096] = { 0 }; OSStatus err; FSSpec file; char *dir; AEDesc defaultLoc; CFStringRef str; CFURLRef url; Str255 param; char path[1024]; NavGetDefaultDialogOptions (&dialogOptions); STRCPY (dialogOptions.windowTitle + 1, "Save as ..."); dialogOptions.windowTitle[0] = STRLEN ("Save as ..."); STRCPY (dialogOptions.savedFileName + 1, "xxx.dsn"); dialogOptions.savedFileName[0] = STRLEN ("xxx.dsn"); str = CFStringCreateWithCString(NULL, choose_t->curr_dir, kCFStringEncodingMacRoman); url = CFURLCreateWithFileSystemPath(NULL, str, kCFURLHFSPathStyle, TRUE); CFRelease(str); str = CFURLCopyFileSystemPath(url, kCFURLHFSPathStyle); CFStringGetCString(str, path, sizeof(path), kCFStringEncodingUTF8); param[0] =STRLEN(path); STRCPY(param + 1, path); err = FSMakeFSSpec(0, 0, param, &file); AECreateDesc(typeFSS, &file, sizeof(file), &defaultLoc); err = NavPutFile (&defaultLoc, &reply, &dialogOptions, NewNavEventUPP (fdriverchooser_nav_events), 'TEXT', kNavGenericSignature, NULL); if (!err && reply.validRecord) { /* Get and transform the file descriptor from the reply */ err = AEGetNthPtr (&reply.selection, 1, typeFSS, NULL, NULL, &file, sizeof (file), NULL); if (!err) { /* Get back some information about the directory */ dir = get_full_pathname (file.parID, file.vRefNum); sprintf (tokenstr, "%s/", dir ? dir : ""); strncat (tokenstr, &file.name[1], file.name[0]); /* Display the constructed string re. the file choosen */ SetControlData (choose_t->dsn_entry, 0, kControlEditTextTextTag, STRLEN (tokenstr) ? STRLEN (tokenstr) : STRLEN ("xxx.dsn"), STRLEN (tokenstr) ? tokenstr : "xxx.dsn"); DrawOneControl (choose_t->dsn_entry); /* Clean up */ if (dir) free (dir); } } NavDisposeReply (&reply); return noErr; } void create_fdriverchooser (HWND hwnd, TFDRIVERCHOOSER * choose_t) { EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; int tabs[] = { 3, NDDRV_TAB, NDNAME_TAB, NDFINISH_TAB }; RgnHandle cursorRgn = NULL; WindowRef wdrvchooser; ControlID controlID; EventRecord event; IBNibRef nibRef; OSStatus err; ControlRef control; int i; choose_t->attrs = NULL; choose_t->verify_conn = TRUE; choose_t->driver = NULL; choose_t->dsn = NULL; choose_t->ok = FALSE; Mess_nrows = 0; memset(&Mess_array, 0, sizeof(Mess_array)); if (hwnd == NULL) return; /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.adm")), CFSTR ("odbcdriverf"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ CreateWindowFromNib (nibRef, CFSTR ("Dialog"), &wdrvchooser); DisposeNibReference (nibRef); /* Set the control into the structure */ GETCONTROLBYID (controlID, TABS_SIGNATURE, GLOBAL_TAB, wdrvchooser, choose_t->tab_panel); GETCONTROLBYID (controlID, CNTL_SIGNATURE, NDLIST_CNTL, wdrvchooser, choose_t->driverlist); GETCONTROLBYID (controlID, CNTL_SIGNATURE, NDCONTINUE_CNTL, wdrvchooser, choose_t->continue_button); GETCONTROLBYID (controlID, CNTL_SIGNATURE, NDBACK_CNTL, wdrvchooser, choose_t->back_button); GETCONTROLBYID (controlID, CNTL_SIGNATURE, NDDSN_CNTL, wdrvchooser, choose_t->dsn_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, NDMESS_CNTL, wdrvchooser, choose_t->mess_entry); choose_t->mainwnd = wdrvchooser; /* Install handlers for the finish button, the cancel */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, NDCANCEL_CNTL, wdrvchooser, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (fdriverchooser_cancel_clicked), 1, &controlSpec, choose_t, NULL); GETCONTROLBYID(controlID, CNTL_SIGNATURE, NDADVANCED_CNTL, wdrvchooser, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (fdriverchooser_advanced_clicked), 1, &controlSpec, choose_t, NULL); GETCONTROLBYID(controlID, CNTL_SIGNATURE, NDBROWSE_CNTL, wdrvchooser, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (fdriverchooser_browse_clicked), 1, &controlSpec, choose_t, NULL); InstallEventHandler (GetControlEventTarget (choose_t->continue_button), NewEventHandlerUPP (fdriverchooser_continue_clicked), 1, &controlSpec, choose_t, NULL); InstallEventHandler (GetControlEventTarget (choose_t->back_button), NewEventHandlerUPP (fdriverchooser_back_clicked), 1, &controlSpec, choose_t, NULL); InstallEventHandler (GetControlEventTarget (choose_t->tab_panel), NewEventHandlerUPP (fdriverchooser_switch_page), 1, &controlSpec, choose_t, NULL); Drivers_nrows = 0; adddrivers_to_list (choose_t->driverlist, choose_t->mainwnd, FALSE); /* Show the window and run the loop */ /* Force to display the first tab */ DisplayTabControlNumber (choose_t->tab_number = 1, choose_t->tab_panel, wdrvchooser, tabs); DeactivateControl (choose_t->back_button); DrawOneControl (choose_t->back_button); ActivateControl (choose_t->continue_button); DrawOneControl (choose_t->continue_button); ShowWindow (wdrvchooser); /* The main loop */ while (choose_t->mainwnd) WaitNextEvent (everyEvent, &event, 60L, cursorRgn); } else goto error; for(i = 0; i < Mess_nrows; i++) if (Mess_array[i]) CFRelease(Mess_array[i]); Mess_nrows = 0; return; error: choose_t->driver = NULL; fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); return; } libiodbc-3.52.9/iodbcadm/macosx/translatorchooser.c0000644000076400007640000003421512323210535017267 00000000000000/* * translator.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include extern wchar_t* convert_CFString_to_wchar(const CFStringRef str); extern CFStringRef convert_wchar_to_CFString(wchar_t *str); UInt32 Translators_nrows; CFStringRef Translators_array[5][100]; TTRANSLATORCHOOSER *TRANSLATORCHOOSER = NULL; pascal OSStatus translators_getset_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean changeValue) { OSStatus err = noErr; if (!changeValue) switch (property) { case DBNAME_ID: SetDataBrowserItemDataText (itemData, Translators_array[0][itemID - DBITEM_ID - 1]); break; case DBFILE_ID: SetDataBrowserItemDataText (itemData, Translators_array[1][itemID - DBITEM_ID - 1]); break; case DBVERSION_ID: SetDataBrowserItemDataText (itemData, Translators_array[2][itemID - DBITEM_ID - 1]); break; case DBSIZE_ID: SetDataBrowserItemDataText (itemData, Translators_array[3][itemID - DBITEM_ID - 1]); break; case DBDATE_ID: SetDataBrowserItemDataText (itemData, Translators_array[4][itemID - DBITEM_ID - 1]); break; case kDataBrowserItemIsActiveProperty: if (itemID > DBITEM_ID && itemID <= DBITEM_ID + Translators_nrows) err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsEditableProperty: err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsContainerProperty: err = SetDataBrowserItemDataBooleanValue (itemData, itemID == DBITEM_ID); break; case kDataBrowserContainerAliasIDProperty: break; case kDataBrowserItemParentContainerProperty: break; default: err = errDataBrowserPropertyNotSupported; break; } else err = errDataBrowserPropertyNotSupported; return err; } void translators_notification_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message) { switch (message) { case kDataBrowserItemDoubleClicked: translatorchooser_ok_clicked (NULL, NULL, TRANSLATORCHOOSER); break; }; } void addtranslators_to_list (ControlRef widget, WindowRef dlg) { wchar_t *curr, *buffer = (wchar_t *) malloc (sizeof (wchar_t) * 65535); char _date[1024], _size[1024]; wchar_t driver[1024]; DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[5] = { 150, 150, 100, 50, 50 }; SInt16 outBaseline; Point ioBound; UWORD confMode = ODBC_USER_DSN; CFStringRef szDriver; struct stat _stat; BOOL careabout; char *_drv_u8 = NULL; int len, i; if (!widget || !buffer) return; GetThemeDrawingState (&outState); /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (translators_notification_item); /* On Mac OS X 10.0.x : clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (translators_getset_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, DBITEM_ID); /* Make the clean up */ for (i = 0; i < Translators_nrows; i++, item++) { CFRelease (Translators_array[0][i]); Translators_array[0][i] = NULL; CFRelease (Translators_array[1][i]); Translators_array[1][i] = NULL; CFRelease (Translators_array[2][i]); Translators_array[2][i] = NULL; CFRelease (Translators_array[3][i]); Translators_array[3][i] = NULL; CFRelease (Translators_array[4][i]); Translators_array[4][i] = NULL; RemoveDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); } /* Global Initialization */ Translators_nrows = 0; item = DBITEM_ID + 1; /* Get the current config mode */ while (confMode != ODBC_SYSTEM_DSN + 1) { /* Get the list of drivers in the user context */ SQLSetConfigMode (confMode); len = SQLGetPrivateProfileStringW (L"ODBC Translators", NULL, L"", buffer, 65535, L"odbcinst.ini"); if (len) goto process; goto end; process: for (curr = buffer; *curr != L'\0'; curr += (WCSLEN (curr) + 1)) { /* Shadowing system odbcinst.ini */ for (i = 0, careabout = TRUE; i < Translators_nrows; i++) { szDriver = convert_wchar_to_CFString(curr); if (CFStringCompare (Translators_array[0][i] ? Translators_array[0][i] : CFSTR (""), szDriver, kCFCompareCaseInsensitive) == kCFCompareEqualTo) { careabout = FALSE; break; } CFRelease (szDriver); } if (!careabout) continue; SQLSetConfigMode (confMode); SQLGetPrivateProfileStringW (L"ODBC Translators", curr, L"", driver, sizeof (driver)/sizeof(wchar_t), L"odbcinst.ini"); /* Check if the driver is installed */ if (wcsncasecmp (driver, L"Installed", WCSLEN(L"Installed"))) goto end; /* Get the driver library name */ SQLSetConfigMode (confMode); if (!SQLGetPrivateProfileStringW (curr, L"Translator", L"", driver, sizeof (driver) / sizeof(wchar_t), L"odbcinst.ini")) { SQLSetConfigMode (confMode); SQLGetPrivateProfileStringW (L"Default", L"Translator", L"", driver, sizeof (driver) / sizeof(wchar_t), L"odbcinst.ini"); } if (WCSLEN (curr) && WCSLEN (driver)) { _drv_u8 = (char *) dm_SQL_WtoU8((SQLWCHAR*)driver, SQL_NTS); if (_drv_u8 == NULL) continue; Translators_array[0][Translators_nrows] = convert_wchar_to_CFString(curr); Translators_array[1][Translators_nrows] = convert_wchar_to_CFString(driver); Translators_array[2][Translators_nrows] = CFStringCreateWithCString (NULL, "", kCFStringEncodingUTF8); /* Get some information about the driver */ if (!stat (_drv_u8, &_stat)) { struct tm drivertime; localtime_r (&_stat.st_mtime, &drivertime); strftime (_date, sizeof (_date), "%c", &drivertime); sprintf (_size, "%d Kb", (int) (_stat.st_size / 1024)); Translators_array[3][Translators_nrows] = CFStringCreateWithCString (NULL, _size, kCFStringEncodingUTF8); Translators_array[4][Translators_nrows] = CFStringCreateWithCString (NULL, _date, kCFStringEncodingUTF8); } MEM_FREE (_drv_u8); for(i = 0 ; i < 5 ; i++) { GetThemeTextDimensions (Translators_array[i][Translators_nrows], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } AddDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); item++; Translators_nrows++; } } end: if (confMode == ODBC_USER_DSN) confMode = ODBC_SYSTEM_DSN; else confMode = ODBC_SYSTEM_DSN + 1; } ActivateControl (widget); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (widget, DBNAME_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBFILE_ID, colSize[1] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBVERSION_ID, colSize[2] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBSIZE_ID, colSize[3] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBDATE_ID, colSize[4] + 20); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); if(outState) DisposeThemeDrawingState (outState); free (buffer); } pascal OSStatus translatorchooser_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TTRANSLATORCHOOSER *choose_t = (TTRANSLATORCHOOSER *) inUserData; DataBrowserItemID first, last; OSStatus err; if (choose_t) { /* Get the selection */ if ((err = GetDataBrowserSelectionAnchor (choose_t->translatorlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + Translators_nrows) { /* Get the driver name */ choose_t->translator = convert_CFString_to_wchar(Translators_array[0][first - DBITEM_ID - 1]); } else choose_t->translator = NULL; } else choose_t->translator = NULL; DisposeWindow (choose_t->mainwnd); choose_t->mainwnd = NULL; choose_t->translatorlist = NULL; Translators_nrows = 0; } return noErr; } pascal OSStatus translatorchooser_cancel_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TTRANSLATORCHOOSER *choose_t = (TTRANSLATORCHOOSER *) inUserData; if (choose_t) { DisposeWindow (choose_t->mainwnd); choose_t->mainwnd = NULL; Translators_nrows = 0; /* No driver choosen ... cancel pressed */ choose_t->translator = NULL; choose_t->translatorlist = NULL; } return noErr; } void create_translatorchooser (HWND hwnd, TTRANSLATORCHOOSER * choose_t) { EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; RgnHandle cursorRgn = NULL; WindowRef wtranschooser; ControlID controlID; EventRecord event; IBNibRef nibRef; OSStatus err; if (hwnd == NULL) return; /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.adm")), CFSTR ("odbcdriver"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ CreateWindowFromNib (nibRef, CFSTR ("Dialog"), &wtranschooser); DisposeNibReference (nibRef); /* Set the control into the structure */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, DCLIST_CNTL, wtranschooser, choose_t->translatorlist); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DCFINISH_CNTL, wtranschooser, choose_t->b_finish); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DCCANCEL_CNTL, wtranschooser, choose_t->b_cancel); choose_t->translator = NULL; choose_t->mainwnd = wtranschooser; /* Install handlers for the finish button, the cancel */ InstallEventHandler (GetControlEventTarget (choose_t->b_finish), NewEventHandlerUPP (translatorchooser_ok_clicked), 1, &controlSpec, choose_t, NULL); InstallEventHandler (GetControlEventTarget (choose_t->b_cancel), NewEventHandlerUPP (translatorchooser_cancel_clicked), 1, &controlSpec, choose_t, NULL); addtranslators_to_list (choose_t->translatorlist, wtranschooser); /* Show the window and run the loop */ TRANSLATORCHOOSER = choose_t; ShowWindow (wtranschooser); /* The main loop */ while (choose_t->mainwnd) WaitNextEvent (everyEvent, &event, 60L, cursorRgn); } else goto error; return; error: choose_t->translator = NULL; fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); return; } libiodbc-3.52.9/iodbcadm/macosx/filedsn.c0000644000076400007640000006613012323210535015140 00000000000000/* * filedsn.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include #include #include #include #include "gui.h" #define MAX_ROWS 1024 UInt32 FDSN_nrows; CFStringRef FDSN_array[MAX_ROWS]; char FDSN_type[MAX_ROWS]; extern TDSNCHOOSER *DSNCHOOSER; static Boolean _CheckDriverLoginDlg (char *drv); void create_error (HWND hwnd, LPCSTR dsn, LPCSTR text, LPCSTR errmsg); BOOL create_confirm (HWND hwnd, LPCSTR dsn, LPCSTR text); void _iodbcdm_nativeerrorbox (HWND hwnd, HENV henv, HDBC hdbc, HSTMT hstmt); void SQL_API _iodbcdm_messagebox (HWND hwnd, LPCSTR szDSN, LPCSTR szText); static pascal OSStatus fdsn_getset_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean changeValue) { static IconRef folderIcon = 0; static IconRef dsnIcon = 0; OSStatus err = noErr; if (!changeValue) switch (property) { case DBNAME_ID: if (folderIcon == 0) GetIconRef(kOnSystemDisk, kSystemIconsCreator, kGenericFolderIcon, &folderIcon); if (dsnIcon == 0) GetIconRef(kOnSystemDisk, kSystemIconsCreator, kGenericDocumentIcon, &dsnIcon); SetDataBrowserItemDataText (itemData, FDSN_array[itemID - DBITEM_ID - 1]); if (FDSN_type[itemID - DBITEM_ID - 1]) SetDataBrowserItemDataIcon(itemData, dsnIcon); else SetDataBrowserItemDataIcon(itemData, folderIcon); break; case kDataBrowserItemIsActiveProperty: if (itemID > DBITEM_ID && itemID <= DBITEM_ID + FDSN_nrows) err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsEditableProperty: err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsContainerProperty: err = SetDataBrowserItemDataBooleanValue (itemData, itemID == DBITEM_ID); break; case kDataBrowserContainerAliasIDProperty: break; case kDataBrowserItemParentContainerProperty: break; default: err = errDataBrowserPropertyNotSupported; break; } else err = errDataBrowserPropertyNotSupported; return err; } static void fdsn_notification_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message) { static Boolean ignore_next = false, selected = false; switch (message) { case kDataBrowserItemSelected: ActivateControl (DSNCHOOSER->fremove); DrawOneControl (DSNCHOOSER->fremove); ActivateControl (DSNCHOOSER->ftest); DrawOneControl (DSNCHOOSER->ftest); ActivateControl (DSNCHOOSER->fconfigure); DrawOneControl (DSNCHOOSER->fconfigure); if (selected) ignore_next = true; else selected = true; break; case kDataBrowserItemDeselected: if (!ignore_next) { DeactivateControl (DSNCHOOSER->fremove); DrawOneControl (DSNCHOOSER->fremove); DeactivateControl (DSNCHOOSER->ftest); DrawOneControl (DSNCHOOSER->ftest); DeactivateControl (DSNCHOOSER->fconfigure); DrawOneControl (DSNCHOOSER->fconfigure); } else { ignore_next = false; selected = true; } break; case kDataBrowserItemDoubleClicked: filedsn_configure_clicked (NULL, NULL, DSNCHOOSER); break; }; } static void fill_dir_menu(TDSNCHOOSER *dsnchoose_t, char *path) { char *curr_dir, *prov, *dir; MenuRef items_m; int i = -1; CFStringRef str; ControlRef f_select = dsnchoose_t->fdir; if (!path || !(prov = strdup (path))) return; if (prov[strlen(prov) - 1] == '/' && strlen(prov) > 1) prov[strlen(prov) - 1] = 0; items_m = GetControlPopupMenuHandle (f_select); DeleteMenuItems (items_m, 1, CountMenuItems (items_m)); /* Add the root directory */ AppendMenuItemTextWithCFString(items_m, CFSTR("/"), 0, 0, NULL); if (strlen(prov) > 1) for (curr_dir = prov, dir = NULL; curr_dir; curr_dir = strchr (curr_dir + 1, '/')) { if (strchr (curr_dir + 1, '/')) { dir = strchr (curr_dir + 1, '/'); *dir = 0; } str = CFStringCreateWithCString(NULL, prov, kCFStringEncodingUTF8); AppendMenuItemTextWithCFString(items_m, str, 0, 0, NULL); if (dir) *dir = '/'; } i = CountMenuItems (items_m); SetControlMaximum (f_select, i); SetControlValue (f_select, i); strncpy(dsnchoose_t->curr_dir, prov, sizeof(dsnchoose_t->curr_dir)); } void addfdsns_to_list (TDSNCHOOSER *dsnchoose_t, char *path, Boolean b_reset) { DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[3] = { 400, 100, 150 }; SInt16 outBaseline; Point ioBound; int i; DIR *dir; char *path_buf; struct dirent *dir_entry; struct stat fstat; int b_added; ControlRef widget; WindowRef dlg; if (!dsnchoose_t || !path) return; widget = dsnchoose_t->fdsnlist; dlg = dsnchoose_t->mainwnd; GetThemeDrawingState (&outState); /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (fdsn_notification_item); /* On Mac OS X 10.0.x : clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (fdsn_getset_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, DBITEM_ID); /* Make the clean up */ for (i = 0; i < FDSN_nrows; i++, item++) { CFRelease (FDSN_array[i]); FDSN_array[i] = NULL; FDSN_type[i] = 0; RemoveDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); } ActivateControl (widget); DrawOneControl (widget); /* Global Initialization */ FDSN_nrows = 0; item = DBITEM_ID + 1; if ((dir = opendir (path))) { while ((dir_entry = readdir (dir)) && FDSN_nrows < MAX_ROWS) { asprintf (&path_buf, "%s/%s", path, dir_entry->d_name); b_added = 0; if (stat ((LPCSTR) path_buf, &fstat) >= 0 && S_ISDIR (fstat.st_mode)) { if (dir_entry->d_name && dir_entry->d_name[0] != '.') { FDSN_array[FDSN_nrows] = CFStringCreateWithCString(NULL, dir_entry->d_name, kCFStringEncodingUTF8); FDSN_type[FDSN_nrows] = 0; b_added = 1; } } else if (stat ((LPCSTR) path_buf, &fstat) >= 0 && !S_ISDIR (fstat.st_mode) && strstr (dir_entry->d_name, ".dsn")) { FDSN_array[FDSN_nrows] = CFStringCreateWithCString(NULL, dir_entry->d_name, kCFStringEncodingUTF8); FDSN_type[FDSN_nrows] = 1; b_added = 1; } if (path_buf) free (path_buf); if (b_added) { GetThemeTextDimensions (FDSN_array[FDSN_nrows], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[0] < ioBound.h) colSize[0] = ioBound.h; AddDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); item++; FDSN_nrows++; } } /* Close the directory entry */ closedir (dir); } else create_error (NULL, NULL, "Error during accessing directory information", strerror (errno)); ActivateControl (widget); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (widget, DBNAME_ID, colSize[0] + 20); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); if(outState) DisposeThemeDrawingState (outState); if (b_reset) SetDataBrowserScrollPosition(widget, 0, 0); fill_dir_menu(dsnchoose_t, path); } static BOOL test_driver_connect (TDSNCHOOSER *choose_t, char *connstr) { HENV henv; HDBC hdbc; #if (ODBCVER < 0x300) if (SQLAllocEnv (&henv) != SQL_SUCCESS) #else if (SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv) != SQL_SUCCESS) #endif { _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, SQL_NULL_HDBC, SQL_NULL_HSTMT); return FALSE; } #if (ODBCVER < 0x300) if (SQLAllocConnect (henv, &hdbc) != SQL_SUCCESS) #else SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER); if (SQLAllocHandle (SQL_HANDLE_DBC, henv, &hdbc) != SQL_SUCCESS) #endif { _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, hdbc, SQL_NULL_HSTMT); SQLFreeEnv (henv); return FALSE; } SQLSetConfigMode (ODBC_BOTH_DSN); if (SQLDriverConnect (hdbc, choose_t->mainwnd, connstr, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_PROMPT) != SQL_SUCCESS) { _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, hdbc, SQL_NULL_HSTMT); SQLFreeEnv (henv); return FALSE; } else { SQLDisconnect (hdbc); } #if (ODBCVER < 0x300) SQLFreeConnect (hdbc); SQLFreeEnv (henv); #else SQLFreeHandle (SQL_HANDLE_DBC, hdbc); SQLFreeHandle (SQL_HANDLE_ENV, henv); #endif return TRUE; } static void filedsn_configure (TDSNCHOOSER *choose_t, char *drv, char *dsn, char *in_attrs, BOOL b_add, BOOL verify_conn) { char *connstr = NULL; size_t len; /* current connstr len */ size_t add_len; /* len of appended string */ LPSTR attrs = NULL, curr, tmp, attr_lst = NULL; BOOL b_Save = TRUE; attrs = in_attrs; if (!b_add && !_CheckDriverLoginDlg(drv + STRLEN("DRIVER="))) { /* Get DSN name and additional attributes */ attr_lst = create_gensetup (choose_t->mainwnd, dsn, in_attrs, b_add, &verify_conn); attrs = attr_lst; } if (!attrs) { create_error (choose_t->mainwnd, NULL, "Error adding File DSN:", strerror (ENOMEM)); return; } if (attrs == (LPSTR) - 1L) return; /* Build the connection string */ connstr = strdup (drv); len = strlen (connstr); for (curr = attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "DSN=", STRLEN ("DSN="))) { if (dsn == NULL) { /* got dsn name */ dsn = curr + STRLEN ("DSN="); } continue; } /* append attr */ add_len = 1 + strlen (curr); /* +1 for ';' */ tmp = realloc (connstr, len + add_len + 1); /* +1 for NUL */ if (tmp == NULL) { create_error (choose_t->mainwnd, NULL, "Error adding File DSN:", strerror (errno)); goto done; } connstr = tmp; snprintf (connstr + len, add_len + 1, ";%s", curr); len += add_len; } /* Nothing to do if no DSN */ if (!dsn || STRLEN (dsn) == 0) goto done; if (verify_conn) { BOOL ret; /* Append SAVEFILE */ add_len = strlen (";SAVEFILE=") + strlen (dsn); tmp = realloc (connstr, len + add_len + 1); /* +1 for NUL */ if (tmp == NULL) { create_error (choose_t->mainwnd, NULL, "Error adding file DSN:", strerror (errno)); goto done; } connstr = tmp; snprintf (connstr + len, add_len + 1, ";SAVEFILE=%s", dsn); len += add_len; /* Connect to data source */ ret = test_driver_connect (choose_t, connstr); if (!ret && b_add) { if (create_confirm (choose_t->mainwnd, dsn, "Can't check the connection. Do you want to store the FileDSN without verification ?")) b_Save = TRUE; else b_Save = FALSE; } else b_Save = FALSE; } if (b_Save) { char key[512]; char *p; size_t sz; if (drv) { p = strchr(drv, '='); if (!SQLWriteFileDSN (dsn, "ODBC", "DRIVER", p + 1)) { create_error (choose_t->mainwnd, NULL, "Error adding File DSN:", strerror (errno)); goto done; } } for (curr = attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "DSN=", STRLEN ("DSN="))) continue; else if (!strncasecmp (curr, "PWD=", STRLEN ("PWD="))) continue; else if (!strncasecmp (curr, "SAVEFILE=", STRLEN ("SAVEFILE="))) continue; else if (!strncasecmp (curr, "FILEDSN=", STRLEN ("FILEDSN="))) continue; p = strchr(curr, '='); sz = p - curr < sizeof(key) ? p - curr : sizeof(key); memset(key, 0, sizeof(key)); strncpy(key, curr, sz); if (!SQLWriteFileDSN (dsn, "ODBC", key, p + 1)) { create_error (choose_t->mainwnd, NULL, "Error adding File DSN:", strerror (errno)); goto done; } } } done: if (attr_lst != NULL) free (attr_lst); if (connstr != NULL) free (connstr); } pascal OSStatus filedsn_configure_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) inUserData; DataBrowserItemID first, last; OSStatus err; char str[1024], path[1024]; int id; char *drv = NULL; char *attrs = NULL; char *_attrs = NULL; /* attr list */ size_t len = 0; /* current attr list length (w/o list-terminating NUL) */ char *p, *p_next; WORD read_len; char entries[4096]; char *curr_dir; if (!choose_t) return noErr; curr_dir = choose_t->curr_dir; /* Retrieve the DSN name */ if ((err = GetDataBrowserSelectionAnchor (choose_t->fdsnlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + FDSN_nrows) { id = first - DBITEM_ID - 1; CFStringGetCString(FDSN_array[id], str, sizeof(str), kCFStringEncodingUTF8); if (*curr_dir == '/' && strlen(curr_dir) == 1) snprintf(path, sizeof(path), "/%s", str); else snprintf(path, sizeof(path), "%s/%s", curr_dir, str); if (FDSN_type[id] == 0) /* Directory */ { addfdsns_to_list (choose_t, path, true); } else /* File DSN*/ { /* Get list of entries in .dsn file */ if (!SQLReadFileDSN (path, "ODBC", NULL, entries, sizeof (entries), &read_len)) { create_error (choose_t->mainwnd, NULL, "SQLReadFileDSN failed", NULL); goto done; } /* add params from the .dsn file */ for (p = entries; *p != '\0'; p = p_next) { char *tmp; size_t add_len; /* length of added attribute */ char value[1024]; /* get next entry */ p_next = strchr (p, ';'); if (p_next) *p_next++ = '\0'; if (!SQLReadFileDSN (path, "ODBC", p, value, sizeof(value), &read_len)) { create_error (choose_t->mainwnd, NULL, "SQLReadFileDSN failed", NULL); goto done; } if (!strcasecmp (p, "DRIVER")) { /* got driver keyword */ add_len = strlen ("DRIVER=") + strlen (value) + 1; drv = malloc (add_len); snprintf (drv, add_len, "DRIVER=%s", value); continue; } /* +1 for '=', +1 for NUL */ add_len = strlen (p) + 1 + strlen (value) + 1; /* +1 for list-terminating NUL */; tmp = realloc (attrs, len + add_len + 1); if (tmp == NULL) { create_error (choose_t->mainwnd, NULL, "Error adding file DSN:", strerror (errno)); goto done; } attrs = tmp; snprintf (attrs + len, add_len, "%s=%s", p, value); len += add_len; } if (drv == NULL) { /* no driver found, probably unshareable file data source */ create_error (choose_t->mainwnd, NULL, "Can't configure file DSN without DRIVER keyword (probably unshareable data source?)", NULL); goto done; } if (attrs == NULL) attrs = "\0\0"; else { /* NUL-terminate the list */ attrs[len] = '\0'; _attrs = attrs; } /* Configure file DSN */ filedsn_configure (choose_t, drv, path, attrs, FALSE, TRUE); addfdsns_to_list (choose_t, curr_dir, true); } } } done: if (drv != NULL) free (drv); if (_attrs != NULL) free (_attrs); if ((err = GetDataBrowserSelectionAnchor (choose_t->sdsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->sremove); DeactivateControl (choose_t->sconfigure); DeactivateControl (choose_t->stest); } } return noErr; } pascal OSStatus filedsn_add_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) inUserData; DataBrowserItemID first, last; OSStatus err; SQLCHAR drv[1024] = { 0 }; LPSTR s, attrs; TFDRIVERCHOOSER drvchoose_t; if (!choose_t) return noErr; /* Try first to get the driver name */ SQLSetConfigMode (ODBC_USER_DSN); drvchoose_t.attrs = NULL; drvchoose_t.dsn = NULL; drvchoose_t.driver = NULL; drvchoose_t.curr_dir = choose_t->curr_dir; create_fdriverchooser (choose_t->mainwnd, &drvchoose_t); /* Check output parameters */ if (drvchoose_t.ok) { if (sizeof(drv) > WCSLEN(drvchoose_t.driver) + strlen("DRIVER=")) { s = strcpy(drv, "DRIVER="); s += strlen("DRIVER="); dm_strcpy_W2A(s, drvchoose_t.driver); attrs = drvchoose_t.attrs; filedsn_configure(choose_t, drv, drvchoose_t.dsn, attrs ? attrs :"\0\0", TRUE, drvchoose_t.verify_conn); addfdsns_to_list (choose_t, choose_t->curr_dir, true); } } if (drvchoose_t.driver) free (drvchoose_t.driver); if (drvchoose_t.attrs) free (drvchoose_t.attrs); if (drvchoose_t.dsn) free (drvchoose_t.dsn); if ((err = GetDataBrowserSelectionAnchor (choose_t->fdsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->fremove); DeactivateControl (choose_t->fconfigure); DeactivateControl (choose_t->ftest); } } return noErr; } pascal OSStatus filedsn_remove_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) inUserData; DataBrowserItemID first, last; OSStatus err; if (!choose_t) return noErr; /* Retrieve the DSN name */ if ((err = GetDataBrowserSelectionAnchor (choose_t->fdsnlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + FDSN_nrows) { char str[1024]; char *path; if (FDSN_type[first - DBITEM_ID - 1] == 0) return noErr; /* Get the DSN */ CFStringGetCString(FDSN_array[first - DBITEM_ID - 1], str, sizeof(str), kCFStringEncodingUTF8); asprintf (&path, "%s/%s", choose_t->curr_dir, str); if (path) { if (create_confirm (choose_t->mainwnd, path, "Are you sure you want to remove this File DSN ?")) { /* Call the right function */ if (unlink(path) < 0) { create_error (choose_t->mainwnd, NULL, "Error removing file DSN:", strerror (errno)); } } free(path); addfdsns_to_list (choose_t, choose_t->curr_dir, true); } } } if ((err = GetDataBrowserSelectionAnchor (choose_t->fdsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->fremove); DeactivateControl (choose_t->fconfigure); DeactivateControl (choose_t->ftest); } } return noErr; } pascal OSStatus filedsn_test_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) inUserData; DataBrowserItemID first, last; OSStatus err; char connstr[4096] = { 0 }; if (!choose_t) return noErr; /* Retrieve the DSN name */ if ((err = GetDataBrowserSelectionAnchor (choose_t->fdsnlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + FDSN_nrows) { char str[1024]; char *path; if (FDSN_type[first - DBITEM_ID - 1] == 0) return noErr; /* Get the DSN */ CFStringGetCString(FDSN_array[first - DBITEM_ID - 1], str, sizeof(str), kCFStringEncodingUTF8); asprintf (&path, "%s/%s", choose_t->curr_dir, str); if (path) { /* Create connection string and connect to data source */ snprintf (connstr, sizeof (connstr), "FILEDSN=%s", path); if (test_driver_connect(choose_t, connstr)) { _iodbcdm_messagebox (choose_t->mainwnd, path, "The connection DSN was tested successfully, and can be used at this time."); } free(path); } } } if ((err = GetDataBrowserSelectionAnchor (choose_t->fdsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->fremove); DeactivateControl (choose_t->fconfigure); DeactivateControl (choose_t->ftest); } } return noErr; } pascal OSStatus filedsn_setdir_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) inUserData; char msg[4096]; if (!choose_t) return noErr; /* confirm setting a directory */ snprintf (msg, sizeof (msg), "Are you sure that you want to make '%s' the default file DSN directory?", choose_t->curr_dir); if (!create_confirm (choose_t->mainwnd, NULL, msg)) return noErr; /* write FileDSNPath value */ if (!SQLWritePrivateProfileString ("ODBC", "FileDSNPath", choose_t->curr_dir, "odbcinst.ini")) { create_error (choose_t->mainwnd, NULL, "Error setting default file DSN directory", NULL); return noErr; } return noErr; } #define CHECK_DRVCONN_DIALBOX(path) \ { \ if ((handle = DLL_OPEN(path)) != NULL) \ { \ if (DLL_PROC(handle, "_iodbcdm_drvconn_dialboxw") != NULL) \ { \ DLL_CLOSE(handle); \ retVal = TRUE; \ goto quit; \ } \ else \ { \ if (DLL_PROC(handle, "_iodbcdm_drvconn_dialbox") != NULL) \ { \ DLL_CLOSE(handle); \ retVal = TRUE; \ goto quit; \ } \ } \ DLL_CLOSE(handle); \ } \ } static Boolean _CheckDriverLoginDlg ( char *drv ) { char drvbuf[4096] = { L'\0'}; HDLL handle; Boolean retVal = false; if (!drv) return false; SQLSetConfigMode (ODBC_USER_DSN); if (!access (drv, X_OK)) { CHECK_DRVCONN_DIALBOX (drv); } if (SQLGetPrivateProfileString (drv, "Driver", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } if (SQLGetPrivateProfileString (drv, "Setup", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } SQLSetConfigMode (ODBC_SYSTEM_DSN); if (!access (drv, X_OK)) { CHECK_DRVCONN_DIALBOX (drv); } if (SQLGetPrivateProfileString (drv, "Driver", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } if (SQLGetPrivateProfileString (drv, "Setup", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } quit: return retVal; } libiodbc-3.52.9/iodbcadm/macosx/gensetup.c0000644000076400007640000005363012323210535015347 00000000000000/* * gensetup.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #define GSDSN_CNTL 4007 #define GSVERIFYCONN_CNTL 4008 #define GSLIST_CNTL 4006 #define GSKEYWORD_CNTL 4004 #define GSVALUE_CNTL 4005 #define GSADD_CNTL 4002 #define GSUPDATE_CNTL 4003 #define GSOK_CNTL 4000 #define GSCANCEL_CNTL 4001 static char *STRCONN = "DSN=%s\0Description=%s\0\0"; static int STRCONN_NB_TOKENS = 2; UInt32 DSNSETUP_nrows; CFStringRef DSNSETUP_array[2][256]; TGENSETUP *DSNSETUP = NULL; static pascal OSStatus dsnsetup_getset_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean changeValue) { OSStatus err = noErr; if (!changeValue) switch (property) { case GSKEYWORD_ID: SetDataBrowserItemDataText (itemData, DSNSETUP_array[0][itemID - DBITEM_ID - 1]); break; case GSVALUE_ID: SetDataBrowserItemDataText (itemData, DSNSETUP_array[1][itemID - DBITEM_ID - 1]); break; case kDataBrowserItemIsActiveProperty: if (itemID > DBITEM_ID && itemID <= DBITEM_ID + DSNSETUP_nrows) err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsEditableProperty: err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsContainerProperty: err = SetDataBrowserItemDataBooleanValue (itemData, itemID == DBITEM_ID); break; case kDataBrowserContainerAliasIDProperty: break; case kDataBrowserItemParentContainerProperty: break; default: err = errDataBrowserPropertyNotSupported; break; } else err = errDataBrowserPropertyNotSupported; return err; } static void dsnsetup_notification_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message) { static Boolean ignore_next = false, selected = false; switch (message) { case kDataBrowserItemSelected: if (DSNSETUP) { ActivateControl (DSNSETUP->bupdate); DrawOneControl (DSNSETUP->bupdate); SetControlData (DSNSETUP->key_entry, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &DSNSETUP_array[0][itemID - DBITEM_ID - 1]); DrawOneControl (DSNSETUP->key_entry); SetControlData (DSNSETUP->value_entry, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &DSNSETUP_array[1][itemID - DBITEM_ID - 1]); DrawOneControl (DSNSETUP->value_entry); } if (selected) ignore_next = true; else selected = true; break; case kDataBrowserItemDeselected: if (!ignore_next && DSNSETUP) { DeactivateControl (DSNSETUP->bupdate); DrawOneControl (DSNSETUP->bupdate); SetControlData (DSNSETUP->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (DSNSETUP->key_entry); SetControlData (DSNSETUP->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (DSNSETUP->value_entry); selected = false; } else { ignore_next = false; selected = true; } break; }; } static void addkeywords_to_list (ControlRef widget, LPCSTR attrs, TGENSETUP * gensetup_t) { DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; char *curr, *cour; int i; if (!widget) return; GetThemeDrawingState (&outState); /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (dsnsetup_notification_item); /* On Mac OS X 10.0.x : this is clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (dsnsetup_getset_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, DBITEM_ID); /* Make the clean up */ for (i = 0; i < DSNSETUP_nrows; i++) { CFRelease (DSNSETUP_array[0][i]); DSNSETUP_array[0][i] = NULL; CFRelease (DSNSETUP_array[1][i]); DSNSETUP_array[1][i] = NULL; } /* Global Initialization */ DSNSETUP_nrows = 0; item = DBITEM_ID + 1; for (curr = (LPSTR) attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "DSN=", STRLEN ("DSN=")) || !strncasecmp (curr, "Driver=", STRLEN ("Driver=")) || !strncasecmp (curr, "Description=", STRLEN ("Description="))) continue; if ((cour = strchr ((char*)curr, '='))) { *cour = '\0'; DSNSETUP_array[0][DSNSETUP_nrows] = CFStringCreateWithCString (NULL, curr, kCFStringEncodingUTF8); *cour = '='; DSNSETUP_array[1][DSNSETUP_nrows] = CFStringCreateWithCString (NULL, ((char*)cour) + 1, kCFStringEncodingUTF8); } else DSNSETUP_array[0][DSNSETUP_nrows] = CFStringCreateWithCString (NULL, "", kCFStringEncodingUTF8); for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (DSNSETUP_array[i][DSNSETUP_nrows], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } AddDataBrowserItems (widget, DBITEM_ID, 1, &item, GSKEYWORD_ID); item++; DSNSETUP_nrows++; } ActivateControl (widget); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (widget, GSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, GSVALUE_ID, colSize[1] + 20); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); } static void parse_attribute_line (TGENSETUP * gensetup_t, LPCSTR dsn, LPCSTR attrs, BOOL add) { if (dsn) { SetControlData (gensetup_t->dsn_entry, 0, kControlEditTextTextTag, STRLEN (dsn), (UInt8 *) dsn); if (add) ActivateControl (gensetup_t->dsn_entry); else DeactivateControl (gensetup_t->dsn_entry); DrawOneControl (gensetup_t->dsn_entry); } addkeywords_to_list (gensetup_t->key_list, attrs, gensetup_t); } pascal OSStatus gensetup_add_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TGENSETUP *gensetup_t = (TGENSETUP *) inUserData; DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; CFStringRef data[2]; Size len; int i = 0, j; if (gensetup_t) { GetThemeDrawingState (&outState); GetControlData (gensetup_t->key_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[0], &len); if (CFStringGetLength(data[0])) { GetControlData (gensetup_t->value_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[1], &len); /* Try to see if the keyword already exists */ for (i = 0; i < DSNSETUP_nrows; i++, item++) if (CFStringCompare (data[0], DSNSETUP_array[0][i], 0) == kCFCompareEqualTo) goto done; /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (dsnsetup_notification_item); /* On Mac OS X 10.0.x : this is clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (dsnsetup_getset_item); SetDataBrowserCallbacks (gensetup_t->key_list, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (gensetup_t->key_list, DBITEM_ID); /* An update operation */ if(ikey_list, DBITEM_ID, 1, &item, GSKEYWORD_ID, kDataBrowserItemNoProperty); } else if(len) { DSNSETUP_array[0][i] = data[0]; DSNSETUP_array[1][i] = data[1]; AddDataBrowserItems (gensetup_t->key_list, DBITEM_ID, 1, &item, GSKEYWORD_ID); DSNSETUP_nrows++; } for(j = 0 ; j < DSNSETUP_nrows ; j++) { for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (DSNSETUP_array[i][j], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } } ActivateControl (gensetup_t->key_list); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (gensetup_t->key_list, GSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (gensetup_t->key_list, GSVALUE_ID, colSize[1] + 20); DrawOneControl (gensetup_t->key_list); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); } done: SetControlData (gensetup_t->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (gensetup_t->key_entry); SetControlData (gensetup_t->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (gensetup_t->value_entry); DeactivateControl (DSNSETUP->bupdate); DrawOneControl (DSNSETUP->bupdate); } return noErr; } pascal OSStatus gensetup_update_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TGENSETUP *gensetup_t = (TGENSETUP *) inUserData; DataBrowserItemID item = DBITEM_ID + 1, first, last; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; CFStringRef data[2]; Size len; int i = 0, j; if (gensetup_t) { GetThemeDrawingState (&outState); GetControlData (gensetup_t->key_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[0], &len); if (CFStringGetLength(data[0])) { GetControlData (gensetup_t->value_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[1], &len); if(GetDataBrowserSelectionAnchor (gensetup_t->key_list, &first, &last) == noErr) { i = first - DBITEM_ID - 1; item += i; } else i = 0; /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (dsnsetup_notification_item); /* On Mac OS X 10.0.x : this is clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (dsnsetup_getset_item); SetDataBrowserCallbacks (gensetup_t->key_list, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (gensetup_t->key_list, DBITEM_ID); /* An update operation */ if(ikey_list, DBITEM_ID, 1, &item, GSKEYWORD_ID, kDataBrowserItemNoProperty); } for(j = 0 ; j < DSNSETUP_nrows ; j++) { for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (DSNSETUP_array[i][j], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } } ActivateControl (gensetup_t->key_list); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (gensetup_t->key_list, GSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (gensetup_t->key_list, GSVALUE_ID, colSize[1] + 20); DrawOneControl (gensetup_t->key_list); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); } SetControlData (gensetup_t->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (gensetup_t->key_entry); SetControlData (gensetup_t->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (gensetup_t->value_entry); DeactivateControl (DSNSETUP->bupdate); DrawOneControl (DSNSETUP->bupdate); } return noErr; } pascal OSStatus gensetup_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TGENSETUP *gensetup_t = (TGENSETUP *) inUserData; char *cour, *curr; int i = 0, size = 0; char msg[1024], msg1[1024]; Size len; if (gensetup_t) { /* What is the size of the block to malloc */ GetControlDataSize (gensetup_t->dsn_entry, 0, kControlEditTextTextTag, &len); size += len + STRLEN ("DSN=") + 1; size += STRLEN ("Description=") + 1; /* Malloc it */ if ((gensetup_t->connstr = (char *) malloc (++size))) { for (curr = STRCONN, cour = gensetup_t->connstr; i < STRCONN_NB_TOKENS; i++, curr += (STRLEN (curr) + 1)) switch (i) { case 0: GetControlData (gensetup_t->dsn_entry, 0, kControlEditTextTextTag, sizeof (msg), msg, &len); msg[len] = '\0'; sprintf ((char*)cour, (char*)curr, msg); cour += (STRLEN (cour) + 1); break; case 1: msg[0] = '\0'; sprintf ((char*)cour, (char*)curr, msg); cour += (STRLEN (cour) + 1); break; }; for (i = 0; i < DSNSETUP_nrows; i++) { CFStringGetCString (DSNSETUP_array[0][i], msg, sizeof (msg), kCFStringEncodingUTF8); CFStringGetCString (DSNSETUP_array[1][i], msg1, sizeof (msg1), kCFStringEncodingUTF8); cour = (char *) gensetup_t->connstr; gensetup_t->connstr = (LPSTR) malloc (size + STRLEN (msg) + STRLEN (msg1) + 2); if (gensetup_t->connstr) { memcpy (gensetup_t->connstr, cour, size); sprintf (((char*)gensetup_t->connstr) + size - 1, "%s=%s", msg, msg1); free (cour); size += STRLEN (msg) + STRLEN (msg1) + 2; } else gensetup_t->connstr = cour; } ((char*)gensetup_t->connstr)[size - 1] = '\0'; } gensetup_t->verify_conn = GetControlValue (gensetup_t->verify_conn_cb) != 0; DisposeWindow (gensetup_t->mainwnd); gensetup_t->mainwnd = NULL; gensetup_t->dsn_entry = gensetup_t->verify_conn_cb = NULL; gensetup_t->key_list = NULL; DSNSETUP = NULL; } return noErr; } pascal OSStatus gensetup_cancel_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TGENSETUP *gensetup_t = (TGENSETUP *) inUserData; if (gensetup_t) { gensetup_t->connstr = (LPSTR) - 1L; gensetup_t->dsn_entry = gensetup_t->verify_conn_cb = NULL; gensetup_t->key_list = NULL; DSNSETUP = NULL; DisposeWindow (gensetup_t->mainwnd); gensetup_t->mainwnd = NULL; } return noErr; } LPSTR create_gensetup (HWND hwnd, LPCSTR dsn, LPCSTR attrs, BOOL add, BOOL *verify_conn) { EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; RgnHandle cursorRgn = NULL; TGENSETUP gensetup_t; ControlID controlID; WindowRef wgensetup; ControlRef control; EventRecord event; IBNibRef nibRef; OSStatus err; char msg[1024]; gensetup_t.verify_conn = true; /* Search the bundle for a .nib file named 'odbcadmin'. */ /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier ( CFSTR ("org.iodbc.adm")), CFSTR ("gensetup"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ CreateWindowFromNib (nibRef, CFSTR ("Dialog"), &wgensetup); DisposeNibReference (nibRef); /* Set the title with the DSN */ if (dsn) { msg[0] = STRLEN ("Setup of ") + STRLEN(dsn); sprintf (msg+1, "Setup of %s", (char*)dsn); SetWTitle (wgensetup, msg); } /* Install handlers for the finish button, the cancel */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSDSN_CNTL, wgensetup, gensetup_t.dsn_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSVERIFYCONN_CNTL, wgensetup, gensetup_t.verify_conn_cb); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSLIST_CNTL, wgensetup, gensetup_t.key_list); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSKEYWORD_CNTL, wgensetup, gensetup_t.key_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSVALUE_CNTL, wgensetup, gensetup_t.value_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSUPDATE_CNTL, wgensetup, gensetup_t.bupdate); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSADD_CNTL, wgensetup, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (gensetup_add_clicked), 1, &controlSpec, &gensetup_t, NULL); InstallEventHandler (GetControlEventTarget (gensetup_t.bupdate), NewEventHandlerUPP (gensetup_update_clicked), 1, &controlSpec, &gensetup_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSOK_CNTL, wgensetup, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (gensetup_ok_clicked), 1, &controlSpec, &gensetup_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSCANCEL_CNTL, wgensetup, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (gensetup_cancel_clicked), 1, &controlSpec, &gensetup_t, NULL); /* Parse the attributes line */ gensetup_t.mainwnd = wgensetup; parse_attribute_line (&gensetup_t, dsn, attrs, add); AdvanceKeyboardFocus (wgensetup); /* Show the window and run the loop */ DeactivateControl (gensetup_t.bupdate); DSNSETUP = &gensetup_t; ShowWindow (wgensetup); /* The main loop */ while (gensetup_t.mainwnd) { switch (WaitNextEvent (everyEvent, &event, 60L, cursorRgn)) { }; } *verify_conn = gensetup_t.verify_conn; } else goto error; return gensetup_t.connstr; error: fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); return gensetup_t.connstr; } libiodbc-3.52.9/iodbcadm/macosx/odbcdriverf.c0000644000076400007640000000630112323210535015777 00000000000000/* * driverchooser.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ libiodbc-3.52.9/iodbcadm/macosx/iodbcadm.r0000644000076400007640000071171312323210535015301 00000000000000/* * iodbcadm.r * * $Id$ * * The Macintosh resources * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include data 'cicn' (10000) { $"0000 0000 8010 0000 0000 0020 0020 0000" /* ....€...... . .. */ $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ $"0004 0001 0004 0000 0000 0000 0000 0000" /* ................ */ $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ $"0000 0000 0000 00FF FFFE 00FF FFFE 00FF" /* .......ÿÿþ.ÿÿþ.ÿ */ $"FFFE 00FF FFFE 00FF FFFE 01FF FFFE 07FF" /* ÿþ.ÿÿþ.ÿÿþ.ÿÿþ.ÿ */ $"FFFE 0FFF FFFE 1FFF FFFE 3FFF FFFE 3FFF" /* ÿþ.ÿÿþ.ÿÿþ?ÿÿþ?ÿ */ $"FFFE 7FFF FFFE 7FFF FFFE FFFF FFFE FFFF" /* ÿþ.ÿÿþ.ÿÿþÿÿÿþÿÿ */ $"FFFE FFFF FFFE FFFF FFFE FFFF FFFE FFFF" /* ÿþÿÿÿþÿÿÿþÿÿÿþÿÿ */ $"FFFE FFFF FFFE FFFF FFFE 7FFF FF80 7FFF" /* ÿþÿÿÿþÿÿÿþ.ÿÿ€.ÿ */ $"FF80 3FFF FF00 3FFF FF00 1FFF FE00 0FFF" /* ÿ€?ÿÿ.?ÿÿ..ÿþ..ÿ */ $"FC00 07FF F800 01FF E000 007F 8000 0000" /* ü..ÿø..ÿà...€... */ $"0000 0000 0000 00FF FFFE 00BB BBBA 00FF" /* .......ÿÿþ.»»º.ÿ */ $"FFFE 0080 0002 00FF 8002 01AA 6002 0757" /* ÿþ.€...ÿ€..ª`..W */ $"F802 0AAF FC02 157F FE02 2ABF FF02 353F" /* ø..¯ü...þ.*¿ÿ.5? */ $"FF02 6AFF FE82 555F FF82 AAFF FC42 D57F" /* ÿ.jÿþ‚U_ÿ‚ªÿüBÕ. */ $"FA42 AA7F FC42 D5FF FC42 AAFF F842 D55F" /* úBª.üBÕÿüBªÿøBÕ_ */ $"F042 AABF F842 D55F F07E 6AAF F080 5553" /* ðBª¿øBÕ_ð~j¯ð€US */ $"E080 2A83 E100 3503 E100 1801 E200 0800" /* à€*ƒá.5.á...â... */ $"C400 0600 1800 0180 6000 007F 8000 0000" /* Ä......€`...€... */ $"0000 0000 0000 0000 0007 0000 FFFF FFFF" /* ............ÿÿÿÿ */ $"FFFF 0001 CCCC CCCC CCCC 0002 9999 6666" /* ÿÿ..ÌÌÌÌÌÌ..™™ff */ $"3333 0003 0000 9999 FFFF 0004 0000 6666" /* 33....™™ÿÿ....ff */ $"0000 0005 0000 0000 DDDD 0006 8888 8888" /* ........ÝÝ..ˆˆˆˆ */ $"8888 000F 0000 0000 0000 0000 0000 0000" /* ˆˆ.............. */ $"0000 0000 0000 0000 0000 0000 0000 5555" /* ..............UU */ $"5555 5555 5555 5555 5550 0000 0000 5055" /* UUUUUUUUUP....PU */ $"5055 5055 5055 5055 50F0 0000 0000 5555" /* PUPUPUPUPð....UU */ $"5555 5555 5555 5555 55F0 0000 0000 F000" /* UUUUUUUUUð....ð. */ $"0000 0000 0000 0000 00F0 0000 0000 FFFF" /* .........ð....ÿÿ */ $"FFFF F016 6066 6066 60F0 0000 000F F131" /* ÿÿð.`f`f`ð....ñ1 */ $"3131 6FF0 0000 0000 00F0 0000 0FF3 1313" /* 11oð.....ð...ó.. */ $"1444 444F F066 6066 60F0 0000 F131 3131" /* .DDOðf`f`ð..ñ111 */ $"4444 4444 4F00 0000 00F0 000F 1313 1344" /* DDDDO....ð.....D */ $"4444 4444 44F6 6066 60F0 00F1 3131 3144" /* DDDDDö`f`ð.ñ111D */ $"4344 4444 444F 0000 00F0 00F3 1313 1644" /* CDDDDO...ð.ó...D */ $"3344 4444 444F 6066 60F0 0F31 3131 3433" /* 3DDDDO`f`ð.11143 */ $"4444 4444 4446 F000 00F0 0F13 1313 6414" /* DDDDDFð..ð....d. */ $"4444 4434 4444 F166 60F0 F131 3131 3444" /* DDD4DDñf`ðñ1114D */ $"4444 3444 4466 6F00 00F0 F313 1313 1344" /* DD4DDfo..ðó....D */ $"4423 4444 4646 6F66 60F0 F131 3131 6424" /* D#DDFFof`ðñ111d$ */ $"4344 2422 4466 6F10 00F0 F313 1313 4443" /* CD$"Dfo..ðó...DC */ $"3324 2434 2466 6F66 60F0 F131 3131 4423" /* 3$$4$fof`ðñ111D# */ $"4242 4443 2666 6F10 00F0 F313 1313 1312" /* BBDC&fo..ðó..... */ $"2424 4422 6666 6F66 60F0 F131 3131 3134" /* $$D"ffof`ðñ11114 */ $"4242 4444 4666 6F10 00F0 F313 1313 1314" /* BBDDFfo..ðó..... */ $"2424 4444 6666 6FFF FFF0 0F31 3131 3131" /* $$DDffoÿÿð.11111 */ $"3444 4444 6666 F000 0000 0F13 1313 1313" /* 4DDDffð......... */ $"1644 4446 6666 F000 0000 00F1 3131 3161" /* .DDFffð....ñ111a */ $"6144 4446 666F 0000 0000 00F3 1313 1616" /* aDDFfo.....ó.... */ $"1644 4446 666F 0000 0000 000F 3161 6161" /* .DDFfo......1aaa */ $"6664 4446 66F0 0000 0000 0000 F616 1666" /* fdDFfð......ö..f */ $"6666 4466 6F00 0000 0000 0000 0FF6 6666" /* ffDfo........öff */ $"6666 666F F000 0000 0000 0000 000F F666" /* fffoð.........öf */ $"6666 6FF0 0000 0000 0000 0000 0000 0FFF" /* ffoð...........ÿ */ $"FFFF F000 0000 0000 0000 0000 0000 0000" /* ÿÿð............. */ $"0000 0000 0000 0000 0000" /* .......... */ }; resource 'PICT' (10000) { 16848, {0, 0, 260, 117}, $"0011 02FF 0C00 FFFE 0000 0048 0000 0048" $"0000 0000 0000 0104 0075 0000 0000 00A1" $"01F2 0016 3842 494D 0000 0000 0000 0104" $"0075 4772 8970 68AF 626A 0001 000A 0000" $"0000 0104 0075 009A 0000 00FF 81D4 0000" $"0000 0104 0075 0000 0004 0000 0000 0048" $"0000 0048 0000 0010 0020 0003 0008 0000" $"0000 0000 0000 0000 0000 0000 0000 0104" $"0075 0000 0000 0104 0075 0040 0162 7F00" $"4472 7875 7B71 7876 7B75 7B71 7875 7B75" $"7C71 7875 7B75 7B72 7875 7B74 7B72 7976" $"7B75 7B71 7873 7975 7C71 7875 7B75 7B72" $"7875 7B74 7B74 7B76 7B75 7B71 7875 7B75" $"7B72 7875 7B73 7972 7875 7B75 7B72 7873" $"7975 7B74 7B75 7B75 7B72 7875 7B75 7B72" $"7875 7B74 7B72 7876 7B75 7B71 7876 7C75" $"7BA7 A7E4 174D 848A 8388 838A 8489 837F" $"8883 8983 8883 8983 8A83 8883 8884 8983" $"8882 8884 8A83 8883 8983 8983 8983 8983" $"8A83 8883 8884 8983 8882 8884 8A83 8883" $"8883 8983 8883 8884 8A83 8883 8984 8983" $"8883 8884 8A83 8983 8883 8A83 8883 8884" $"8A83 8983 8884 8983 8882 8884 8A83 8883" $"8883 8982 8883 88B1 B1E4 4176 C2C8 B8BD" $"C2C8 BABF B8BD C0C6 B8BD B8BE C2C8 B8BD" $"5EB8 BDC1 C6B8 BDB7 BDC4 CAB9 BDB7 BCC0" $"C6B8 BDB8 BEC2 C8B8 BDB8 BDC1 C6B8 BDB7" $"BDC2 C8B9 BDB8 BDC0 C6B8 BDB8 BDC2 C8B8" $"BDB8 BDC1 C6B8 BDB8 BDC2 C8B8 BDB8 BDC1" $"C7B8 BDB8 BDC2 C8B7 BCB8 BDC1 C6B8 BDB7" $"BDC2 C8B9 BDB8 BDC0 C6B8 BDB8 BDD1 D1E4" $"0162 7F25 0041 787B A578 78A5 7B7B A578" $"78A5 7B7B A578 78A5 7B7B A578 78A5 7B7B" $"A578 78A5 7B7B A678 78A4 797B A578 78A5" $"7B7B A578 78A5 7B7B A57A 7AA5 7B7B A578" $"78A5 7B7B A578 78A5 7B79 A478 78A5 7B7B" $"A678 78A4 797B A57B 7AA5 7B7B A678 78A6" $"7B7B A578 78A5 7B7B A678 78A5 7B7B A578" $"78A6 7C7B 75A7 D4D6 3218 588A 88B1 8A8A" $"B189 887F B189 89B1 8888 B18A 8AB1 8888" $"B189 89B1 8888 B189 89B1 8889 B289 89B2" $"8988 B18A 8AB1 8888 B189 89B1 8888 B189" $"89B1 8888 B189 89B1 8888 B18A 8AB1 8889" $"B289 89B1 8888 B28A 8AB2 8988 B18A 89B1" $"8888 B28A 8AB2 8988 B189 89B1 8888 B28A" $"8AB1 8888 B189 89B0 8888 83B1 DCD6 5D43" $"9BC8 BDE3 C8C8 E4BF BDE3 C6C6 E3BD BDE3" $"C8C8 E3BD 5EBD E3C6 C6E3 BDBD E3C9 C9E3" $"BDBC E2C6 C6E3 BDBD E3C8 C8E3 BDBD E3C6" $"C6E3 BDBD E3C8 C8E3 BDBD E3C6 C6E3 BDBD" $"E3C8 C8E3 BDBD E3C6 C6E3 BDBD E4C8 C8E3" $"BDBD E3C7 C6E3 BDBD E4C8 C8E2 BCBD E3C6" $"C6E3 BDBD E4C8 C8E3 BDBD E3C6 C6E3 BDBD" $"B8D1 FBD6 00CD 0202 2943 FC75 0176 74FC" $"75FF 76FE 7500 76FC 7500 74FE 7503 7475" $"7674 FC75 FF76 FE75 0076 FC75 0074 FE75" $"0374 7576 74FC 7503 7674 7574 F675 FF74" $"E975 0176 74FC 7508 7672 78AA D1A8 092F" $"57FB 8301 8283 F283 0082 FE83 0382 8383" $"82F1 8300 82FE 8303 8283 8382 FB83 0282" $"8382 F683 FF82 E883 0082 FB83 0884 89B0" $"D7B0 1F43 93BB FDB8 01B9 B7FC B8FF B9FE" $"B801 B9B8 FDB8 00B7 FEB8 03B7 B8B9 B7FC" $"B8FF B9FE B800 B9FC B801 B7B8 FEB7 02B8" $"B9B7 FCB8 03B9 B7B8 B7FA B8FF B7FF B8FF" $"B7ED B8FF B7FF B801 B9B7 FCB8 05B9 C1C6" $"CAEF D100 7903 020F 0043 EB44 0045 EA44" $"0045 E244 0043 FD44 0643 4445 4443 4445" $"FE44 0043 FD44 0045 F844 0841 3FAA AAA8" $"0918 2557 FA56 F256 0057 EA56 0057 E256" $"0055 FD56 0655 5657 5655 5657 FE56 0055" $"FD56 0057 F856 0158 57FE B003 1F2E 5D93" $"EF8F FD8F 0090 EA8F 0090 DB8F 0090 FE8F" $"0090 F98F 0090 F88F 0499 98CA CAD1 00AC" $"0B0F 013C 433E 3E40 3D3E 3E3C 3CEF 3EFF" $"3FF9 3EFF 3FFB 3EFF 3CFD 3EFF 3FF9 3EFD" $"3CFE 4107 3F44 443C 3C3E 3E40 FB3E 003D" $"FE3E 003D FD41 EF3E 083B 3C7C A7A8 1809" $"5057 FE5A 0358 5959 5A00 5AFB 59FF 5AF7" $"59FF 5AFB 59FD 5AFB 59FF 5AFD 59FF 5AF9" $"59FD 5AFE 5807 5756 565A 5A59 595A FB59" $"0358 5A5A 59FC 58EE 590A 5A87 B0B0 2D1E" $"8D93 A5A5 A4F6 A3FF A5FF A3F1 A3FF A5E5" $"A3FF 9903 9B9A 8F8F FDA3 00A4 FAA3 FFA5" $"FFA3 FF9B FF99 EDA3 02B6 DCD3 00C3 0329" $"0000 43FC 3E02 3D3C 3CEF 3EFF 3F01 3E3D" $"FB3E FF3F FB3E FF3C FD3E FF3F 013E 3DFB" $"3EFD 3C07 7278 7278 7576 3C3B F73E 003D" $"FE3E 0372 3F72 41FC 3E00 40FC 3E00 3DFB" $"3EFF 3CFF A706 A82F 0725 575A 5AFE 5901" $"585A 005A FB59 FF5A F759 FF5A 0159 58FD" $"59FD 5AFB 59FF 5AFD 59FF 5A01 5958 FB59" $"FD5A 0684 8984 8A83 845A F559 065A 5959" $"8457 8458 FC59 005A FC59 0058 FB59 FF5A" $"FEB0 0542 1B5D 93A5 A5F5 A3FF A5FF A3F1" $"A3FF A5E5 A305 C1C6 C2C8 B7B8 F5A3 07A4" $"A5A3 A3C2 9AC1 99FC A300 A4F3 A3FF DC00" $"D300 BF07 010F 3C43 3F3F 3C3C FD3E FF3C" $"F53E FF3F E33E FF3C FD3E FF41 0972 787C" $"767B 7578 787B 75F7 3E0F 4475 7278 7B7A" $"7B75 7841 4343 403E 3F3F F53E 067C A7A8" $"0918 5057 FD5A FE59 0459 5A5A 5959 FD5A" $"FF59 FF5A FF59 FF5A E759 FF5A FF59 FF5A" $"FD59 FF58 0B84 8A87 8288 8389 8988 835A" $"5AFB 59FF 5A0C 5683 8489 8887 8883 8A58" $"5757 5AF2 5906 88B1 B01E 2D8D 93F5 A3FD" $"A5FF A3FF A5E3 A3FF A5F9 A3FF 990B C2C8" $"B2AC BDB8 C6C6 BDB8 A5A5 FBA3 FFA5 0C8F" $"B8C1 C6BD BCBD B8C8 9B99 99A4 F2A3 02B5" $"DBD1 00CE 0700 2900 433F 3F3C 3CFD 3EFF" $"3CF5 3EFF 3FE3 3EFF 3CFD 3E0C 3F72 7878" $"7676 7B74 7772 7B75 77FC 3E00 3DFE 3E03" $"757B 7878 FE75 0A7B 7278 7543 3E40 3F3F" $"3E3D F73E FFA7 04A8 072F 2557 FD5A FE59" $"0459 5A5A 5959 FD5A FF59 FF5A FF59 FF5A" $"E759 FF5A FF59 FF5A FD59 0D57 848A 8A82" $"8288 8288 8488 838B 5AFD 5907 5859 5A5A" $"8388 8989 FE83 0688 848A 8457 595A FE59" $"0058 F759 FFB1 04B0 1B42 5D93 F5A3 FDA5" $"FFA3 FFA5 E3A3 FFA5 F9A3 0D98 C1C8 C8AC" $"ACBD B7C5 C1BD B8D1 A5FB A3FF A503 B8BD" $"C6C6 FEB8 06BD C2C8 C299 A3A4 F3A3 FFDB" $"00D1 00CB 030F 013A 41DD 3E00 3DFB 3E00" $"3DFD 3EFF 3FF7 3E0D 747A 7575 7B7B 767C" $"767C 757B 7575 FC3E 063D 4178 757B 7878" $"FE7B 0675 7B74 7871 4141 F93E FF43 0A41" $"7244 757E A9A9 180A 5157 FA59 0259 5A5A" $"E759 0058 FB59 0058 FD59 FF5A FB59 FF5A" $"FF59 0D83 8983 8388 8882 8882 8883 8883" $"83FC 59FF 5804 8983 8881 81FE 8806 8389" $"8289 8358 58F9 59FF 570A 5884 5683 87B1" $"B130 2290 96F9 A3FF A5F9 A3DB A3FF A5FF" $"A30D C1C6 B8B8 BDBD B0B5 B0B5 B8BD B8B8" $"FBA3 0599 C6B8 BDA4 A4FE BD06 B8BC B6C6" $"C09B 9BF9 A3FF 9906 9BC2 8FB8 AAD2 D200" $"C803 010F 0041 DC3E 003D F73E FF3F FB3E" $"113D 3E3E 3D7A 7A7B 7B90 7CA7 767C 927B" $"757A 7BFB 3E0F 7278 757B 7E94 7B90 7BA5" $"757B 7878 7141 FB3E FF3D 0C74 7A78 797B" $"75A8 C1A8 0A18 2757 FA59 0259 5A5A E659" $"0058 F759 FF5A FA59 105A 5958 8989 8888" $"9D89 B182 889C 8883 8788 FB59 0A84 8983" $"8887 9D88 9D88 B183 FE89 0183 58FB 59FF" $"580C 8389 8A8B 8883 B0C8 B022 3062 96F9" $"A3FF A5F9 A3DB A311 A4A5 A3A3 C6C6 BDBD" $"D0BE DBB0 B5C8 BDB8 BCBD FBA3 0FC1 C6B8" $"BDAA BEBD D0BD E3B7 BCC6 C6C2 9BF9 A308" $"C1C6 C8C8 BDB8 D1E8 D100 E403 2B02 3544" $"D93E FF3C FF3E 013B 3CFB 3EFF 3CFF 3E13" $"3D3E 4178 7575 7776 7C76 7B75 7878 7278" $"757B 7544 FD3E 0F7B 757C 7672 787B 7B75" $"757C A275 7578 41FB 3E0E 757B 757B 7676" $"7278 AAD6 D22E 0749 56FB 5900 5A00 5AE1" $"59FF 5AFE 5902 5A59 59FB 5AFF 5903 5859" $"588A FE83 0C82 8882 8983 8989 848A 8388" $"8356 FD59 0F88 8388 8284 8988 8883 8388" $"AD83 838A 58FD 59FF 5A0E 8388 8388 8282" $"8489 B0DC D642 1D81 8DFB A3FF A5F7 A3E7" $"A300 A2FE A3FD A5FB A311 9BC8 B8B8 B1B0" $"BDB8 BFBA C6C6 C2C8 B8BD B88F FDA3 0FBD" $"B8B5 B0C1 C6BD BDB8 B8B5 D7B8 B8C8 9BFD" $"A3FF A50A B8BD B8BD B0B0 C1C6 CAF4 E500" $"E803 012A 0044 D93E FF3C 0340 3E3C 3CFC" $"3E02 3F3C 3CFD 3E11 4172 7B7B A77C 7C76" $"7B75 7972 7878 757B 7544 FD3E 0F75 7B76" $"A778 7876 757B 7B76 7C7B 7B72 3FFB 3E0E" $"7B75 7B75 7CA7 7878 AAD1 AB06 2D22 56FB" $"5900 5A00 5AE1 59FE 5A04 595A 5A59 59FE" $"5A02 5B5A 5AFD 5911 5884 8888 B188 8882" $"8983 8A84 8A8A 8388 8356 FD59 0A83 8882" $"B189 8983 8388 8882 FE88 0184 57FD 59FF" $"5A0E 8883 8883 88B1 8989 B0D7 AF1B 4158" $"8DFB A3FF A5F7 A3E9 A300 A4FC A3FE A500" $"A6FB A311 9BC2 BDBD DBB5 BDB8 BFBA C7C1" $"C8C8 B8BD B88F FDA3 0FB8 BDB0 DBC6 C6B9" $"B8BD BDB0 B5BD BDC2 9AFD A3FF A50A BDB8" $"BDB8 B5DB C6C6 CAEF BF00 EDFF 0001 3C45" $"FD3E FF3F E13E 003D FE3E FD41 033E 3D45" $"44F9 3E01 4178 FE75 137A 8F79 76A7 757B" $"937F 7378 7241 3E3E 4476 7872 7BFE 7509" $"A579 767C 7B75 787D 7575 FD3E 1441 7877" $"7D7C A178 7275 75AB D7A8 0C0D 5058 5959" $"5A5A FE59 E259 0058 FE59 FD58 0359 5857" $"56F9 5901 588A FE83 1387 9E89 82B1 8388" $"9B88 8589 8458 5959 5683 8984 88FE 8309" $"B289 8288 8983 8287 8383 FD59 1458 8982" $"8788 AC8A 8483 83AF DBB0 272A 8D94 A3A3" $"A5A5 F3A3 E9A3 FF9B FF99 FFA3 0190 8FF9" $"A301 9BC8 FEB8 13BC D2BF B0DB B8BD BFAD" $"C2C6 C29B A3A3 8FB9 C6C1 BDFE B809 E3BC" $"B0B5 BCB7 B1B5 B8B8 FDA3 0C99 C6B0 B5B5" $"D6C8 C2B8 B8C1 ECD1 00F9 0327 0000 43FD" $"3EFF 3FE0 3E0D 3D3E 3E41 7278 7377 7775" $"753E 3E3D FE3E 033D 3E41 72FE 7B13 7579" $"7976 7C7B 757E 9379 7878 413E 3E45 7578" $"7875 FE7B 0973 7992 7C75 7B7D 927B 43FD" $"3E14 7278 7777 7C76 7877 7B7B C4C4 D430" $"0C24 5759 595A 5AFE 59E1 590D 5859 5958" $"8489 858A 8A83 8359 5958 FE59 0358 5958" $"84FE 8813 8389 8982 8888 8387 9B8A 898A" $"5859 5957 8389 8983 FE88 0983 899C 8883" $"8987 9C88 55FD 5914 8489 8282 8882 8A89" $"8888 C8C8 DB4C 275C 93A3 A3A5 A5F3 A3E9" $"A307 9BC2 C6C2 CFCF B8B8 F9A3 019B C2FE" $"BD13 B8BF BFB0 B5BD B8AC BFC7 C6C8 9BA3" $"A390 B8C6 C6B8 FEBD 09B7 BCC8 B5B7 BCB5" $"C8BD 8FFD A30C C1C6 B0B0 B5B0 C8C7 BDBD" $"D9D9 FB01 0403 010F 3C43 FE3E 023D 3C3C" $"E73E FF3C FB3E 0A44 757B 7B75 7B76 7678" $"7978 FE41 013F 40FE 3E39 7780 957C 757C" $"9278 727C 7578 78A9 7872 413E 3E41 3F7D" $"9278 7892 777B 757B 7B76 A773 797C 763F" $"3F3C 3C7B 757B A576 7C75 7576 76A8 ADC7" $"0818 5057 FE59 0358 5A5A 59E8 59FF 5AFB" $"590A 5683 8888 8388 8282 8A8B 8AFE 5801" $"5A5B FE59 398A 879B 8881 889C 8A84 8881" $"8989 B181 8458 5959 5857 899C 8A8A 9C82" $"8983 8888 82B1 8389 8882 5959 5A5A 8883" $"88B1 8288 8383 8282 B0B5 C71D 2D8D 93EF" $"A3EB A30D 8FB8 BDBD B8BD B0B0 C6C7 C89B" $"9999 FCA3 15CF AABE BDB7 B5C8 C8C2 B5AF" $"C6C6 D2A5 C29B A3A3 9B9A B6FD C80A B0BC" $"B7BD BDB0 DBB7 BCBD B8FD A30C BDB8 BDE3" $"AEB3 B8B8 AEAE D1D6 C701 0404 0029 0043" $"3DFE 3EFF 3CE7 3EFF 3CFB 3E0F 757B 7575" $"7B75 A77C 7873 7278 7241 3F3F FE3E 0C77" $"9480 767C 777C 7878 927C 7872 FE78 2A41" $"3E40 4172 767C 7872 7D7D 7B75 7B90 7B76" $"7973 7C76 3F3F 3C3C 7B75 7B75 7C92 7B7C" $"A77C A8CF D607 2F25 5758 FE59 FF5A 0059" $"E859 FF5A FB59 0F83 8883 8388 83B1 888A" $"8584 8A84 585A 5AFE 5939 8A9A 8782 8883" $"888A 8A9C 8889 8481 818A 5859 5A58 8482" $"888A 8487 8789 8388 9D87 8289 8388 8259" $"595A 5A88 8388 8388 9C88 89B1 88B0 D7D6" $"1B42 5D93 EFA3 EBA3 0DB8 BDB8 B8BD B8DB" $"B5C6 C2C2 C8C1 99FC A306 CFBD AAB8 BDB1" $"B5FE C81A B5C6 C1A5 A5C8 9BA3 A49B C2B0" $"B5C8 C2B5 B5BC B7BD D0B4 B0BC B7BD B8FD" $"A30C BDB8 BDB8 B3C6 BDBE DAB3 D1F6 D601" $"1003 0F01 3C43 E53E FF3F FF3E FF3F FD3E" $"FF41 0D78 7277 7776 7C75 7576 7B7D 7778" $"3FFD 3E3A 4172 7978 76A7 767C 7575 7C76" $"767C 7878 7241 3B3C 4172 7972 75A8 7575" $"A776 7878 757B 767C 7273 3D40 3E3E 757B" $"777D 7878 7676 7872 ABD6 A818 0A50 57FA" $"59FC 59FF 5AF3 59FD 5AFB 59FF 580D 8A84" $"8A8A 8288 8383 8286 8782 8957 FD59 3A58" $"848A 8982 B182 8883 8388 8282 8889 8984" $"5859 5A58 848A 8481 B283 83B1 8289 8983" $"8882 8882 8358 5A59 5983 8882 8789 8982" $"8289 84B1 DCB0 3022 8D93 F5A3 FFA5 FDA3" $"F5A3 FDA5 FDA3 FF9B 0DC6 C1C8 C8B0 B5B8" $"B8AC B1B5 B0C6 98FD A336 9BC2 C7C6 B0DB" $"B0B5 B8B8 B5B0 B0B5 C6C6 C29B A3A3 9BC2" $"C7C1 AFDC B8B8 DBB0 C6C6 B8BD B0B5 B7B8" $"A3A4 A3A3 B8BD B0B5 C6C6 B0B0 C6C1 CAF4" $"D101 0D03 010F 0043 E53E FF3F FF3E FF3F" $"FD3E 0F41 7278 7871 77A1 7C7B 7BA7 767C" $"9278 72FD 3E25 3F78 7278 767C 7C92 7B7B" $"927C A777 7278 7841 3C3C 4141 7878 7C76" $"7B7B 767C 7277 757B 7C93 7942 FD3E 107B" $"757D 9272 787C 7678 78AA D1D4 0A18 2557" $"FA59 FC59 FF5A F359 FD5A FB59 0658 848A" $"8A84 8AAC FE88 05B0 8286 9C89 84FD 5925" $"578A 8489 8288 889C 8888 9C88 B183 8489" $"8A58 5A5A 5858 8989 8882 8888 8288 8488" $"8388 889D 8956 FD59 1088 8387 9C84 8988" $"8289 89B0 D7DB 2230 5D93 F5A3 FFA5 FDA3" $"F5A3 FDA5 FDA3 0F9B C2C6 C6C2 C8D6 B5BD" $"BDD8 ACB4 C8C6 C1FD A325 9AC8 C1C6 B0B5" $"B5C8 BDBD C8B5 DBB1 C1C6 C89B A3A3 9B9B" $"C6C6 B5B0 BDBD B0B5 C1C5 B8BD B5C9 BD8F" $"FDA3 0CBD B8B5 C8C1 C6B5 B0C6 C6CA EFFB" $"0106 0329 003C 43E1 3EFF 3CFF 3EFF 3F39" $"447B 927C 767C 7278 7676 7D77 7879 7278" $"4343 3E3E 4178 917C 767C 757B 907C 7B75" $"7878 77A8 7241 3E3E 4475 7C92 7973 7B75" $"7B90 7C76 7CA1 7379 7872 FD3E 1076 A772" $"787D 78A5 7B92 76AB C3AD 2F07 5057 FA59" $"E859 FF5A FF59 FF5A 4E56 889C 8882 8884" $"8982 8287 828A 8B84 8957 5759 5958 8A9C" $"8882 8883 889D 8988 838A 8A81 B084 5859" $"5956 8388 9C89 8389 8388 9D88 8288 AC83" $"8989 8459 595A 5A82 B184 8A87 82B1 889C" $"82B1 C8AF 421B 8D93 EFA3 EDA3 4A8F BDC8" $"B5AE B3C1 C6B0 B0B5 B0C8 C8C1 C69B 9BA3" $"A39B C8D1 BFB0 B5B8 BDD0 BEBD B8C8 C8AE" $"DAC2 9BA3 A38F B8B5 C8BD B8BF BABD D0B3" $"AEB5 D6B8 BDC6 C1A3 A3A5 A5AE DAC2 C8B3" $"AFE3 BDC8 B0CA E1BF 0108 0301 2900 43E1" $"3EFF 3CFF 3E3B 3F3D 7575 7C76 A776 7878" $"767C 7D92 7972 7878 7443 3E3E 3F71 7C7C" $"A876 7B75 7B7B 757B 7872 7D77 7841 3E3E" $"4475 7C76 7973 7B75 7B7B 76A7 767B 7973" $"7841 FE3E 113F 7C76 7878 7777 7B75 7C7C" $"AAD6 D509 2F25 57FA 59E8 59FF 5AFF 5950" $"5A59 8383 8882 B182 8989 8288 879C 8B84" $"8989 8457 5959 5783 8888 B282 8883 8888" $"8388 8A84 8781 8A58 5959 5683 8882 8983" $"8983 8888 82B1 8287 8983 8958 5959 5A5B" $"8882 8A8A 8181 8883 8888 B0DC D71E 425D" $"93EF A3EE A34B A2B8 B8B5 B0DA AEC6 C6B0" $"B5B5 C8C8 C2C6 C6C2 9BA3 A39A C2BF BFDC" $"B0BD B8BD BDB8 BDC8 C2B3 AEC8 9BA3 A38F" $"B8B5 B0BD B8BF BABD BDAE DAB0 B4BD B8C6" $"99A3 A3A5 A6B3 AEC8 C8AE AEBD B8B5 B5CA" $"F4E6 0104 050F 013C 433D 3DDD 3E39 4178" $"7B75 7777 7692 7B90 7B7B 757B 927C 4141" $"3D3E 4178 7575 747B 747B 7575 7C92 7B76" $"7B75 7841 3E3E 4141 7B75 7BA5 767C 767C" $"7B75 7872 7B7B 917D FD3E 1075 7C75 75A5" $"7B75 7B76 7CAB D2AE 180A 5057 FA59 FC59" $"FF5A E959 0F58 8A88 838A 8A82 9C88 9D89" $"8983 889C 88FE 5826 5958 8A83 8382 8882" $"8883 8388 9C87 8288 838A 5859 5958 5888" $"8388 B182 8882 8888 838A 8488 889C 88FD" $"5912 8389 8383 B088 8389 8288 AFD6 B630" $"228D 93A4 A4F7 A3FF A5FD A3ED A339 9BC8" $"BDB8 C8C8 B0C8 BDD0 BFBF B8BD C8B5 9B9B" $"A3A3 9BC8 B8B8 B7BD B7BD B8B8 B5C8 B4B0" $"BDB8 C89B A3A3 9B9B BDB8 BDE3 AEB3 AEB3" $"BDB8 C8C2 BDBD D0BE FDA3 0CB8 BEBA BAE2" $"BDBA BFB0 B5C1 E7D7 0104 0302 0F00 43DB" $"3E15 7278 757B 7177 7C7D 7B7B 7575 7B75" $"7C76 713F 3E3E 4172 FE7B 2075 7AA5 7B7B" $"767D 76A7 757B 7241 3E3E 4172 7B75 757B" $"76A7 7575 7B75 7878 907C 7C45 FD3E 127B" $"757B 7B75 7B74 7B7C 92AB D2C1 0B18 2557" $"5A5A FC59 FC59 FF5A E959 1584 8A83 8884" $"8A88 8988 8883 8388 8388 8283 5759 5958" $"84FE 8820 8387 B188 8882 8982 B183 8884" $"5859 5958 8488 8383 8882 B181 8188 838A" $"8A9D 8988 55FD 5912 8883 8989 8388 8289" $"889C AFD6 C823 305D 93A5 A5F7 A3FF A5FD" $"A3ED A315 C2C8 B8BD C2C8 B5B6 BDBD BABA" $"BDB8 B5B0 C29A A3A3 9BC2 FEBD 20B8 BCE3" $"BDBD B0B6 B0DB B8BD C29B A3A3 9BC2 BDB8" $"B8BD AEDA ADAD BDB8 C8C8 D0BE BD8F FDA3" $"0CBD B8BF BFB8 BDB9 BFB5 C8C1 E7E8 0116" $"0329 003C 43EF 3EFF 3FFD 3EFF 3FFD 3EFF" $"3CFB 3E06 7D77 7B75 7C91 75FE 76FF 7818" $"A776 7878 7241 3E3E 4078 767C 927C 7575" $"76A5 757B 7B75 7C76 77FE 3E12 4474 7178" $"7C76 7973 7878 767C 917B 757B 7676 3DFE" $"3E10 7178 A776 7C76 7C92 7878 A8CF AD2E" $"0550 57FA 59F6 59FF 5AFF 59FD 5AFD 59FF" $"5AFB 5919 8782 8883 889C 8383 8282 8989" $"B182 8989 8458 5959 5889 8288 9C88 FE83" $"07B1 8388 8883 8882 8AFE 5912 5682 8389" $"8882 8983 8A8A 8288 9C88 8388 8282 58FE" $"5910 8389 B182 8882 889C 8A8A B0D7 B43B" $"138D 93EF A3FD A3FF A5F3 A324 B5B0 BDB8" $"B5C7 B8B9 B0B0 C6C6 DBB0 C6C6 C29B A3A3" $"9DC9 AEB3 C8B5 B8B8 B9E3 B8BD BDB8 B5B0" $"CFFE A311 8FB7 C0C6 B3AE BDB8 C8C8 B0B5" $"C8B5 B8BD B0B0 FDA3 0CC0 C6DB B0B3 AEB5" $"C8C6 C6D1 F6D6 0113 0301 2900 43EF 3EFF" $"3FFD 3EFF 3FFD 3EFF 3CFB 3EFF 7717 7CA5" $"767C 7B7B 7CA7 7872 767C 7278 4141 3E3E" $"4072 A775 7C76 FE7B 077A 757B 747B A776" $"76FE 3E11 4475 7878 927B 7379 7378 A17C" $"7B75 7B75 7C76 FD3E FF78 0E76 7C76 A776" $"7C78 72A8 ADCF 062E 2457 FA59 F659 FF5A" $"FF59 FD5A FD59 FF5A FB59 FF82 0289 B182" $"FD88 10B1 8984 8288 8489 5858 5959 5884" $"B181 8882 FE88 0787 8388 8288 B182 89FE" $"5911 5683 8989 9C87 8389 858A AC88 8882" $"8883 8882 FD59 FF89 0E82 8882 B182 888A" $"84B0 B4D7 143B 5C93 EFA3 FDA3 FFA5 F3A3" $"FFB0 17BE E3B0 B5BD BDB5 DBC6 C1B0 B5C1" $"C69B 9BA3 A39D C4DA ADB5 B0FE BD07 BCB8" $"BDB7 BDDB B0CF FEA3 018F B8FE C60C B3B8" $"BDC3 C8D6 B5B5 B0BD B8B5 B0FD A3FF C60A" $"B0B5 AEDA B0B5 C6C1 D1D6 F601 03FF 0003" $"3C43 403D DD3E 0741 7875 7C7C 777B 90FE" $"7506 7C7A 757B 9078 41FE 3E24 7875 7B7A" $"7B92 7C76 767B 907B 7476 7C71 403F 3F41" $"417B 9079 797C 907B 757B 757B 7578 7876" $"7DFD 3EFF 7610 7B75 7878 757B 767C C4D2" $"AB0B 0C50 575A 58FC 59F6 59FF 5AEF 5911" $"588A 8188 8883 899D 8383 8188 8783 899D" $"8A58 FE59 168B 8388 8788 9C88 8282 899D" $"8882 8288 8358 5959 5858 889D FE89 0A9D" $"8883 8883 8883 8989 8289 FD59 FF82 0F88" $"8389 8983 8882 88C8 D6AE 272A 8D93 A4F0" $"A3FF A5EF A311 9BC8 ADB3 B5B1 BFD1 B8B8" $"AFB5 BCB8 BCCF C89B FEA3 24D0 B8BD BCBD" $"C8B5 B0B0 BFD1 BDB7 B8BD C39D A3A3 9B9B" $"BDD0 BDBD BED0 BDB8 BDB8 BDB8 C6C6 B0B6" $"FDA3 FFAE 0ABD B8C6 C6B8 BDB0 B5D9 E7BF" $"010C 0528 0000 433E 40E3 3E00 3DFC 3E05" $"7278 7676 7C92 FC7B 2F92 7B75 7B7B 7242" $"3E3D 3E77 757B 917B 7C76 7C76 7B7B 757B" $"7C76 7840 3F3E 4172 7B7B 7374 7B7B 757B" $"7B75 7BA5 7278 7677 3DFE 3E12 7C76 A57B" $"7278 757B 927C ABD7 C42F 0B25 5759 5AFC" $"59F6 59FF 5AF5 5900 58FC 593A 848A 8282" $"889C 8989 8888 879C 8883 8989 8459 5958" $"598A 8388 9D88 8882 8882 8989 8388 8882" $"8958 5958 5884 8888 8384 8888 8388 8883" $"88B1 8489 8283 58FE 5912 8882 B188 8489" $"8388 9C88 AFDB C74B 275D 93A3 A4F1 A3FF" $"A5EF A311 C2C8 AEAE B5C8 BFBF BDBD B4C8" $"BDB8 BCBC C29C FEA3 24CF B8BD D1BD B5B0" $"B5B0 BFBF B8BD BDB8 C99D A3A3 9BC2 BDBD" $"B8B9 BDBD B8BD BDB8 BDE3 C1C6 B0B1 FDA3" $"0CB3 AEE3 BDC1 C6B8 BDC8 B5C1 ECD7 010C" $"0601 0F3C 433E 3E3D E03E FF3C 397B 76A6" $"7A72 787E 937C 7672 787C A27B 7441 413C" $"3C41 727C 767B 7572 78A1 7C7C 927B 7C90" $"7C78 413E 3D44 7574 757B A574 75A5 7B93" $"7C75 757C 7678 3FFD 3E13 757B 7575 7D92" $"7B75 7878 A8A8 D709 1850 5759 5958 FD59" $"F659 FF5A F359 FD5A 3988 83B2 8784 8A87" $"9B88 8284 8988 AD88 8258 585A 5A58 8488" $"8288 8384 89AC 8888 9C88 899D 898A 5859" $"5856 8382 8388 B182 83B1 889D 8883 8388" $"8289 57FD 5910 8388 8383 899C 8883 8989" $"B0B0 DA1E 2D8D 93EF A3FF A5F3 A3FF A5FF" $"A339 BDB9 E4BC C2C8 AABE B5B0 C1C6 B5D7" $"BDB7 9B9B A3A3 9BC2 B5B0 BDB8 C1C6 D6B5" $"B5C8 BDBE D0BE C89B A3A3 8FB8 B7B8 BDE3" $"B7B8 E3BD C9B5 B8B8 B5B0 C99C FDA3 0CB8" $"BDB8 B8B6 C8BD B8C6 C6D1 D1E9 011B 0300" $"2900 43E5 3E00 40FE 3E09 403E 3D3E 3C3C" $"4475 7B75 FD78 217C A178 7876 7C75 7B72" $"413C 3C41 7892 7C75 7B78 7876 7D76 7C7B" $"907B 7B72 4140 3E44 75FE 7B00 75FE 7B08" $"757C 767C 7B92 7C78 72FD 3E10 7A75 7B7B" $"767C 7B75 7872 A8D4 C407 2F25 57FA 59F6" $"59FF 5AF9 5900 5AFE 5902 5A59 59FE 5A29" $"5683 8883 8A8A 8181 88AC 8989 8288 8388" $"8458 5A5A 588A 9C88 8388 8989 8289 8288" $"889D 8888 8458 5A59 5683 FE88 0083 FE88" $"0883 8882 8988 9C88 8984 FD59 1087 8388" $"8882 8888 8389 84B0 DBC7 1B42 5D93 EFA3" $"FFA5 F9A3 00A4 FEA3 2FA4 A3A4 A5A3 A38F" $"B8BD B8C8 C8A5 A5B5 D6C6 C6B0 B5B8 BDC2" $"9BA3 A39B C8C8 B5B8 BDC6 C6B0 B6B0 B5BD" $"D0BD BDC2 9BA4 A38F B8FE BD00 B8FE BD08" $"B8B5 B0BE BDC8 B5C9 C4FD A30C BCB8 BDBD" $"B0B5 BDB8 C6C1 D1FB D701 1A03 0F01 3C43" $"ED3E 023D 3E40 F63E FF3F FF3E 3972 7975" $"7B92 7C76 7B78 727C 927B 757B 7578 413E" $"3E41 7879 7892 7C91 7B75 7B92 7C75 7B76" $"7678 413E 3E41 4178 7276 7C76 7673 7971" $"7892 7C78 7276 7CFD 3E10 7B75 A776 7C76" $"A57B 757C C6C6 AD18 0A50 57FA 59F4 5905" $"5859 5A59 5A5A FB59 FD5A FF59 3984 8B83" $"889C 8882 878A 8488 9C88 8388 838A 5859" $"5958 8A8A 899C 889C 8883 889C 8883 8882" $"828A 5859 5958 5889 8482 8882 8283 8983" $"899C 8889 8482 88FD 5910 8883 B182 8882" $"B188 8188 C8C8 B530 228D 93EF A3FD A303" $"A4A3 A5A5 FBA3 FFA5 FDA3 39C2 C8B8 BDC8" $"B5B0 B4C8 C2B5 C8BD B8BD B8C8 9BA3 A39B" $"C8C7 C6C8 B5C8 B5B8 BDC8 B5B8 BDAE AEC8" $"9BA3 A399 99C6 C1B0 B5AE AEB8 BDC0 C6C8" $"B5C6 C1AE B3FD A30C BDB8 DBB0 B5B0 E3BD" $"AFB5 D0D0 D601 0C03 010F 0043 DF3E FF3F" $"FF3E 3941 787B 757C 767C 9377 7876 7C75" $"7B7B 7572 413E 3E41 7272 787C 777B 757A" $"757C 767B 757C A772 413E 3E41 7278 7892" $"7C7C A773 7978 787C 7678 7877 76FD 3E10" $"757B 767C 927C 767B 927C AED5 C00A 1825" $"57FA 59F0 59FF 5AFB 59FD 5AFF 5930 588A" $"8883 8882 889D 898A 8288 8388 8883 8458" $"5959 5884 8489 8883 8882 8783 8882 8883" $"88B1 8458 5959 5884 8989 9C88 88B1 83FE" $"8905 8882 8989 8382 FD59 1083 8882 889C" $"8883 889C 88AF D7C7 2230 5D93 EFA3 FBA3" $"FFA5 FBA3 FFA5 FDA3 399B C8BD B8B5 B0B5" $"C9C7 C8B0 B5B8 BDBD B8C2 9BA3 A39B C2C1" $"C6B5 B1B5 B0BC B8B5 B0BD B8B3 DAC2 9BA3" $"A399 C1C6 C6C8 B5B3 DAB8 BDC6 C6B5 B0C6" $"C6AF AEFD A30C B8BD B0B5 C8B5 B9BD C8B5" $"B8DF E801 2303 2A00 3C43 F53E FF3C FB3E" $"FD3F 0540 4243 4341 41F9 3E4E 767C 927C" $"767C 7B7B 7676 7B75 7CA2 7278 4343 403E" $"4178 7C93 7C76 7778 907B 7D7D 907A 7B75" $"7841 3E3E 4172 7676 7878 7676 7B90 7B91" $"757B A176 7841 3E3E 403E 7C76 7878 7B75" $"7A75 7878 A8A8 D830 0750 57FA 59FC 59FF" $"5AF7 5905 5556 5757 5858 F959 0482 889C" $"8882 FE88 FF82 4488 8388 AD84 8957 575A" $"5958 8A88 9D88 8288 899D 8887 879D 8788" $"838A 5859 5958 8482 828A 8A82 8288 9D88" $"9C83 88AC 828A 5859 595A 5988 828A 8A88" $"8387 8389 89B0 B0DC 431B 8D93 F5A3 FFA5" $"FDA3 FBA3 FF8F FF9B FF99 F9A3 04B0 B5C8" $"B5B8 FEBD FFB0 40BD B8B5 D7C1 C69B 9BA4" $"A39B C8B5 C9B5 B0C5 C6D0 BDB5 B5D0 BCBD" $"B8C8 9BA3 A39B C2AE AEC8 C8AE AEBD D0B5" $"C8B8 BDD6 B0C8 9BA3 A3A4 A3B5 B0C8 C8BD" $"B8BC B8C6 C6D1 D1EB 012F 0301 2900 43F5" $"3EFF 3CFB 3E0C 3F3E 3F3E 7373 7A74 7241" $"3E3E 40FC 3EFF 7637 7C76 7CA6 7575 7CA7" $"747A 767C 7878 7443 3E3E 4172 767D 7CA1" $"7872 7B7B 9177 7B7B 757B 7241 3E3E 4141" $"7CA7 7872 767C 7C7B 757B 7B76 7D7C 7872" $"FD3E 107C A178 7275 7B7B 7578 72A9 D4C3" $"092F 2557 FA59 FC59 FF5A FA59 0B58 5958" $"8383 8984 8458 5959 5AFC 59FF 8237 8882" $"88B0 8383 88B1 8287 8288 8989 8457 5959" $"5884 8289 88AC 8984 8888 9B82 8888 8388" $"8458 5959 5858 88B1 8A84 8288 8988 8288" $"8883 8988 8A84 FD59 1088 AC8A 8483 8888" $"8389 84B1 DBC7 1E42 5D93 F5A3 FFA5 FDA3" $"FBA3 FFB8 06C8 C2C1 99A3 A3A4 FCA3 FFB0" $"37B5 B0BD E3B8 B8B5 DBB7 BCB0 B5C6 C6C2" $"9BA3 A39B C2B0 B6B5 D6C6 C1BD BDC7 B0BD" $"BDB8 BDC2 9BA3 A39B 9BB3 DAC8 C2AE B3BE" $"BDB0 B5BD B9B6 B5C8 C2FD A30C B5D6 C8C2" $"B8BD BDB8 C6C1 D2FB D601 3206 0F01 3C43" $"3E3E 3DF0 3E0B 4475 7B7B 7878 757B 7973" $"4141 FB3E 1D41 777B 7C92 7C72 7976 7C7B" $"757B 7576 7C72 413D 3E41 7878 7275 7B76" $"7C75 7BFD 7802 A776 77FE 3E11 4172 7872" $"757B A776 767C 757B 777D 7575 7C76 FD3E" $"1374 7B75 7BA5 7576 A775 7BC4 C4AD 180A" $"5057 5959 58FD 59FE 59FF 5AF9 590B 5683" $"8888 8A8A 8388 8983 5858 FB59 2458 8988" $"899C 8884 8A82 8888 8388 8382 8884 5858" $"5958 8A89 8483 8882 8883 8889 8981 81B1" $"828A FE59 1158 8489 8483 89B1 8282 8883" $"8882 8783 8388 82FD 5910 8288 8388 B183" $"82B1 8388 C8C8 B530 228D 93F7 A3FF A5FB" $"A3FF A30B 8FB8 BDBD C8C8 B8BD BDB8 9B9B" $"FBA3 249B C7BD BEC8 B5C1 C7B0 B5BD B8BD" $"B8AE B3C2 9BA3 A39B C8C6 C1B8 BDAE B3B8" $"BDC6 C6A5 A5DA AECF FEA3 119B C2C6 C1B7" $"BCDA AEB0 B5B8 BDB0 B5B8 B8B5 B0FD A30C" $"B7BD B8BD E3B8 B0DB B8BD D9D9 D601 3503" $"010D 0043 F03E 0E3D 3E3E 757B 7575 7278" $"757B 7379 7872 FC3E 253D 7278 907B 7C76" $"7878 7676 7BA5 767B A776 4141 3E3E 4172" $"7979 7C75 7CA1 7B75 7278 A878 7C76 77FE" $"3E11 413F 7878 757B 767C 7C92 7B75 A877" $"7B7B 7676 FD3E 107B 757B 757B 7B76 7D74" $"7BAB D7C1 0A16 2557 FA59 FE59 FF5A FC59" $"0E58 5959 8388 8383 848A 8388 8389 8A84" $"FC59 2558 848A 9D88 8882 8989 8282 88B1" $"8388 B182 5858 5959 5884 8A8A 8983 88AB" $"8883 8489 B081 8882 8AFE 5911 5857 8989" $"8389 8288 889C 8883 B082 8888 8282 FD59" $"1088 8388 8388 8882 8982 88AF DBC8 222F" $"5D93 F7A3 FFA5 FBA3 FFA3 0BB8 BDB8 B8C2" $"C8B8 BDB8 BDC8 C2FB A324 C2C8 D0BD B5B0" $"C6C6 B0B0 BDE3 B9BD DAAE 9B9B A3A3 9BC2" $"C7C7 BEB8 B3D5 BDB8 C1C6 D1A5 B3AE CFFE" $"A311 9B9A C6C6 B7BC AEB3 B5C8 BDB8 DBB0" $"BDBD B0B0 FDA3 0CBD B8BD B8BD BDB0 B6B7" $"BDC1 ECE8 0142 0729 003C 433E 3E41 3FF2" $"3E0E 3D7C 7578 787C 767B 757A 7B75 7C72" $"40FD 3EFF 750F 7C75 767D 7A7A A77C 7878" $"7C7C 767C 7342 FE41 3C78 927C 907B 7278" $"77A8 7B75 7278 757B 7240 3E3E 4272 927C" $"757B 767C 757C 7B7B 757C 7C92 7A43 3E40" $"3E3E 747B 777D 7575 7B7B 767C AAAA C42E" $"0550 5759 595A FD59 FC59 FF5A FC59 0E58" $"8983 8A8A 8882 8883 8889 8389 8458 FD59" $"FF83 0F88 8181 8781 81B1 8881 8188 8882" $"8883 56FE 5810 8A9C 889D 8984 8982 B088" $"8384 8A83 8884 58FE 5928 849C 8883 8882" $"8883 8988 8883 8988 9C89 5759 5A59 5982" $"8882 8783 8388 8882 88B0 B0C8 3B13 8D93" $"A3A3 A4F8 A3FF A5FD A3FF A30D BEB8 C8C8" $"B5B0 BDB8 BCBC B8BE C199 FDA3 FFB8 48B3" $"ADAF B5A5 A5DA B3A5 A5BD BDAE B3B8 8F99" $"999B C8C8 B5D1 BFC1 C6B0 DBBD B8C2 C8B8" $"BDC4 9DA3 A39C C2C8 B5B8 BDAE B3B8 BEBD" $"BDB8 BEB3 C6C8 9BA3 A4A3 A3B7 BDB0 B5B8" $"B8BD BDB0 B5CA CAD6 0140 0700 2900 433E" $"3E3F 3FF5 3E12 3D3E 3E77 757B 7278 927C" $"757B 7575 7B75 7840 40FE 3EFF 7BFF A7FF" $"A8FF AA00 A7FE A8FF A6FF A729 7973 7872" $"3FA3 7C76 7B7B 7878 777D 757B 7877 7B75" $"7840 3E3E 4141 7C76 A57B 76A7 757B 907B" $"757B 767C 7A74 FE3E 113D 7BA5 7D92 7B7B" $"907C 927C AAD1 D805 2E25 57FA 59FC 59FF" $"5AFF 5912 5859 598A 8388 848A 9C88 8388" $"8383 8883 8A58 5AFE 59FF 88FF B1FD B001" $"B1B2 FDB0 FFB1 0789 8389 8457 B288 82FD" $"891D 8287 8388 8A89 8883 8958 5959 5858" $"8882 B188 82B1 8388 9D88 8388 8288 8984" $"FE59 1158 88B1 879C 8888 9D89 9C88 B0D7" $"DB13 3B5D 93F5 A3FF A5FD A310 A3CF B8BD" $"C2C8 C8B5 B8BD B7B7 BDB8 C699 A4FE A3FF" $"BDFF DAFF DBFF D131 DADB D1D1 E3E3 DADA" $"BDB8 C6C1 9AED B5B0 BFBF C6C6 B0B5 B8BD" $"C8C7 BDB8 C99D A3A3 9B9B B5B0 E3BD AEDA" $"B8BD D0BD B8BD AEB3 C8C2 FDA3 0CBD E3B5" $"C8BD BDD0 BEC8 B5CA EFE9 0135 FF00 013C" $"44F3 3E00 40FE 3E1A 757B 767B A17C 7B75" $"7CA2 7B7B A37E A77C 757B 757B A7A7 A8A8" $"A7A7 A9FC A8FF AAFF A829 7C76 7871 7DA7" $"A8A7 A8A8 A6AA 7C76 7E93 7B74 76A7 7241" $"3E3E 4172 7878 7373 7A75 7B75 7D77 7B91" $"7B75 7B76 FE3E 133D 7777 7878 767C 7971" $"7B7B C3B0 C10B 0B50 565A 5AFC 59FA 5900" $"5AFE 5917 8388 8388 AC88 8883 88AD 8888" $"AB87 B188 8388 8388 B1B1 B0B0 FEB1 F8B0" $"0488 828A 8489 FEB1 FFB0 1FAC B088 8287" $"9B88 8282 B184 5859 5958 8489 8983 8387" $"8389 8387 8188 9D88 8387 82FE 5913 5881" $"818A 8A82 888B 8388 88C8 B5C8 2729 8C91" $"A5A5 F5A3 00A4 FEA3 1AB8 BDB9 BDD6 B5BD" $"B8B5 D7BD BDCC AADA B3B8 BDB8 BDDA DAD1" $"D1DB DBD2 F8D1 06B5 B0C6 C0B6 DBD2 FED1" $"1FC5 CAB5 B0AA BEBD B7AE DAC2 9BA3 A39B" $"C2C6 C6B8 B8BC B8BF BAB3 AEBD D1BD B8B4" $"B0FD A3FF AEFF C808 B0B5 C8C2 BDBD E1CF" $"E801 2D03 2800 0044 EF3E 1975 7B7B 757C" $"757B 75A7 7CA5 A5A8 A8A7 A775 7B7B 757C" $"A7A8 A87C A7FE A80B A9A8 A8AA AAA8 A8A7" $"7678 7876 FEA7 FFA8 FFAA FFA7 FFA8 197B" $"A576 7C78 3F3E 3E41 4172 7879 7975 7B75" $"7B77 A87B 7B75 7B76 76FD 3E12 7D77 7278" $"7C92 7878 7575 AAD1 AD2F 0B24 565A 5AFC" $"59F6 590A 8388 8883 8881 8883 B188 B1FE" $"B0FF B109 8388 8883 88B1 B0B0 88B1 FEB0" $"00B1 FBB0 04B1 828A 8A82 FEB1 FDB0 FFB1" $"FFB0 0A88 B182 888A 5759 5958 5884 FE89" $"0B83 8883 8981 B088 8883 8882 82FD 5912" $"8781 848A 889C 8A8A 8383 B0D7 B54B 275B" $"91A5 A5F1 A319 B8BD BDB8 B5AF BDB8 DBB5" $"E3E2 D1D1 DADA B8BD BDB8 B3DA D1D1 B5DB" $"FED1 00D2 FBD1 05DB B0C6 C6B0 DBFD D1FF" $"CAFF DBFF D119 BDE3 AEB3 C89A A3A3 9B9B" $"C1C6 BDBD B8BD BABF AEDA BDBD B8BD B0B0" $"FDA3 04B3 AEC2 C8B5 FEC8 FFB8 02CA EFD6" $"012F 0301 0F3C 43F5 3EFF 3CFD 3E04 757B" $"927C 78FC A81F A9A8 A7A7 A8A8 7B75 757B" $"93A8 A7A7 A8A8 A77C A77B A77C A77B A7A7" $"7B7B 7575 7CA7 FEA8 FCA7 1BA8 A9A8 A8AA" $"95A7 463E 3E44 757C 767C 9378 78A0 7B7B" $"7575 7BA2 7C78 3FFD 3E10 7278 7C92 7C76" $"7C92 7979 AAD1 D209 1850 57FA 59FC 59FF" $"5AFD 5904 8388 9C88 81FC B022 B1B0 B1B1" $"B0B0 8883 8388 9BB0 B1B1 B0B0 B188 B187" $"B188 B187 B0B0 8888 8383 88B1 B0B0 B2FC" $"B101 B0B1 FEB0 169B B155 5959 5683 8882" $"889D 8A8A AC88 8883 8388 AD88 8A57 FD59" $"1084 8988 9C88 8286 9C89 89B0 D7D6 1E2D" $"8D93 EFA3 04B8 BDC8 B5A5 FCD1 25D2 D1DB" $"DBD1 D1BD B8B8 BDBE D1DA DAD1 D1DA B3DB" $"B4DA B3DB B4D1 D1BD BDB8 B8B5 DBD1 D1DC" $"DBDA DAFE D11A D2D1 D1CA B6DB 87A3 A38F" $"B8B5 B0B5 C9C8 C8DE BDBD B8B8 BDD7 B5C8" $"9AFD A30C C1C6 B5C8 BDB8 B4C8 C4C4 CAEF" $"E501 2104 0029 0043 3DF6 3EFF 3CFD 3E03" $"7CA5 7CA7 F9A8 0DA7 7BA8 A875 7B7B 757E" $"A87C A7A8 A8F8 A70C A8A5 757B 7B76 A7A8" $"A87C A7A7 7CFE A71A A9A8 A8AA AAA7 7678" $"3E44 757C 927C 7678 727B 7A75 7B7B 757C" $"7678 72FD 3EFF 780F 767C 767C 777C 7972" $"A9D6 AB07 2F25 5758 FB59 FC59 FF5A FD59" $"0389 B188 B1F9 B00D B187 B0B0 8388 8883" $"87B0 88B1 B0B0 F9B1 11B0 B1B1 8388 8882" $"B1B0 B088 B1B1 88B1 B1AF B1FD B015 B182" $"8B59 5683 889C 8882 8A84 8887 8388 8883" $"8882 8A84 FD59 FF89 0E82 8882 8882 8689" $"83AF DCAE 1B42 5D93 EFA3 03BE E3B5 DBF9" $"D141 DBB4 D1D1 B8BD BDB8 AAD1 B3DA D1D1" $"DADA DBDB DADA DBDB D1D1 E3B8 BDBD B0DB" $"D1D1 B5DB DAB3 D1D1 D0D2 D1D1 CACA DBB0" $"D0A3 8FB8 B5C8 B5B0 C8C2 BDBC B8BD BDB8" $"B5B0 C8C2 FDA3 FFC6 0AB0 B5B8 BDB0 B4C4" $"BFC9 F4BF 0137 030F 013C 43F9 3E00 40FC" $"3E0D 403E 4375 A7A7 A8A8 A7A7 7CA7 A77C" $"FBA8 037B 757B 7BFE A802 A9A8 7FFE A80D" $"A7A8 A8A7 A0A5 7B75 7B76 767B A5A9 FAA8" $"087C A7A7 7CA8 A97B 7B75 FE7B 24A8 7D75" $"7A76 7B78 787B 907B 757B 757C 763E 3E3C" $"3C75 75A7 7C7C 7778 7277 A7AA C3D4 180A" $"5057 FA59 0159 5AFC 590D 5A59 5583 B1B1" $"B0B0 B1B1 88B1 B188 FBB0 0988 8388 88B2" $"B2B0 B1B0 88FE B00D AFB0 B0B1 ABB1 8883" $"8882 8288 B1B1 FAB0 0888 B1B1 88B0 B188" $"8883 FE88 24B0 8783 8782 8781 8188 9D88" $"8388 8388 8259 595A 5A83 83B1 8888 8389" $"8483 B1B0 C8DB 3022 8D93 F9A3 00A4 FCA3" $"03A4 A38F B8FD D1FF DB05 B3DA DAB3 DADA" $"FDD1 09BD B8BD BDDC DCD1 D2D1 ABFE D10D" $"D0D1 D1DB D6E3 BDB8 BDAE AEBD E3D2 FAD1" $"08B3 DADB B5D1 D2BD BDB8 FEBD 0FDA B3B8" $"BCB0 B4A5 A5BD D0BD B8BD B8B5 B0FD A3FF" $"B80A DBB5 B5B1 C6C1 AFDA C8E0 FB01 2E03" $"010F 0042 FD3E 0340 3E3E 40FA 3E07 7775" $"7BA7 A7A8 A87C FCA7 01A8 7DFD A809 747B" $"7575 767C 937E 78A3 FB78 FF7C 0875 7B75" $"4476 7C43 A578 FAA8 FDA7 FFA8 2AA5 757C" $"7575 A5A8 A8A5 7BA1 7C7E 937A 7B75 7A75" $"7B75 763E 3D3C 3C7B 7B76 767C A178 787C" $"76AA D6A8 0A18 2456 FD59 025A 5959 005A" $"FA59 078A 8388 B1B1 B0B0 88FC B101 B087" $"FDB0 0982 8883 8382 889B 8781 ABFB 81FF" $"8808 8388 8356 8288 55B1 81FA B0FD B1FF" $"B02A B183 8983 83B1 B0B1 B188 AC88 879B" $"8788 8387 8388 8182 5958 5A5A 8888 8282" $"88AC 8989 8882 B0DB B022 305C 92FD A303" $"A4A3 A3A4 FAA3 02CF B8BD FDD1 01B5 DBFC" $"DA00 B3FD D109 B7BD B8B8 B0B5 BEAA A5CC" $"FBA5 FFB5 08B8 BDB8 8FAE B38F E3A5 FAD1" $"FFDA FFDB FFD1 15E3 B8BE B8B8 E3DA DBE3" $"BDD6 B5AA BEBC BDB8 BCB8 BDAF B0FD A3FF" $"BDFF B008 B5D6 C6C6 B3AE C8F2 D101 5809" $"2900 3C44 3E3E 403E 3C3C FD3E FF41 FF75" $"1B7B 757B 75A8 7CAA AAA9 A8A9 AAA7 A7A8" $"A2A7 A774 7B3E 3E3D 3D76 7C7B 75FD 78FF" $"7BFF 782D 757B 757B 7544 3E3E 3F72 7979" $"7576 7C76 7BA5 9F7B AAAA A7A7 A57B 767C" $"7B75 7CA7 AAAA A8A8 767C 7C76 7878 A17C" $"783F FD3E FF75 FF7B 1375 7B7C 9272 78A9" $"A8D6 2F07 5056 5959 5A59 5A5A 59FE 59FF" $"58FF 8339 8883 8883 B187 B0B0 B1B0 AFB0" $"B1B1 B0AA B1B1 8289 5A5A 5858 8288 8983" $"8A8A 8989 8888 8989 8388 8388 8356 5959" $"5784 8989 8182 8882 88B1 AB88 B0B0 FEB1" $"1488 8288 8882 88B1 B0B0 B2B2 8288 8882" $"8A8A AC88 8A57 FD59 FF83 FF88 0F83 8888" $"9C84 89B1 B0D6 421B 8C91 A3A3 A4FA A3FF" $"9BFF B803 BDB8 BDB8 4DDD B6CA CAD2 D1C9" $"CADB DBD1 CBDB DBB9 BFA5 A5A3 A3B0 B5BF" $"BAC8 C8C6 C6BD BDC6 C6B8 BDB8 BDB8 8FA3" $"A398 C1C4 C4AF B0B5 B0BD E3DD BDCA CADA" $"DAE3 BDB0 B5B5 B0B3 DAD1 D1DB DBB0 B5B5" $"B0C8 C8D6 B5C8 9AFD A3FF B8FF BD08 B8BD" $"B5C8 C1C6 D2D1 D601 5003 0129 0044 FD3E" $"FF3C FD3E 0178 72FE 7B12 757B 75A6 A8A5" $"AAA8 A8A5 AA7C A778 7E7C 7675 7BFE 3E2F" $"4076 767B 7578 7272 7875 7578 7275 7B75" $"7B75 4440 3E41 7879 7276 7C7C 927B 757B" $"7BA5 AA7C A7A5 7B92 7C75 A6A7 A7AA AA7C" $"FEA7 077B 9378 727C 7578 72FD 3EFE 7B0D" $"9175 7B76 7C78 78A8 D4C7 092F 2456 FD59" $"FF5A 0059 FE59 018A 84FE 8805 8388 83B0" $"B1AB FEB0 36AB B088 B181 8788 8283 895A" $"5A59 5A82 8289 838A 8484 8983 8389 8483" $"8883 8883 565A 5958 8989 8382 8888 9C88" $"8388 88AB B088 B1B0 889C 8882 FEB1 FFB0" $"0088 FEB1 0787 9D8A 8488 818A 84FD 59FE" $"880D 9D83 8882 8889 89B0 DBC7 1E42 5B91" $"F7A3 01C8 C2FE BD02 B8BD B84D DBDD C4CA" $"D1D1 C4CA B5DB A5AA B5B0 BABF A5A5 A3A4" $"B0B0 BFBA C8C2 C1C6 B8B8 C6C1 B8BD B8BD" $"B88F A4A3 99C6 C4BF B0B5 B5C8 BDB8 BDBD" $"C4CA B3DA E2BD C8B5 B0DB DADA D1D1 B3DA" $"DBDB B4C9 C8C2 B5AF C8C2 FDA3 FEBD 09D1" $"B8BD B0B5 C6C6 D1FB C701 5503 1203 3C43" $"FB3E FF41 5775 7B75 7B73 737B 757B 7BA8" $"A8A5 7BA7 7C7B 7C76 767B 7578 7278 723C" $"3C3E 3E41 7776 7C77 7D7B 757B 7B76 7C7D" $"7778 7272 413E 3E42 7276 7C78 7276 7B7C" $"767B 9078 7892 A8A5 757B 7C75 A5A8 A8A7" $"A7A9 A8A6 A6A7 7C76 A775 7B76 75FD 3E10" $"7692 7B7B 7C76 798F 7C92 ABC4 AD18 0A50" $"57FB 5900 5830 5883 8883 8883 8388 8388" $"88B0 B0B1 88B1 8888 8982 8289 838A 8489" $"845A 5A59 5958 8982 8882 8788 8388 8882" $"8887 8189 8484 58FE 5916 8482 8889 8482" $"8788 8288 9D8A 8A9A B0B1 8388 8983 B1B0" $"B0FE B100 B0FE B106 8882 B183 8882 81FD" $"5910 829C 8989 8882 899D 889C AFC8 B530" $"228D 93FB A3FF 9B09 B8BD B8BD B8B8 BDB8" $"BDBD FFD1 0DE3 BDDB B5BD BEB0 B0BC B7C8" $"C2C6 C1FD A339 9BC7 AEB3 B0B5 BDB8 BDBD" $"AEB3 B3AE C6C1 C29B A3A3 9CC2 B0B5 C9C4" $"B0B4 B5B0 BDD0 C8C8 BDD1 E3B8 BDBE B8E3" $"D1D1 DBDB D2D1 DBDB DAB3 B0DB B8BD B1B0" $"FDA3 0CB0 C8BC BCB5 B0BD D0B5 C8C1 D9D6" $"015D 0303 1200 43FE 3E1A 403E 3E72 787C" $"757B 757A 7975 7B75 75A8 A9A5 7B91 7D90" $"7B76 7C7B 75FE 7836 773C 3C3E 3E72 78A7" $"777D 927C 7575 A576 767D A277 7841 413E" $"3E41 787C 9278 787C 927C 927B 7B72 787E" $"787B 4475 757B 7CA8 A87C A7A8 A87B A6FE" $"A704 7C7A 757C 76FD 3E10 7C7D 7575 7CA1" $"7979 767C ABD2 CF0A 1825 57FE 5903 5A59" $"5984 4F8A 8983 8883 8A89 8388 8383 B0B1" $"B188 9C89 9D88 8288 8983 8A8A 8988 5A5A" $"5959 848A B183 879C 8983 83B1 8282 87AB" $"8889 5858 5959 588A 889C 8989 889C 889C" $"8888 848A 8781 8856 8383 8889 B0B0 88B1" $"B0B0 88FD B104 8887 8387 82FD 5910 8889" $"8383 88AC 8989 8288 AFD6 D722 305D 93FE" $"A30E A4A3 A3C2 C8BE B8BD B8BE BDB8 BDB8" $"B80F D1D2 E3BD C7B6 D0BD B0B5 BCB7 C8C8" $"C6C5 FDA3 39C2 C8DA AFB5 C8BE B8B8 E3AE" $"AEB3 D5C5 C69B 9BA3 A39B C8B5 C8C9 C9B5" $"C8B5 C8BD BDC2 C8AA A5BD 8FB8 B8BD BED1" $"D1B5 DBD1 D1B5 DBDA DADB B5BC B8B6 B1FD" $"A30C B5B6 B7B7 B5D6 BDBD B0B5 C1E7 F601" $"5703 2B02 3C43 FD41 5378 A87C 767C 767B" $"757B 757B 7578 787A 757B 7578 727C 927B" $"7B90 7B92 7C92 763F 3F3E 3E75 757B 7678" $"7890 7B7C 767A 7B72 7875 7B76 443E 3E41" $"727B 757C 7675 7B72 797C 7679 7375 7A72" $"403E 3E44 75A7 A7A8 A7A3 A8AA AAFD A8FF" $"AA16 7B44 3E3E 3C3C 7C75 7B7B 7178 757B" $"757C A8D4 AB2E 0550 57FD 5802 81B0 884D" $"8288 8288 8388 8388 8389 8987 8388 838A" $"8488 9C88 889D 889C 889C 825A 5A59 5983" $"8388 838A 8A9D 8888 8287 8884 8A83 8883" $"5659 5958 8488 8388 8283 8884 8B88 8289" $"8383 8784 5859 5956 83B1 B1B0 AFAB F8B0" $"2888 5659 595A 5A88 8188 8883 8983 8883" $"89B0 DBAF 3D15 8D93 9999 9B9B A5D1 B5B0" $"B3AE BDB8 BDB8 BDB8 C6C6 0FBC B8BD B8C8" $"C2B5 C8BD BDD0 BDC8 B5C8 B0FD A3FF B837" $"BDB9 C8C8 D0BD B5B0 BCBD C2C8 B8BD B98F" $"A3A3 9BC2 BDB8 B5B0 B8BD C2C8 B5B0 BDB8" $"B8BC C49D A3A3 8FB8 DADA D1D0 CCD1 CACA" $"D1D1 D3D3 D1D1 BD8F FDA3 0CB5 AFBD BDC0" $"C6B8 BDB8 BED1 FBBF 015A 0902 2B00 4341" $"7278 A4A8 A8FD A74D 757B 757B 757B 7241" $"7B75 7B75 7878 767C 7B90 7B7B 7C76 7C7C" $"3F3F 3E3E 447B 7B75 7872 7B7B 927B 7B90" $"7777 757B 7544 3E3E 4178 757B 76A8 7B75" $"7878 927C 7379 7B75 7840 3E3E 4475 7C76" $"A8A8 7EA8 AAA5 FDA8 FFAA 1DA5 753E 3E3C" $"3C7C 937B 9078 7775 7B75 7BA8 A8D2 052E" $"2457 5884 8AB3 B0B0 B1FE B111 8388 8388" $"8388 8458 8883 8883 8A8A 8288 889D FE88" $"3882 8888 5A5A 5959 5688 8883 8A84 8888" $"9C87 889D 8989 8388 8356 5959 588A 8388" $"82B2 8883 8A8A 9C88 8389 8883 8958 5959" $"5683 8882 B0B0 87B0 B0AB FBB0 28B1 8359" $"595A 5A88 9D88 9D89 8883 8883 88B0 B0D6" $"153D 5C93 99C1 C8EE D1D1 DBDB DADA B8BD" $"B8BD B8BD C199 0FBD B8BD B8C8 C8B0 B5BD" $"D0BD BDB5 B0B5 B5FD A31B 8FBD BDB8 C8C2" $"BDBD C8B4 BDD0 C7C7 B8BD B88F A3A3 9BC8" $"B8BD B0DC BDB8 FEC8 1AB5 B8BD BDB8 C99D" $"A3A3 8FB8 B3AE D1D1 AAD1 CAC4 D1D1 D3D3" $"D1D1 E3B8 FDA3 0CB5 C9BD D0C6 C5B8 BDB8" $"BDD1 D1E5 015E FF00 033E 467A AAFE A802" $"A7AA AAFE A716 7B72 7872 413E 3F75 7B90" $"7B78 A878 7275 7B75 757C 767D 76FD 3E24" $"767C 757B 927C 777D 7872 757B 7676 7C75" $"7544 3E3E 4172 A876 7B75 7B7B 927C 757B" $"A676 7C76 77FE 3EFF 4103 7B75 7871 FEA7" $"007C FEA7 1AA6 A8A8 A57B 7544 3E3E 747B" $"7878 7676 A575 7C92 ABD7 C10C 0C4E 5581" $"FEB0 02B2 B1B0 00B0 FEB1 1687 8489 8458" $"5A5B 8388 9D88 81B0 8984 8388 8383 8882" $"8882 FD59 2482 8883 889C 8882 878A 8483" $"8882 8289 8383 5659 5958 84B2 8288 8388" $"889C 8883 88B0 8288 828A FE59 FF58 0388" $"838A 83FE B100 88FE B1FE B017 B188 8356" $"5959 8288 8A8A 8282 B183 889C AFDB C827" $"2981 87A5 FED1 0DDB DAD1 D1DA DADB B4C1" $"C6C2 9BA5 A60F B8BD D0BD A5D1 C6C1 B8BD" $"B8B8 B5B0 BEB8 FDA3 24B8 BDB8 BDC8 B5B0" $"B5C8 C2B8 BDB0 B0BE B8B8 8FA3 A39B C2DB" $"AEBD B8BD BDC8 B5B8 BDDB B0B5 B0CF FEA3" $"FF9B 20BD B8C8 C2DA DADB B5DA DADB DBD3" $"D3E3 BDB8 8FA3 A3B7 BDC8 C8AE AEE3 B8B5" $"C8CA F4EA 015A 0F27 0020 7CAA AAA8 A8A7" $"7CAA AAA7 7CA7 A7FD 41FF 3E03 7B75 7B7A" $"FD78 077B 757B 7B92 7C76 7CFD 3E2F 767C" $"757B 7C76 7E92 7878 7B75 A87C 757B 7544" $"3E3E 4178 767C 757B 907B 7C76 7B75 7C75" $"7CA1 7740 3E3E 4172 7B76 7878 767C FEA7" $"1B7C A77C A8A8 A57B 7B75 3E3E 7B75 7278" $"7D76 7B7B 767C ABD2 AD30 0C35 88FD B002" $"B188 B004 B0B1 88B1 B1FD 58FF 5A0F 8883" $"8887 8181 8989 8883 8888 9C88 8288 FD59" $"2F82 8883 8888 8288 9C8A 8A88 83B2 8883" $"8883 5659 5958 8A82 8883 889D 8888 8288" $"8388 8188 AC8A 5A59 5958 8488 838A 8A82" $"88FE B11B 88B1 88B0 B0B1 8888 8359 5988" $"8384 8A89 8288 8882 88AF D6B5 4C27 6AB5" $"FDD1 0DDA B3D1 D1DA B3DB DB99 999B 9BA5" $"A50F BDB8 BDBC A5A5 C6C6 BDB8 BDBD C8B5" $"B8BD FDA3 06B8 BDB8 BDB5 B0B6 FEC8 40BD" $"B8DC B5B8 BDB8 8FA3 A39B C8AE B3B8 BDD0" $"BDB5 B0BD B8B5 AFB5 D6CF A4A3 A39B C2BD" $"B9C8 C8AE B3DB DBDA B3DB B5D3 D3E3 BDBD" $"B8A3 A3BD B8C2 C8B4 AEBD BDB0 B5CA EFD8" $"015C 1101 287A AAA8 A8A7 7BA8 A8A6 A7A8" $"A17B 7572 41FD 3E61 907B 7C92 7878 7676" $"7CA1 7C76 7778 7C76 3E3E 3C3C 7278 76A7" $"757C 767C 757B 907B 7B75 7C7B 4141 3E3E" $"4172 7878 757B 7B75 767C 767C 757A 757B" $"7241 3E3E 4475 7177 7878 7B75 7B75 A7A7" $"A8A8 A3A8 A7A7 757B 7B75 A17B 7D93 7B75" $"7C92 7877 AAC3 CF0A 2E81 FEB0 01B1 87FE" $"B006 B1B2 AC89 8384 58FD 590F 9D88 889C" $"8A8A 8282 88AC 8882 898A 8882 FD5A 5C84" $"8A82 B183 8982 8883 889D 8888 8389 8858" $"5859 5958 8489 8983 8888 8382 8882 8883" $"8783 8884 5859 5956 8384 8A81 8188 8388" $"83B1 B1B0 B0AB B0B1 B183 8888 83AC 8886" $"9B89 8388 9C89 88B0 C8D7 2245 9DCA DADA" $"DBB4 D1D1 D9DA DCD6 BCB7 C199 FDA3 02D0" $"BDB5 FEC8 FFAE 56B5 D6B5 B0C7 C8B5 B0A5" $"A5A3 A3C2 C8AE DAB8 BEAE B3B8 BDD0 BDBD" $"B8BE BD9B 9BA3 A39B C2C6 C6B8 BDBD B8B0" $"B5B0 B5B8 BCB8 BDC2 9BA3 A38F B8C2 C8A4" $"A4BD B8BD B8DA DAD1 D1CE D3DB DBB8 BDBD" $"B8D6 B5AB BFBF BAB5 C8C6 C5CA E1F6 0162" $"7F45 6495 AAA8 7DA7 A7A8 A9A7 7D7C 7C75" $"7B78 413E 403E 3E7B 7B76 7C78 71A7 7D76" $"7C7C 9278 7293 7C3E 3E3C 3B41 7876 7C75" $"7CA7 767B 747C 7B75 7B90 7B72 413E 3E41" $"7778 72A5 7A75 7B7C A27C 927B 757B 7578" $"413E 3E44 7577 7778 A87B 757B 757C 76A7" $"A8A8 7EA7 7C75 7C75 7BA6 7C93 7E75 7A76" $"7C78 72AA D6AD 4A68 9BB0 B087 B1B1 B0B1" $"B11A 8988 8883 8989 5859 5A59 5988 8882" $"888A 83B1 8982 8888 9C8A 849D 88FE 5A61" $"5958 8A82 8883 89B1 8288 8289 8883 889D" $"8884 5859 5958 8989 84B1 8783 8888 AD88" $"9C88 8388 838A 5859 5956 838A 8A81 B088" $"8388 8388 82AF B0B0 87B1 8883 8983 88B1" $"899B 8783 8882 8889 84B0 DCB5 5F7B B6CA" $"DAB3 DBDB D1D2 DAB4 B5B5 B7BC C699 A3A4" $"A3A3 FFBD 5CB0 B5C8 C2DA B4B0 B5B5 C8C8" $"C2C9 B5A5 A5A3 A39B C8AE B3B8 BEDA AEBD" $"B7BE BDB8 BDD0 BDC2 9BA3 A39B C7C6 C1E3" $"BCB8 BDB5 D7B5 C8BD B8BD B8C8 9BA3 A38F" $"B8C8 C8A4 D1BD B8BD B8B3 AED0 D1D3 ACDB" $"B5B8 BEB8 BDDB B6BF ACBA BEB0 B5C6 C1CA" $"F4D6 0159 FF67 007E FCA8 01A6 7CFE 7504" $"7B75 7B76 46FE 3E4A 3D76 767C 927A 757B" $"757C 7674 7B7B 7578 783E 3E3F 3F75 7B75" $"7B76 7C75 7B76 A775 757C 7578 7175 443D" $"3E42 7276 7C75 747C 9178 7875 7B7C A573" $"7972 413E 3E41 3F7B 917B 7576 7C75 7B75" $"7B75 7AFE A814 937B 7578 72A8 A8A7 7C7C" $"917B 7576 A7AA C1C4 6969 87FC B002 B188" $"83FF 8304 8883 8882 54FE 594A 5882 8288" $"9C87 8388 8388 8282 8888 8389 8959 595A" $"5A83 8883 8882 8883 8882 B183 8388 8189" $"8383 5658 5959 8482 8883 8287 9C8A 8A83" $"8889 B183 8984 5859 5958 5788 9D88 8382" $"8883 8883 8883 87FE B014 9B89 838A 84B0" $"B0B1 8887 9C88 8382 B1B1 C8C7 7272 AAFC" $"D101 DAB3 FEB8 04BD B8BD AE85 FDA3 FFB8" $"0DB5 C8BC B8BD B8B5 B0B7 BDBD B8C6 C6FD" $"A335 B8BD B8BD B0B5 B8BD B0DB B8B8 B3AD" $"C6C0 B88F A3A3 9CC2 B0B5 B8B7 B6C9 C8C8" $"B8BD BEE3 B8BD C29B A3A3 9B9A BDD1 BDB8" $"B0B5 B8BD B8BD B8BC FED1 11BE BCB7 C8C2" $"D1D1 DBB5 B6C9 BDB8 AEDA CAE1 D701 5F04" $"677E 92A8 A7FE A871 76A6 7B7B 757B 757B" $"7676 3E3D 3E3E 7C7C 767C 757B 757B 927C" $"7B75 7BA5 7278 3E3E 3F3F 757C 757B 7C92" $"7B75 7C76 7B7B 927C 7878 7544 3E3E 4178" $"7C93 7B7B 767C 7278 7B74 757B 7379 7841" $"3E40 4173 7B7B 757B 7C92 7B75 7B75 7B76" $"7EA3 A87E 7B75 7878 A9A8 A7A7 767C 7BA5" $"7C76 A9D5 AB69 809A B0AF FEB0 0283 B188" $"6E88 8388 8388 8282 5958 5959 8888 8288" $"8388 8388 9C88 8883 88B1 8489 5959 5A5A" $"8389 8388 889C 8883 8882 8888 9C88 8989" $"8356 5959 588A 889D 8888 8287 848A 8882" $"8388 8389 8A58 595A 5885 8888 8388 889C" $"8883 8883 8883 87AB B087 8983 8A8A B1B0" $"B1B1 8287 88B1 8882 B0DC AF72 89BD D1D0" $"FED1 09AE DABD BDB8 BDB8 BDAE AEFD A3FF" $"BD0D B0B5 B8BD B8BD C8B5 BDB8 BDE3 C1C6" $"FDA3 4AB8 BEB8 BDB5 C8BD B8B5 B0BD BDC6" $"B3C6 C6B8 8FA3 A39B C8B5 C9BD BDB1 B6C2" $"C8BD B7B8 BDB8 BDC8 9BA3 A49B C3BD BDB8" $"BDB5 C8BD B8BD B8BD B9AA CCD1 AABC B7C8" $"C8D2 D1DB DBB1 B6BD E3B3 AECA F4BF 015D" $"1167 7995 AAA8 A87B 757B 7592 7C76 A775" $"7B78 72FE 3E10 3D75 A576 7C7C 917B 7478" $"7992 7C75 747C 75FD 3E28 767B 75A5 7379" $"767C 7278 767C 7B91 7178 4141 3E3E 3F72" $"7278 7C92 7B7B 757B 917B 7C77 7D77 7240" $"3E3E 44FE 75FF 7B00 74FE 7B1B 75A5 757B" $"757B 7CA8 757A 7575 A8A8 A7A7 A8A8 7576" $"7278 AAC3 CF68 799B FEB0 0488 8388 839C" $"0688 82B0 8388 8A84 FE59 1058 83B1 8288" $"879C 8882 8A8B 9C88 8382 8983 FD59 2883" $"8883 B183 8982 8884 8A82 8788 9C84 8A58" $"5859 5957 8484 8986 9C88 8883 889D 8888" $"8387 8184 5859 5956 FE83 FF88 0082 FE88" $"2A83 B183 8883 8888 B283 8883 83B0 B0B1" $"B1B0 B081 8284 89B0 C8D7 7283 B6CA DADA" $"BDB8 BDB8 C8B5 ACD8 B8BD C6C1 FDA3 07B8" $"E3AE B3B6 C9BD B7FE C804 B5B8 B7BE B8FD" $"A328 B9BD B8E3 B8BD B0B5 C2C8 B1B6 B5C8" $"C0C6 9B9B A3A3 9AC2 C1C6 B4C8 BDBD B8BD" $"D1BD B5B1 B3AE C49D A3A3 8FFE B8FF BD1C" $"B7BD B5B5 B8E3 B8BD B8BD B5DC BABE B8B8" $"D1D1 DBDB D1D1 AFB0 C1C6 CAE1 F601 5F25" $"677F 7AAA A87C 757B 757B 7C76 7C76 7B75" $"7940 3E3E 403E 7B7B 76A7 757C 757B 7872" $"7C76 7B7B 757B FD3E 5544 757B 7B73 797C" $"A178 7891 7C76 7B78 7872 413E 3E41 7877" $"7877 7D7B 907B 757B 7B92 7C77 A878 403E" $"3E44 757C 7B7B A075 7B75 917B 7B75 7B75" $"7B76 767B 757B 7BA8 A87C A7A8 A8A7 7C78" $"78AA D6AD 687F 81B0 B086 8388 8388 881A" $"8287 8288 838B 5859 595A 5988 8882 B181" $"8783 888A 8488 8288 8883 88FD 5960 5683" $"8888 8389 88AC 8A8A 9C87 8388 8A8A 8458" $"5959 588A 8889 8287 889D 8883 8888 9C88" $"81B0 8958 5959 5683 8988 88AC 8388 829C" $"8888 8388 8388 8282 8983 8888 B0B0 88B1" $"B0B0 B188 8989 B0DC B572 899D CADA B3B8" $"BDB8 BDB5 B0B2 ACBD B8C7 99A3 A3A4 A3FF" $"BD0D AEDA B0B6 B8BD C8C2 B5B0 BDBD B8BD" $"FDA3 4A8F B8BD BDB8 BDB5 D6C8 C8C9 B6B1" $"B5C6 C6C2 9BA3 A39B C8C5 C6B0 B5BD D0BD" $"B8BD BDC8 B5AE DAC9 9DA3 A38F B8BE BDBD" $"DEB8 BDB0 C8BD BDB8 BDB8 BDB0 B0BF BABD" $"BDD1 D1B5 DBD1 D1DB B5C6 C6CA F4D6 0161" $"1167 78A3 A875 7C76 7C7D 767B 7B75 7B75" $"A576 76FD 3EFF 7567 7B75 7C7C 7B90 7D76" $"7878 927D 7B90 3E40 3E3E 757B 7676 7C76" $"7B75 7973 7C76 7872 7676 7241 3E3E 4172" $"917D 767C 757B 7C76 7B74 7B7B 757B 7241" $"3E3E 4141 7C92 7872 7879 927C 7C76 7B90" $"7B75 763F 3C3C 7B75 A8A8 A6A6 A77C A7A9" $"7675 ABD2 C268 7AAB B083 8982 8889 8288" $"0E88 8388 83B1 8282 5A5A 5959 8383 8883" $"FE88 4C9D 8982 8989 9C88 889D 595A 5959" $"8388 8282 8882 8983 8984 8882 8A84 8282" $"8458 5959 5884 9C88 8288 8388 8882 8882" $"8888 8388 8458 5959 5858 889C 8A84 898A" $"9C88 8882 899D 8883 8958 5A5A 8883 B0B0" $"FEB1 1D88 AFB1 8281 AFD6 C970 81CC D1B8" $"BEB0 B5B6 B0BD BDB8 BDB8 E3AE AEA5 A5A3" $"A3FF B85C BDB8 B5B5 BDD0 B6B0 C6C6 BFAC" $"BDD0 A3A4 A3A3 B8BD B8B8 B3AE BFBA BFBA" $"B5B0 C8C2 AEAE C29B A3A3 9BC2 C9B7 B0B5" $"B8BD B5B0 BDB7 BDBD B8BD C29B A3A3 9B9B" $"B5C8 C8C2 C6C7 C6B3 B5B0 BFD1 BDB8 C79B" $"A5A5 BDB8 D1D1 DBDB DAB3 D0D2 AEAD C1E7" $"E901 5F25 677E 787E 767B A17C 927C 75A5" $"7B75 7B7B 7D76 3E3E 403E 7B7B 757B 7692" $"7B7B 76A7 7278 7D92 7B7B FD3E 3376 7B7C" $"7C92 7C75 7A73 797C 9278 78A7 7C41 413E" $"3E41 787C 76A6 767B 75A7 767A 757B 907B" $"7578 413E 3E41 727B 7678 7873 777C 767C" $"92FE 7B1E 7577 713C 3C44 75A8 A8A6 7BA7" $"A6A8 A8A7 7CAC D3AD 6880 8187 8388 AC88" $"9C88 8306 B188 8388 8889 82FE 5A10 5988" $"8883 8882 9C88 8882 B184 8988 9C88 88FD" $"5900 83FE 883E 9C88 8388 8489 889C 8A8A" $"B188 5858 5959 588A 8782 B082 8883 B182" $"8783 889D 8883 8A58 5959 5884 8782 8A8A" $"8588 8882 889C 8989 8883 8A84 5A5A 5683" $"B0B0 B188 B1FE B01A B188 B0D7 B570 87A5" $"AAB9 BDD6 B5C8 B5B8 E3BD B8BD BDB4 AEA5" $"A5A4 A3FF BD0D B8BD B0C8 BDBD B0DB C1C6" $"ACBF BDBD FDA3 00B9 FEBD 06C6 B3BA BEBA" $"BFB5 FEC8 3CDA B39B 9BA3 A39B C8B6 B1DB" $"B0BD B8DB B0BC B8BD D0BD B8C8 9BA3 A39B" $"C2B4 B0C8 C8C2 C5B3 AEB5 C8BF BFBD B8C8" $"C2A5 A58F B8D1 D1DB B5DA D9D1 D1DA B3C2" $"E8D6 0155 0148 54FE 780C 727B 757B 757B" $"7573 A476 7678 41FD 3E0F 7C76 7C76 7878" $"7676 7B75 7B75 757B 7575 FD3E 0072 FC78" $"4FA7 767C A172 787C 7672 7872 413E 3E41" $"7875 7B71 7876 7C75 7B76 A875 7B7C 7C72" $"413E 3E45 7775 7B76 767C 917C 7778 7875" $"75A7 7678 723E 3E3D 3E7A A5AA AAA8 A8A7" $"A7A8 A8AA AAD6 4A57 8181 8984 8883 8883" $"88FF 8304 B282 8289 58FD 590F 8882 8882" $"8A8A 8282 8883 8883 8389 8383 FD59 3F84" $"8A81 818A 8AB1 8288 AC84 8A88 8284 8984" $"5859 5958 8A83 8883 8982 8883 8882 B283" $"8988 8884 5859 5955 8383 8882 8287 9C88" $"838A 8A83 83B1 8289 8459 5958 5987 B1FD" $"B0FF B1FD B012 D655 61A5 A5C6 C1BD B8BD" $"B8BD B8B8 E3B0 B0C6 99FD A30F B3AE B3AE" $"C8C8 AEAE BDB8 BDB8 B7BC B8B8 FDA3 39C2" $"C8A5 A5C8 C8DA AEB5 D6C1 C6B5 B0C1 C6C2" $"9BA3 A39B C8B8 BDC3 C9B0 B5B8 BDAE DBB7" $"BCB5 B5C2 9BA3 A38F B9B8 BDB0 B0B6 C9B5" $"B1C6 C6B8 B8DA AEC6 C1FD A30C BCE3 CACA" $"D1D1 DBDB D1D1 CACA D601 5A11 2C41 7978" $"7978 757B 757B 7B75 7979 767C 7872 FD3E" $"4D92 7C76 A778 717C A775 7B75 7B7B 757B" $"7B3E 3D3E 3E41 78A3 7E78 7276 7C76 7C78" $"7976 7678 7841 413E 3E41 727B 7579 7891" $"7C75 7B76 7C75 7B76 9278 413E 3E45 767B" $"757C A676 7C7C 9278 727B 7B7C 7578 41FD" $"3E17 747B A5AA A8A8 7CA7 A8A7 D1D6 D62E" $"4382 818A 8983 8883 8888 0683 8989 8288" $"8984 FD59 479C 8882 B18A 8388 B183 8883" $"8889 8388 8859 5859 5958 8AAB 878A 8482" $"8882 888A 8B82 8289 8958 5859 5958 8488" $"838A 899C 8883 8882 8883 8982 9C8A 5859" $"5955 8288 8388 B082 8788 9C8A 84FE 8802" $"8189 58FD 5902 8288 ABFE B018 88B1 B0AF" $"D7DB D63A 4EA6 A5C7 C6B8 BDB8 BDBD B8BD" $"BDB0 B5C6 C1FD A30F C6B3 AEDA C8C2 B3DA" $"B8BD B8BD BCB7 BDBD FDA3 399B C8CC AAC8" $"C2AE B3B0 B5C6 C7B0 B0C6 C69B 9BA3 A39B" $"C2BD B8CA C9C7 B5B8 BDAE B3B7 BCB0 C8C8" $"9BA3 A38F B8BD B8B5 DBB1 B6B5 C8C6 C1BD" $"BDB3 ADC6 99FD A30C B7BD C4CA D1D1 B5DB" $"D1D0 EFF3 D601 5B11 013E 4677 7C92 7B7B" $"7C90 7B75 7C75 7C76 7475 FD3E FF7B 1F73" $"7876 7C76 7C7C A7A8 A8A3 A8A7 7C75 7545" $"777B A57C 76A8 787C 7B76 7D76 9279 A4FE" $"7500 44FE 3E24 7792 7C76 7C79 727C 9278" $"7876 7C78 7872 413C 3C41 4178 7875 7C76" $"7C75 7B7B 907B 7476 7C76 76FD 3E17 7B75" $"7CA7 A8A3 A8A8 A7A7 A9D6 AB09 4355 8388" $"9C88 8889 9D88 0683 8881 8882 8283 FD59" $"FF88 1F83 8882 8883 8888 B1B0 B0AB B0B0" $"8783 8355 8388 B188 82B0 8189 8882 8982" $"9C89 B2FE 8300 56FE 5924 8A9C 8882 888A" $"8488 9C89 8982 8889 8984 585A 5A58 5889" $"8983 8982 8883 8888 9D88 8282 8882 82FD" $"591E 8883 88B1 B0AB B0B0 B1B1 AFDC AF1E" $"5587 B1B3 C6B5 B5BE D0BD B8B5 AFB5 B0B7" $"B8FD A3FF BD1F B8BC B0B5 AEB3 B5DB D1D1" $"CCD1 D8B2 B8B8 8FB9 BDE3 B3AE D1A5 BEBD" $"B0B6 B0C8 BDE3 FEB8 008F FEA3 24CF C8B5" $"B0B5 C7C1 B5C8 C6C6 B0B5 C6C6 C29B A3A3" $"9B9B C6C6 B8BE B0B5 B8BD BDD0 BDB7 B0B5" $"B0B0 FDA3 0CBD B8B5 DBD1 CCD1 D1DA DAC9" $"F4BF 0158 1100 5270 7C76 7C75 917B 7B75" $"7C92 7C76 A77B 44FD 3E05 75A5 79A5 A7A7" $"FEA6 44A7 A8A8 7EA8 A7A7 7C7A 7C76 7AA5" $"A7A7 A8A9 A5A5 A7A7 7C7C 7279 7B7B 7543" $"3E40 3E77 7C76 A776 7878 767C 7278 A776" $"7278 7841 3C3C 4172 7872 7B75 7C92 7B75" $"7B7B 757B 7B92 7C76 FD3E 0475 7B76 767E" $"FEA8 0F7C A7D1 D6E1 0757 7C88 8288 829C" $"8888 8306 899C 8882 B188 56FD 5903 83B1" $"89B3 FDB1 04B0 B1B0 B087 FEB0 0489 8788" $"8287 FEB1 00B0 FCB1 FF88 2D82 8988 8883" $"5559 5A59 8A88 82B1 8289 8982 8884 89B1" $"8284 898A 585A 5A58 8489 8488 8388 9C88" $"8388 8883 8887 9C88 82FD 5904 8388 8282" $"87FE B016 88B1 D7DC E41B 67AA B5AE B3B0" $"C8BD BDB8 BEC8 B5B0 DBBD 8FFD A320 B8E3" $"BDE4 DBDB DADA DBDB D1D1 AAD1 D8D8 BEBC" $"BDB8 BCE3 DADA D1D2 E3E3 DBDB B5B5 B7FE" $"BD29 B88F A3A4 A3CF B5B0 DBB0 C6C6 B0B5" $"C1C6 DBB0 C1C6 C89B A3A3 9BC2 C6C1 BDB8" $"B5C8 BDB8 BDBD B8BD B4C8 B5B0 FDA3 04B8" $"BDB0 B0AA FED1 04B3 DAEF F4F3 0149 1101" $"3E78 787B 7B78 7875 75A8 7678 787B 757B" $"75FE 4100 72F9 A8FF AA01 7CA6 FDA8 FF75" $"0272 7893 FDA8 00A9 FEA8 0FA7 A8A9 A8A8" $"A380 4141 3E3E 4172 757B 72FE 781E A77C" $"7E78 7177 A876 7341 3E3E 4475 7B75 A776" $"7B7B 757B 767C 76A8 757B 7A43 3DFE 3E05" $"7B75 7878 7278 FDA8 0DAB D2D7 0A43 8181" $"8888 8989 8383 B206 8289 8988 8388 83FE" $"5800 84F7 B000 87FC B0FF 8302 8489 9BFD" $"B035 B1B0 B0B2 B1B0 B1B0 B0AA 8758 5859" $"5958 8483 8884 8981 81B1 8887 8184 8AB1" $"8285 5859 5956 8388 83B1 8288 8883 8882" $"8882 B283 8889 5758 FE59 0588 838A 8A84" $"89FD B018 AFD6 DB22 58A5 A5BD BDC9 C9B8" $"B8DC B0C6 C6BD B8BD B89B 9B99 C1FD D1FF" $"D3FF D1FF CA01 B2D7 FDD1 FFB8 02C1 C6BE" $"FDD1 34D2 D1D1 DCDB D1D2 D1D1 CBAA 9B9B" $"A3A3 9BC2 B8BD C4C9 A5A5 E4BD AAA5 C2C8" $"D9AC C39B A3A3 8FB8 BDB8 DBB0 BDBD B8BD" $"AEB3 B0DC B8BD C89B FDA3 05BD B8C8 C8C1" $"C6FD D102 C1E7 EA01 4912 013E 7878 7B90" $"7872 7B7B 767C 7872 757B A57B 72FE 7803" $"A8A9 A37E FDA8 03A5 AAA7 A6FD A8FF 7BFF" $"7800 7EFA A801 7CA7 FDA8 36AA AB78 733E" $"3E41 787B 7578 7893 7E7C 76A3 7877 7776" $"7C78 413E 3E44 7575 7B76 7C7B 907B 75A7" $"767C 777B 757A 753E 3E40 3E75 7B78 7278" $"7978 FEA8 0DD2 D7D2 0A43 8181 889D 8984" $"8888 820E 8889 8483 88B1 8884 8A89 89B0" $"B1AB 87FD B000 ABFA B0FF 88FF 8900 87FA" $"B001 88B1 FCB0 35B1 8A85 5959 588A 8883" $"8989 9B87 8882 AB81 8A8A 8287 8A58 5959" $"5683 8388 8288 889D 8883 B182 8883 8883" $"8984 5959 5A59 8388 8A84 898A 81FE B018" $"D6DB D622 58A5 A5BD D0C9 C4BD BDB0 B5C6" $"C1B8 BDE3 BDC2 C8C6 C60B D1D2 CCAA D3D3" $"D1D1 C4CA D8D7 FDD1 FFBD FFC6 00AA FAD1" $"01B5 DBFC D135 D2C8 C3A3 A39B C8BD B8C9" $"C9BE AABD B8CC A5C8 C8AC B2C8 9BA3 A38F" $"B8B8 BDB0 B5BD D0BD B8DA AEB5 B1BD B8C8" $"C3A3 A3A4 A3B8 BDC8 C2C6 C7A4 FED1 02E7" $"ECE5 0158 0C0F 4572 7E75 7B75 A775 7B7C" $"76A3 FDA8 FF78 0C72 767C A8A9 AAAA A8A8" $"7CA7 A77C FEA8 027C A8A8 FD75 FFA8 0A7C" $"A67B A6A8 A3A8 A8A7 A87C FDA7 447C 7872" $"767C 9580 7575 7B7B 757B 7878 7676 7B75" $"7241 3E3E 4141 7878 767C 757B 7B75 7872" $"7B76 7C76 7873 3F3F 403E 7B90 7C92 7C92" $"7B7B A7A7 AAD6 D318 4A7B 8783 8881 B183" $"8888 0182 ABFD B006 818A 8482 88B0 B1FD" $"B009 88B1 B188 B0B0 B187 B0B0 FD83 FFB0" $"0A88 B188 B1B0 ABB0 B0B1 B288 FDB1 0B88" $"8984 8288 9B87 8383 8888 83FE 89FF 8217" $"8883 8458 5959 5858 8989 8288 8388 8983" $"8984 8782 8882 8A85 FE5A 1A59 889D 889C" $"889C 8888 B1B1 B0DC D72D 5CA0 AAB8 BDAF" $"DBB8 BDB5 B0CC FDD1 04A5 C8C2 AEB3 01D1" $"D2FD D109 B3DA DBB5 D1D1 DDB6 D1D1 FDB8" $"FFD1 48B3 DAB5 DBD1 CCD1 D1DA DBB5 DBDA" $"DADB B5C6 C1B0 B5BE AAB8 B8BD BDBA BFC6" $"C6B0 B0BD B8C2 9BA3 A39B 9BC6 C6B0 B5B8" $"BDBF BAC6 C1B3 AEB5 B0C8 C3A3 A3A4 A3BD" $"D0B5 C8B5 C8BD BDDA DACA F4E6 014C 0C00" $"3E78 787B 757C 767B 75A7 A77E FCA8 FF78" $"0777 76A8 A8AA AAA8 A8FE A70C A6A8 A8A7" $"A7A8 A87B 7B7C 7B78 A8FD A604 7EA7 A8A8" $"7CFE A747 7BA7 7677 7878 77A7 AAAB 7B7B" $"7575 7B75 7278 7C76 7BA5 7841 3E3E 3F72" $"7872 7C92 7B75 7B75 7878 927C 7CA1 7841" $"3F3F 3E3E 7B7B 767C 777C 7675 7CA7 D1D6" $"D706 4381 8188 8388 8288 83B1 01B1 87FC" $"B0FF 8A01 8382 FBB0 FEB1 FAB0 FF88 0389" $"8881 B0FD B104 87AF B0B0 88FE B149 87B1" $"8283 8989 83B1 B0B1 8888 8383 8983 8489" $"8882 88B1 8A58 5959 5784 8984 889C 8883" $"8983 8989 9C88 88AC 8A58 5A5A 5959 8888" $"8288 8388 8383 88B1 D7DC DB1A 55A5 A5BD" $"B8B5 B0BD B8DB DBAA FCD1 FFC8 01AF AEFB" $"D1FF DAFF DBFF D1FF DCFF D1FF BD33 BEBD" $"A5D1 DADA DBDB AAD0 D1D1 B3DA DBDB B3DA" $"B0B1 C6C6 B1DB D1D2 BDBD B8B8 BFBA C1C6" $"B5B0 BDE3 C89B A3A3 9AC2 C6C1 B5C8 BDB8" $"BFBA FEC6 04B3 B5D6 C89B FDA3 FFBD 0AB0" $"B5B1 B5B9 B8B3 DAEF F4EA 0157 0D00 4572" $"7E73 7977 7DA8 A8A7 A7A8 A8FE A71D 7C76" $"7678 78A8 7CA8 A87C A7A9 A87C A77C 767C" $"907B 7541 7275 757E A37B A5A1 FEA7 FFA6" $"FFAA FDA8 04A4 7975 757C FEA7 FFA8 1FA7" $"7DA1 7B75 7BA0 7C74 7572 413C 3C41 727C" $"927A 7A7C 767C A17C 767B 747B 767B 75FD" $"3F09 767C 7278 7C76 7B7B 757B FED2 0A0D" $"4C7B 8783 8982 87B0 B0B1 02B1 B0B0 FEB1" $"1D88 8282 8989 B187 B0B0 88B1 B1B0 88B1" $"8882 899D 8883 5884 8383 87AB 88B0 ACFC" $"B1FB B004 B289 8383 88FE B1FF B02D AF87" $"AD88 8388 AB88 8283 8458 5A5A 5884 889C" $"8989 8882 88AC 8882 8882 8883 8883 5A5A" $"5959 8288 848A 8882 8888 8388 FED6 152B" $"68A1 ACB8 BDB0 B5D1 D1DB DBD1 D1DB DBDA" $"B3B0 B0C6 C61F DDB6 D1D1 B5DB D2D1 B5DB" $"B5B0 BED0 BDB8 9BC2 B8B8 AACC BDE2 D6DB" $"DADA DCDC CACA FDD1 04E3 BDB8 B8B3 FEDA" $"FFD1 10DB B5DF BDB8 BDD6 B5B7 B8C2 9BA3" $"A39B C2B5 FEC8 0BB3 AEB5 D6B3 AEBD B7BD" $"B9BD B8FD A30C AEB3 C2C8 B5B0 BDBD B8BD" $"E7E7 E501 5D35 003C 727E 7379 A8A7 A8A8" $"A77C A8A8 A77C A7A7 767C 7872 A7A7 A878" $"A776 7778 7676 7C92 7B7B 757B 4141 4444" $"7878 7B75 7C7C 767C 757B AAA5 FDA8 0B79" $"737B 7B76 A77C A7A8 A87D A2FE 7B1A 747C" $"767B 7B77 413C 3B41 4177 7C7A 7477 A776" $"7C76 A77B 757B 747B 75FD 3F17 7C92 7878" $"927C 75A6 747B ABD7 D70E 447B 8783 89B0" $"AFB0 B0B1 0A88 B0B0 B188 B1B1 8288 8984" $"FEB0 1C81 B182 8081 8282 889C 8888 8388" $"5858 5656 8181 8883 8888 8288 8288 B0AB" $"FDB0 0B89 8388 8882 B188 B1B0 B087 ABFE" $"8841 8288 8288 8889 585A 5958 5883 8889" $"8483 B182 8882 B188 8388 8288 835A 5A59" $"5988 9C8A 8A9C 8883 B282 88AF DBDB 2E61" $"A1AC B8BD DBDB D1D1 DBB5 D1D1 DBB5 DADA" $"B0B5 C6C1 FFDC 1DD1 A5DB B0A4 A5B0 B0B5" $"C8BD BDB8 BD9B 9B8F 8FA4 A4BD B8B5 B5AE" $"B3B1 B6CA C4FD D10B BDB8 BDBD AEDA B3DA" $"D1D1 B5D6 FEBD 1AB7 B5B0 BDBD C79B A3A3" $"9B9B B1B5 C8C2 AFDA B0B5 AEDA BDB8 BDB7" $"BDB8 FDA3 01B3 C6FE C807 B5B8 E4B7 BDC1" $"ECEA 0151 030F 4578 78FD A805 7EA8 A7A8" $"A77C FEA8 0176 7BFE 7503 7B75 7B75 FB7B" $"2375 7A76 7C7B 903E 3D3E 3E41 7875 7B75" $"757C 767B 9078 7876 7CA7 A775 7B75 7C7C" $"A7A8 A8A7 A7FD A830 937E 767C 7676 7840" $"3E3E 4475 7872 7C92 7878 757B 7B76 7279" $"927C 7544 3E40 3E3E 7278 797E 7872 7C76" $"7B75 AAD1 D618 4A81 81FD B002 87B0 AF07" $"B0B1 88B0 B0B2 8288 FE83 0388 8389 83FB" $"8823 8387 8288 889D 5958 5959 588A 8388" $"8383 8882 889D 8A8A 8288 B1B1 8388 8389" $"88B1 B0B0 B1B1 FDB0 309B 8782 8882 8289" $"5859 5956 8389 8488 9C8A 8A83 8888 8384" $"8A9C 8883 5659 5A59 5984 8982 8789 8488" $"8288 83B0 D6D5 2D5C A4A4 FDD1 0AAA D1D0" $"D1DA B3D1 D1DB AEBD FEB8 03BD B8BC B7FB" $"BD05 B8BC B0B5 BDD0 FDA3 199B C8B8 BDB7" $"B7B3 AEBD D0C8 C8B0 B5DA DAB8 BDB8 BEB5" $"DBD1 D1DB DBFD D10E BEAA B0B5 AEAE C99D" $"A3A3 91BA C6C1 B5FE C81A B8BD BDB9 C1C7" $"C8B5 B88F A3A4 A3A3 C1C6 A6AA C6C1 BDB8" $"BDB8 C8ED D401 4403 003E 78A9 FCA8 09A3" $"A8A8 A7A7 A8A7 A77C 75FE 4402 7B75 7BFB" $"7506 A575 7B7C 927B 7BFD 3E0B 7278 7B75" $"7C7B 76A7 7A7C 7378 FE76 0A7C 7B75 7B75" $"76A7 A8A9 7BA7 FBA8 1A7C 927C A771 403E" $"3E44 7578 7876 7C72 787B 7575 7B78 787C" $"767B 753D FE3E FE78 0DA3 7878 767C 747B" $"AAD6 D607 4381 B1FC B001 ABB0 07B0 B1B1" $"B0B0 B188 83FE 5602 8883 89FB 8306 B183" $"8888 9C88 88FD 590B 848A 8883 8A89 82B1" $"8789 858A FE82 FF88 0883 8883 82B1 B0B1" $"87B1 FBB0 1A88 9C88 B183 5859 5956 8389" $"8982 8884 8A88 8383 8889 8988 8288 8358" $"FE59 FF89 0D81 AB89 8982 8882 88B0 DBD5" $"1B55 A4FB D109 CCD1 D1DA DAD1 D0DA B3B8" $"FE8F 03BD B8BC B7FC B806 E3B8 BDB5 C8BD" $"BDFD A319 C2C8 BDB8 BDBC AEDA BCBE C3C8" $"B0B0 AEB3 BDB8 BDB8 B0DB D1D2 B4DB FBD1" $"19B5 C8B3 DAC3 9DA3 A391 BAC6 C6B0 B5C2" $"C8BD B8B8 BDC6 C6B5 B0BD B8FD A3FF C60A" $"A5CC C6C6 B8BD B7BD C8F2 D401 540A 3E76" $"7AAA A8A8 7CA7 A8A8 7DFE A70A 927C 7575" $"3C3C 3E3E 757B 75FB 7B06 757C 917B 757B" $"75FD 3EFF 7637 7D92 7C76 7973 7575 7B75" $"7B7B 7973 7342 4172 7BA5 A7A7 AAAA A8A8" $"7CA8 A6A6 A8A8 7B75 7841 3C3C 4141 7C92" $"7B7B 747B 8F79 7C7C 9276 767C 7872 FD3E" $"FF76 0D77 717C 927B 75A5 7BAA D2A8 437A" $"81FE B004 88B1 B0B0 89FE B10D 9C88 8383" $"5A5A 5959 8388 8288 8989 FE88 0683 889C" $"8883 8883 FD59 FF82 0487 9B88 8289 FE83" $"0A88 8388 8889 8383 5658 8488 FEB1 FDB0" $"1D88 B2B1 B1B0 B088 838A 585A 5A58 5888" $"9C88 8882 889D 8988 889C 8282 888A 84FD" $"59FF 821C 8A84 889C 8883 B188 B0D7 B058" $"8C9D CAD1 D1B3 DAD1 D1B6 DBDA DAC8 B5B8" $"B8FD A305 B8BD B0B5 BFBF FEBD 06B8 BDD0" $"BDB8 BDB8 FDA3 FFB0 04B6 C9B5 B0BD FEB8" $"01BD B8FE BDFF B828 8F9B C2BD E3DA DACA" $"CAD1 D1B5 DCDA DAD1 D1BD B8C8 9BA3 A39B" $"9BB5 C8BD BDB7 BDD0 BDB3 B3C6 AEB0 B5C8" $"C2FD A3FF AE0A C8C2 B5C8 BDB8 E3BD CAF0" $"D101 5C25 457C 95AA A8A8 A7A7 A8A8 A7A8" $"7C76 7C76 7B44 3C3C 3E3E 7B75 7B91 7B91" $"7B90 7B75 7D7C 757B 757B FD3E 0776 7D77" $"7C7C A179 73FE 7B0E 75A5 7573 7873 4341" $"4144 757C A7A5 AAFE A816 A7A6 7CA8 A8A5" $"7B72 413C 3C41 7176 7C7B 907B 7579 7992" $"76FE 7C16 9278 413E 3D3E 3E7B A776 7776" $"7C7B 757A 75AB AAD4 4A80 9BFE B0FF B1FF" $"B000 B11A B288 8288 8288 565A 5A59 5988" $"8388 9C89 9E88 9D88 8388 8883 8883 88FD" $"5907 8289 8186 88AC 8983 FE88 0D83 B183" $"8388 8357 5858 5683 88B1 ABFE B017 B2B1" $"B188 B0B0 B188 8458 5A5A 5883 8288 889D" $"8883 8989 9C82 FE88 259C 8A58 5958 5959" $"87B1 898A 8288 8883 8783 B1B0 DB5F 91B6" $"CAD1 D1DA DAD1 D1DB DCB3 AEB5 B0BD 8FFD" $"A30F BDB8 B5C8 BFD2 BDD0 BDB8 BEBD B8BD" $"B8BD FDA3 07B0 B6B1 B5B5 D6BD B8FE BD2E" $"B8E3 B8B8 BCB8 909B 9B8F B8B3 DAC4 CAD1" $"D1DC DBDA B3D1 D1E3 BDC2 9BA3 A39B C2B0" $"B5BD D0BD B8BD BDC6 AEB3 B3B5 C8C8 9BFD" $"A30C B3DA C7C8 B0B5 BDB8 BCB8 CACA FB01" $"5611 6778 A5AB 7CA8 AAAA 7BA6 7475 757B" $"7878 7676 FD3E 0F75 7BA6 7B75 7B75 7B75" $"7B76 7C75 7BA1 7CFD 3E10 447C 7C76 7872" $"7878 927C 907B 757B 7D77 77FD 3E05 7778" $"7E7B A57C FEA7 FFA8 00A7 FEA8 16A7 463E" $"3E41 727B 7578 7976 7C75 7579 7776 7C92" $"7C7B 753B FE3C FF75 1577 7C72 7893 7D75" $"7BC4 D7AB 697A ABB1 88B2 B0B0 88B2 82FF" $"8304 888A 8A82 82FD 590F 8388 B288 8388" $"8388 8388 8288 8388 AC88 FD59 1056 8988" $"828A 8489 899C 889D 8883 8887 828A FD59" $"058A 8187 88B1 88FE B1FF B01A B1B2 B0B0" $"B155 5959 5884 8883 8A8B 8288 8383 8A88" $"8288 9C88 8883 59FE 5AFE 831B 8884 899D" $"8983 88C7 DBAF 7283 C4CA B3DB CACA BDE4" $"B7B8 B8BD C8C8 AEAE FDA3 0FB8 BDE4 BDB8" $"BDB8 BDB8 BDAE B3B8 BDD6 B5FD A310 8FBE" $"B5B0 C8C2 C6C6 C8B5 D0BD B8BD B5B0 CFFD" $"A324 CFA5 AABD E3B3 DADB DBD1 D1DB DCD1" $"D1DB 87A3 A39B C2BD B8C8 C8AE B3B8 B8C7" $"C5B0 B5C6 B3BD B8FD A3FF B80A B1B5 C1C6" $"C9B6 B8BD D7EA BF01 5409 677E 7AAA A8A7" $"AA95 7B75 FE7B 0475 7278 7C76 FD3E 0F7B" $"7575 7B7B 757B 75A5 7B75 A77B 757C 76FD" $"3EFF 750D 7C92 7878 7278 7C76 7B7B 757B" $"927D FC3E 0477 7893 7B75 FEA7 387C A8A8" $"A77B A8A8 A776 3E3E 3F41 7B76 7278 A876" $"7B7B 7277 A17C 7C76 7B76 3C3C 3B3C 7B7A" $"7C92 7878 7C76 7B75 ABD2 D269 8081 B0B2" $"B1B0 9B88 8388 FF88 0483 848A 8882 FD59" $"0F88 8383 8888 8388 83B1 8881 B188 8388" $"82FD 59FF 830D 889C 8A8A 8489 8882 8888" $"8388 9C87 FC59 048A 819B 8883 FEB1 3788" $"B0B0 B187 B0B0 B182 5959 5758 8883 848A" $"B282 8888 8488 AC88 8882 8883 5A5A 595A" $"8887 889C 8989 8882 8883 AFD6 D672 899D" $"CADB DACA B6BD B8FE BD04 B8C2 C8B3 AEFD" $"A30F BDB8 B8BD BDB8 BDB8 E3BD ADDA BDB8" $"B5B0 FDA3 FFB8 00B5 FEC8 09C1 C6B5 B0BD" $"BDB8 BDC8 B5FC A324 CFA5 BEBD B8DA DADB" $"B5D1 D1DB B4D1 D1DB B0A3 A39A 9BBD B9C2" $"C8DB AEBD BDC1 C5D6 B5B3 AEBD B9FD A30C" $"BDBC B5C8 C6C6 B5B0 BDB8 BFE5 E501 5911" $"6778 95AA A8A3 7878 757B 767C 907B 7C92" $"7841 FD3E 1072 787C 757D A178 7875 7579" $"7371 7775 7B3D FE3E 1975 7B75 7B7C 927C" $"7676 7C75 757C 7678 7875 443E 3E44 7678" $"7975 7BFE 7500 A7FD A833 A77C A77C 7B75" $"3E78 76A7 7B75 757B 7CA1 7B75 7B75 7C76" $"7841 3E3E 3C3C 7575 7B7B 7575 7CA1 7878" $"A7D4 AB69 7A9B B0B0 AB8A 8A83 8882 0688" $"9D88 889C 8958 FD59 1084 8A88 8189 AC89" $"8983 8389 8384 8A83 8858 FE59 1D83 8883" $"8888 9C88 8282 8883 8388 8289 8983 5659" $"5956 8389 8A83 8883 8381 B1FD B03A B188" $"B188 8883 598B 82B1 8883 8388 88AB 8883" $"8883 8882 8958 5959 5A5A 8383 8888 8383" $"88AC 8A8A AFDB AF72 83B6 CAD1 CCC8 C8B8" $"BDB8 BDD0 BDB5 C8C6 99FD A30F C2C8 B5AF" $"B6D6 C6C6 B8B8 BDB8 C2C8 B8BD FDA3 1DB8" $"BDB8 BDB5 C8B3 AEB0 B5B8 B8B5 B0C6 C6B8" $"8FA3 A38F B9C6 C7B8 BDB7 B7AF DBFD D117" $"DAB3 DBB5 BDB8 A3D0 AEDA BDB8 B8BD B3D5" $"BDB8 BDB8 B5B0 C699 FDA3 FFB8 FFBD FFB8" $"06B5 D6C6 C6D0 FBBF 015D 1148 78AA AA78" $"7E78 727B 757C 767B 7B77 7C78 72FE 3E10" $"4078 7876 767C 7678 727B 7B73 7977 7775" $"7BFD 3E3D 757C 757B 767C 76A7 7C92 7B7B" $"937C 7772 7544 3E3E 4475 7872 7B76 7B7B" $"7C76 A878 A8A8 A7A7 A876 7B75 773E 767C" $"757B 7B76 767C 757B 757B 927C 7241 3E3E" $"3C3C FE7B 1490 7B7B 767C 7872 A8A8 D24A" $"7AB0 B081 878A 8488 8388 0682 8888 8388" $"8984 FE59 105A 8A8A 8282 8882 8984 8888" $"8389 8A8A 8388 FD59 3D83 8983 8882 8882" $"B188 9C88 889D 8888 8483 5659 5956 8389" $"8488 8389 8988 82B0 81B0 B0B1 B1B2 8288" $"838A 5982 8883 8888 8382 8883 8883 889C" $"8884 5859 595A 5AFE 881B 9D88 8882 888A" $"84B0 B0D6 5583 CACA A5AA C8C2 BDB8 BDB8" $"BDBD B1B5 C6C1 FEA3 00A4 FFC8 FFB0 0BB5" $"B0C6 C1BD BDB8 BDC8 C8B8 BDFD A339 B8BE" $"B8BD B0B5 AEDA B5C8 BDBD C9B5 C5C1 B88F" $"A3A3 8FB8 C6C1 BDB9 BCBC B5B0 D1A5 D1D1" $"DADA DCB0 BDB8 CFA3 AEB3 B8BD BDB9 AEB3" $"B8BD B8BD C8B5 C199 FDA3 FEBD 09D0 BDBD" $"B0B5 C6C1 D1D1 E501 5325 677E 7776 7B75" $"757B A17C 76A8 7576 7C75 7676 3F3F 3E3E" $"7692 7B7B 7379 767C 937C 7B90 7C92 7872" $"FD3E 0F42 7B7B 907A 747B 7578 787C 7678" $"7992 7DFC 3E09 3D7C A178 7892 7C75 7B76" $"FCA7 3175 7B75 7B75 7BA7 767B 757C A77B" $"757B 7B76 7C78 7278 413E 3D3E 3E75 7592" $"7B7B 907B 7576 A7A9 D6A7 6980 8382 8883" $"8388 AC88 821A B283 8388 8182 825A 5A59" $"5982 9C88 8883 8982 889D 8888 9D88 9C89" $"84FD 590F 5589 889D 8782 8883 8A8A 8882" $"8A8B 9C89 FC59 0958 88AC 8A8A 9C88 8388" $"82FE B1FF B038 8388 8389 8388 B182 8883" $"88B1 8883 8888 8288 8984 8A58 5958 5959" $"8383 9C87 889D 8983 82B1 AFDC B072 89B1" $"B0BD B8B8 BDD6 B5B0 DCB8 B9B5 AFAE AEFD" $"A30F AEC6 BDBD B8BD AEB3 C7B3 BDD0 B5C8" $"C6C1 FDA3 0B90 BFBD D0BC B7BD B8C8 C8B5" $"B0FE C800 B6FB A301 B5D6 FEC8 1EB5 B8BD" $"AEDA DBDB D8D8 B8BD B7BC B8BD DAAE BDB8" $"B3DA BDB8 BDBD B0B5 C6C1 C89B FDA3 FFB8" $"0AC8 B4BD D0BC B7AE DAC9 F4D1 0154 2567" $"5477 7C75 7B7B 757B 767C 767B 7B92 7C7C" $"763F 3F3D 3E7C 7C75 A573 79A7 767C 757B" $"7B76 7C78 78FD 3EFF 75FF 7B0C 757B 7B75" $"7872 7CA1 7871 7C76 77FC 3E23 767C 7279" $"7C76 A57B 7C76 7C76 A77C 757B 757B 757B" $"7CA7 757B 7676 7B75 A575 7C92 7778 7241" $"FD3E 177A 7B7C 767B 7B75 7B7C 76AA D1D4" $"6957 8388 8388 8883 8782 881A 8288 889C" $"8888 825A 5A58 5988 8883 B183 89B1 8288" $"8188 8882 8889 89FD 59FF 83FF 880C 8388" $"8883 8A84 88AC 8A83 8882 8AFC 5923 8288" $"848B 8882 B188 8882 8882 B087 8388 8389" $"8388 88B1 8388 8282 8883 B183 889C 8889" $"8458 FD59 1E87 8888 8288 8883 8988 82B0" $"D7DC 7261 B1B5 B8BD BDB8 B4B0 B5B0 BDBD" $"C8B5 B3AE FDA3 FFB3 0DB8 E3B8 BDDA AEB3" $"ADBD BDB0 B5C6 C6FD A3FF BAFF BD0C B8BD" $"BDB8 C8C2 B5D6 C8C2 B5B0 CFFC A323 B0B5" $"C2C8 B5B0 E3BD B3AE B5B0 D8B2 B8BD B7BC" $"B8BD B3DA B8BD AEAE BDB8 E3B8 B5C8 C5C6" $"C29B FDA3 0CBC BDB5 B0BD BDB7 BCB3 AECA" $"EFFA 0156 1100 3E72 7878 72A7 777B 7B76" $"7C7C 757B 7578 41FD 3E0F 7B75 7B76 7B75" $"7278 757B 927C 7278 797A FD3E 3772 7892" $"7C75 A574 7B92 7C75 7B76 7C72 7872 403C" $"3D3E 3E3F 717C 7672 7876 767B 757B 7578" $"737B 757B 767B 7575 A5A8 9378 727C 767B" $"7578 7875 75FB 3E17 767C 767C 7575 A57A" $"777D AAAB C408 437B 818A 84B1 8389 8982" $"FF88 0481 8883 8958 FD59 0F88 8388 8389" $"8384 8983 889C 8884 8A80 81FD 5939 848A" $"9C88 83B1 8288 9C88 8388 8288 8489 8458" $"5A5B 5959 5884 8882 8489 8282 8883 8983" $"8985 8883 8883 8883 83B1 B09B 8A84 8882" $"8883 8A8A 8383 5A5A FD59 1E82 8882 8883" $"83B1 8782 87B0 B1C7 2158 A0A5 C8C2 DBB1" $"BFBF B0B5 B3AD BDB8 C699 FDA3 0FBD B8BD" $"B9BC B7C1 C6B8 BDC8 B5C2 C8A3 A4FD A339" $"C2C8 C8B5 B8E3 B7BD C8B5 B8BD B7BC C1C6" $"C49D A3A4 A3A3 9BC2 B5B0 C1C6 B0B0 BDB8" $"BFBA C6C2 BDB8 BDB9 BDB8 B8E3 D1BE C6C1" $"B5B0 BDB8 C8C8 B8B8 A5A5 FDA3 0CAE B3B0" $"B5B8 B8E3 BCB0 B5CA CAD7 0155 1101 3E78" $"7E78 7876 7C91 7B92 7C76 A775 7B78 72FD" $"3E0F 767B 757B 757B 7878 7B75 7C76 7879" $"9580 FD3E 3741 787C 767B 7B75 7B7C 777B" $"757B 7679 7840 403C 3C3E 3E3F 3F7C A178" $"7876 7C7B 767B 7541 4175 7B75 7B7B 757B" $"7C7E A878 7892 7C7B 7578 727B 44FB 3EFF" $"7615 7C92 7B7B 757B 927D AAD1 D70A 4381" $"878A 8A82 889E 899C 0688 82B1 8388 8984" $"FD59 0483 8883 8883 FE89 0788 8388 828A" $"8B9B 86FD 5939 588A 8882 8888 8388 8883" $"8883 8782 8A89 5858 5A5A 5959 5858 88AC" $"8989 8288 8883 8983 5858 8388 8388 8883" $"8889 87B0 8A8A 9C88 8883 8A84 8856 5A5A" $"FD59 FF82 1C88 9C88 8883 889C 87B0 D7DB" $"2258 A5AA C8C8 B0B5 D2BF C8B5 AEDA B8BD" $"C6C1 FDA3 0FB9 BDB8 BDB7 BCC6 C6BD B8B5" $"B0C8 C8BD AAFD A311 9BC8 B5B0 BDBD B8BD" $"B5B1 BDB8 BBB7 C7C6 9D9D FDA3 FF9B 21B5" $"D6C6 C6B0 B5BD B9BF BA99 99B8 BDB8 BDBD" $"B8BD BEAA D1C6 C6C8 B5BD B8C8 C2BD 8FA5" $"A5FD A3FF AE0A B5C8 BDBD B8BD C8B5 CAEF" $"EA01 4F0E 0F45 607E 7575 7C7C 7872 7677" $"767C 7BFE 75FD 3E0F 7B90 7878 A17C 7591" $"7BA5 747B 927C 7879 FD3E 1275 7B75 7B75" $"767C 9278 7892 7C7C A178 7275 4440 FD3E" $"1E3D 3E3D 7676 7872 7278 3F40 3E3E 4172" $"7B75 757B 7575 7CA7 A776 7B75 75A6 7575" $"FD3E FF3F FF3E 1743 7A78 7876 7C77 7D78" $"72AB D7A8 184A 6A87 8383 8787 8984 8903" $"8A82 8888 FE83 FD59 2688 9D89 89AC 8882" $"9C88 B182 889C 8889 8A59 595A 5A83 8883" $"8881 8288 9C8A 8A9C 8888 AC89 8483 565A" $"FD59 2258 5958 8282 8A84 8489 5A5B 5959" $"5884 8883 8389 8383 88B1 B182 8883 83B2" $"8383 5959 5A5A FD59 1B56 888A 8A82 8882" $"8789 84AE DBB0 2D5C 90AA B8B8 B6B6 C6C1" $"C7C8 AEB3 BDFE B8FD A31A BDD0 C6C6 D6B5" $"B0C8 BDE3 B7BD C6B3 C6C7 A3A3 A5A5 B8BD" $"B8BD AFB0 B5FD C8FF B505 D6C6 C1B8 8FA4" $"FAA3 FFB8 03C8 C2C1 C6FD A315 9BC2 BDB8" $"BABF B8B8 B5DB DAAE BDB8 B8E4 B8B8 A3A3" $"A5A5 FDA3 0C97 C4C8 C8AE B3B0 B5C6 C1C0" $"ECD1 0145 1100 3E78 787B 7B91 7678 7871" $"7776 767B A57B 43FD 3E0F 7B7C 7278 767C" $"7B7B 757B 757B 7C76 7278 FD3E 1175 7B75" $"7BA7 7C76 7C72 787D 767B 7679 7775 44F9" $"3E01 4345 FD41 FF3F FF3E FF41 0C75 7B7B" $"747B 7B75 767C 767B 757B FE44 FD3E FF3F" $"FF3E 1743 7473 7877 A777 7778 78C4 C4D4" $"0743 8181 8888 9C82 8989 8406 8A82 8288" $"B188 55FD 5904 8889 8489 82FE 881D 8388" $"8388 8882 8489 5959 5A5A 8388 8388 B188" $"8288 848A 8982 8782 8A88 8356 F959 0154" $"55FD 58FF 5AFF 59FF 580C 8388 8982 8888" $"8182 8882 8883 88FE 56FF 59FF 5AFD 591E" $"5683 858A 83B1 8282 8989 C8C8 DB1B 55A5" $"A5BD BDC9 B1C6 C6C2 C8AE AEBD E3BD 8FFD" $"A304 BDBE C1C6 B0FE B51D B8BD B8BD B3AE" $"C1C6 A3A3 A5A5 B8BD B8BD DBB5 B0B5 C2C8" $"B6B0 B4B0 C7C5 B88F F9A3 058E 8F9B 9B99" $"99FD A3FF 9B0C B8BD BFB9 BDBD AFB0 B3AE" $"BDB8 BDFE 8FFF A3FF A5FD A30C 97BF C3C8" $"AFDA B0B0 C6C6 D9D9 FB01 0C11 013E 7878" $"7C76 7873 7C92 7B75 A67D 7776 7872 FD3E" $"0F7D 927C 7679 7377 767C 757C 7575 A57B" $"75FD 3E0F 4172 7C76 7575 7878 767C 907B" $"767C 757B F73E FF3F F83E 0C40 3E3E 767C" $"7575 7878 757B 7544 F53E 173D 3E75 757B" $"7578 7876 7CA7 CFA8 0A43 8181 8882 8A85" $"889C 8806 83B0 8883 8289 84FD 590F 879C" $"8882 8983 8180 8983 8881 83B1 8883 FD59" $"0F58 8488 8283 8389 8982 889D 8882 8883" $"88EC 590C 5A59 5982 8883 838A 8A83 8883" $"56F5 591E 5859 8383 8883 8A8A 8287 B1D7" $"B022 58A5 A5B5 B0C8 C3B5 C8BD B8E3 BEB1" $"B0C6 C1FD A30F B5C8 B3AE BDB8 AEAD BEB8" $"B3AD B8E3 BDB8 FDA3 0F9B C2B5 B0B8 B8C6" $"C6B0 B5D0 BDB0 B5B8 BDEC A30C A4A3 A3B0" $"B5B8 B8C8 C8B8 BDB8 8FF3 A3FF B808 BDB8" $"C8C8 ACB2 D1F6 D301 1811 0F45 727E 7C92" $"7878 767C 757B 767C 767B 7841 FE3E 243D" $"777D 76A7 7379 A87D 7B75 A776 7B7B 747B" $"3E3E 3D3E 4178 927C 7B7B 7872 A776 7B7B" $"7C92 7B75 FC3E FF3D 043E 403E 3F3F F73E" $"0B3D 3E76 767C 7B78 7276 7B75 7BF3 3EFF" $"4413 7B75 7872 A776 A7AD A818 4A7B 8788" $"9C8A 8A82 8883 0688 8288 8287 8958 FE59" $"1758 8287 82B1 8389 B087 8883 B182 8888" $"8288 5959 5859 588A 9CFE 8803 8984 B182" $"FE88 029C 8883 FC59 FF58 0159 5AF4 590B" $"5859 8282 8988 8A84 8388 8388 F359 FF56" $"0D88 838A 84B0 82B1 B6B0 305F A0AA B5FE" $"C809 B0B5 B8BD B8BD B0B4 C699 FDA3 0FB0" $"B5AE DAB8 BDDA B3BD B8DA AEBD BDB7 BDFD" $"A30F 9BC8 C8B5 BDBD C6C1 DBB0 BDBD B5C8" $"BDB8 F9A3 00A4 F2A3 FFB0 07BE BDC8 C2B9" $"BDB8 BDF3 A3FF 8F08 BDB8 C8C2 D8AC D1D6" $"D301 0F11 003E 7776 757B 7B8F 7C7C 798F" $"7973 7C76 907B FD3E 0F78 7278 7875 7B75" $"7576 7C72 7876 767B 75FD 3E0F 4172 7879" $"9276 927C 767B 7675 757B 7B75 F73E FF3F" $"FD3E 0340 3E3E 3DFE 3E0C 3D3E 3E76 7675" $"7B78 727B 7575 44F1 3EFF 750F 4172 A7A7" $"A807 4383 8283 8888 9C88 8889 069D 8983" $"8882 9D89 FD59 0F8A 8489 8983 8883 8382" $"8884 8A82 8288 83FD 590F 5884 8A8B 9C82" $"9C88 8489 8281 8388 8883 F759 FF5A FD59" $"035A 5959 58FE 590C 5859 5982 8283 8989" $"8488 8383 56F1 59FF 8316 5884 B1B1 B01B" $"55B1 B0B8 BDBD CFB5 B5BD D0BD B8B5 B0D1" $"BFFD A30F C8C2 C6C6 B8BD B8B8 B0B5 C2C8" $"B0B0 BDB8 FDA3 019B C2FE C80A B0C8 B5BA" $"BFAE ADB8 BDBD B8F1 A300 A4F8 A3FF B807" $"BABF C6C1 BDB8 B88F F1A3 FFB7 0499 C1DB" $"DBD1 0107 1A01 3E75 7C7B 757A 7B76 9279" $"7973 79A1 7C7B 443D 3E3E 4078 7872 7875" $"FE7B 07A7 7678 797C 76A5 7BFD 3EFF 4101" $"7378 FE7C 0876 7B75 7CA7 7B75 7544 FC3E" $"0040 FD3E FF3F F33E 0945 7C7B 7578 7874" $"7C7B 75F1 3EFF 44FF 410D 7CA7 A809 4381" $"8888 8387 8882 9C89 0F89 8389 AC88 8956" $"5859 595A 8A8A 8489 83FE 8807 B182 8A8B" $"8882 B188 FD59 FF58 0185 8AFE 8808 8289" $"8388 B188 8383 56FC 5900 5AFD 59FF 5AF3" $"5909 5588 8983 8989 8289 8883 F159 FF56" $"FF58 1488 B1B0 1E55 AFB5 BDB8 BCBD B0C8" $"BDBD B8BD D6B5 BF91 FEA3 00A4 FFC8 02C1" $"C6B8 FEBD 07DB B0C8 C8B5 B0E3 BDFD A3FF" $"9B01 C3C8 FEB5 08B0 BFBA B3DA BDB8 B88F" $"FCA3 00A4 EDA3 098F BDBF BAC6 C6B7 BEBD" $"B8F1 A3FF 8FFF 9902 B5DB D100 FC11 013E" $"7278 76A7 7677 7878 757B 757B 7B75 7872" $"FD3E 1177 927B 757C 9275 757B 757C A175" $"7B75 753C 3CFD 3E0B 4172 787D 757A 757B" $"7C76 7278 F33E FF3F FF3E FF3F FB3E 0B3D" $"403F 3F75 7B75 7B75 7A75 7BF0 3E10 403D" $"3EA7 A7A8 0A43 7B81 82B1 8283 8989 821C" $"8883 8888 8389 845A 5A59 5983 9C88 8288" $"9C83 8388 8388 AC83 8883 835A 5AFD 590B" $"5884 8287 8387 8388 8882 848A F359 FF5A" $"FF59 FF5A FB59 0058 FE5A 0783 8883 8883" $"8783 88F0 591B 5A58 59B1 B1B0 2258 A0A5" $"AEDA B0B1 C6C6 B0B5 B8BD BDB8 C6C1 A5A5" $"A3A3 0FB1 C8B5 B0B5 C8BA BABD B8B5 D6B8" $"BDB8 B8FB A30B 99C1 B1B5 B8BC B8BD B5B0" $"C2C8 E6A3 0AA4 A3A3 B8BD B8BD B8BC B8BD" $"F0A3 05A4 A3A3 DBDB D101 1C27 013E 787E" $"7C76 7CA7 7772 7C91 7B75 7B75 7841 3E3D" $"3E3E 7C7C 75A6 767C 7B7B 757B 767C 7B75" $"7B7B 3B3C FD3E FF41 0B7D 927B 75A5 7B92" $"7C78 413E 40FE 3E00 40F9 3EFF 3F06 3E40" $"3F3F 3E3E 3DFC 3EFF 3F08 4475 7B74 7B75" $"7B75 77F3 3E01 403D FE3E 0D7C A7A8 0A43" $"8187 8882 88B1 8884 8907 9C88 8388 8389" $"585A FE59 FF88 0F82 B182 8889 8983 8882" $"8888 8388 8859 5AFD 59FF 580B 879C 8883" $"B188 9C88 8A58 595A FE59 005A F959 FF5A" $"0059 FE5A FF59 0058 FC59 FF5A 0856 8388" $"8288 8388 838A F359 015A 58FE 5918 88B1" $"B022 58A5 AAB3 AEB5 DBC5 C1B6 C8BD B8BD" $"B8C6 99A5 A4A3 A3FF B50D B0DB B0B5 BFBF" $"B8BD B0B5 BDB8 BDBD FBA3 FF99 0BB5 C8BD" $"B8E3 BDC8 B5C8 9BA3 A4FE A300 A4F6 A300" $"A4F5 A308 8FB8 BDB7 BDB8 BDB8 CFF3 A300" $"A4FD A302 B5DB D100 F311 0F45 5F7E 757B" $"7575 767C 757B 7B90 7878 9379 FE3E 1240" $"757B 7872 7B75 7C92 7D77 7B74 7B7B 7576" $"3F3F F93E 0578 7275 7541 3BF8 3E00 3DFD" $"3E02 3D3E 3DF0 3E07 7278 757B 767C 757B" $"FB3E 003D FE3E FF3C 0040 FC3E FEA8 0A18" $"4A69 8783 8883 8382 8883 FF88 049D 8A8A" $"9C82 FE59 105A 8388 8A84 8883 889C 8782" $"8882 8888 8383 F759 0589 8483 8360 5CF8" $"5900 58FD 5902 5859 58F8 59FF 5AFB 5907" $"8489 8389 8288 8388 FB59 0058 FE59 FE5A" $"FC59 FEB0 112D 5C8F AAB8 BDB8 B8B0 B5B8" $"BDBD D0C8 C8BD A5FE A300 A40F B8BD C8C2" $"BDB8 B5C8 B5B0 BDB7 BDBD B8B9 F7A3 05C6" $"C1BA BAB1 ADE7 A3FF A5FB A307 C1C6 B7BC" $"B0B5 B8BD F5A3 00A4 FCA3 FED1 00F8 1100" $"3E78 787B 757B 7B7C 927B 757B 7B72 797E" $"78FD 3E0C 7C75 7878 757B 767C 7EA3 7B75" $"A0FE 7B00 3FF8 3EFF 41FF 44FF 3BFD 3E00" $"40FD 3E00 40EF 3E00 3DFC 3E0B 4178 757B" $"7C92 7B75 773E 3E40 FB3E FF3C FB3E 0878" $"A8A8 0743 8181 8883 FE88 019C 8806 8388" $"8884 8B87 81FD 590C 8983 8A8A 8388 8288" $"88AC 8883 ACFE 8801 5958 F959 FF58 FF56" $"FF5C FD59 005A FD59 005A F159 FF5A 0058" $"FC59 0B58 8983 8988 9C88 838A 5959 5AFB" $"59FF 5AFB 5914 81B0 B01B 55A5 A5BD B8BD" $"BDB5 C8BD B8BD BDC2 C8AA A4FD A30C BEB8" $"C8C8 B8BD B0B5 B6D7 BDB8 DEFE BDF7 A3FF" $"99FF 91FF ADFD A300 A4FD A300 A4F1 A3FF" $"A5FB A30B 99C6 B7BC B5C8 BDB8 CFA3 A3A4" $"F3A3 02A5 D1D1 00F9 1100 4472 7E75 7B90" $"7B75 7B7C 767C 927B 7578 41FD 3E19 76A7" $"7575 7CA2 7C76 7B75 7878 757C 9276 3E3E" $"403D 3E3E 403E 3E40 F63E 023D 3E40 E73E" $"0941 727B 9078 7772 7876 76FB 4117 7544" $"7241 7544 7544 7241 AAC3 A80D 4B7B 8783" $"889D 8883 8888 0682 889C 8883 8958 FD59" $"1982 B183 8388 AD88 8288 8389 8983 899C" $"8259 595A 5859 595A 5959 5AF6 5902 5859" $"5AE7 5909 5884 889D 8A89 848A 8282 FB58" $"1E83 5684 5883 5683 5684 58B0 C8B0 2B67" $"A0AA B8BD D0BD B8BD B5B0 B5C8 BDB8 C699" $"FDA3 12B0 DBB8 B8B5 D7B5 B0BD B8C6 C6B8" $"BEC8 B0A3 A3A4 FEA3 03A4 A3A3 A4F4 A300" $"A4E7 A31C 99C1 BDD0 C6C5 C2C8 AEAE 9B9B" $"9999 9B9B B88F C29B B88F B88F C199 CAE1" $"D100 E511 003C 727E 7B75 7B7B 757B 76A8" $"757C 7B75 7872 FD3E 0F7C 767A 7B76 7C7C" $"927B 7478 737B 747C 7CE4 3EFF 3D02 403E" $"3DF1 3EFF 4125 437C 7873 7878 A77C 7278" $"7178 7278 7B75 7878 757B 7B75 7978 AAD7" $"A80E 447B 8788 8388 8883 8882 06B2 8188" $"8883 8984 FD59 0F88 8287 8882 8888 9C88" $"8289 8588 8288 88E4 59FF 5802 5A59 58F1" $"59FF 582C 5589 8A85 8A8A B188 848A 8389" $"848A 8883 8A8A 8388 8883 8A89 B0DC B02E" $"61A0 AABD B8BD BDB8 BDB0 DCAF B5BD B8C6" $"C1FD A30F B5B0 BCBD B0B5 B5C8 BDB7 C6C2" $"BDB7 B5B5 E2A3 00A4 EFA3 FF99 1A8F BEC6" $"C2C8 C8DA B3C2 C8C0 C6C2 C8BD B8C8 C8B8" $"BDBD B8C7 C6CA F5D1 012B 110F 4578 7876" $"A775 7BA1 7C75 7B78 7276 7C75 76FE 3E21" $"4075 7B77 A87B 7578 7975 7B92 7C7B 757C" $"7644 4441 3F46 7644 757C 7575 7B76 767B" $"4475 FE44 FD41 FF3C 0040 FE3E 003D EF3E" $"0840 4343 4475 A7A7 A8A8 FEA7 1C76 7B75" $"7872 754A 7676 4772 7147 7575 A9A7 C418" $"4A81 8182 B183 88AC 8883 0688 8A84 8288" $"8182 FE59 215A 8388 81B0 8883 898A 8388" $"9C88 8883 8882 5656 5857 5582 5683 8881" $"8388 8282 8856 83FE 56FD 58FE 5AFE 5900" $"58EF 592F 5A57 5756 83B1 B1B0 B0B1 B1B0" $"8288 8389 8483 5B82 825D 8483 5D83 83B1" $"AFC7 2D5C A5A5 AEDA B8BD D6B5 B8BD C8C2" $"B0B5 ADAE FEA3 00A4 20B8 BDAE DABD B8C6" $"C7B8 BDC8 B5BD B8B5 B08F 8F99 9887 B08F" $"B8BD B7B8 BDB0 B0BD 8FB8 FE8F FF9B FF99" $"FFA3 00A4 EBA3 1DA4 9999 8FB8 DADA D1D1" $"DADA DCB1 BDB8 C6C1 B894 B0B0 9EC1 C09E" $"B8B8 D2D0 D701 2611 003E 5F7E 7C77 7B75" $"7C76 7B75 7878 A17C 7C76 FD3E 207B 757D" $"777B 7572 787B 757C 76A5 7B92 7C75 7578" $"A3A7 A7A5 7BA6 7CA5 7BA7 7CA5 A57B FEA5" $"05A3 7878 7275 3CED 3E00 3DFE 3E27 4374" $"7B75 7CA7 A37D A87C A87C 757B 7247 7575" $"7C76 7872 7872 7B44 A8D4 AB07 4369 8788" $"8388 8388 8288 0683 8A8A AC88 8882 FD59" $"1388 8387 8188 8384 8988 8388 82B1 889C" $"8883 8389 B2FE B109 88B0 88B1 88B1 88B1" $"B188 FEB1 05B2 8A89 848B 5AED 5900 58FE" $"592E 5783 8883 88B1 AB86 B288 B187 8388" $"845D 8383 8882 8984 8984 8856 B0DB AF1B" $"558F AAB3 AFBD B8B5 B0BD B8C8 C8D6 B5B3" $"AEFD A320 BDB8 B3AE BDB8 C1C6 BDB8 B5B0" $"E3BD C8B5 B8B8 C6EB DBDB E3BD E3BD E3BD" $"DBB5 E3E3 BDFE E304 EDC8 C6C1 CFE8 A31C" $"99C1 BDB8 B3DA CCA9 DBB3 DDB6 B8BD C19E" $"B8B8 B5B0 C6C1 C6C1 BD8F D1FB BF01 4012" $"003C 767C 757B 7C76 7878 927C 7777 7B75" $"7841 3DFE 3E2F 757B 757B 76A7 7379 927C" $"7CA7 7AAA A8A8 7B75 7CA8 7EA8 7CA7 A8A7" $"7BA5 A8A8 7EA8 A8A9 A57B AAAA A8A8 A575" $"3E3E 4141 3C3C FB3E FF3F FB3E FF41 FF75" $"277B 757B 7576 A67C A7A8 A37D A87A 4375" $"7578 7875 4A75 7B44 7B75 7BAA AAC2 0E44" $"8288 8388 8882 8989 9C07 8881 8188 8389" $"5858 FE59 0C83 8883 8882 B183 899C 8888" $"B181 FEB0 1388 8388 B287 B088 B1B0 B088" $"B1B0 B087 B0B0 B1B1 88FD B007 B183 5959" $"5858 5A5A F359 FF57 FF83 2E89 8388 8383" $"B188 B1B0 AB89 B289 5783 8389 8983 5B83" $"8856 8883 89B0 B0C9 2E61 B0B5 B8BD B5B0" $"C6C6 C8B5 AEAE BDB8 C699 FDA3 0CB8 BDB8" $"BDB0 DBB8 BDC8 B5B3 DAA5 FED1 1DBD B8B3" $"DBAA D1B3 DAD1 D0BD E3D1 D1AA D1D3 D4E3" $"BDCA CAD1 D1E3 B8A3 A39B 9BF1 A3FF 97FF" $"B81C BCB7 BDB8 AEDA B5DB D1CC B6DC C699" $"B8B8 C6C6 B894 B8BD 8FBD BABF CACA EB01" $"3F11 0044 717C 767B 927C 7972 7C76 A87D" $"7A75 7872 FE3E 303D 7BA6 757B 767C 7973" $"7CA7 A7A8 AAAA A8A8 757B A7A7 A3A8 A7A7" $"7EA3 A57B A37D A3A8 78A8 7BA5 95AA 78A8" $"7B7B 7777 7241 3C3C FB3E FF3F FB3E 1879" $"727B 7B75 7B44 757C 76A7 76A9 7EA7 A77A" $"747C 7B72 3F75 767B FE75 0F7B 75AA D2AD" $"0D4B 7D88 8388 9C88 8A84 8806 82B0 8787" $"8389 84FE 590C 5888 B283 8882 8889 8388" $"B1B1 B2FD B01F 8388 B1B1 ABB0 B1B1 87AB" $"B188 AB86 ABB0 81B0 88B1 9BB0 81B0 8888" $"8A8A 8458 5A5A F359 1889 8388 8883 8956" $"8388 83B1 82B1 87B1 B189 8389 8884 5783" $"8388 FE83 1689 83B0 D7B5 2B67 ABB5 B9BD" $"C8B5 C7C1 B5B0 DAB3 BCB8 C6C1 FDA3 0BBD" $"E4B8 BDB0 B5BD B8B5 DBDA DBFD D11D B8BD" $"DADA CCD1 DADA AACC E3BD CCA9 CCD1 A7D3" $"BDE3 B6CA A5D1 BDBD CFCF C29B F1A3 18C4" $"BFBD BDB7 BC8F B8B3 AEDB B0D2 AADB DBC6" $"C1BE BDC1 98B8 B9BD FEB8 04BF BACA F0D8" $"015F 0114 42FE 781B 727B 76A2 7C78 7876" $"767B 907B 753C 3C3E 3E74 757C 767C 76A8" $"A8A7 A7A8 FEA7 FFAA 217B A7A8 7EA5 7BA4" $"80A8 A87C B2A6 A6A7 7CA7 A7A8 A77B A6A7" $"A7AA 7A75 7577 7875 7B40 40FE 3E01 403D" $"FE3E FF41 2D76 7C75 7B44 7578 7278 7875" $"7B7C A5A8 A8AA 7AA7 7C75 757B 7B77 7144" $"7B79 4175 7BAA AAD2 1642 8181 8984 8883" $"AD88 8A10 8A82 8288 9D88 835A 5A59 5982" $"8388 8288 82FE B001 B1B2 FEB1 FFB0 0B87" $"B1B0 87B1 88AB 87B0 B088 BCFE B112 88B1" $"B1B0 AF88 B2B1 B1B0 8183 8389 8A83 8858" $"58FE 5914 5A59 5A59 5958 5882 8883 8856" $"8389 848A 8A83 8889 B1FE B023 81B1 8883" $"8389 898A 8456 888B 5883 88B0 B0D6 244E" $"A5A5 C6C1 BDB9 D7B5 C8C8 AEAE BDD0 BDB8" $"FDA3 05B7 B8B3 AEB5 B0FD D100 DCFE DBFF" $"D121 B4DB D1AA E3BD CCAA D1D1 B5E5 DBDB" $"DAB3 DBDB D1D0 BDE4 DADA D1A5 B8B8 C7C8" $"B8BD 9D9D FEA3 FFA4 12A5 A3A3 9999 B0B5" $"B8BD 91BA C6C1 C8C8 B8BD BEE3 FED1 11A5" $"DAB3 B8B8 BCBC C8C2 8FBD C89B B8BD CACA" $"E501 5701 0442 FD78 1275 7B7C 7572 787C" $"767B 7B75 443C 3C3E 3E7B 7C76 FEA7 FFA8" $"FEA7 267C A77C AAAA A7A7 A8A3 7BA5 AAAA" $"78A8 A77C A67B A7A7 7CA7 78A8 A57B A77C" $"AA7A 7B7B 7278 757B 7278 FB3E 313D 3E72" $"7776 7743 757B 7541 7872 417B 7575 7BA8" $"78AA AAA7 A87B 4475 753F 7775 7572 7974" $"44AA D1AB 0642 8181 8989 8388 8881 840D" $"8A88 8288 8883 565A 5A59 5988 8982 FEB1" $"FFB0 FEB1 2688 B188 B0B0 B1B1 B0AB 88B1" $"B0B0 81B0 B188 B188 B1B1 88B1 81B0 B088" $"B188 B081 8888 848A 8388 8489 FD59 FF5A" $"3858 5984 8882 8355 8389 8358 8984 5888" $"8383 88B0 81B0 B0B1 B288 5683 8358 8A83" $"8384 8B82 56B0 D7AF 144E A5A5 C6C6 B8BD" $"B5AF C2C8 B3AE BDBD B88F FDA3 05BD BEAE" $"DADB DBFD D127 DBB5 DBB5 D1D1 DBDB D1CC" $"BDE3 D1D1 A5D1 DBB5 DBB5 DADA B5DB A5D1" $"E2BD DAB3 D1A5 BDBD C2C8 B8BD C4C9 FDA3" $"FFA5 FFA3 24C1 C5B0 B18F B8BF BA99 C6C2" $"9BBD B8B8 BDD1 A5D1 D1DA DBBD 8FB7 B79B" $"C8B8 B8C2 C8B7 8FCA EFBF 015A 1803 4173" $"8076 7CA0 7B76 7D7D A278 7E90 7B7B 7541" $"4146 4678 7EA8 FEA7 FFA8 FFAA FDA8 5BAA" $"C380 AA7E A8A7 7C76 A77B 7B77 7D76 7C75" $"7BA1 7CA8 7EAB AB7E A3A7 7C76 7C78 7E78" $"7E74 7B75 7B41 4146 4641 7875 7B72 787E" $"7E76 7C7B 7575 7B46 767E 77A8 A87C A778" $"A87B 757B 7B75 7B72 7847 727B 7BA8 ADC4" $"0743 7A87 8288 AC88 8289 8710 AB81 879D" $"8888 8358 5855 5581 87B0 AFB1 B1F8 B065" $"C887 B087 B0B1 8882 B188 8880 8682 8883" $"88AC 88B0 87AF AF87 ABB1 8882 8881 8781" $"8782 8883 8858 5854 5458 8A83 8884 8A87" $"8782 8888 8383 8854 8287 80B0 B088 B181" $"B088 8388 8883 8884 895D 8488 88B0 B5C7" $"144E 96A2 AEB3 DEBD AEB4 AACC A5AA D0BD" $"BDB8 9B9B 8787 5EA5 AAD1 D0DB DBD1 D1CA" $"CAD3 D3D1 D1CA E1A2 CAAC D3DB B5AE DABD" $"BDA4 A9B0 B5B8 BDD6 B5D1 AAC1 C1AA CCDB" $"B5B0 B5A5 AAA5 AAB7 BDB8 BD9B 9B85 859B" $"C8B8 BDC1 C6AA AAB0 B5BD B8B8 BD85 AEAA" $"A4D3 D3B5 DBA5 D1BD B8BD BDB8 BDC1 C69E" $"C1BD BDD1 D6D7 0162 1667 B7D6 D1A7 767C" $"7B92 7C77 A7CF A87B 7B75 7B41 A3C0 D3CF" $"FEA8 05A7 7CA8 A8AA C3FE A85C A7AA D6DF" $"D1C1 A876 767C 7675 75A8 C1A7 7675 7A76" $"7CA8 DED2 C4A9 A8A7 767C C0D4 DED0 A875" $"7B75 7B72 78A7 C078 737B 7546 A3C1 CFA7" $"A775 437B 75A7 A7D4 C1C1 7EA7 A7A8 A8A5" $"7BA5 757B 7547 7272 7875 A5A8 CFAB 69B9" $"DCD7 B182 8988 9C88 820B B1D7 B088 8883" $"8858 B2C9 DAD7 FEB0 01B1 88FE B000 C8FE" $"B067 AFB0 DCE5 D7C8 B082 8288 8283 83B0" $"C8B1 8283 8782 88B0 E3D6 C8B1 B0B1 8288" $"C9DB E3D7 B083 8883 8884 8AB1 C98A 8588" $"835D B3C8 D7B1 B183 5588 83B1 B1DB C8C8" $"87B1 B1B0 B0B1 88B1 8388 835D 8484 8983" $"B1B0 D7AF 72C1 F4EF DAAE BEBD C6B3 A5D1" $"F6D1 BDBD B8BD 9BED F2FC 00F6 FED1 5ADB" $"B5D1 D1CA E1D3 D3D1 D0CA F4FC EFEA D3B0" $"B0B3 AEB8 B8D1 E8DB B0B8 BCB0 B5D1 FCE7" $"D9D2 D1DB B0B5 F2FB FCF7 D1B8 BDB8 BDC2" $"C8DA F1C8 C3BD B89E EBE8 F6DB DBB8 8FBD" $"B8DA DAFB E8EA ACDB DBD1 D1E3 BDE3 B8BD" $"B89E C1C1 C6B8 E3D1 F6BF 015F FFC8 1DAA" $"D1D7 C47A 757D A8AA D6D6 AA76 767B 75C4" $"D7A7 CED7 E1AA AAA8 A8C4 D7E3 D9FD A85B" $"D2D7 D0AD D6D1 A77C 754A 7EA8 D7D7 A77C" $"7676 7ECF E1C4 D4D4 CF7E 7379 D4D9 CFCF" $"D6D6 A77C 76A7 ABD2 E1D7 767C 4072 ABD2" $"D4A8 D6D1 A77C 767C D3D7 A8D4 D6D1 A77D" $"A87D ABC4 AAAA 7278 757B 767C 7CA7 C4B1" $"CFC8 C8AF D6DB C787 8386 B0B0 FFDC 0AB0" $"8282 8883 C8DB B1D7 DBE4 FDB0 03C7 DBE4" $"DBFD B066 D6DB D7B5 DCD7 B188 835B 87B0" $"DBDB B188 8282 87D7 E4C8 DBDB D787 8389" $"D6DB D7D7 DCDC B087 82B1 AFD6 E4DB 8288" $"5884 AFD6 DBB0 DCD7 B188 8288 D7DB B0DB" $"DCD7 B189 B086 AFC8 B0B0 848A 8389 8288" $"88B1 C8B5 D7C8 C8CA F0EA D7BC B8A9 D1CA" $"F4F4 CAB0 B0BD B8D9 ECDB FB5E ECF4 CACA" $"D1D1 D7EA ECE3 DADA D1D1 E7EC F7D6 F4EF" $"DBB5 B894 AAD1 EAEA DBB5 AEAE AAF6 F4D9" $"FBFB F6AA B8BD DEE3 F8F8 F4F4 DCB6 AEDA" $"BFE5 F3EA B0B5 99C1 C1E7 FBD1 F4EF DBB5" $"B0B5 E6EA D1FB F4EF DBB6 D1A9 C1D9 C8C8" $"C2C8 BABF B0B5 B3DA DAC8 F801 6220 C779" $"7AAA D7D2 A57B 77C1 D6D1 D1AA 7C76 7BA5" $"D7C4 7C7C D2D7 D1AA A8A8 D7E1 F0E3 7DFE" $"A84A D7E1 A877 AAD6 CF7C 7576 C1D4 D2D2" $"A776 7C76 A9D4 D281 48C1 D4A8 7973 D4D5" $"7E7D AAD1 CE7C 767C E1D7 E1D7 A776 7978" $"E1D7 A878 AAD6 CE7C 76D4 D2AB 7878 AAD6" $"A7A7 93A9 D2D7 C3AA 7841 757B 76FE A70D" $"C4D2 ADC7 7980 AFDB D6B1 8880 C8DC FFD7" $"0BB0 8882 88B1 DBC8 8888 D6DB D7FE B004" $"DBE4 F2E4 87FE B04A DBE4 B080 B0DC D788" $"8383 C8DB D6D5 B182 8882 B1DB D686 53C8" $"DBB0 8983 D6D7 8786 B0D7 D687 8288 E4DB" $"E4DB B182 8B8A E4DB B081 B0DC D788 82DB" $"D6AF 8181 B0DC B1B1 9BB1 D6DB C8B0 8A58" $"8389 82FE B118 C8D6 B5C7 799D CAEA E5E3" $"BDA4 E8F4 EFEF CAB5 B0BD E3EC D9B5 B559" $"E7EC EFCA D1D1 EAF3 F9EC B3DA D1D1 ECF4" $"D1A4 CAF4 FBB5 B8B9 E8FB E5E4 DBB0 B3AE" $"D2FB E799 7BE8 FBD1 BDB8 DEDF ACAB CAEF" $"FBB6 AEB3 F3EA F3EA DBB0 C7C6 F4EC D1A5" $"CAF4 FBB5 B0FC E5BF A5A5 CAF4 DBDB BED2" $"E7EC E0C8 C89B BABF B0DB FEDA 01E8 D801" $"6119 C767 5E7C D4D9 A878 7877 AADF D6AA" $"7B75 80D1 D6AA 7278 D2E0 D6AA FEA8 62C1" $"D7E1 A776 AAAA E1D7 7278 7AD1 D7AA 757B" $"7C75 D7D2 7B7B 4178 D2D8 A473 7CA7 DAD4" $"76A7 ADA7 3F3F 7ED4 E1AB 7EA8 A7D4 E3E3" $"7BA8 7AAA D7C4 7872 7ECF D6AA 7DCF D47C" $"7B7B D2C4 CF7E A7A6 AAD1 ADA8 7272 7872" $"7C76 79A4 D4A8 C4C7 676C 88D6 DBB0 818A" $"89B0 0DE5 DCB0 8883 87D7 DBB0 8489 D6E3" $"DCFD B03F C8DB E4B1 82B0 B0E4 DB84 8981" $"D7DC B083 898A 83DB D689 8958 89D6 DCB2" $"8388 B1DC D682 B1B6 B159 5987 DBE4 AF87" $"B0B1 DCE4 E487 B280 AFDB C88A 8487 D7DC" $"B087 D7DB FE88 2AD6 C7D7 87B1 B0B0 D7B5" $"B084 8489 8488 8289 B2DB B0C7 C767 9BB5" $"E5EA D1A5 C6C5 CAFC F4CA BDB8 A2EF F2C8" $"C1C6 03E7 F4F4 CAFE D157 E8EC F4DB B0CA" $"CAF3 EAC1 C69D EFF5 CABA BFC0 BAEA E5BF" $"BF99 C6E7 ECE3 B8B3 DAE4 DEB0 DBD6 D1A5" $"A5AA FBF4 C1AA D1D3 FCEC ECB4 DC9D CAEC" $"D9C6 C1AA F6F4 CAAA F6FC B5BD BDE5 D7F6" $"AADA D9CA EFD6 D1C1 C1C6 C1B5 B0BD E3FB" $"D1D7 0162 7FD6 7976 7BE3 D9C2 7E72 787A" $"D6D1 AA75 7AC3 D6E0 AA78 78AB D8DF AAA8" $"A87E A8D7 E17C A7AA D1D7 D272 457A D6D1" $"AA7B 7575 7BD2 D7A5 7572 78D7 D279 7A76" $"A7D4 D47C D4CF A73F 3F78 CFD2 AB93 A8A7" $"A7E3 D9A7 A7AA D2D2 D772 4678 D4D1 AAA7" $"D4CE 7C75 75AB ABD4 A8A7 7CAA AAD0 A847" $"7872 4776 7679 A4A8 D4AB D679 8287 E5DB" $"C987 848A 810D DCD7 B083 87C8 DCE4 B089" $"89AF DCE5 FEB0 6E87 B0DB E488 B1B0 D7DB" $"D684 5C81 DCD7 B089 8383 89D6 DBB1 8384" $"89DB D689 8A82 B1D6 D688 DBD7 B159 5981" $"D7D6 AF9B B0B1 B1E4 DBB1 B1AF D7D6 DB84" $"5D81 DBD7 B0B1 DCD7 8883 83AF AFDB B0B1" $"88B0 B0D7 B05D 8984 5D82 8289 B2B0 DBAF" $"D679 B0B4 F4EA E9AA C1C6 9DF4 EFCA B8BC" $"E1F4 FBC8 C6C6 2BC1 ECFC CAD1 D1AA D1EC" $"F4B5 DBCA EFEA E5C1 9D9D F4EF CABF BABA" $"BFE5 EAE4 BAC1 C6EC E7BD BEAE DADE DEB5" $"FCF6 D1FE A52F F6E7 C1BE D1D3 D3EC E3DB" $"DBCA F0E7 ECC1 9EA5 FBEF CAD1 FBFB B5B8" $"B8BF BFFB D1DA B3CA CAF7 D19E C6C1 9EB0" $"B0BD E3D1 FBBF 0162 7FC6 7E78 A8D4 D4C1" $"7E79 737D DED6 AAA8 A8AB E1D6 AA75 75AA" $"D6DE A873 797A AAE1 E1A7 A77E CFD7 D27B" $"757B CED6 AA72 7875 7BD2 D2A5 7B72 78D5" $"D9A8 784A A5D7 D77C C0C3 AA3E 3E78 ADCF" $"7E7D A87F C0D7 E1A7 7CA8 D4D7 D27A 7577" $"D4D2 ABAA D1CF 7E75 7BAA D6C1 A87C A7AA" $"AAD4 A876 7677 727B 757C A7C3 AAD2 C880" $"81B0 D6D6 C887 8983 8801 E5DC FEB0 7AAF" $"E4DC B083 83B0 DCE3 B083 8981 B0E4 E4B1" $"B187 D7DB D688 8388 D7DC B084 8983 88D6" $"D6B1 8884 89D7 DBB0 815B B1DB DB88 C9C8" $"B059 5981 B5D7 8787 B088 C8DB E4B1 88B0" $"DBDB D687 8380 DBD6 AFB0 D7D7 8783 89B0" $"DCC8 B088 B1B0 B0DB B082 8289 8488 8388" $"B1C8 B0D6 D089 A5D1 DEDE EAAC BDB8 ACFC" $"F4CA D1D1 BFF3 F4CA B8B8 5ECA F4FC D3B8" $"BD9D CAF4 F4DA DAAA F6EA E5BD B8B5 FBF4" $"CAC1 C6B8 BDE5 E5E3 BDC1 C6DF E3D1 A594" $"E3EA EAB5 F2E1 CAA3 A3A5 D6F6 AAB3 DAAD" $"E9EA F3DB B5D1 FBEC E7BC B8A4 FBE5 BFCA" $"EFF6 AAB7 BCCA F4E8 D1B3 DACA CAFB D1B0" $"B0C5 C1BD B8B3 DAE1 CAE5 0161 7FC6 6794" $"7EE3 DAAD 9379 737D CFDF AAA8 A8AC E1D1" $"AA7B 7BAA D1D4 7E73 79A9 C3D7 D7A7 7CA8" $"A8D2 D775 7B45 D3D1 A978 417A 75D7 D77B" $"7579 78E3 D4A8 7875 A5C3 D2A7 ACD6 AA3E" $"3E78 CFD4 A877 777E C1D7 E1A7 A77E C1E1" $"D775 7B77 D4D2 ABAA D6CF 7E75 7BAA C3AD" $"78A7 A7AA C3D4 A87C 7640 7875 7B75 A7D7" $"AAAB C869 9C87 E4DC B59B 8983 8801 D7E5" $"FDB0 79E4 D7B0 8888 B0D7 DC87 8389 AFC8" $"DBDB B188 B0B0 D6DB 8388 55DB D7AF 8958" $"8783 DBDB 8883 8A89 E4D6 B081 83B1 C8D6" $"B1B6 DCB0 5959 81D6 DBB0 8181 87C8 DBE4" $"B1B1 87C8 E4DB 8388 80DB D6AF B0DC D787" $"8389 B0C8 B581 B1B1 B0C8 DBB0 8882 588A" $"8388 81B1 DCB0 AFD0 72BF AAEC E4D8 BFBD" $"B8AC F8FC CAD1 D1C0 F3EF CABD BD5E CAEF" $"FCAC B8BD C9E1 ECEC DAB3 D1D1 E5EA B8BD" $"87FC EFC9 C699 BCB8 EAEA BDB8 C7C6 ECDE" $"D1A5 B8E3 D7E5 DBE0 F4CA A3A3 A5F5 FBD1" $"AEAE ACEA EAF3 DBDB AAE8 F4EC B8BD A4FB" $"E5BF CAF4 F6AA B7BC CAE1 D6A5 DADA CAE1" $"FBD1 B5B0 99C6 B8BD ADDA F5CA BF01 627F" $"C475 95AA D7E0 CF7D 767C 7ADF D6AA A7A7" $"AAD6 D6AA 7575 81D2 C178 7BA0 A7AC E3D4" $"A776 76A7 D7D2 4772 78CF D6AA 757B 754A" $"D4D4 A67B 7893 D9D4 7A79 75A7 D7D2 7FCF" $"C3AA 3E3E 4AD3 D1AA 7872 7CA7 D7E1 7E93" $"A9D4 D9E3 A77C 7ECF D6AA A8D4 CF7E 7B75" $"AAD7 CF77 A57B A8A8 D4C6 7973 7B75 7B75" $"7BA5 C3D6 D2C8 799B B0DB E5D7 8782 8781" $"7FE5 DCB0 B1B1 B0DC DCB0 8383 86D6 C881" $"88AC B1B6 E4D6 B182 82B1 DBD6 5D84 81D7" $"DCB0 8388 835B D6D5 B288 819B DAD5 8A89" $"81B1 DBD6 88D7 C8AF 5959 5BDA D7B0 8984" $"88B1 DBE4 879B B1DB DBE5 B188 87D7 DCB0" $"B0DB D787 8883 B0DC D780 B188 B0B0 D6C7" $"8983 8883 8883 88B1 C8DC D6D0 82B6 CAEA" $"F3F6 AAAC B29D FCF4 CAD1 D1CA F4F4 CAB8" $"B85E A2EF E8A5 BDDE DADF ECDE DAAE B0DB" $"EAE5 9EC1 A5F6 F4CA B8BD B894 DEDD E4BD" $"A5BE ECE7 BEBD AFDB EAE5 ABF6 E2CA A3A3" $"94FC EFCA C6C1 B5DB EAF3 AABE D2FB E3ED" $"DAB3 AAF6 F4CA D1FB F6AA BDB8 CAF5 F5A3" $"E3BD D1D1 E5D7 BDB8 BDB8 BDB8 BDE3 E1F4" $"E501 622C C47B 7AAA E0D7 A777 A776 7FDF" $"D6D1 A7A8 AADF E0AA 7B44 ABC4 D47E 754A" $"76A7 D9D4 7B76 7CA7 D7D2 7772 7ED4 D1AA" $"7BFE 754F D4D9 A543 787E D5D9 A473 7CA7" $"D2D7 78A8 D6AA 3E3E 7BCD D180 4178 76A7" $"D2D7 A8A8 7EC1 E3E3 A7A7 78D4 D1AA 7ECF" $"D07F 757B AAD1 A87E 7BA5 A8A8 D9AC 7973" $"7B75 4475 7BA5 D6AA ABC7 7F81 B0E5 DBB1" $"82B0 8286 21E5 DCD7 B1B1 B0E5 E5B0 8856" $"AFC8 DB87 835B 82B1 DBD6 8782 88B1 DBD6" $"8884 87DB D7B0 88FE 835A D6DB B155 8187" $"D6DA B283 88B1 D6DB 81B0 DBAF 5959 88D5" $"D787 5889 82B1 D6DB B0B0 87C8 E4E4 B1B1" $"81DB D7B0 87D7 D788 8388 B0D7 B087 88B1" $"B0B0 DBAE 8983 8883 5683 88B1 DCB0 AFCF" $"889D CAF3 EAD1 A5D8 ACA1 FCF4 EFD1 D2CA" $"FCFD CABD 8F16 CAE1 FBAA B894 AEDA E3DE" $"B3AE B5DB EAE5 C5C1 AAFB EFCA BDFE B844" $"DEE3 E38F A5AA E8EC E3B8 B5DB E5EA A5D1" $"F4CA A3A3 BDFB EFA2 99C6 B0DB E5EA D1D1" $"AAE8 ECEC DADA A5FB EFCA AAF6 F7AB B8BD" $"CAEF D1AA BDE3 D1D1 EABF BDB8 BDB8 8FB8" $"BDE3 F4CA BF01 627B F1D6 D4D9 E4E4 A77C" $"7B7B AADF E1D2 AAA9 ACD7 E3D4 787D C6D9" $"C07C 7676 78A4 D4D9 7278 757B D2D7 C8AE" $"D9F0 EFAB 7E78 7777 D7D2 A776 7878 D4D9" $"D281 7BD2 D7D2 7EA8 C4D2 4545 ABD7 D478" $"7B75 757B E3D9 ABD2 D7EF F0D9 C6AD ABE1" $"D5A8 78D4 D7AB 7778 D6D1 D7C4 D4E3 D2D7" $"E1AB A77B 7278 7B75 7CA7 ABC4 D4F1 D6D6" $"DBE4 E4B1 FE88 00B0 7FE5 E4D6 B0AF B0DB" $"E4D6 8186 C8DB C988 8282 88B2 D6DB 8489" $"8388 D6DB C8AF DBF2 F1AF 8781 8A8A DBD6" $"B182 8A8A D6DB D685 81D7 DBD6 87B0 C7D6" $"5555 AFDB DB81 8883 8388 E4DB AFD6 DBF1" $"F1DA C7AF AFE4 DCB0 81DB DBAF 8282 DCD7" $"DBC8 D6E4 D6DB E4AF B086 8489 8883 88B1" $"AFC7 DBF1 D6DE E3E4 E4DB B5BD BDCA FCF3" $"E5CA C9C0 EAEC DEA5 A95E D0E3 F2B5 B1B1" $"BCE3 DEE3 C1C6 B8BD E5EA D0B8 E3F9 FEC1" $"AAA5 C8C8 EAE5 DBB0 C8C8 DCE1 E597 93E7" $"EAE5 AAD1 D7E5 8F8F BFEA FBA5 BDB8 B8BD" $"ECE3 C1E7 EAFE FAE3 D7BF C1F4 FCD1 A5FB" $"EABF A5A6 F4EF ECD9 DEEC E7EC F3BF DCB5" $"C1C6 BDB8 B3DA BFD7 FB01 627F F1E4 E3F0" $"F1F1 A7A7 74A6 AAD6 D7D7 D6DF E1E1 F0D9" $"D4DE F0F0 7C76 7C76 7379 D4D4 4771 7B75" $"D8EF F1E3 F0F0 D7E1 CFA8 3F71 D2D8 7C76" $"7278 E3F0 EFE1 D7EE EFD8 CFD4 ABD7 A6A6" $"D2D3 A878 757B 7BA5 E3F0 D2D7 D2D7 F0FD" $"F0D9 D7E1 CF7E 78A8 C4D2 A7A7 D7D6 D2D8" $"D4D9 D7E1 EFD7 A776 7841 757B 76A6 D2AB" $"A8F1 E4E4 F2F1 F1B1 B182 B2B0 7FDC DBDB" $"DCE5 E4E4 F2DB DBE3 F2F2 8882 8782 8389" $"D6D6 5D83 8883 DCF1 F1E3 F2F1 DBE4 D7B0" $"5884 D6DC 8882 848A E4F2 F1E4 DCF2 F1DC" $"D7DB AFDB B0B0 D6D7 B081 8388 88B1 E4F2" $"D6DB D6DB F1FD F1DB DBE4 D787 81B0 C7D6" $"B1B1 DCDC D6DC D6DB DBE4 F1DB B082 8958" $"8388 82B0 D6AF B0F1 E4EC F9F1 F1DB DBB7" $"E4CA F4EA EAF4 FCF3 F3F9 E3FB FCFF F95C" $"B5B0 B6B1 B8BD DEDE 9EC0 BDB8 EBFE F9EC" $"F9F9 ECF4 F6D1 9BC2 E5EB B5B0 C2C8 EAF8" $"FEF3 ECFE FEEB F6FB BFEA E3E3 E5E6 D1A5" $"B8BD BDE3 ECF9 E7EC E5EA FAFF FEEA ECF4" $"F6AA A5D1 D7E5 D1D1 F5F4 E7EC DEE3 ECF4" $"FEEA DCB1 C699 B8BD AED9 E5BF D101 6113" $"E4F1 F0F0 EFD7 AAA9 A8A8 AADF E1D2 EFD7" $"EFD7 D7EE FEEF 08D7 7278 7247 76A7 D4D4" $"FE76 59A7 D2D7 F0F0 EFE1 D7D2 D7D7 A878" $"D3CE A57B 7CA7 D2D7 F0F0 EFEF D2D7 D2AB" $"76A7 D4CF D4A8 7279 7940 7AC3 EFE1 D7D2" $"D9E3 D7EF F0F0 D7D3 A57B 7278 A9D4 B0DF" $"E2D9 D2AB D7D2 E1D7 F0E3 CF7E 7676 7A75" $"7BA5 A9D5 C6E4 F1F2 F2F1 DBB0 AFFE B007" $"E5E4 D6F1 DBF1 DBDC FEF2 09F1 DB84 8984" $"5D82 B1DB DBFE 8267 B1D6 DBF2 F2F1 E4DB" $"D6DB DBB0 81DB D7B1 8888 B1D6 DBF2 F2F1" $"F2D6 DAD6 AF82 B1DB D7DB B284 8A89 5680" $"C8F1 E4DB D6DB E5DB F1F2 F2DA D7B1 8884" $"89B1 DBB5 E5E4 DBD6 AFDB D6E4 DBF2 E4D7" $"8782 8287 8388 B1B0 DCC7 E4F1 F9F9 FEEA" $"C8C7 D1D1 CAFC F3E5 FEEA FEEA ECFE F9F9" $"5EFE ECC1 C6C1 9EAE DAFB FBAC ACB0 DBE5" $"EAF9 F9FE F3EA E5EA EAD1 A5FC FBE3 BDB3" $"DAEF F4F9 F9FE FEE5 E9E7 C1AE DAFB F6FC" $"DBC4 CAC4 969B E0FE F3EC E7E3 EDEC FEF9" $"F9EB E8E3 BDC1 C6D2 FBCF FCF3 EAE7 C1EA" $"E5F4 ECF9 ECF6 AAAE AEBC B8BD E3CA F4D7" $"0160 39C7 D6E3 D9D7 E1D6 C3A8 A8AA AAAB" $"D7D7 E0D7 D2D2 D7D3 D8D7 D278 4172 7876" $"7C78 7876 7B7C D4D2 D7D4 D9D7 D7C4 D7D2" $"C4D4 A745 7B75 4476 A6AB D7D4 D9FE D73F" $"C4D8 D246 7678 7E7C 7678 4073 79AA D6D7" $"D7C4 D7D4 C6D7 E1D9 E2EF AB7B A5A3 4778" $"78AA D0D9 C6D7 D2D7 D2D7 E1E3 D9D4 A87B" $"767B 7675 7BA9 D0AD C7D6 E4DB DBE4 DBC8" $"FEB0 1BB0 AFDB DBE3 DBD6 D7DC D6DB DBD6" $"8958 8489 8288 8181 8287 88DB D6DB D6FE" $"DB0E C7DB D6C7 DBAF 5588 8356 82B0 AFDB" $"D6FD DB0D C7DC D654 8281 8788 8289 5884" $"89B0 FEDB 3CC8 DBD6 C8DB E4DB E3F1 AF88" $"B1B2 5D81 81B0 D6DB C7DB D6DB D6DB E4E4" $"DBDB B087 8288 8383 88B0 D7AF C7D6 ECE3" $"EAF3 F2E0 D1D1 CACA BFEA EAF2 EAE5 E7EC" $"DEE3 5EEC E7C6 99C1 C6AE B3A5 A5AC B1B5" $"FCE5 EADE E3EA EAD7 EAE5 D7FB D087 B5B8" $"8FAE D9CA F4DE E3EC ECEA D7EC E785 AEA5" $"AAB3 AEC9 9DC0 C4C8 F2EA EAD9 ECDE D0EC" $"F4E3 EBFE C1BD E3EB 9EA5 A5CA EEEA D7EC" $"E7EA E5EC F4EC E3FB D1B3 AEBD B9B8 BDCA" $"EFBF 0161 FF99 4CD2 D7E1 E0E3 D9C3 AAD2" $"AAD1 D2E1 E1E0 D7D2 D2D6 C3D2 B176 7B7B" $"7678 407C 7647 72D4 D5D7 C4D4 A7A8 A9AA" $"D1B0 D6D2 AB7C 7678 7279 79DE CFD4 C1D2" $"C4D1 D6C4 B13F 787C 7678 787B 757B 75AA" $"D1C4 D7CF FEA8 2DAA D6E1 D7E1 D7A8 A876" $"A772 78C4 D7D2 D7C1 AFA5 7AD1 D6D7 E1E3" $"E37B 7447 7278 72A8 ADC2 9A9A D6DB E4E3" $"E4DB C8B0 D702 B0D7 D7FE E43D DCD6 D6DC" $"C8D6 B583 8888 838A 5888 825D 84D6 D7DA" $"C7DB B1B0 B1B0 D7B5 DCD6 AF88 8289 8489" $"89E3 D7DB C8D6 C8D7 DCC8 B557 8988 8281" $"8188 8388 83B0 D7C8 DBD7 FDB0 15DC E4DB" $"E4DB B0B0 82B1 8489 C8DB D6DB C9B7 B187" $"D7DC DBFE E41E 8982 5D84 8984 B0B5 C8A3" $"A3E7 ECF3 F2EC E3E1 CAF0 CAEF F0F3 F3FB" $"F3E5 E5F4 E15E E7C6 B9BD BDB9 C699 BDB8" $"9EC1 DEDF E9D7 FCDB D1D1 CAEF CFF4 E7C1" $"B3AE C6C1 C4C4 FCF8 FBE8 E7D9 EFF4 D9C6" $"98C6 B5B0 A5A5 BDB8 BDB8 CAEF D9EC F6D1" $"DADA CAF4 F3EA F4EC D1D1 B0DB C1C6 D9EC" $"E5EA E8D6 E3BC EFF4 EAF3 ECEC BFB9 9EC1" $"C6C1 D1D6 E901 627F 4878 7CE1 D7D7 E3F1" $"D6AA B0C3 B0AA ABAB AAAA 82D2 D6D6 D2D2" $"7B75 4475 7278 767C 7278 D9C6 D7D2 A77C" $"7878 80C3 D1D1 D7D2 A776 4772 7279 7E7E" $"787E ABD7 AAD6 D2C4 7772 A8A7 A9A8 A57B" $"7BA5 D6D6 C4D7 A87E 777D 79C3 D7E1 D7D2" $"A8A7 A77B 7878 D7C4 D7C4 D578 757B 81DF" $"E1D7 D9E3 A57B 7278 7247 A8C1 AF4A 7A80" $"E4DB DBE4 F3DC B0B5 7FC8 B5B0 AFAF B0B0" $"86D6 DCDC D6D6 8883 5683 848A 8288 8489" $"DAC8 DBD6 B188 8181 87C8 D7D7 DBD6 B182" $"5D84 8389 8787 8187 AFDA B0DC D6C8 8884" $"B2B1 B1B0 B188 88B1 DCDC C8DB B087 8187" $"80C8 DBE4 DBD6 B0AF B187 8989 DBC8 DBC7" $"DC81 8388 88E5 E4DB DBE4 B189 8489 845D" $"B0C8 B555 8393 F4EA EAEC FAF4 CACF E1CF" $"CABF BFC8 C898 E5F4 F4FF E75C BDB8 8FB8" $"C1C6 B8BD C1C6 E2D0 EAE5 DBB5 A4A4 A2E1" $"EFEF ECE7 DAAE 9EC1 BFC4 ACAC A5AA C1EB" $"CAF4 E7D9 C5C1 DCDB D2D1 E3BD BDE3 F4F4" $"D9EC D1AA AEB3 9CE1 EAF3 ECE7 D1D0 DBB4" $"C6C6 ECD9 EAD7 FAA4 B8BD A3FC F3EA E3EC" $"E4BF C1C6 C19E D1E8 D601 5D34 A899 96AB" $"E3F1 D9E3 D7AC CFA7 A8A8 A7A7 A57B AAD6" $"D4D4 D7D7 A37E A87E 81A5 7C7C AAC3 D7D7" $"D2D7 A777 7872 7878 D7C4 D7D2 A77C 7278" $"7CFE 7609 7B75 7CCE D7D2 D7D7 C3AA FDA8" $"39AA C3C3 D2D9 D4D6 D1A7 7647 7278 78D4" $"D4E1 D7D1 80A8 A7AE D4D2 D7D2 D7A8 A881" $"A6A8 C1D8 E1E3 E3DF 80A8 787B 75AB D1C1" $"AA9A 9AAF E4F3 DBE4 DBB0 D702 B1B0 B0FE" $"B12F 88B0 DCD6 D6DA DBAB 87B0 8787 AA88" $"88B0 C8DA DBD6 DBB1 8389 8489 89DB C7DB" $"D6B0 8784 8A88 8382 8288 8388 D7DB D6DB" $"DBC8 FBB0 21C8 C7D6 DBD6 DCD7 B182 5D84" $"8A8A D6D6 E4DB D787 B0AF AFD6 D6DB D6DB" $"B0B0 86AA B0C8 DBFE E413 E587 B081 8883" $"B1D7 C9B2 A3AD C1EC FAE3 ECEA C0F6 FED1" $"FFDB 05E3 BDCA F4DE DE2B EBEC CCAA D1AA" $"A1C3 B5B5 CAE1 EBEC E5EA DBB1 C6C1 C9C9" $"EAD7 ECE7 D8B2 C2C8 B3AE B0B0 BDB8 B5FB" $"EAE5 ECEC E1CA FDD1 22CA E1D6 E5E3 DEF4" $"EFDB B09E C1C8 C8DE DEF4 ECEF A2D1 D0B8" $"DEE7 ECE5 EAD1 D1A2 C4D1 E8E3 FEEC 08FC" $"A2D1 A5BD B8CA EFE8 0162 7FA7 AED2 ABE3" $"D9E3 F0E1 C3AC A7A8 A87C A77B A5D1 D6E3" $"D9E1 E1A8 A8C1 A8D2 AAA6 C0AA D6E1 E1D7" $"E17C 7672 4772 78D3 D8C4 D7A8 7678 4176" $"767D 757B 757C D4D2 D7E1 E1D6 AACF ADC1" $"ADC3 B0AB D7E3 E3D6 D676 7C72 7872 78D5" $"D9D7 E1D1 AAA8 A8D5 F0D7 EFD7 E0A8 A8C4" $"ABA8 ADEF EFF0 D9DF AAA8 A875 44A9 AAAE" $"A9AF D6AF E4DB E4F2 E4C7 B54D B1B0 B088" $"B188 B1D7 DCE4 DBE4 E4B0 B0C8 B0D7 B0B0" $"C9B0 DCE4 E4DB E488 8284 5D84 89D7 DCC8" $"DBB1 828A 5883 8389 8188 8388 DBD6 DBE4" $"E4DC B0D6 B5C8 B5C8 B5AF DBE4 E4DB DC82" $"8884 8984 8AD7 DBDB E4D7 FEB0 0BD7 F2DB" $"F1DB E5B0 B0C8 AFB0 B5FE F201 DBE5 FEB0" $"0F83 56AF B0B6 B1B8 E7C1 ECE3 ECF9 F3D6" $"D6FE D107 B5DB BDE3 EFF4 ECE3 FFF4 FFD1" $"06E8 D1EE C8DB F2CA FEF4 19EA F3B5 B0C1" $"9EC4 C9E6 EBD9 ECD9 ACC8 9BAE AEB6 AFBD" $"B8B5 FCE5 EAFE F426 CAF5 D6E8 D6E1 CFBF" $"EAEC ECF3 F4B0 B5C1 C6C2 C8DF E3EC F4EF" $"CAD1 D1DF F9EC FEEA F3D1 D1E1 CAD1 D6FE" $"F909 E3FC CAD1 D1B8 8FC9 CAD6 0162 28A9" $"B8C4 D7F2 F2D7 EFD6 D0AA AAA7 A7A8 A8A5" $"75D4 D9EF E1EF D7D1 B0C1 ADA8 D4A9 D0B1" $"EFF0 D9F0 E37B 757B FE75 53B0 D1D7 C5D4" $"7C75 7578 4772 7875 7B7C E1D7 E1F0 D9AA" $"C3AD C0A9 D0AA D2D5 F1E1 EFE3 E37B 757B" $"7541 78C4 D7C5 D7D6 A978 A8D9 E3F0 E3F0" $"E3A8 D4A8 A8AB C4E1 D7F0 F0EF ABA7 A83F" $"417E C1A8 A9B8 C8DB F1F1 DBF1 DCD7 B01D" $"B0B1 B1B0 B0B1 83D6 DBF2 E4F1 DBD7 B5C9" $"B6B0 DBB0 D7B5 F1F2 DBF2 E488 8388 FE83" $"5EB5 D7DB C9DB 8882 828A 5D84 8A83 8880" $"E4DB E5F2 DAAF C8B5 C8B0 D7B0 D7D5 F1E4" $"F1E3 E388 8288 8358 8AC7 DBC9 DBDC AF81" $"B0DB E4F2 E4F2 E4B0 DBB0 B0AF C8E4 DBF1" $"F2F1 AFAF B057 5887 C9B0 A9B8 D9EC F1F1" $"ECFE F4EF CACA DADA D1D1 E4BA DEE3 F9EC" $"5EFE ECEF CFEB D9D1 FBCA EFC6 FEF9 E3F9" $"ECBD B8BD B8B7 B7CF EFEC DAFC B5B0 B0C8" $"9FC2 C8B8 BD93 F4EA F4F9 E2CA E2D8 E9CA" $"EFCA F0DE F9F4 FEEC ECB5 B0BD B89B C8D7" $"EADA ECF4 C9A5 D1E3 ECF9 ECF9 ECD1 FBD1" $"D1CA E1F3 EAF9 F9FE BFD0 D198 99AA E8D1" $"015E 61B8 A9C4 D7E4 F1EF D7EC AEC3 AA7C" $"A778 A87B 7AD4 E3D9 EFD7 EFA9 C3AD C1A8" $"A7C1 AED2 E1E2 F1E3 D97B 757B 7549 75AA" $"D1D7 D2CE 7C75 7B72 7277 4175 7BAB E1EF" $"D7F0 F0AA AAC1 ADC2 AEC3 B0AE F1D7 D7F1" $"DBBF 7B75 7B72 78AB D2D7 D2D1 AAA9 A8D4" $"F0F0 D9F0 D9FD A8FF AB09 D7EF D9E3 EFD7" $"A8A8 7241 FEA8 0AB8 A9C8 DBE3 F0F1 DBF0" $"B5C8 56B0 88B1 81B0 8988 D6E4 DCF2 DBF1" $"AFC8 B6C9 B0AF C8B5 D6E4 E3F3 E4DB 8883" $"8883 5A83 B0D7 DBD6 D788 8288 8484 8958" $"8388 AFE4 F1DB F2F2 AFAF C8B5 C9B5 C8B5" $"AFF1 DBDB F1DB C988 8388 848A AFD6 DBD6" $"D7B0 B1B0 D6F2 F2DB F2DB FDB0 FFAF 09DB" $"F1DB E4F1 DAB0 B084 58FE B015 B8A9 D9EC" $"E4F1 FEEC FECF E1CA B3DA A5D1 BFBE DEEC" $"E4F9 4BEC FEC9 E1D9 EBD1 D0E1 CFE7 F4EB" $"FAEC E3BD B8BD B892 B7CA EFEC E7FB B5B0" $"B5C2 C2C7 9BB8 BDC1 F4FE EAF9 F9CA CAEA" $"D8E2 CFE1 CFB8 F9EC ECF9 E4F2 B5B8 BDC2" $"C8BF E5EC E7EF CAD2 D1DE F9F9 E3F9 E3FD" $"D1FF CA09 EAFE E3EC FEE9 D1D1 C199 FED1" $"0159 04A7 ACC6 D9F1 FEF0 59E3 D47C A7A8" $"A8A5 A5A8 76B1 EFE3 F0E3 E3D4 A8C3 B0C4" $"D7AA ABD2 D7EF D7F1 E472 7844 7B73 79A8" $"D5D1 AFD1 AA73 4675 7B75 7C75 7BC4 D7E4" $"F1D9 F0AA D6AA C3A9 C1A8 A8D2 D7F0 F0E3" $"E3AF C37B 747B 75A8 ADD5 D4D6 AAA7 A7D7" $"D7F1 F1D9 E3FB A8FF E1FF F00D D7C4 A8A8" $"4141 7CA6 A9AA AFC7 DAF3 FEF2 02E5 D688" $"56B1 B0B0 B1B1 B282 B5F1 E4F2 E4E4 DBB0" $"C8B5 C8DB B0B1 D6DB F1DB F1E4 848A 5688" $"8389 B0DC D6B5 D7B0 855D 8388 8389 8388" $"C8DB E4F1 DAF1 B0DC B0C8 B0C8 B0B0 D6DB" $"F2F2 E4E4 B5C8 8882 8883 B0B5 D6D5 DCB0" $"B1B1 DBDB F1F1 DBE5 FBB0 FFE4 FFF2 0DDA" $"C7B0 B058 5888 B1B1 B2B7 D0E3 FAFE F90D" $"EDDE B5DB D1D1 E4E4 DBAE C6FE ECF9 FFEC" $"49FB D1E1 CFD9 ECCA CAE5 EAFE ECF1 E4C1" $"C68F BDB8 BDD1 FAF0 CFEF CAC2 9EB8 BDB8" $"BEB8 BDD9 ECE4 F1E3 FACA F4CA E1CA E1D1" $"D1E5 EAF9 F9EC ECCF E2BD B7BD B8D3 D8DF" $"DFF4 CADB DBEA EAF0 F0E3 EDFB D1FF F3FF" $"F908 E9D7 D1D1 9999 B3DA D201 5961 A7B6" $"C6E2 D9F0 F0D9 F0AE A7A7 7EA3 7B7B 767C" $"D2EF D9E3 DAF0 A8A8 D1AA C5AB AAC4 D7EF" $"D8E1 E4E4 7878 7575 7973 A8D5 C3D6 D180" $"7872 757B 4475 7BA5 D2D7 F1E4 E2F0 AAC3" $"B0C3 AEC1 AEC1 D7EF E3D9 F0D9 AAC3 A57B" $"757A A9CF D4D9 D1AA 7CA8 E1EF F1F1 E3D4" $"FBA8 FFD7 15F0 D9E1 D7A8 A872 41A6 A6A8" $"AAB9 C7E4 DBF2 F2DB F2AF B117 B187 AB89" $"8982 88D6 F1DB E4DC F2B0 B0D7 B0C9 AFB0" $"C9DB F1DC FEE4 FF8A FF83 3289 83B0 DCC8" $"DBD7 878A 8483 8856 8388 B1D6 DBF1 E4E4" $"F1B0 C8B5 C8B5 C8B6 C8DB F1E4 DBF2 DBAF" $"C8B1 8883 87B1 D7D5 DAD7 B088 B2E4 FEF1" $"01E4 D6FB B0FF DB20 F2DB E4DB B0B0 8458" $"B1B1 B0B2 C1D0 ECE3 F9F9 E3F9 B8DB DBAA" $"CCBF BFAE B3E7 FEE3 EC4B E4F9 D1D1 EFCA" $"DAC1 CAE2 EAFE ECF4 E4E4 C6C6 B8B8 BDB8" $"D1FA E2F4 EFA2 C6C1 B8BD 8FB8 BDE3 E7EC" $"F1E4 ECFA CAE1 CFE1 CFE1 D7E8 EAFE ECE3" $"F9E3 CAE2 E3BD B8BC D4F8 DFE3 EFCA B5DC" $"F3FE F0F0 ECDE FBD1 FFEA 0AF9 E3F3 EAD1" $"D1C1 99DA DAD1 0162 35A8 AEC7 D9F0 F0F1" $"F1D6 C3A8 7DA7 A77B 7575 7BD4 D9F0 F0EF" $"D7C2 B0AA D1AD C1B0 C3D7 E1F0 F0D9 D876" $"7678 737B 74AA D1D7 D2D4 A875 7B45 76FE" $"7846 A8D7 E1E3 D9F1 DAC3 AFC3 AACF ADC4" $"ABD7 E1E2 F0E3 D9C4 B0C1 A875 75AA D6D7" $"C4D4 A7A8 A8D7 EFF0 D9EF D7A8 A8A7 A7A8" $"A8D4 F0D7 EFF0 D4A8 A845 3E7F AAA8 AAAF" $"C9DA F2F2 F1F1 DCC8 B07F 87B0 B088 8383" $"89D6 DBF2 F1F2 DBC7 B5B0 D7B5 C8B5 C8DB" $"E4F2 F2DC DB82 8289 8588 82B0 D7DA D6DB" $"B083 8855 828A 8A81 B0DB E4E4 DBF1 DAC8" $"B5C8 B0D7 B5C7 AEDB E4E3 F2E4 DBC8 B5C8" $"B083 83B0 DCDB C8DB B1B0 B0DB F1F2 DBF1" $"DBB0 B0B1 B1B0 B0D6 F2DB F1F2 D6B0 B05E" $"5986 B0B0 B2B8 D0E2 F9F9 F1F1 F4E1 DBB5" $"D8D8 BDB8 BABF DEE3 F9F9 5EFE ECE0 CFCA" $"EFD6 E8CF E1EA F3F9 F9E9 E9B0 B0C6 C2BD" $"B7CA EFEB E7FB D1B8 BD8F B8C8 C8A5 D1EC" $"F4EC E3F9 E3E2 CFE1 CAF6 D6D7 BFEA F3EB" $"F9EC E3E1 CFE8 D1B8 B8CA F4EC D9FC DAD1" $"D1EA FEF9 E3FE EAD1 D1DA DAD1 D1DE F9EC" $"FEF9 DED1 D1A8 A3AC D3D1 0162 64B7 C6C6" $"D4D9 F0F1 F1D6 AAA8 A876 7C75 7C75 7BC6" $"F0D9 E3D7 EFAA D1AA AAC1 ADC4 AAD2 D7E3" $"D9EF E17C 7678 4175 7BAA D6C4 D7C1 7D75" $"7B7C 7672 78A8 A8D2 D7F1 F0E3 F1AB C3B0" $"C4A8 A8AB D2D2 D7F0 D9F0 E3AB C4AD A87B" $"7BAA D1D7 C4D4 7C78 A8E1 D7F1 F0D7 D2A9" $"A97C FEA8 17D9 E3EF D7F0 D9A8 A871 3EA4" $"AAA8 B9C8 C8D6 DBF2 F1F1 DCB0 B07F B182" $"8783 8983 89C8 F2DB E4DB F1B0 D7B0 B0C8" $"B5C9 B0D6 DBE4 DBF2 E488 8289 5883 88B0" $"DCC8 DBC8 8683 8888 8284 8AB0 B0D6 DBF3" $"F2E3 F1B0 C8B6 C9B0 B0AF D6D6 DBF2 DBF2" $"E4AF C8B5 B088 88B0 D7DB C8DB 8881 B0E4" $"DBF3 F2DB D6B1 B188 B2B0 B0DB E4F1 DAF2" $"DBB0 B085 59AA B0B0 C1D0 D0DE E3F9 F1F1" $"F4CA DBDC ACB2 B8BE BABF D0F9 E3EC 5EEC" $"FECA EFCA CAE8 D6E2 CAE5 EAEC E3FE F2B5" $"B0C6 99B8 BDCA F4D9 ECE8 A9B8 BDBD B8C2" $"C8D1 D1E7 ECFA F9EC F9CB E2D0 E2D1 D1BF" $"E5E5 EAF9 E3F9 ECCA E1D6 D1BD BDCA EFEC" $"D9FC B3A5 D1F3 EAFA F9EA E5D2 D2B3 DBD1" $"D1E3 ECFE EBF9 E3D1 D1CA A3CE D3D1 0160" $"FFC7 15AB D8F0 D9F0 F0EF AB7C 767B 757C" $"7674 7BA7 D4E3 E3E1 D7FD A763 A8CF A8A8" $"D7EF E3F0 E3E3 7C75 757B 7872 AAD6 C3D6" $"D2AB 4A75 7278 44A5 AAD6 AEF0 D9E3 D9F0" $"AFC2 7B7B 7872 7B7B D7EF D9E3 E1D7 D6AA" $"C3AA A777 A8D4 C4D7 C4AC 7BA6 D2EF D7E1" $"D7D2 7877 917B A8A8 D2D7 F1F2 D7D2 A8A8" $"4141 7CA7 A8C7 C7AF DCF2 DBF2 F1F1 AF88" $"0882 8883 8882 8288 B1DB FEE4 00DB FDB1" $"6EB0 D7B0 B0DB F1E4 F2E4 E489 8383 888A" $"84B0 DCC8 DCD6 AF5B 8384 8956 B1B0 DCAF" $"F2DB E4DB F2B5 C888 8889 8488 88DB F1DB" $"E4E4 DBDC B0C8 B0B1 83B0 DBC8 DBC8 AF88" $"B1D6 F1DB E4DB D68A 899D 88B0 B0D6 DBF1" $"F2DA D6B0 B058 5888 B1B0 C7C7 C1EC F9E3" $"F9F9 FEBF B5B0 BDB8 B5B0 B7BD DBFC ECEC" $"5EF4 ECDA DADB DBD1 F6D1 D1EA FEEC F9EC" $"ECBE B8B8 BDC8 C2CA F4E1 F4E5 BF93 B7C1" $"C691 E4CA F4B8 F9E3 ECE3 F9D8 EABD BDC6" $"C1BD BDEA FEE3 ECF3 EAF4 CAE1 CADB B1D1" $"FBD9 ECD6 BEB5 DBE5 FEEC F4EA E5C8 C7D1" $"BDD1 D1E5 EAF1 F2E9 E5D1 D199 99B5 DBD1" $"0162 FFC7 7DC4 D2E3 F0F0 D9E1 AB77 7675" $"7B76 767B 767C D4D4 D9D7 D276 7D76 7CAD" $"A8D4 A8D2 D7F0 D9E3 D97B 757B 7541 78AA" $"D2D1 B0D3 AB75 7545 727B A5C3 A9D4 F0E3" $"F0F1 F0AA AA75 7541 7875 74AC E1F0 F0D7" $"E1AA C3B0 D1A7 7CA8 D4C4 D7D3 AC75 75AB" $"D7D2 D7E1 AB72 4144 44A8 A9D7 EFF1 E3EF" $"D7A8 A872 41A7 A7A8 C7C7 C8D6 E4F2 F2DB" $"E4AF 837F 8283 8882 8288 8388 DBD6 DBDB" $"D682 8982 88B5 B0DB B0D6 DBF2 DBE4 DB88" $"8388 8358 8AB0 D7D7 B5D7 AE83 835C 8489" $"B1C8 AFD6 F2E4 F2F3 F2B0 B083 8358 8983" $"82B0 E4F2 F2DB E4B0 C8B5 D7B1 88B0 DBC8" $"DBD6 AF82 82AF DBD6 DBE4 AE84 5856 56B0" $"B1DB F1F1 E3F1 DBB0 B084 58B1 B1B0 C7C7" $"D9E7 ECF9 F9E3 F3BF B1B0 B8BD B0B0 BDB9" $"B5FC DEE3 5EEC E7AE B4B0 B5D6 D1FB D1E5" $"EAF9 E3EC E3BD B8BD B89B C8CA F0EF CFE6" $"BFB7 B79D C1BF E4E1 C9DE F9EC F9FA F9D3" $"D3B8 B899 C6B8 B7C0 F3F9 F9EA F3CA E1CF" $"EFDB B5D1 FBD9 ECE4 BEB0 B0BF EAE7 ECF3" $"BFC2 9B8F 8FD1 D1EA FEF1 E3FE EAD1 D1C1" $"99DB DBD1 0161 FEC6 71D9 D7EF D7EF E1AB" $"7978 7543 7A4A 757A 7AD1 D7C4 D2D7 7872" $"7872 C5AB A8C1 D8E1 E3F0 F0D9 757B 4178" $"7475 A9D6 D7D2 D47E 757B 777D 7AAA B0C3" $"B0EE D9F0 D9E3 A57B 757B 7475 7878 A8D4" $"E3D9 F0E3 A8A8 C3AA D4A8 AAD1 D7C4 D47C" $"757B ABD2 D7D2 D6AA 7841 3D3E A8A8 C4D7" $"E3D9 EFD2 D2AA 453E 7CA7 A8FE C807 DBDA" $"F1DB F2E4 AF8B 698A 8355 895D 8387 81D7" $"DBC7 D6DB 8984 8A84 C8AF B0C8 DCE4 E4F2" $"F2DB 8389 5889 8283 AFDC DBD6 DB87 8388" $"8187 81B0 B5C8 B5F1 DBF2 DAE4 B188 8389" $"8283 8989 B0DB E4DB F2E4 B0B0 C8B0 DCB0" $"B0D7 DBC8 DB88 8388 AFD6 DBD6 DCB0 8A58" $"5859 B0B0 C7DB E4DB F1D6 D7B0 5E59 88B1" $"B0FE D012 E3EB FEED FEF3 BFC8 C8B8 8FC6" $"9FB8 BC9D EFEA D75E E7EC C6C1 C8C2 D8BF" $"D3EA EBF3 ECF9 F9E3 B7BC 99C6 B7B8 C9F4" $"ECE7 FBAA B8BD AEB3 9DCA CFE1 CFFE E3F9" $"E2EC E3BD BABF B7B8 C9C9 D1FB ECE3 F9EC" $"D1D1 E1CA FCD3 CAEF ECD9 FCB5 B8BD CAEF" $"ECE7 F4CA C89B A3A3 D1D1 D7EA ECE3 FEE5" $"F0CA A8A3 B5DB D101 607F C6AE C6D4 D7EF" $"E1D7 EFAB 7278 7B75 7475 7B75 80D1 D2D7" $"ABD2 4178 4178 ACD2 ADA8 D2D7 F0D9 E2E3" $"7C75 7972 7B7B AAD1 D2D7 C1A8 757B 7777" $"AAC3 AAD1 D1D6 F0E3 E3F0 7B75 7A76 7B44" $"7240 7EDF E3F0 D9E3 A8D4 AAAA A8A8 AAD6" $"C4D7 C07C 7B76 81D2 D7D2 D6C3 7872 3E3E" $"A8A8 D7E1 F0F0 D7D7 AAAA 713E A7A7 A8C8" $"AFC8 D6DB F1E4 DBF1 AF84 448A 8883 8384" $"8883 87D7 D6DB AFD6 5889 588A B0D6 B5B0" $"D6DB F2DB E3E4 8A83 8A84 8888 B0D7 D6DB" $"C8B0 8388 8181 B0C8 B0D7 D7DC F2E4 E4F2" $"8883 8884 8856 8458 87E4 E4F2 DBE4 B0DB" $"FCB0 35DC C8DB C988 8883 86D6 DAD6 DCC8" $"8A84 5959 B0B0 DBE4 F2F2 DBDB B0B0 8559" $"B1B1 B0D0 B8D0 DEEC FEF6 EDFE BFC2 C8BD" $"B8C1 C2BD B8A2 EFE5 EA57 C1E7 99C6 9BC8" $"C0E5 D8D3 E5EA F9E3 EBEC BDB7 C7C1 BDBD" $"CAEF E7EC E8D1 B8BD AEAE CAE1 CAEF EFF4" $"F9EC ECF9 BDB8 BEBA BD8F C49D AAFC ECF9" $"E3EC D1FB CACA D3D3 CAF4 D9EC F2B5 BDB9" $"A2EF EBE7 F4E1 C8C2 A3A3 D1D1 EAF3 F9F9" $"EAEA FECA 03A3 DBDB D101 62FF C672 C4D7" $"E3D9 F0F0 D7D2 7B75 4172 7878 7676 7CD4" $"D7D2 D7D2 7C76 7575 B0A9 C3C2 B1EF E3F0" $"D9E3 7B75 7247 7676 AAD1 B1D2 CF7E 4772" $"4772 ADC0 ADA8 D7E1 EFD8 F0D9 7278 754A" $"757B 7C76 7ECF D7E1 F0D9 AAAA CFAD C4AB" $"D2C4 D6D1 DE7D 754A 76D4 C5D7 C4D7 757B" $"3E3E A8A8 D2EF D9F0 EFAB CFA8 4141 78A8" $"A8FE C807 DBE4 DBF2 F2DB D688 7F83 5884" $"8A8A 8282 88DB DBD6 DBD6 8882 8383 B5AF" $"C8C7 B5F1 E4F2 DBE4 8883 845D 8282 B0D7" $"B5D6 D787 5D84 5D84 B6C9 B5B0 DBE5 F2DB" $"F2DB 848A 835B 8388 8882 87D7 DBE4 F2DB" $"B0B0 D7B5 C8AF D6C7 DCD7 E386 835B 83DC" $"C9DB C7DB 8388 5959 B0B0 D6F2 DBF2 F1AE" $"D7B0 5858 81B0 B0D0 D0D9 ECEC E3F9 F9EA" $"E5BD B899 C1C8 C8AE AEB5 FCEA E502 ECE7" $"BDFE B858 CFC9 E1E0 C6FE ECF9 E3EC BDB8" $"C19E B0B0 CAEF C6E7 F6AA 9EC1 9FC2 D6E8" $"D6D1 ECF5 FEE9 F9E3 C1C6 B894 B8BD B5B0" $"AAF6 ECF4 F9E3 CACA F6D6 D9C1 E5D7 F4EF" $"FCA9 B894 AEFC DAEC D7EA B8BD A3A3 D1D1" $"E7FE E3F9 FEBF F6D1 9999 A5D1 D101 6171" $"AEC6 ABD2 E3F0 D9E3 EFAB 7B75 7878 723F" $"777C 7CCE ABC3 D7D2 7C76 7C7B C3D1 AAB0" $"C4E1 F0D9 F0F1 7B75 7872 767C D7D6 D2D2" $"D478 7178 7278 A7A7 A8C1 ABE1 D8E1 F0E3" $"7840 7575 7B75 7676 7ED0 D7EF E2F0 AAD1" $"A8A9 C4AB D8D7 D6AA D478 7675 45A6 D2D7" $"D2D7 757B 3E3E A8A8 D7D7 F0F0 D7D2 ADA8" $"7241 FEA8 0AAF C8AF D6E4 F2DB E4F1 AF88" $"6683 8989 8457 8388 88D7 AFC7 DBD6 8882" $"8988 C8D7 B0B5 C8E4 F2DB F2F3 8883 8984" $"8288 DCDC D6D6 DB81 8389 848A B1B1 B0C8" $"AEE4 DBE4 F2E4 8A58 8383 8883 8282 87D7" $"DBF1 E3F2 B0D7 B0B1 C8AF DCDB DCB0 DB81" $"8383 55B1 D6DB D6DB 8388 5959 B0B0 DBDB" $"F2F2 DBD6 B5B0 8458 FEB0 15B8 D0C1 E7EC" $"F9E3 ECFE BFBD B8C6 C6C2 9AAF B3B5 FBBF" $"D61F ECE7 BDB8 BEBD E1EF CACF D9F4 F9E3" $"F9FA BDB8 C6C1 B0B5 F5F4 E7E7 FBA5 C0C6" $"C2C8 FED1 38E8 C0F4 E9F2 F9EC C699 B8B8" $"BDB8 B0B0 AAF7 ECFE EBF9 CAEF D1D2 D9C1" $"EBEA F4CA FBA5 B9B8 85DA E7EC E5EA B8BD" $"A3A3 D1D1 ECEC F9F9 EAE5 D6D1 C199 FED1" $"0162 67B8 C7D2 D7D9 F0E3 F0D6 C3A5 757C" $"457B 7578 7280 D1D6 D6C4 D744 7B71 41AA" $"AFC4 C4AE DDD9 F0E3 E3A7 7678 727B 75D2" $"D3D7 B0C0 7C76 7678 72C3 D6AA D6D2 D7F0" $"F0D7 E176 7C77 7175 4A78 737D A6F0 E3D7" $"EFD7 ABB0 D1AD D0D7 C4D4 D9A7 7C78 4143" $"A6D8 D2D7 C479 7378 41AA AAFE E314 DAE1" $"ABD1 AA45 3E7C A7A8 B8C7 D6DB DBF2 E4F1" $"DCC8 B17F 8388 5588 8389 8487 D7DC DCC8" $"DB56 8883 58B0 B5C8 C8B7 E4DB F2E4 E4B1" $"828A 8488 83D6 D7DC B5C9 8882 828A 84C8" $"DCB0 DCD6 DBF2 F2DB E482 888A 8583 5B88" $"8389 B0F2 E4DB F1DB AFB5 D6B5 D7DB C7D6" $"DBB1 888A 5856 B2DC D6DB C789 8389 58B0" $"B0E4 E4E3 DAE5 AFD7 B05E 5988 B1B0 B8C7" $"E8ED E3F9 ECF9 F4E1 E3B8 BD8F BDB8 C6C1" $"A2EF F4F4 51D9 EC8F BDC2 9BD1 D6D9 D9D7" $"FCE3 F9EC ECDB B0C6 C1BD B8E5 E6F5 CFF2" $"B5B0 B0C6 C1E1 F4CA F4E7 ECF9 F9EC F4AE" $"B3CF CAB8 94BC B8B4 D9F9 ECEA FEEC C1CD" $"EDD6 F7EA D7DE E3DA B3C8 9B97 EBEC E7EA" $"D7BD B8C6 99CA CAFE EC09 E3F4 BFEF CAA8" $"A3B5 DBD1 0162 7FA9 C7AB E1F0 E3D9 F0D6" $"ABA5 4A76 777B 7547 72AA D1D1 D6C4 D775" $"7578 78C2 AAB1 C4A7 D5E3 E3DA F0A7 7C40" $"7844 A5D7 ABD1 D1A7 467C 7678 78A9 AAC3" $"AAD7 E1D9 F0E1 D776 7677 4575 7573 7976" $"A7D9 E3EF D7D2 C4AA C3A8 D4E1 D7C6 D4A7" $"7772 4143 7AC4 D7D2 D7A4 7972 41AA C3D9" $"F0F1 F1D7 D2B0 C371 3EA7 A8A8 A9C7 B0E4" $"F2E5 DBF2 DCB1 B138 5B82 8388 835D 84B0" $"D7D7 DCC8 DB83 838A 8AC8 B0B5 C8B1 DDE4" $"E4DC F2B1 8858 8A56 B1DB AFD7 D7B1 5588" $"828A 8AAF B0C8 B0DB E4DB F2E4 DB82 828A" $"5EFE 8343 8982 B1DB E4F1 DBD6 C8B0 C8B0" $"DBE4 DBC8 D6B1 8384 5856 88C8 DBD6 DBB2" $"8984 58B0 C8DB F2F1 F1DB D6B5 C885 59B1" $"B2B0 A9C7 C3F6 F9ED E3F9 F4CA E394 B8B9" $"BDB8 9EC1 CAEF EFF4 2DD9 ECB8 B8C8 C8E9" $"D1C6 D9D1 FCEC ECE4 F9DB B599 C68F E3EA" $"BFEF EFDB 87B5 B0C6 C6C9 CAE1 CAEC F4E3" $"F9F4 ECAE AECF A8FE B821 BDAE DAE3 ECFE" $"EAE7 D9C8 E0D1 FBF3 EAD0 DEDA AFC2 9B97" $"C4D9 ECE5 EAE3 BDC1 99CA E1E3 FEF9 08EA" $"E5CF E1CA A3DB DCD1 0161 0FA9 C7E3 F1D9" $"E3EF D7C4 ABA7 767B 757D A7FD AB46 D6C3" $"D7D2 7EA9 80A9 D7D2 A8D4 ABC3 D7EF EFD7" $"D2AB 807A AAD6 D2D7 D2D6 7B75 7C44 76A7" $"D9D4 D6D6 D4F0 EFD8 E1D7 A87E A5AB A77D" $"7B43 757B E1D7 E4F1 D7D7 D0B0 D6E4 D7C4" $"D6D1 7841 78FE 3E21 AAD6 D2D7 E3B7 7C4B" $"C3D7 E1D7 E1D7 D1AA C3AA 4141 7EA8 A8A9" $"C7E4 F3DB E4F1 DBC7 AFB1 0582 8883 87B1" $"AEFE AF46 DCC8 DBD6 87B1 87AF DBD6 B0DB" $"B0C8 DBF1 F1DB D6AF 8781 B0DC D6DB D7DC" $"8883 8956 82B1 DBD6 DCDC D5F2 F2DB E4DB" $"B087 ABB0 B189 8855 8388 E4DB E4F1 DBDB" $"D6B5 D6E4 DBC7 DCD7 8958 8BFE 592C B0DC" $"D6DB E4B9 875A C7DB E4DB E4DB D7B0 C8B0" $"5858 87B0 B0A9 C7EC FAE3 ECFE ECD7 BFDB" $"B0BD B8AA D1BF BFCA CAF4 E144 ECE7 AAD2" $"A2C9 EAE5 D1FB BFD7 ECFE FEEA E7C1 A29D" $"CAF4 E7EC F0F4 BDB8 BE8F AEDA E3DE F4F4" $"DDF9 F9E3 F4EC D1AA BCC1 DBB6 BD8F B8BD" $"F3EA E4F1 ECEC EECF D6E4 EAD7 F4EF C699" $"D0FE A316 CAF4 E5EA ECC1 B68C D8EC F3EA" $"F4EC EFCA E1CA 9999 AAD1 D101 61FF E457" $"E3D9 F0F0 D7E1 ABD2 A77C 757B CFD4 C5D2" $"C4D7 C3B0 C4AB CFA8 C2C4 D2AB A8A8 ABC3" $"D7EF D7E1 D7D2 D1C3 D6C3 D7C4 D6A9 757B" $"7575 7CA7 E3E3 D6DF E3D9 E1E1 EFD7 C1D4" $"D2D7 CE46 7575 7B75 ABE1 F1E4 EFE1 D6DF" $"F1F1 D7D2 D7AA 7278 FE3E 173D AAD1 C5D7" $"D4D9 CEDD D7E1 D7E1 EFD7 C3B0 C3B0 7241" $"A3A8 A8FE E407 DBF2 F2DB E4AF D6B1 1288" $"8388 D7DC C8D6 C8DB C8B5 C8AF D7B0 C7C9" $"D6AF FEB0 38C8 DBF1 DBE4 DBD6 D7C8 DBC8" $"DBC8 DCAF 8388 8383 88B1 E4E4 DCE5 E4DB" $"E4E4 F2DB C8DB D7DC D755 8383 8883 AFE4" $"F1E4 F1E4 DCE5 F1F1 DBD6 DCB0 8489 FE59" $"2D58 B0D7 C8DB D6DB D6E2 DBE4 DBE4 F1DB" $"C8B5 C8B5 8458 ABB0 B0E4 E4EC E3F9 F9EC" $"F4BF E5DB B5B8 BDF6 FBD8 E5E1 F4E1 CF43" $"D9C1 F6D1 E0E2 E5BF D1D1 BFD7 ECFE EAF3" $"ECE7 EFE1 F3E1 ECD9 F4C9 B8BD B8B8 B3DA" $"ECEC F4FC ECE3 ECEC FEEC E8FB E7EC FB87" $"B8B8 BDB8 BFF3 F1E4 FEF4 F4FC F1F1 EAE5" $"F5CA C1C6 FDA3 16CA EFD8 EADE E3FB FCEC" $"F4EA F3FE ECE1 CFE1 CFC1 99CC D1D1 0162" $"7FD6 F1E3 F0E1 D7F0 ADD8 ABA7 7C7A AAF1" $"E3D6 B0D6 AAD6 E4FF F1D7 D8D2 B1D6 AAAA" $"D1F0 D9C4 D7F0 E3D7 D7F1 F1F0 D9D2 D7A7" $"7CAE D4D7 D7AB D2D7 EFE3 D9F1 F1FF F1D7" $"D2D7 D2D7 D7F0 F0AD 7E75 7B7E ECD7 D7F1" $"F1F0 E3D7 E1EF D8DF AAA7 7C72 413E 3E41" $"A9D7 D2D7 D2D9 D4E1 D7F1 E3D7 D2B0 D2B0" $"C440 3E7C A7A7 D6F1 E4F2 E4DB F1AF DCAF" $"B17F 8881 B0F3 E4DC B5DC B0D6 E4FF F1DB" $"DCD6 B5DB AFB0 D7F2 DBC8 DBF2 E4DB DBF1" $"F1F2 DBD6 DBB1 88AF D6DB DBAF D6DB F2E4" $"DBF1 F1FF F1DB D6DB D6DB DBF2 F2B5 8783" $"8887 EFDB DAF1 F1F2 E4DB E4F2 DBE5 B0B1" $"8884 5859 5958 B8DB D6DB D6DB D6E4 DBF3" $"E4DB D6B5 D6B5 C85A 5988 B1AF D6F1 ECF9" $"F3EA FEC1 F4CA DBB5 9DCA FAEC F4CF F4CA" $"D6E4 0EFF F1EA EBE7 C6F4 CACA EFF9 E3D9" $"ECF9 FEEC FFF1 4AF9 E3E5 EADB B5B8 DEEC" $"ECBF E5EC FEEC E3F1 F1FF F1EC E7EA E5EC" $"ECF9 F9D8 ACB8 BDAC FDEA E9F1 F1F9 ECEC" $"F4F9 E3FC CADB B5C1 99A3 A39B F2EA E5EC" $"E7EA E5F6 EDFA ECEC E7CF EFCF E1A4 A3B5" $"DBD0 0161 0FD6 E4D9 F0D7 E1D4 ADAB D2A8" $"A7AA FCF0 D9FE D16C D6F1 F1F2 F1FD EFD2" $"C4DF AAD6 D6FE F1AB D2D9 E3EF EFF1 F1F0" $"FED7 D27C C0F0 F0D2 EFEF D7EF D7F0 F0F1" $"F1FF F1EF D7C4 D7EF EFF0 D9EC EC7B 757E" $"CFEF FDF1 F2D9 F0EF D7EF E1AA AAA7 A778" $"413D 3E41 72D7 E1D7 D2D9 D4D7 E1D9 F0D2" $"ABD2 ABD2 AB77 3EA7 A7A8 D6E4 DBF2 DBE4" $"D5AF AFD6 B204 B1B0 FCF2 DAFE D712 DCF1" $"F1F2 F1FD F1D5 C8E4 AFDC DCFE F3AF D6DB" $"E4FD F15A F2FE DBD6 88C9 F2F2 D6F1 F1DB" $"F1DB F2F2 F1F1 FFF1 F1DB C7DB F1F1 F2DB" $"EFEF 8883 87D7 F1FD F1F2 DBF2 F1DB F2E4" $"B0B0 B1B1 8958 5859 5884 DBE4 DBD6 DBD6" $"DBE4 DBF2 D6AF D6AF D6AF 8A59 B1B1 B0D6" $"E4E3 F9EA F3E7 C1CA EFDC DBCA FFF9 E2FE" $"EF02 F4F1 F15E F2F1 FFFE E6D9 FCCA F4F4" $"FFFA C1E7 E3EC FEFE F1F1 F9FF EAE5 B5F2" $"F9F9 E7FE FEEA FEEC F9F9 F1F1 FFF1 FEEC" $"D7EA FEFE F9E3 FDFD BDB8 ACF8 FEFF F1F2" $"E3F9 FEEC F9EC CACA DBDB C699 A3A3 9BC2" $"EAF3 ECE7 EAE5 EDF6 E3F9 E7C1 EFCA EFCA" $"CFA3 DBDB D101 617F E3F0 E3E3 D6C3 B0D1" $"A8AD C3D7 EEEE FDD7 CED4 D1D6 F1F0 D3A5" $"EFFD D4AC EEAA F1FE F2FF A7A7 D1D6 F1FF" $"DED5 D7EF EFAB 7FEE D4A8 7BA5 F1F1 EFEF" $"D7EF FFFF FEF0 D7D2 D6E0 FEF0 CE76 D8E1" $"C17E 76D4 F1F1 FEFE E3F0 D9F0 EED7 A776" $"7CA7 A544 3F3F 7871 A7D4 C1D5 D1D6 EFE1" $"DFAA B0C3 D6AA D6AA 7141 7CA7 A8E4 F2E4" $"E4DC C8B5 D7B0 B5C8 28DC F2F2 FDDB D7DB" $"D7DC F3F2 DAB1 F1FD DBB6 F1B0 F3FE F2FF" $"B1B0 D7DC F1FF E5DC DBF1 F1AF 86F1 DBB0" $"89B1 FDF1 01DB F1FE FE4D F2DB D6DB E4FE" $"F2D7 82DC E4C8 8782 DBF1 F1FE FEE4 F2DB" $"F2EF DBB1 8288 B1B1 565A 5A8A 83B1 DBC9" $"DCD7 DCF1 E4E5 B0B5 C8DB B0DC B083 5888" $"B1B0 ECF9 ECEC F4E1 CFEF D1D6 E1F5 FEFE" $"FFEC FBFC EFF4 FAF9 23FC E3FE FFFC E0FE" $"CAFA FFF2 FFD1 D1EF F4F1 FFFC F4EC FEFE" $"C1A1 FEFB D1BF E4F1 F1FE FEEA FEFE FF37" $"F9EC E7F2 FBFF F9FB B0EC F4E8 AAB0 FCF9" $"F9FF FFEC F9E3 F9FD F4DB B0B3 DAE3 8FA3" $"A3C8 C2DA FCE8 FAEF F4FE F4FC CACF E1F3" $"CAF4 CAC0 99B5 DBD3 0162 7FAE C6D4 AEC3" $"B0C3 AAA8 C1AA AA80 EEE1 AB7C 4680 EDE3" $"AE44 44AB D7DE 46AA AAD4 D9F2 FFAD CFAA" $"D6F1 F1A9 A9AB EFEF ABAA EEDE 7F75 7BF1" $"F1D7 ABAC C4DA F2F0 D9C4 7C80 E0F0 AE7C" $"7CAB E1D4 777C A7C7 DAF0 D9D4 D9D4 D4D7" $"AA76 7C76 A77B 753F 3F41 417C 76A8 7EAA" $"AAD7 ABAA AAC3 D6AA D1C4 AA41 41A7 A7A8" $"AFC8 D6AF C8B5 C8B0 B0C8 B07F B085 F2E4" $"AF88 5587 F0E4 AF56 56AF DBE3 55B0 B0D6" $"DBF2 FFB6 D7B0 DCF1 F1B0 B0AF F1F1 AFB0" $"F1E3 8883 89F1 F1DB AFB0 C7DA F2F2 DBC8" $"8086 E4F2 AF88 88AF E4DB 8088 B1C7 DAF2" $"DBD5 DBD6 D6DB AE82 8882 B188 835A 5A58" $"5888 82B0 87B0 B0DB AFB0 B0C8 DCB0 D7C9" $"B058 58B1 B1B0 B8D0 DEB8 E1CF E1CA D1E8" $"CACA 98FE F4C1 B587 A2FE ECB8 FF8F 5CBF" $"EAFC 87CA CADE E3F2 FFD6 F6CA F4F1 F1CA" $"CAC1 FEFE C1CA FEFC ABBA BFF1 F1EC C1C0" $"D7E3 FAF9 E3D9 93A0 FBF9 B8B5 B5C1 F4FB" $"A4B5 DBD0 E3F9 E3DD E3DE DEF4 C9B0 B5AE" $"DABD B8A3 A39B 9BB3 AED1 AACA CAEC C1CA" $"CAE1 F4CA EFE2 CA99 99DB DBD3 0162 7F9A" $"B9AA C3AD C1AA D6AA D6A8 A87A EED6 AA76" $"7680 EED4 A83E 3EAA DFDE 7EA8 A8A9 D6F1" $"F1C2 AAAB EFF0 D972 727A D6EF D2D4 D9EE" $"7A78 73D9 F0F0 C6AC C0AE F0F0 D9A4 79AA" $"DFEF AB76 76AA EEE0 8080 C3AE CFF0 F0A8" $"A8AA D6E3 D978 727C A775 7B3E 403E 3E75" $"A57C 767A 75C3 ABA8 A8D6 AAD2 B1A9 AD75" $"447E B2A8 9AB9 B0C8 B4C8 B0DC B0DC B044" $"B080 F1DC B082 8286 F1DB B059 59B0 E5E3" $"87B0 B0AF DCF1 F1C7 B0AF F1F2 DB84 8481" $"DCF1 D6D6 DBF1 818A 85DB F2F2 C8B6 C9AF" $"F2F2 DBB2 89B0 E5F1 AF82 82B0 F1E5 8787" $"C8B6 D7F2 F2FE B037 DCE4 DB89 8488 B183" $"8859 5A59 5983 B188 8287 83C8 B1B0 B0DC" $"B0D6 B5B1 B583 5687 BAB0 9AB9 CAE1 D6E8" $"CAF4 CAF4 D1D1 9BFE F4CA AEAE A0FE FAD1" $"FFA3 5CCA FCFC AAD1 D1C9 F4F1 F1E0 CABF" $"FEF9 E3C1 C19D F4FE E5DE E3FE 9DC8 C3E3" $"F9F9 D0E0 F2B8 F9F9 E3E3 BDCA FCFE BFAE" $"AECA FEFD A2A2 E1D7 F6F9 F9D1 D1CA F4EA" $"E1C6 C1B3 DAB8 BDA3 A4A3 A3B8 E3B5 B0BC" $"B8E0 C9D1 D1F4 CAE7 C6D2 D6B8 8FAA DBD1" $"015E 5B99 B9AA AAC1 ADC3 AAC3 AAC1 7E80" $"EEEE AA7C 75AA E0DE 7E3E 4080 EED4 78A8" $"A8AA DFF1 F1AA D7AB EFF0 F078 477A EED7" $"D7C6 F0D6 7A41 78F1 F0D9 C6A7 ACC6 F0F1" $"D4A4 79A9 D6EF AB7C 76AB D6EE AA7A D2A8" $"D4E3 D9CF ADC3 D6E3 C672 4776 A77B 75FD" $"3EFF 7B0F A17C 757B D6AB A7A8 C3AA D2D2" $"CFA8 7644 FEA8 0A99 B9B0 B0C8 B5C8 B0C8" $"B0C8 1087 86F1 F1B0 8881 B0E4 E387 595A" $"87F1 DB81 FEB0 3CE5 F1F1 B0DC AFF1 F2F2" $"895D 81F1 DBDA C8F2 DC81 588A F3F2 DBC8" $"B1B6 C8F2 F3D6 B289 AFDC F1AE 8882 B1DC" $"F1B0 81D7 B0DB E4DB D7B5 C8DC E4C7 845D" $"82B1 8883 FD59 FF88 0FAC 8883 88DB B1AF" $"B0C8 B0D6 D6D7 B083 56FE B015 99B9 CACA" $"E8D6 E1CA E1CA E8AA A0FE FECA B3AD C8FB" $"FCAA 45A3 A4A2 FEFB A5D1 D1CA FCF1 F1CA" $"F5BF FEF9 F9C6 9E9D FEEA E9D0 F9F4 9D9B" $"C8FA F9E3 D0DB E0D0 F9FA DEE3 BDC9 F4FE" $"BFB3 AECA F4FE CA9D F0D1 FBEC E3F6 D6E1" $"F4EA CEC1 9EAE DABD B8FD A3FF BD0F D6B5" $"B8BD F2C9 D0D1 E1CA E7E7 F6D1 B98F FED1" $"0162 7F99 B7B5 B1D2 ABC0 ACC3 B0A8 A879" $"D6EF AB75 7AAB EFF1 C77B 75AA D6DF 7AA8" $"A8AA D6FF F1D2 ABD2 D7F1 F17A AA81 EFEF" $"C4D8 EFEC 7E7C 76F0 F0EE B0C4 D2D9 FEFF" $"F1EF ABAE F0EE AA41 78AB EFD6 AAA9 AEC6" $"D9F1 F1AB D2C4 D7DF B07C 7675 A5A1 7C3C" $"3C3E 3E76 A6A8 A8A7 A8D4 D4A8 A8AD CFB0" $"A9D4 A83E 3E7C A7A8 9AB9 B9B5 D6AF C9B6" $"C8B5 B010 B080 DCF1 AF83 87AF F2F1 C788" $"83B0 DCE5 81FE B041 DCFF F1D6 AFD6 DBF1" $"F181 B086 F1F1 C7DB F2EF 8788 82F2 F2F1" $"B5C7 D6DB FEFF F1F1 AFAF F2F1 B058 89AF" $"F1DC B0B0 B5C7 DBF1 F1AF D6C8 DBE5 B588" $"8283 B1AC 885A 5A59 5982 FEB0 26AF B0D5" $"D5B0 B0B5 D7B5 AFDB B059 5988 B1B0 A1C0" $"CAC6 E5BF F2E0 E1CF D1D1 9CF4 FEC1 B8BC" $"C1FE F1C7 5EBD B8CA F4FC 9DD1 D1CA F4FF" $"F1E7 C1E5 EAF1 F1A5 D199 FEFE D7E3 F9FD" $"AAB5 B0F9 F9FE CFD7 E5E3 FFFF F1FE C1B8" $"F9FE CA99 C6C1 FEF4 CACA CFCE E1F1 F1BF" $"E5D9 ECFC CFB5 B0B8 E3D6 B5A5 A5A3 A3AE" $"D9D1 D1D0 D1E7 E7D1 D1D6 F6CF C9FB D1A3" $"A3B5 DBD1 015F 61A8 AEC4 C4D7 C4AC A7C3" $"AAC1 7E7A EEEF AB7B A5AB EFF1 C77B A5AA" $"EEDF 7FA8 A8AA D1F1 FFD7 E1D7 EFF1 F1D6" $"AAD2 EFD7 D7C4 EFD4 7876 76D9 FED6 C3D7" $"D7E3 F0FF F1E1 D7E3 F0D6 AA78 72AB E1DF" $"AAC1 ECE3 F0F1 F1E1 D7D7 EFD6 D176 767B" $"7B7C 763C 3D3E 3E7C A7FD A8FF D917 ADCF" $"CFAD C3D1 A8A8 773E A7A7 A8AA AFC8 C8DB" $"C7B6 B1C8 B0C8 1087 81F1 F1AF 88B1 AFF2" $"F1C7 88B1 B0F1 E586 FEB0 05D7 F1FF DBE4" $"DBFE F12F DCB0 D6F1 DBDA C8F2 DB81 8282" $"DBFE DCC8 DBDB E4F2 FFF1 E4DB E4F2 DCB0" $"8984 AFE4 E5B0 C8F0 E4F2 F1F1 E4DB DBF1" $"DCD7 8282 FE88 0682 5A5B 5959 88B1 FDB0" $"FFDA 22B5 D7D7 B5C8 D7B0 B08A 59B1 B1B0" $"B1B6 D9D9 EAD7 E0DB E1CA E8AA 9DFE FEC1" $"BDE3 C1FE F1C7 4BBD E3CA FEFC A1D1 D1CA" $"EFF1 FFEC F4EA FEF1 F1FB D1E7 FEEA E9D0" $"F9FB A5B0 B0E3 FFF4 E1EA EAEC F9FF F1F4" $"ECEC F9F4 CAC6 C1C1 F4FC CAE1 FEEA F8F1" $"F1F3 EAEC FEF4 EFB0 B0BD BDB5 B0A5 A6A3" $"A3B3 DAFD D1FF EC0C D6F6 F6D6 E1EF D1D1" $"CFA3 DBDB D101 614C A8B7 C3B0 C3AA C3D6" $"AAD6 A9A8 7ED4 E0AB A8A8 AAEE EFB1 A77C" $"D4F0 EC48 A8A9 AAD6 F1F1 D7E1 D9F0 FFF1" $"C3D6 C6F0 EFAB AAEF EC7E 7878 F1F1 E0D7" $"E3F1 E4FF FFF1 D7E0 D5F0 F0AE 757B ABEF" $"D4A8 D6D6 E3FE F100 D7FD E12A D872 4779" $"A87B 753E 3E44 75A8 A8AA A9A8 A8D2 D2C6" $"DAAB D2A8 D5AA C341 4180 C2AB AAB9 C8B5" $"C8B0 C8DC B0DC B104 B087 DBE3 AFFE B0FF" $"F14A B4B1 88D6 F2EF 53B0 B1B0 DCF1 F1DB" $"E4DB F2FF F1C8 DCC8 F2F1 AFB0 F1EF 8789" $"89F1 F1E3 DBE4 F3E4 FFFF F1DC E5D7 F2F2" $"AF83 88AF F1DB B0DC DBE4 F3F1 F1DB E4E4" $"E5E4 DB84 5D82 B088 8359 5956 83FE B027" $"AFB0 B0D6 D6C8 DCAF D6B0 DCB0 C858 5887" $"C8AF B2C1 D9C6 E1CA E1F4 D1FB D4D3 AAFB" $"F4C1 D1D1 CAFE FEC5 5EDB B5DE F9FD 7BD1" $"D1CA F4F1 F1EC F4E3 F9FF F1E1 F4D0 F9FE" $"BFCA FEFD AAC6 C6F1 F1F4 ECEC FAE4 FFFF" $"F1EC F5DF F9F9 B8B8 BDC1 FEFB D1F4 F3EC" $"FAF1 F1EA F3F4 F5F2 E9C1 9EA6 D1BD B8A3" $"A38F B8D3 D3CA C9D1 D1E7 E7D0 E4C1 E7D1" $"FCCA E19B 9BAA E9BD 015E 049A ADC3 D2D6" $"FCAA 46C1 7E78 EDEF D8A8 A8AA D6FD E07C" $"A1D9 F0D4 78A8 A8AA DFF1 FFE1 D7E3 F0F1" $"F1D6 AAD9 FEE1 ABAA D6EC 7D72 78F1 F1D7" $"E0E3 D9F1 F1FF F1E1 D7D9 F0FE E37B 75D7" $"E1D4 A8C3 D6D9 F0F1 FFE1 FED7 25E1 AC78" $"727E A37B 763E 3E75 7BA8 A8C3 AAA8 A8D7" $"D7C6 D4D7 D2AD C1D6 A972 41AA AAD3 9BAE" $"C8D7 DCFC B000 C804 8781 F0F1 DCFE B008" $"DCFD E388 ACDB F2DB 81FE B043 E5F1 FFE4" $"DBE4 F2F1 F1DC B0DB FEE5 AFB0 DCEF 8684" $"89F1 F1DB E3E4 DBF1 F1FF F1E6 DCDB F2FE" $"E588 83DB E4DB B0C8 DCDB F2F1 FFE4 DADB" $"DBE4 AF89 8487 AB88 8359 5983 88B0 B0C8" $"FEB0 FFDB 11C8 D6DB D6B5 C8DC AF84 58B0" $"B0D6 A4B7 D9E7 F4FE CAFF D10B EAAC A5FE" $"FEEC D1D1 CAF4 FFF2 5EB5 D6E3 F9FB A5D1" $"D1CA FCF1 FFF4 ECEC F9F1 F1F4 CAE3 FFF4" $"BFCA F4FD A9C1 C6F1 F1EC F4EC E3F1 F1FF" $"F1F5 ECE3 F9FF EDBD B8EC F4FB D1E1 F4E3" $"F9F1 FFF3 E9EC ECF2 BEC6 C1AA CCBD B9A3" $"A3B8 BDD3 D3E1 CAD1 D1EC ECD0 DEEC E7D6" $"E8F4 C9C2 9BD1 D1E4 015F 0F9A B8C4 ABD1" $"AAD6 AAD1 B0C1 7E7D EBF0 AEFE A747 A8F1" $"F0C3 D7F0 F1C0 7CA8 A8AA D6F1 F1DF D6DF" $"D6F0 F0F1 E4F1 F1D4 7C76 D4F1 E3AE E3F0" $"F0E3 D9F0 F0D9 FEF0 D9D7 D2C4 D7F0 FFAB" $"ABE1 E1A7 7CD2 E1D8 EFF1 F1D9 E3E1 E1D7" $"E1A8 A9A7 7C77 FE3E 017B A5FD A81B A67C" $"D4D9 AAD6 D2D7 D2C4 A7A7 3E3E A8AD AB9A" $"B8C8 AFD7 B0DC B0D7 B5C9 FF87 0EF0 F2AF" $"B1B1 AFB0 F3F2 C7DB F2F3 C988 FEB0 31DC" $"F1F1 E5DC E4DB F2F2 F1E4 F1F1 DB88 82DB" $"F1E3 AFE3 F2F2 E4DB F2F2 DBFE F2DB DBD6" $"C7DB F0FE AFAF E4E4 B188 D6E4 DBF2 F1F1" $"DBFE E406 DBE4 B0B1 B188 8AFE 5901 88B1" $"FDB0 26B2 89D6 DBB0 DCD6 DBD6 C7B1 B159" $"59B0 B5AF 9AB8 D9C1 EFCA F4CA EFCF E8AA" $"AAFD F9B8 DADA D0D1 FAF9 44D8 ECF9 FAF2" $"B5D1 D1CA F4F1 F1FC F4FC F4F9 F9F1 E4F1" $"F1FC B5B0 FCF9 ECB8 ECF9 F9EC E3F9 F9E3" $"FFF9 E3EC E7D7 EAF9 FFBF BFF4 F4DB B5E7" $"F4E9 FEF1 F1E3 ECF4 F4EA F3D1 D2DA B3CF" $"FEA3 01BD E3FD D110 E4BE E5EA CAF4 E7EC" $"E5D7 DBDB A3A3 D1D6 BF01 5B27 9AB8 ABD2" $"D6AA AAC3 AAC3 A7A8 77D4 F0D5 A77C A878" $"AEE3 D7EF D9C6 7CA7 A8A8 AAD1 F1FF B0C2" $"AFC3 AEF0 FDF1 FF76 2B7C 76D5 DBF1 F1D4" $"D9E3 F0F0 D9E3 F0F0 E3AB D2D7 D2DA F1EF" $"EFD7 AC76 77AB D7C4 D8F1 F1E3 E3D7 D7C4" $"ABA8 A8A7 76FD 3E01 A57B FEA8 1C78 7B75" $"ADD5 D6D1 D7C4 D7AB ACA7 773E A8C1 C59A" $"B8AF D5DC B0B0 C8B0 C8B0 10B0 82DC F2D7" $"B188 B081 AFE4 DBF1 DBC8 88B1 FEB0 08D7" $"F1FF B5C7 B5C8 AFF2 FDF1 FF82 1488 82D5" $"DBF1 F1D6 DBE4 F2F2 DBE4 F2F1 E4AF D6DB" $"D6DA FEF1 13DB B082 83AF DBC8 DBF1 F1E4" $"E4DB DBC7 AFB0 B0B1 82FD 5901 B188 FEB0" $"2781 8883 AFD7 DCD7 DBC8 DBAF B6B1 8A59" $"B0C8 C89A B8C1 E6F4 CACA E1CA E1D0 D1A5" $"FBF9 DFDA B3D1 A5B8 EC11 ECFE E3D0 B5DB" $"D1D1 CAEF F1FF CFE0 CFE2 B8F9 FDF1 FFB0" $"21B5 B0DE E4F9 F9DE E3EC F9F9 E3EC F9F9" $"ECC1 E7EA E5E3 F9FE FEEC C2B0 B1C1 ECD6" $"E9F1 F1FD EC05 D7BF D1D1 DAAE FDA3 01E3" $"BDFE D111 A5BD B8BF E6F4 EFEC D9EA BFE0" $"DBCF A3D1 E8D8 0161 4E89 AEC5 B1C3 AAD5" $"A8AD A8A6 7B76 7CA7 A7A8 A873 7972 4177" $"77A6 A5A7 A6AA AAAB AAAD A8C3 AAC3 AAA7" $"ACD2 D7D7 AB7B 7B41 7876 7CA7 7C7C CED9" $"E2D7 E1D1 AAA7 A7C0 A8D6 D1DA D4AC A775" $"7B75 7B7C A6A8 A8C4 FED7 02D2 E1A6 FE7B" $"2776 443E 403E 77A1 7C9E 79A5 7B76 7BD2" $"ABC3 D6C4 D7AA D1C3 AA41 72AA AAAB 8AAF" $"C9B5 C8B0 DCB0 B5B0 B10F 8882 88B1 B1B0" $"B083 8984 588B 8BB2 B1B1 FEB0 2CB1 B0B5" $"B0C8 B0C8 B0B1 B6D6 DBDB AF88 8858 8A82" $"88B0 8787 D6DB E3DB E4D7 B0B1 B1C7 B0DC" $"D7DC D6B6 B183 8883 8888 FEB0 00C8 FEDB" $"02D6 E4B1 FE88 3283 5659 5A59 8AAC 88AC" $"89B1 8883 88D6 AFC8 DCC8 DBB0 D7C8 B058" $"84B0 B0B6 93B8 DAC6 E1CA FCD1 D6D1 DBB5" $"AEB3 DBDB D1D1 B8BD C199 FFD1 03E4 E3DB" $"DBFD CA54 D6D1 E1CA E0C8 DBE0 E5EA F4CA" $"BDBD 9BC8 AEB3 DCB6 B6FB E3EB EAF3 EFCA" $"DADA E8D1 F4EF E2DC E0DB B8BD B8BD B3D9" $"D1D1 D9EC EAEA E8F6 DBB5 BDBD B98F A3A4" $"A3CF D6B5 DDBD E3BD B9BD EFCA E1F4 D9EC" $"CAEF E1CA 99C1 CACA E801 602F 99B6 B5D2" $"B0C3 A8A8 C1A8 CE7B 76A7 A77C A8A8 7379" $"7841 3E3E 7B7B A77C D1AA AAC3 A8C1 A9AA" $"B0C3 7CCE ABD2 C4D7 7575 7278 FD76 2145" $"D3F0 E3EF D7AA D6A7 ACA8 7ED1 B0D5 D4CE" $"7C75 447B 7576 A7C1 ADC5 D7E1 E1D7 D7A6" $"A6FE 7500 44FE 3E0F 78A7 7C79 7975 7B7B" $"75B0 D3B0 D1D7 C4D6 FEAA 0F41 78AA C3A6" $"9AB8 B9D6 B5C8 B0B0 C8B0 D724 8882 B1B1" $"88B0 B083 8989 585A 5A88 88B1 88D7 B0B0" $"C8B0 C8AF B0B5 C888 D7AF D6C8 DB83 8384" $"8AFD 8221 54DA F2E4 F1DB B0DC B1B6 B087" $"D7B5 D7D6 D788 8356 8883 82B1 C8B5 C9DB" $"E4E4 DBDB B1B1 FE83 0056 FE59 0F8B B188" $"8989 8388 8883 B5D7 B5D7 DBC8 DCFE B01A" $"5889 B0C8 B2A3 C0CA E7CF E1D1 D1E8 D1FB" $"B5AE DADB B5D1 D1B8 BDC6 99FF A5FF BD3B" $"DBB5 EFCA CAE1 D1E8 C9CA CDE0 B5FB BFE5" $"E1F4 B8B8 C2C8 AEAE B1B1 87FC F9EC FEEA" $"CAF4 DADF D1AA EFCF DDDC FBB5 B88F BDB8" $"AEDA E8D6 DAEC F3F3 EDED DBDB FEB8 008F" $"FEA3 0FD0 DBB5 BDBD B8BD BDB8 CFF0 CFEF" $"ECD9 F4FE CA04 99C6 CAE1 E401 5D04 7CB6" $"AAAA CFFE A8FF AA19 A77C 757B A8A8 A7A7" $"7741 7575 3E3E A27B A2A7 ADA8 A7A7 AAAA" $"ADC1 FEA8 30C1 D4A8 D7AB 7247 7B75 4778" $"4178 7EEC E1D8 E3F0 A8A8 AAC3 A775 D7D3" $"CFD4 C17E 767C 757B 7CA7 AAAA ABE1 E1D7" $"D4E3 A87D 757B FD3E 1D46 A17D 92A8 A37B" $"7572 78AA AAC4 D2B0 C3D6 ABA7 A745 76A8" $"ADC4 80B9 B0B0 D7FC B000 B118 8883 88B0" $"B0B1 B189 5883 8359 59AD 87AB B1B5 B0B1" $"B1B0 B0B5 C8FE B012 C8DB B0DB AF84 5D88" $"835D 8958 8A87 EFE4 DCE4 F2FE B01A C8B1" $"81DB D7D7 DBC8 8782 8883 8888 B1B0 B0AF" $"E4E4 DBD6 E4B2 8983 88FD 5910 55AC 899C" $"B0AB 8883 8489 B0B0 C7D5 B5C8 DCFE B109" $"5582 B0B4 C787 C0CA CAF6 FED1 FFCA 0BDB" $"B5B8 BDD1 D1DA DAC7 9BB8 B8FF A30B D7B4" $"CCD1 D6D1 DBDB CACA D6E8 FED1 30E8 FBD1" $"ECC1 C19E BDB8 9EC6 9BC8 AAFD F6EE ECF9" $"D1D1 CAE1 DBAF EAE6 F6FB E8AA B8BD B8BD" $"B5DB D1D1 C1F4 F3EA DEEC DBB4 B8BD FDA3" $"1887 D6B6 C8D1 CCBD B8C1 C6CA CAD7 E4CF" $"E1F4 CADB DB8F B8D1 D6D7 0158 2187 B6AA" $"D1AD A7C1 ADC2 AAA7 767B A5A8 78A8 7C72" $"7875 4A3E 407C A77D A7C1 A8A7 ACAA C3FC" $"A830 ADC1 ADD2 C478 7275 7B72 7278 727F" $"DED7 EFE3 DAA8 A8AA AAA7 7CAB C4D4 ADCF" $"7E76 7C44 757C C0AA AAD2 D7D7 D2E3 D9A7" $"7675 7BFD 3E23 46A7 7CA7 7E78 7B75 7878" $"AAD1 ABD7 C3D6 D2AA A77C 7C76 A8C1 AB8B" $"B9B0 D7B5 AFC8 B5C7 B0B1 1682 88B1 B081" $"B288 848A 835B 595A 88B1 87B1 C8B0 B1B6" $"B0C8 FCB0 12B4 C8B5 D6C8 8984 8388 8484" $"8A84 88E3 DBF1 E4DC FDB0 19B1 88AF C7DB" $"B5D7 8782 8856 8388 C9B0 B0D6 DBDB D6E4" $"DBB1 8283 88FD 592E 55B1 88B1 8781 8883" $"8989 B0D7 AFDB C8DC D7B0 B188 8882 B0C8" $"AE92 C0CA EFD6 D0E8 D6E0 CADB B0BD E3D1" $"A5DB B3C2 C8B8 940B A3A4 B5DB AAD1 E8D1" $"DBE0 CAE1 FCD1 30D6 E8D6 E7D9 C6C1 B8BD" $"C1C1 C8C2 ABFC EDFE ECE4 D1D1 CACA DBB5" $"BFD7 FBD6 F6AA B8BD 8FB8 B5F2 D1D1 E7EC" $"EAE5 ECE3 DAAE B8BD FDA3 1887 DBB5 DBAA" $"A5BD B8C6 C6CA EFBF EAE1 F4F0 CADB B5BD" $"B8D1 E8BF 0151 049A A9B4 AAC1 FCA8 13A7" $"7C76 A8A7 A7A8 787B 757B 753D 3E75 A6A7" $"7BD1 AAFC A816 A7A8 A8AA C3D6 C3D5 A978" $"7278 4175 7B75 75AA DFE3 DAE1 D7FD A8FF" $"A701 AAD6 FED4 137E 7575 7B7B 76A7 A8A8" $"AAD6 D2D7 D7D2 A57B 7278 3DFE 3E1D 757B" $"A776 7B7B 7479 7575 C1AE C4B1 D0AA CFAD" $"A7A1 4178 AAAA AD9A A9BA B0C8 FCB0 00B1" $"1188 81B0 B1B1 B081 8883 8883 5859 82B1" $"B187 D6FB B000 AFFE B012 C8DC C8DC B089" $"848A 5883 8883 83B0 E5E3 DAE4 DBFD B0FF" $"B10B B0DC D6D6 DB87 8383 8888 82B1 FEB0" $"09DC D6DB DBD6 B188 848A 58FE 591D 8388" $"B182 8888 8489 8383 C8B6 C8B5 D6B0 D7B5" $"B1AC 5889 B0B0 B59A A9D3 CAE8 FCD1 02DB" $"B5AF FEDB 05D1 A5BD B8BD B8FF A305 B0DB" $"DBB4 EDC8 FCD1 16D0 D1D1 CAE1 F4E1 F4CA" $"C6C1 C89B B8BD B8B8 CAFC ECE3 F3EA FDD1" $"FFDB 17CA F4DE DEFB AAB8 B8BD BDB0 DBD1" $"D1CA F4E7 ECEC E7E3 BDC1 C6FD A318 B8BD" $"DBB0 BDBD B9BD B8B8 E8D7 D9C6 EECA F6D6" $"DBD6 99C6 CACA D601 4A06 9AA9 AAAA ADA8" $"A7FE A813 A776 7DA8 7CA7 A8A8 7544 757B" $"3E3E 7B75 A7A7 AAAA F9A8 1380 C3AA D6C1" $"D572 4772 7874 7B44 7BAA D6E3 E3D7 D2FC" $"A818 7CC3 D6C5 D9C1 A87B 4475 747C A7A8" $"A8AA DFD7 D2D2 D77B 7546 72FD 3E1F 757B" $"A77C A07B 7379 7B7B A8A8 D2D2 B0D1 ADC1" $"7C7C 7241 AAC3 C19A A9B0 B0B5 B0AF FEB0" $"00B1 1082 87B0 88B1 B0B0 8356 8388 5959" $"8882 B1B1 F7B0 1387 C8B0 DCC8 DC84 5D84" $"8A82 8856 88B0 DCE3 E3DB D6FD B00D B288" $"C8DC C7DB C8B0 8856 8382 88B1 FEB0 08E5" $"DBD6 D6DA 8883 5D84 FD59 1F83 88B1 88AC" $"8883 8988 88B0 B0D6 D6B5 D7B5 C888 8884" $"58B0 C8C8 9AA9 CACA D6D1 D0FE D10B DBB0" $"B5DB B5DB D1D1 B88F B8BD FFA3 05B5 B0DB" $"DBC8 C8F9 D113 A2E1 CAF4 E1F4 C19E C2C8" $"B7BD 8FBD CAF4 ECEC EAE5 FDD1 19DC B5E1" $"F4CF E3E8 D1BD 8FB8 B7B5 DBD1 D1CA FCEC" $"E7E7 EBBD B89E C1FD A306 B8BD DBB5 DEBD" $"B8FE BDFF D1FF E70A CFEF D6E8 B5B5 C199" $"CAE1 E801 5405 7EA8 B4AA C3AA FDA8 FF78" $"0E75 A5A3 A8A6 7C75 7B7B 753E 3E75 A67E" $"FEA8 FFA7 01A8 A7FD A813 A7AC D3AC D1AB" $"7C76 7575 4772 7C76 80D1 DFD6 E3D4 FDA8" $"FFA7 17AD D4B0 D1CF 7E7B 757B 7CA7 A7A8" $"A8A9 D1D9 D4D7 D3A7 7676 7BFD 3E1D 76A7" $"76A7 7C7C 7177 927D A8A7 A9AD D2AB C1A8" $"A17C 7972 A8AD AC80 AABA B0C8 FCB0 008A" $"0F8A 83B1 ABB0 B088 8388 8883 5959 83B2" $"87FE B0FF B101 B0AF FCB0 12B6 D6AF D7B1" $"8882 8383 5D84 8882 87D7 E5DC E4D6 FDB0" $"FFB1 17AF D6B5 D7D7 8788 8388 89B1 B1B0" $"B0AF D7DB D6DB D7B1 8283 88FD 591E 82B0" $"82B0 8787 848A 9C87 B0AF B1B5 D6AF C8B0" $"AC88 8983 B0B5 B089 B2D3 CAE1 CAFD D1FF" $"C809 BAE4 CCD1 E3BD B8BD BDB8 FFA3 02B7" $"E2AA FED1 FFDB 01D1 D0FD D113 DCE1 E4BE" $"EFCA B3AE B8B8 9EC1 B5B0 A2EF FCF4 ECDE" $"FDD1 FFDB 17BF E5CF EFF6 AABD B8BD BEDB" $"DBD1 D1C9 EFE3 DEEC E8DA AEB9 BDFD A318" $"ACD8 B1DC B6B6 C2C8 C8B5 D1D0 D2D6 E7C1" $"E8D1 D6B5 C4BF D3D8 C001 5001 A8A9 FDAA" $"FDA8 1078 727B 7BA8 7EA6 7C7C 7575 7B3E" $"3E7B 7BA3 FEA8 04A7 7CA8 A8A7 FEA8 137C" $"CFC4 D8AA D776 767B 7B72 7876 76AA D1D6" $"D6E2 D9FD A819 A77C ADD4 D6C3 D4A8 757B" $"7575 7CA6 A8A8 AAD6 D4D4 D7D2 7C76 7B75" $"FD3E 0977 7CA7 7CA1 7677 7677 7DFE A80D" $"CFAB D2AD A87C 7641 79A8 C1C4 AAAB F9B0" $"008A 0F84 8989 B087 B088 8983 8388 5959" $"8989 ABFE B004 B188 B0B0 AFFE B013 87D7" $"C8DB B0DC 8282 8888 8489 8282 B0D7 DCDC" $"E3DB FDB0 0CB1 88AF D6DC C8DB B083 8883" $"8388 FDB0 08DC D6D6 DBD6 8882 8883 FD59" $"0982 87B0 87AB 828A 8982 87FE B00D D7AE" $"D6B5 B088 8257 89B0 C8C7 B2B3 FDCA FDD1" $"0BC8 C2BF BFD1 AAE3 BDBE B8B8 BDFF A3FF" $"BC00 CCFE D104 DBB5 D1D1 D0FE D113 B6FB" $"D6E9 CAF5 AEAE BDBD C1C6 B0B0 CAEF F4F4" $"EBE3 FDD1 19DB B5BF E5F4 E1FA D1B8 BDB8" $"B8B5 DBD1 D1CA F4DE DEEC E7B3 AEBD B8FD" $"A309 ADB2 DCB6 D7B1 C8C7 B0B5 FED1 0BF6" $"C0E7 D6D1 B5B0 97C4 D3EA D701 5F02 A99A" $"A5FE AA37 7CA8 79A4 7675 7EB2 A7A7 A894" $"7247 7575 3E3E 76A7 A57B C3AA 7DA2 A87D" $"A77C A67C A3AD D1B0 D4C5 7847 7272 7677" $"4878 A8D4 D4E3 D8C4 79A4 7CA7 FEAA 16D6" $"D2D7 C17E 7544 7C75 7CA7 A77C ABE1 D6D6" $"C4D7 7278 447B FD3E 1B75 7B93 7E7B 7B74" $"757B 75A8 A8D1 B0D1 B0C1 A874 7B75 76A8" $"ADA8 A99A ABFE B004 88B2 89B2 8232 8187" $"BAB1 B1B0 9C84 5D83 8359 5982 B1B1 88C8" $"B087 ABB0 87B1 88B1 88AB B5D7 B5D5 C789" $"5D84 8482 835E 89B0 DBD6 E4DB C889 B288" $"B1FE B016 DCD6 DBC9 8783 5689 8388 B1B1" $"88AF E4DC DCC8 DB84 8956 89FD 5925 8388" $"9B87 8888 8283 8883 B0B0 D7B5 D7B5 C8B0" $"8288 8383 B0B5 B0A8 98C4 CAD1 D1B5 DCBD" $"E3B0 AFAA FEDB 05D1 BFC1 9EB8 B8FF A325" $"AEDA E3BD E1CA B5D6 DBB5 DBB5 DAB3 CED8" $"EFCF E7D9 C69E C1C1 AEAF 9FC6 D1FB DEEC" $"E9D6 BDE3 B5DB FECA 0DF4 E7EC E8AA B88F" $"BEB8 B5DB DAB3 C1FE F405 D9EC C1C6 8FBC" $"FDA3 18B8 BDBE AABD BDB7 B8BD B8D1 D1EF" $"CFEF CFE8 D1B7 BDB8 B9D1 D6D3 015D 01A9" $"9AFD AA51 7CA1 A579 767C 79A8 7CA7 A87E" $"7872 7B7B 3E3E 7CA7 7BA5 AAA9 7CA8 7DA2" $"7CA1 A6A6 7EC1 D6C3 B2D4 7272 7847 7C76" $"7272 7ECF D9E3 D8D3 A479 A27B 95AA AAD1" $"D7C4 D5A8 7B75 767B A776 A7A7 ABD2 C3D6" $"ABD2 4772 7575 FD3E 1A75 7BA8 A890 7A7B" $"7B76 7BA8 A8AA C3AA C3A8 7E7B 757B 44A9" $"C2A8 A99A FDB0 0488 ACB3 8982 4C88 82B0" $"88B1 B087 8984 8888 5959 88B1 88B1 B0AF" $"86B0 87AB 88AC B1B1 87C8 DCC8 B4D5 8484" $"895D 8882 8484 87D7 DBE4 DBD6 B289 AD87" $"9BB0 B0D7 DBC8 DCB0 8883 8388 B182 B1B1" $"AFD6 C8DC AFD5 5D84 8383 FD59 0983 88B0" $"B09D 8788 8883 88FE B021 C8B0 C8B0 8788" $"8388 56B1 C9B0 A898 CACA D1D1 B5D6 E4BD" $"B0B5 A6D1 B5DB D1AA C6C1 BDBD FFA3 3FB3" $"DABD E3CA C9B4 DBB5 D6B5 D6DA DAAC EAF4" $"E1C6 E7C1 C1C6 9EB3 AEC1 C1AA F6E3 ECE9" $"E4E3 BDD7 B4B6 CACA EFEC D9FA D1BD B8B9" $"BDDB B0DA DAC1 E7E1 F4C1 E69E C1B7 B7FD" $"A318 B8BD D1D1 D0BC BDBD B9BD D1D1 CAE1" $"CAE1 D1AA BDB8 BD8F D2E9 D301 6158 B57C" $"96AB A877 A57A A775 7B75 7CA7 B17C A8A8" $"757B 4475 7241 7C76 A7A6 A776 A878 A5A5" $"7CA7 7C76 A8C1 AAD6 C3D6 4178 7575 7247" $"7C76 A8D5 D4D9 D2D7 76A7 A57B A57B C5D8" $"ABD7 D180 757B 7B75 7BA5 747B ABD7 B1D2" $"CFD4 7676 7B7B 3DFE 3E09 75A5 7B7B 7CA1" $"7C92 7B75 FEA7 16A8 D4A8 A77C 767C 4172" $"A8D5 A8B9 809A AFB0 80B1 87B1 8188 4D83" $"88B1 BB88 B0B0 8388 5683 8458 8882 B1B0" $"B182 B081 B0B1 88B1 8883 B0C8 B0DC C8DC" $"588A 8383 845D 8882 B0DC D6DB D6DA 82B1" $"B188 B188 C8DC B0DC D787 8388 8883 88B1" $"8288 AFDB B5D6 D7DB 8282 8888 58FE 5901" $"83B1 FE88 29AC 889C 8883 B1B1 AFB0 DBB0" $"B188 8288 5884 B0DC B0CA 93AD C1D1 A4E3" $"BCDA ADBD B8B3 DAE4 B5D1 D1B8 BD8F B841" $"C29B B3AE DBDB DAAE D1A5 E2E3 B5DB B3AE" $"D1E8 CAF4 E1F4 9BC8 B8B8 C19E B5B0 D1FC" $"DEE3 E5E9 B0DB E3BD E3BD D8EB C1EC EFA2" $"B8BD BDB8 BDE3 B7BD C8F2 C6E7 F6FB AEAE" $"BDBD FDA3 18B8 E3BD BDB5 D6B5 C8BD B8DB" $"DBD2 D3FB D1DA B3B0 B599 C1D1 FAD1 0160" $"67B5 7CA6 ABA8 A87B A575 7C75 7B76 A77C" $"A7A8 787C 7575 7B41 4176 A77B A7A7 7C78" $"A87B 7B77 A776 A67E A8D6 C3B0 C378 724A" $"7578 7276 767E C1D4 D4D7 C47C A77B 75A5" $"7BC4 D7D2 D2D1 7A7B 7544 A57C A57C A5AB" $"C4D2 D2AD A876 7C75 753E 3D3D 3E45 7B7B" $"A07C A676 7C75 7B7C A7FE A801 A9A8 FE76" $"0141 78FE A80A B980 AAAF B0B0 88B1 8188" $"8336 8882 B188 B1B0 8189 8383 8858 5882" $"B187 B1B1 8881 B088 8883 B183 B187 B0DC" $"C8B5 C88A 845B 8389 8482 8287 C8D6 D6DB" $"C788 B188 83B1 88C7 DBFE D722 8188 8356" $"B189 B189 B1AF C7D5 D6B5 B082 8883 8359" $"5858 5957 8888 AC88 B082 8883 8888 B1FE" $"B001 B1B2 FE82 0158 89FE B015 CA93 BCC1" $"D1D1 BDE3 ADB3 B8BD AEDA B5DB D1A5 BEB8" $"B8BD FF9B 3FAE DAB4 DBDA B3A5 D1BD BDB1" $"DBAE DAAA D1F4 E1CF E1C8 C294 B8C6 C1B0" $"B0AA E8DE DEEA D7B5 DBBD B8E3 BDD7 EAE7" $"E7EF 9DBD B88F E3BE E3BE E3C8 DFE6 E7D6" $"D1AE B3B8 B8FD A315 90BD BDDE B5DB B0B5" $"B8BD B5DB D3D3 D1D2 DBAE B0B0 99C6 FED1" $"0161 7FA9 897A AAA7 757C 767B 757B 757A" $"A4A8 A8A7 7C75 7B7B 7541 41A7 7BAA A5A6" $"7C78 7893 A87B 7AA5 7BA5 D6AA D1D2 D875" $"7B75 7B75 7B47 787E CFB0 D6D2 C47C 7679" $"A475 7BD4 D9AA D6AB 7B76 7D78 72A8 787B" $"907F D4A8 D5C4 AB79 4178 413E 3E3C 3B76" $"A7A3 7EA8 A87C 7C7D 92A7 7CA8 A8C3 AAA5" $"7B41 7841 71AA AAD0 A989 80AF B181 8882" $"8883 887F 838A B2B0 B0B1 8883 8888 8358" $"58B1 87AF AAB1 888A 8A9B B088 87B1 89AB" $"DCB0 D7D6 DC83 8883 8883 885D 8987 D7B5" $"DCD6 C788 8289 B283 88D6 DBB0 DCB7 8982" $"898A 84B0 8188 9D88 DBB0 DCC8 AF89 578A" $"5859 595A 5982 B1AB 87B0 B088 8887 9CB1" $"88B0 B0C8 B0B1 8858 8A58 83B0 B0D7 A887" $"9DCA DAAD B5B0 BDB8 BDB8 BEE3 D1D1 DAB3" $"B8BD BDB8 FF9B 3FDA B3CA C5DA B3C8 C8BE" $"D1BD BCE4 BFC4 F4CA EFE7 ECB8 BDB8 BDB8" $"BD9E C6AA F6CF F4E5 D7B5 B0BD E3B8 BDDE" $"E3CA F4E9 BFB0 B6C6 C1D1 A5BD D0AB FBD1" $"FCD9 C1C4 97C8 9BFD A305 AEDA CCAA D1D1" $"FEB5 0FC8 DBB5 D1D1 E1CA E3BD 9BC8 99C0" $"CACA F701 6147 A99A 95AA 7BA7 76A7 757B" $"7544 7379 A37E A7A7 757B 757B 7872 A7A7" $"AAAA A676 7278 7E78 A575 757B 80D1 D1B0" $"C4AB 7B74 7B75 7B75 7272 78D4 C3D1 D7D7" $"7CA1 7973 A57B D5D4 D6C4 CD7B 7676 FE78" $"11A8 7B7B A8C1 D5A8 D2AB 7972 7872 3E3E" $"3C3C 46FE A81F 78A8 A792 A87D A776 C1AD" $"AAAA 7B75 4172 7878 AAD0 ADA9 9A9B AF87" $"B182 B183 8883 7F56 8389 AB87 B1B1 8388" $"8388 8A84 B1B1 AFAF B183 848A 8781 B183" $"8389 87D7 D7B5 C8AF 8882 8883 8883 8484" $"81DB C8D7 DBDB 88AC 8983 B188 D7D6 DCC9" $"D589 8282 8A8A 81B0 8888 B0C8 DCB0 D6AF" $"8983 8A84 5959 5A5A 54B2 B0B0 81B0 B19C" $"B087 B182 C8B5 B0B0 8883 5884 8989 B0D6" $"B5A8 98B7 CAB3 DAB0 DBB8 BDB8 8FB8 BDCC" $"AADA DAB8 BDB8 BD41 C8C2 DADA CACA DAAE" $"C2C8 AAA5 E3B8 BABF A2EF EFCF D9C1 BDB7" $"BDB8 BDB8 C1C1 A5FB E1EF EAEA B5D6 BDB8" $"E3BD DFDE F4E2 FBBF B0B0 C6C6 A5D1 BDBD" $"D1E8 FCD1 E7C1 C4BF C8C2 FDA3 1885 DBD1" $"D1A5 D1DB C8DB B5DB B0E8 D6CA CABD B89B" $"C2C6 C6CA EED6 015C 57A9 9A78 A8A5 7578" $"787C 7672 7876 A77C A2A7 A77C 767D 767B" $"757B A57E A878 4076 A776 7C72 787C 76A7" $"C0B1 C4D6 D690 7B7C 7B76 447B 757B A5CF" $"ADC4 C4A7 7C91 7C7C 77D6 D6C4 D6C0 7879" $"A47C 927B 75A7 757C C0AA D6A8 A872 7875" $"7BFD 3E0B 4178 7BA7 A8A8 A57B 7E78 7BA5" $"FDA8 137B 4477 3E44 75AA D6C4 A99A 81B0" $"B183 8989 8882 844C 8982 B188 ADB1 B188" $"8289 8288 8388 B187 B08A 5882 B182 8884" $"8A88 82B1 C9B5 C8DC DC9D 8889 8883 5689" $"8388 B1D7 B5C7 C7B1 889C 8886 81DC DCC9" $"DCC7 8189 B288 9C88 83B1 8188 C9B0 DBB0" $"B084 8983 88FD 590B 5889 87B1 B0B0 B188" $"8781 88B1 FDB0 1E88 568A 5956 83B0 DCC7" $"A99A A5D1 E3B8 C9C9 B3AE C1C6 AEDA B5D7" $"DADA B5B0 B4AE 41BD B8BD E3AA D1C6 99B0" $"DBB0 B5C2 C8B5 B0DB F2C6 D9F4 F4D0 BDBE" $"BDB9 8FBF BABD E3F8 D8D7 D7DB B5D0 BDB3" $"AEF4 F4E2 F4E8 A5BD E3B5 C8BD B8DB AFB5" $"F2CA F3D1 D1C1 C6B8 BDFD A30B 99C6 B4DB" $"D1D1 E3BD AAA5 BDE3 FDD1 08BD 8FCF A38F" $"B8CA F4D7 0161 2DA9 9A78 A87B 7B78 7276" $"7647 727C 76A7 7CA7 7BA1 7CA7 767B 75A5" $"7BA3 A878 727C 767B 9178 7892 7C7C ACC4" $"D2AA C37B 7BFE 7536 7C75 7B44 A5AD CFAB" $"D7A7 767C 7C77 A8D1 AAD6 AAA8 7D79 7375" $"7C7B 757C 76A7 ACD1 AAA8 A878 417B 753E" $"3D3E 3E41 72A7 76A8 A8A5 7B93 A87B A5FE" $"A814 7875 753E 3D45 75AA C3AB A99A 81B0" $"8888 8984 8282 5D22 8488 82B1 88B1 87AC" $"88B1 8288 83B1 88AB B08A 8488 8287 9C8A" $"8A9C 8888 B6C8 D6B0 C888 88FE 831F 8983" $"8956 B0B5 D7AF DBB1 8288 8881 B1D7 B0DC" $"B0B0 8689 8381 8888 8388 82B1 B6D7 FEB0" $"1389 5888 8359 5859 5958 84B1 82B0 B0B1" $"889B B088 B1FE B01F 8183 8359 5857 83B0" $"C8AF A99A A5D1 BDBD C9C4 AEAE 9EC1 B3AE" $"DBB5 DAB3 D6B5 DAAE 0BBD B8E3 BDCC D1C6" $"C1B5 B0B4 C7FE C8FF B506 E0D9 E7CA E1BD" $"BDFE B826 BEBA BF8F E2D8 F8BF EADB B0BD" $"BDAE DBEF CAF4 CAD1 A9BD B8AF B5BD B8B5" $"B0DB E0EF CAD1 D1C6 99BD B8FD A30B 99C1" $"DBB0 D1D1 E3BD BED1 BDE3 FED1 09A5 B8B8" $"A3A3 90B8 CAE1 BF01 540E 9AA9 767C A378" $"A575 7B7B 7179 777D 7CFD A718 7C76 7C7C" $"A778 A87B A540 3E75 7B78 78AA AAA8 A8AB" $"C4A7 ACD1 B0FE AA1A A97B 7578 727B 75C4" $"ABD4 A8C4 AB7C 76AA D1AD CFC4 D77B 7575" $"7B7B 75FD A8FF AAFF A80D AAC4 7CA7 767C" $"7241 3E3E 4173 7B7B FDA8 1B7C 7BA5 ABA8" $"A87B 7B3E 3D3F 7243 3EA8 ADC1 9AA9 8288" $"AB81 B183 8888 8203 8981 8788 FDB1 0E88" $"8288 88B1 81B0 88B1 5A59 8388 8A8A FDB0" $"05AF C8B1 B6D7 B5FE B01A AF88 8389 8488" $"83C8 AFDB B0C8 AF88 82B0 D7B5 D6C8 DB88" $"8383 8988 83F8 B00C C988 B182 8884 5859" $"5958 8588 88FD B026 8988 ABB1 B0B0 8888" $"5958 5784 5D59 B0B5 C89A A9AE B3CC A4E3" $"B8BD BDBE C4AE B3B5 DBDA DADB B5AE B315" $"B5DB A5D1 BDE3 A4A3 B8BD C8C8 CACA D1D1" $"C1D9 DADF EFCF FECA 1AC9 BDB8 C6C1 BDB8" $"D9C1 FBD1 D9C1 B5B0 CAEF D6F5 D9EC BDB8" $"BABF BDB8 FDD1 FFCA FFD1 0DCA E2B3 DAB0" $"B5C1 99A3 A399 C2BD BDFD D110 BEBD C4CA" $"D1D1 BDBD A3A3 9AC2 A7A3 D1D6 E801 5711" $"A99A 76A7 7EA8 7B7B 75A5 7147 7777 7CA1" $"7C76 FDA7 33A1 7C7E A37B 763E 3E7B 7572" $"78B4 AAA8 A8AB C4D4 A7AA C3AA C3AA C3AB" $"7572 4775 7BAB C4A8 D4AB C4CE ACC3 B0C1" $"ADC4 AB75 7B7B 757B A6FE A806 A9AA C3A8" $"A8AA AAFD A707 7841 3E40 4141 75A5 FDA8" $"FFA5 FFAA FFA8 FF75 133E 7741 4171 3EA8" $"C2AD A99A 82B1 87B0 8888 83B1 8206 5C81" $"8188 AC88 82FD B10C AC88 87AB 8883 5959" $"8883 848A BAFE B023 AFC8 DBB1 B0C8 B0C8" $"B0C8 B683 845D 8388 AFC8 B0DB AFC8 D7B6" $"C8B5 C8B5 C8AF 8388 8983 88B2 FEB0 02B1" $"B0C8 FDB0 FDB1 0789 5859 5A58 5883 B1FD" $"B0FF B1FD B0FF 831E 598A 5858 8559 B0C9" $"B5A9 9AAE DAAA D1BD BDB8 E3BE 9CAE AEB5" $"D6B3 AEDB DBDA DA33 D6B5 AACC BDB9 A3A3" $"BDB8 C2C8 D3CA D1D1 C1D9 FCDA CAE1 CAE1" $"CAE1 E8B8 C19E B8BD C1D9 D1FB C1D9 FBE0" $"E1CF E8D6 D9C1 B8BD BFBA BDE4 FED1 12D2" $"CAE1 D1D1 CACA DADA DBDB C699 A3A4 9999" $"B8E3 FDD1 FFE3 FFCA FFD1 FFB8 08A3 CF9B" $"9BCA A3D1 E9D6 014A 4D7E A895 8091 7B76" $"A87B 7B7D 7772 7875 7BA8 A8A7 7CA7 A7A8" $"A872 78A3 4174 4375 7B76 7CA8 A8AA C3A8" $"A8AA AAC0 ADC1 A8B0 C3A7 7C7C 7672 727B" $"ABC4 ABC0 ACAA D1AB D2C3 C3A5 7B7C 767B" $"7572 78AB C4A7 C0F7 A801 7841 FD3E 2141" $"72A8 A8A7 A7A8 A87C A77C A777 3F41 413F" $"3F3E 3EA8 A8C4 80AA 9B87 9C88 82B2 8888" $"8716 8284 8983 88B0 B0B1 88B1 B1B0 B084" $"89B2 5883 5783 8882 88FE B000 C8FD B023" $"C8B5 C8B0 B5C8 B188 8882 8484 88B6 C7AF" $"C9B6 B0D7 AFD6 C8C8 B189 8882 8883 8489" $"AFC8 B1C9 F7B0 3289 5859 595A 5A58 84B0" $"B0B1 B1B0 B088 B188 B18B 5A58 585A 5A59" $"59B0 B0C7 89B2 B6A2 C8B5 B0DC BDBD B5B0" $"C1C6 B8BD D1D1 DBB5 DADA FFDB 35C1 C6ED" $"9BC1 99B8 BDAE B3D1 D1CA E1D3 D3CA CAE9" $"D8E8 D1CF E1DA B3B5 B0C1 C1BD E8D7 BFF2" $"E0CA EFC1 E7E1 E1E4 BFB3 AEBD B8C1 C6C1" $"D9D1 E8F7 D115 C699 A3A3 A5A5 9BC2 D1D1" $"DBDB D1D1 B5DB B3DA CFA3 9999 FDA3 FFD1" $"00D7 0149 1699 A895 AA7B 75A7 7CA0 7B77" $"7747 7275 7B93 7E7C A17C A77D FE78 FF41" $"FF43 0274 7B76 FEA8 FFAA FFA8 25AA C4AD" $"C1A8 ADC4 AAA7 7676 7547 7875 75AB C5AC" $"A7C3 B0D2 ABB0 AA7B 7576 767B 7578 78C4" $"ABA8 ADF7 A802 7241 40FE 3E07 4178 A8A8" $"A77C A8A8 FEA7 1676 3F3F 7241 3F3F 403E" $"A8A8 AB9A AA9B B088 82B1 88AC 8882 1682" $"5D84 8388 9B87 88AC 88B1 8782 8989 5858" $"5757 8288 82B2 FAB0 24C9 B5C8 B0B5 C9B0" $"B182 8281 5D89 8383 AFC8 B6B1 C8B5 D6AF" $"B5B0 8983 8282 8883 8989 C8AF B1B6 F7B0" $"0D84 585A 595A 5A58 8AB0 B0B1 88B0 B0FE" $"B104 825A 5A84 58FE 5A19 59B0 B0AF A3B2" $"B6CA B5B0 DBB5 DEBD B0B0 9EC1 B8BD BEAA" $"B5D6 B3DA 37B5 B1C6 C69B 9B99 99B7 BDAE" $"DBD1 D1CA CAD3 D3CA E2D8 EAD1 D6E2 CADA" $"AEB0 AF9E C6B8 B8BF D8E0 DBE1 CFE7 C1CF" $"CABF BAAE AEBD B8C6 C6D9 C1D2 D6F7 D11C" $"C199 A4A3 A5A5 9BC8 D1D1 DBB5 D1D1 DBDB" $"DAAE A3A3 C199 A3A3 A4A3 D1D1 BF01 5021" $"997E A77C 78A8 7B75 7CA7 7278 7278 7B75" $"7B7B A3A9 A792 A57B 7575 3E3E 3B3C 7972" $"7B75 FEA7 02A6 A4A5 FDA7 1FA8 C1A5 A5A7" $"7C47 727B 757C 7B7A A5A7 C0A8 A8A7 A7A5" $"7B76 7C7B 7B75 7B75 75A7 ACF7 A729 7BA5" $"7141 403D 3E3D 7278 757B A8A2 A57B A17C" $"A442 3E3E 3C3C 4172 3D3E 7CA7 A89A 80B1" $"8881 B088 8388 B184 0E89 8489 8883 8989" $"ABB1 B19C B188 8383 FE59 045A 8B84 8883" $"FEB1 02B0 B2B3 FDB1 01B0 C8FE B10C 885D" $"8488 8389 8887 B1B1 C9B0 B0FE B10A 8882" $"8889 8983 8883 83B1 B6F7 B134 88B1 8358" $"5A58 5958 848A 8388 B0AA B188 AC88 B256" $"5959 5A5A 5884 5859 87B0 B0A3 89DB B5A5" $"D1BD B8B3 DAC1 C6C1 C6BD B8BC BCCC D2DB" $"C803 E3BD B8B8 FDA3 3CC8 C2BD B8DB DBDA" $"D9E3 E4DA DADB DBD1 E8E3 E3DA B39E C1BD" $"B8BE BDBC E3DB F2DA DADB DBE3 BDB0 B5BC" $"BCB8 BDB8 B8DB E0DA DADB DBDA DADB DBDA" $"DABD E3C0 99A4 FEA3 0BC2 C8B8 BDD1 CBE3" $"BDD6 B5E3 8FFD A306 9BC2 A3A3 B6DC D101" $"5E16 8988 76A7 7878 7C75 7677 4772 783F" $"757B 7575 7E78 7C7C 75FE 441B 3E40 3C3C" $"4179 757B 767C 767C 7979 767C 767C 787E" $"7B7B 7675 7871 7544 FE75 207B 7D7C A87D" $"A77C 767C 7676 7575 7B75 7B7B 7676 7B75" $"7C76 7C76 7C76 4676 7544 4141 FD3E 213F" $"7874 7A78 7E75 7B7C 7673 423E 3D3C 3C41" $"413E 3EA7 A7A8 8A89 82B1 8181 8983 8283" $"5D0B 8489 5783 8883 8387 8188 8883 FE56" $"0059 FE5A 1758 8B83 8882 8882 8889 8982" $"8882 8881 8788 8882 8189 8383 56FE 8320" $"8889 88B0 87B1 8883 8982 8283 8388 8388" $"8882 8287 8188 8288 8288 8254 8283 5658" $"58FD 5913 578A 8287 8187 8388 8882 8356" $"5958 5A5A 5858 5959 FEB0 1593 92B0 DBA5" $"A5BE B8AE AF9E C1C6 98B8 BDB7 B7AA A5B5" $"B500 B8FE 8F1B A3A4 A3A3 9BC8 B8BD B0B5" $"AEB3 BDBD AEB3 B0B5 A5AA BDBD AEAD C6C0" $"B88F FEB8 20BD B6B5 DAB3 DBB5 B9BE B0B0" $"B7B7 BDB8 BDBD B0B0 B3AD B5B0 B3AE B5B0" $"85AE B88F 9999 FDA3 0B9A C8B7 BCA4 AAB8" $"BDB5 B0B8 8FFD A3FF 9BFF A3FF DC00 D101" $"4C17 7E89 7AAA 7542 7278 7378 767C 7373" $"7841 757B 7278 7575 7841 FB3E FF75 1878" $"417C 7578 7275 7678 7278 7279 7475 7C72" $"7875 7B79 7875 7B4A FE75 FF73 1972 7175" $"757B 7B74 7A75 7B76 767B 757B 7572 7872" $"7872 7875 7A7C 76FD 3EFF 3C0F 7C75 7973" $"7878 A17C 757B 3E40 3D3E 3D3C FD3E 0D7C" $"A7A8 808A 81B0 8B5F 8489 8589 820C 8883" $"838A 5883 8884 8A83 838A 58FB 59FF 8318" $"8958 8983 8984 8182 8A84 8984 8984 8389" $"8489 8388 8A89 8388 5BFC 8300 84FE 83FF" $"8813 8389 8388 8282 8883 8883 848A 8489" $"8489 8387 8882 FD59 FF5A 0F89 8389 838A" $"8AAC 8883 8859 5A58 595B 5AFD 5918 88B1" $"B089 939D CACF A8C1 C6C2 C6B0 B5B8 B8C8" $"9BB8 BDC2 C8B8 B801 C89B FBA3 FFB8 18C6" $"99BE B8C6 C1AF B0C8 C2C6 C1BD B9B8 BEC1" $"C6B8 BDC7 C6B8 BD94 FCB8 19C1 C0BA BABD" $"BDC1 C6B8 BDAE AEBD B8BD B8C2 C8C1 C6C1" $"C6B8 BCB5 B0FB A30E BEB8 BDB8 C8C8 D6B5" $"B8BD A3A4 A3A3 A4FC A302 B5DB D101 47FF" $"8915 95AA 756F 7147 7247 7676 4672 7872" $"7B75 4278 447B 7241 FB3E 1875 4A72 7975" $"4472 4776 7C41 7872 4773 427B 7541 7844" $"7541 727B FE75 FF7B 1B48 7378 477B 7B76" $"7543 7A75 4476 7C75 7B75 4478 3F78 4172" $"4775 7B76 76FD 3EFF 3C09 7B75 7873 7872" $"7C76 7A75 FD3E FF3C FD3E FFA7 0BA8 8A8A" $"9BB0 8B85 835D 845D 820C 825B 828A 8488" $"8359 8A56 8884 58FB 5918 835B 848A 8356" $"845D 8288 588A 845D 8356 8883 5889 5683" $"5884 88FE 83FF 881B 5C83 895D 8989 8383" $"5789 8356 8288 8388 8356 8A57 8958 845D" $"8388 8282 FD59 FF5A 0988 8388 838A 8488" $"8287 83FD 59FF 5AFD 59FF B116 B093 93B6" $"CACF CAC0 9EC1 9EB0 B093 B7C8 C2BD B89C" $"C88F BD01 C29B FBA3 18B8 94C1 C7B8 8FC1" $"9EB0 B59B C8C1 9EB8 8FBD B899 C68F B899" $"C1BD FEB8 FFBD 1B94 B8C6 9EBF BFB9 B899" $"C6B8 8FAE B3B8 BDB8 8FC8 9AC6 99C1 9EB8" $"BDB0 B0FB A309 BDB8 BCB8 C8C2 B5B0 BCB8" $"F7A3 FFDB 00D1 0143 FF8A 1577 A790 7B76" $"767B 7579 727C 7647 7278 417D 7779 7278" $"41FB 3EFF 751D 7B75 7B7B 7677 7872 7575" $"7B75 7878 757B 777D 757B 7B75 4772 7941" $"7272 7379 FE75 0C44 7978 7C75 7776 7247" $"7544 7B7A FE75 167B 7676 7841 7841 3E3E" $"3C3C 4172 7B75 A57A 757B 757B 7544 F73E" $"0D7B A7A8 8A8A 82B1 9D88 8282 8883 8B0C" $"8488 825D 8489 5887 8289 838A 58FB 59FF" $"831D 8883 8888 8283 8984 8383 8883 8A8A" $"8389 8389 8388 8883 5D84 8957 8484 8389" $"FE83 0C56 8B8A 8983 8A89 845D 8356 8887" $"FE83 1688 8282 8958 8A58 5959 5A5A 5884" $"8883 B187 8388 8388 8356 F759 1887 B1B0" $"8888 A7D3 D0BD B1B1 BDB8 C8C2 B3AE 9EC1" $"C699 B5B0 C4BF 01C8 9BFB A3FF B82D BDB8" $"BDBD AEAF C6C1 B8B8 BDB8 C8C8 BABF AFB4" $"B8BD BDB8 9EC1 C497 C1C1 B8BD BABA B88F" $"C8C8 BEB8 C8C7 C19E B88F BDBC FEB8 06BD" $"B0B0 C699 C89B FDA3 0B99 C1BD B8E3 BCB8" $"BDB8 BDB8 8FF7 A302 B4DB D101 45FF 9A15" $"76A7 7B7B 7C77 757B 4178 7676 7278 7278" $"7777 7247 723F FB3E 4948 7575 4475 757C" $"7648 727B 4475 7B72 4175 7B76 767B 7576" $"7B72 7872 7978 4773 7844 7B7C 7672 4175" $"7B3F 7178 727B 7675 757B 7B75 7B7C 7672" $"7872 783D 3E3C 3C41 7875 7B75 7B75 7B75" $"7B75 44F8 3E0E 3DA7 A7A8 9A9A 81B1 8888" $"8783 8388 580C 8A82 8284 8984 8982 8283" $"5C84 57FB 592C 5A83 8356 8383 8882 5E84" $"8856 8388 8458 8389 8282 8883 8388 8489" $"8389 895D 8388 5689 8983 8458 8388 5884" $"8984 88FE 83FF 8817 8388 8882 8489 848A" $"5859 5A5A 5889 8388 8388 8388 8388 8356" $"F859 1958 B1B1 B098 98A6 D3BD BDB6 B1B8" $"BD9B C8AE AEC1 C6C1 C6B0 B0BF 9C01 C29A" $"FBA3 3993 B8B8 8FB8 B8B3 AE9F C1BD 8FB8" $"BDC2 9BBA BFAE AEBD B8B9 BDC1 C6BF C4C6" $"9EB8 BC91 BFBE B9C2 9BB8 BD9B C2C6 C1BD" $"B9B8 B8BD BDB8 BDB5 B0C1 C6C2 C8FD A30B" $"99C6 B8BD B8BD B8BD B8BD B88F F7A3 FFDB" $"00D1 0145 FF8A 6396 ABA8 A872 4775 7A75" $"447E 787C 4673 7872 787C 7672 413D 3E3C" $"3C3E 3E75 757C 7B78 7841 7876 7C75 7B7A" $"447B 7578 4178 4775 4478 4175 744A 7574" $"7A75 757D 7672 7878 7278 7275 7B75 7478" $"7278 7844 754A 7441 784A 7573 403E 3D3F" $"3F7B 757B 757B 747C 7678 72F5 3E05 78A8" $"A88A 8A9B FEB0 0484 5D83 8783 5A56 8781" $"8855 858A 8489 8882 8458 5859 5A5A 5959" $"8383 8887 8A8A 5889 8288 8388 8756 8983" $"8A58 895D 8356 8958 8382 5B83 8389 8383" $"8982 8489 8A84 8984 8389 8382 8A84 8989" $"5683 5B82 588A 5B83 8355 5958 5A5A 8883" $"8883 8882 8882 8984 F759 FF5A 1881 B0B0" $"8A8A AEC3 D1D1 C19E B8BC B88F AAA5 B587" $"C3C8 C1C6 B5B0 01C1 99FB A3FF B837 BCBB" $"C8C8 99C6 B8BD B8BD BC8F BCB7 C89B C69E" $"B88F C699 B8B7 94B8 C1C6 B8B8 B6B0 C1C6" $"C8C2 C6C1 BABF B8B7 C8C2 C6C6 8FB8 94B7" $"9BC8 94B8 B88F FDA3 09BD B8BD B8BD B7B5" $"B0C6 C1F7 A3FE A5FF D101 4228 8A9A 96AB" $"79A8 7872 7B75 757B 7893 9276 7841 7247" $"7776 7841 3E3E 3C3C 3E3E 754A 7677 4172" $"7279 7645 7BFD 7538 7B72 7872 7275 7B78" $"727B 7B75 7549 7475 4A76 7647 7241 7872" $"4775 7B44 7B41 7841 7275 7B75 7578 7275" $"7579 733E 3E3F 3D75 7B75 7B74 7B92 7C78" $"3FF5 3EFE A80A 8A9A 9BB0 82B0 8984 8883" $"831D 8881 9B9C 828A 5884 5D83 8289 5859" $"595A 5A59 5983 5B82 8358 8484 8A82 5588" $"FD83 3889 848A 8484 8388 8984 8888 8383" $"5C83 835B 8282 5D84 588A 845D 8389 5688" $"588A 5884 8388 8383 8A84 8383 8983 5959" $"5A59 8388 8388 8288 9C88 8957 F759 FF5A" $"FEB0 158A 9AAE C3A6 D1C6 C1BD B8B8 BDA5" $"BEC8 B0C8 9BC1 9EB1 B001 C699 FBA3 0AB8" $"94B7 B89B C2C1 C7B8 8FBD FEB8 2BB7 BCC2" $"C8C1 C1B8 BDC6 C1BD BDB8 B89E C1B8 94B0" $"B09E C19B C8C1 9EBA BF8F BD9B C899 C1B8" $"BDB8 B8C8 C2B8 B8BD B8FE A30A A2B8 BDB8" $"BDB7 BDC8 B5C6 98F7 A3FF A5FE D101 4AFF" $"8A15 99AE AAAA A776 783F 7B76 7D98 9B9B" $"767C 7C76 783F 7841 FB3E 4772 7874 7A76" $"7C78 7278 7278 4078 7875 4478 7276 7B79" $"7276 7C43 7578 7875 7B72 7972 7775 7B75" $"757B 757B 757B 757D 7778 7872 7872 7972" $"7871 4774 483E 3E44 7C7A 75A5 7B75 7B78" $"7272 40F9 3EFF 3FFF 3E0D 7CA7 A88A 8A9A" $"AFB0 B0B1 8289 5788 0C83 809A 9999 8288" $"8882 8957 8A58 FB59 4784 8A83 8882 8889" $"848A 848A 588A 8A83 5689 8483 888A 8482" $"8855 8389 8983 8884 8A84 8983 8883 8388" $"8388 8388 8387 8289 8984 8A83 8984 8A83" $"5D83 5B59 5956 8988 83B1 8883 888A 8484" $"58FB 59FF 5AFD 5918 88B1 B08A 8AA3 B8CA" $"CADB B0C6 98BD B991 AB9A 9AAE B3B5 B0C6" $"9801 C89B FBA3 47C2 C8BF C4B0 B5C6 C1C8" $"C2C6 99C8 C8B8 8FC6 C1B9 BDC7 C1AE B38F" $"B8C6 C6B8 BDC1 C7C2 C7B8 BDB8 B8BD B8BD" $"B8BD B8B5 B0C6 C6C2 C8BF C4C2 C8C0 9EC1" $"9DA3 A38F BEBE BAE3 BDB8 BDC8 C2C1 99FB" $"A3FF A5FD A302 B5DB D101 4E10 688A 9AA8" $"A5AA 7CA7 7277 757B 7D98 9BAB 77FE 7603" $"7872 7141 FB3E 4741 7874 4976 7641 7841" $"7872 7871 417B 7572 4775 4472 4776 767B" $"753F 717B 7547 7278 417B 757B 4475 7B44" $"7575 7B77 7672 4178 4179 4178 4178 727A" $"743E 3E75 767B 757B 757B 7578 7840 40F9" $"3EFF 3F0F 403E A7A7 A868 8A9B AAAB B088" $"B184 8883 0588 809A 99AA 83FE 8203 8984" $"8358 FB59 4758 8A83 5C82 8258 8958 8A84" $"8A83 5888 8384 5D83 5684 5D82 8288 8357" $"8388 835D 848A 5888 8388 5683 8856 8383" $"8882 8184 588A 5889 578A 5889 8489 8359" $"5983 8389 8388 8388 838A 8A58 58FB 59FF" $"5AFF 591A 5A59 B1B1 B068 8AA4 B2C4 CAB5" $"DBC1 C5B8 BD91 AB9A AAAF AEB0 B0C6 C101" $"C29B FBA3 479B C8BF 9CB0 B099 C69B C8C1" $"C6C2 9BBD B8C1 9EB8 8FC1 9EAE AEBD B898" $"C0BD B89E C1C8 9BBD B8BD 8FB8 BD8F B8B8" $"BDB0 AFC1 99C8 9BC4 97C8 9BC6 C1C6 C1A3" $"A3B8 B9BF BABD B8BD B8C8 C899 99FB A3FF" $"A5FF A304 A4A3 DBDB D101 4417 4878 78A8" $"ABA6 A37E 7C75 4772 7B7B 9A9A 967C 7841" $"7872 7841 FB3E 2F7B 7572 7872 787C 7675" $"757C 7672 7875 7B78 727A 7B75 7B3F 7872" $"787C 7641 7876 767B 7572 4775 7B7B 7572" $"787B 4478 417C 7BFE 7612 7C76 7572 7875" $"753E 3E7B 7B75 7A75 7A72 7877 76FB 3EFF" $"3FFB 3E0D 7EA8 A84A 7A81 B0AF AAAB 8788" $"815D 0284 8888 FE9A 0680 8A58 8984 8A58" $"FD59 FF5A 2F88 8384 8984 8A88 8283 8388" $"8284 8983 888A 8487 8883 8857 8984 8988" $"8258 8A82 8288 8384 5D83 8888 8384 8A88" $"568A 5889 88FE 8212 8882 8184 8A83 8359" $"5989 8983 8883 8784 8983 82FB 59FF 5AFB" $"5918 87B0 B055 83A5 D1BF BACC AAB3 AD9E" $"C1BD BD9A 9AAB 91C8 9BC6 C101 C89B FDA3" $"FFA5 45BD B8C1 C6C2 C8B3 AEB8 B8BD B8C1" $"C6B8 BDC8 C2BC BDB8 BD98 C6C1 C6B3 AE9B" $"C8AE AEBD B8C1 9EB8 BDBD B8C2 C8BD 8FC8" $"9BBE BDB0 B0B8 BDB0 AFC1 C6B8 B8A3 A3BC" $"BCB7 BCB8 BCC1 C6B1 B0F3 A302 AAD1 D301" $"4517 5467 78A8 ABA6 A8A8 A17C 7278 7574" $"9A9A A67C 7279 7247 7241 FC3E 463D 4475" $"4772 7841 7676 7B7B 4376 4773 7B75 4178" $"7575 7B75 7872 4772 7676 7872 767C 4475" $"7872 7B75 4475 7841 7575 7278 7576 767C" $"7C77 767D 783E 754A 3E77 7575 7B75 7C74" $"7878 7545 FB3E FF3F FB3E 0DA3 A8A8 5769" $"81B0 AFAA B0B0 AB88 840C 8983 829A 9AAA" $"8084 8B84 5D84 58FD 5947 5A59 5683 5D84" $"8A58 8282 8888 5482 5D85 8883 588A 8383" $"8883 8984 5D84 8282 8A84 8288 5683 8984" $"8883 5683 8A58 8383 848A 8383 8288 8883" $"8289 8A57 835B 598A 8383 8983 8982 8989" $"8154 FB59 FF5A FB59 18AB B0B0 6172 A5D1" $"BFBA D1D1 D5B3 C1C6 B8B7 9A9A BA91 C2C8" $"C19E 01C2 9BFD A347 A5A4 8FB8 9EC1 C89B" $"AEAE BDBD 8EB8 9EC2 BDB8 9BC8 B8B8 BDB8" $"C6C1 9EC1 AEAE C8C2 AEB3 8FB8 C6C1 BDB8" $"8FB8 C89B B8B8 C2C8 B8B9 B0B5 BDB9 B0B6" $"C698 B894 A3CF B7B7 BCB7 BEB7 C6C6 AF86" $"F3A3 02CC D1D3 013C 0445 5278 A878 FEA8" $"4DAA 8076 7647 727E 939A 9A7C 7576 7678" $"413F 3F4C 4C3E 3E72 7876 7C72 7878 4178" $"7275 7B77 7B41 7876 7645 7175 7B75 7579" $"7347 7874 7A47 7279 7278 7276 7C77 7875" $"7B78 7278 7247 783F 7841 7844 7B72 78FD" $"75FF 7805 767C 76A7 7373 F33E FF3C 0D7C" $"A7A8 4A56 81B0 81B0 A9AA B087 824A 825D" $"8487 9B9A 9A88 8182 828A 585A 5A51 5159" $"5984 8A82 8884 8989 5889 8483 8883 8758" $"8982 825E 8583 8883 8389 835D 8A83 895C" $"838A 848A 8482 8888 8983 8889 848A 845D" $"8957 8A58 8956 8884 89FD 83FF 8A05 8288" $"82B1 8383 F359 FF5A 1888 B1B0 5F6A A5D1" $"A5D1 BCBD CAA2 B0B0 9EC1 AABE 9A9A B5AF" $"AEAE 3FC8 9BA3 A367 67A3 A3C2 C8AE B3C1" $"C6C6 99C6 C1B8 BDB1 B499 C6B0 B0A8 CAB8" $"BDB8 B8BD B89F C8C1 C69C BFC7 C1C8 C2AE" $"B3C5 C6B8 BDC6 C1C8 C29E C69A C899 C68F" $"BDC1 C6FD B8FF C805 AEB3 B0DB B8B8 F1A3" $"02B5 DBD1 013C 5552 4560 7EA8 A8AD ADA5" $"B47C 7678 7278 78A9 9A92 7C7C 7672 413F" $"3FA1 A13E 3E41 7876 7647 7272 7872 4775" $"7B76 7678 727C 7677 7744 754A 7573 7973" $"7349 7472 7972 4772 4776 7772 417A 7541" $"7941 7872 7278 7272 7875 7541 78FD 7B07" $"7178 76A7 7C75 7942 F33E FF3C FFA7 0BA8" $"564A 6A87 B0B0 AFAF ABBA 884A 8289 8481" $"81A9 9A9C 8888 8284 585A 5AA5 A559 5958" $"8A82 825D 8484 8984 5D83 8882 8289 8488" $"828A 8A56 835B 8383 8985 855C 8383 8984" $"5D84 5D82 8384 5887 8358 8A58 8A84 848A" $"8484 8983 8358 89FD 8807 838A 82B1 8881" $"8956 F359 FF5A FFB1 16B0 6A5F 90AA D1D1" $"C1C1 C4D3 B5B0 C6C1 A5A5 A99A C8B5 B3AE" $"3FC2 9BA3 A3B7 B7A3 A39B C8AE AE9E C1C1" $"C6C1 9EB8 BDB0 B0C6 C1B5 B0CF CF8F B894" $"B8B8 BDC3 C39E C1BF C4C1 9EC2 9FAE AFC1" $"99BC B899 C79B C8C1 C1C8 C2C1 C6B8 B899" $"C6FD BD07 C2C8 AEDA B5AF BD8F F1A3 FFDB" $"00D1 013F 0F45 6440 78A8 78AB A6AB A6A8" $"7C72 787B 75FE 9A4E 7E78 4178 4145 6FAA" $"AA85 4A72 783F 7875 7578 717D 7772 7841" $"7876 764A 7572 7875 7B75 7B4A 7572 7875" $"7B74 757C 7675 7B72 4774 7B75 757B 757C" $"7672 7872 7875 7B72 787C 7676 7D75 757B" $"757B 7575 7B72 41F3 3EFF 3C0D 7BA6 A84B" $"694C 81B0 81AE AAAF AAB2 5688 8489 8883" $"9A9A 9B80 8A58 8A58 557C A4A4 8B52 8489" $"5789 8383 8A83 8781 8489 588A 8282 5B83" $"8489 8388 8388 5B83 8489 8388 8283 8882" $"8388 845D 8288 8383 8883 8882 848A 848A" $"8388 8489 8882 8187 8383 8883 8883 8389" $"8458 F359 FF5A 1886 B0B0 5D7A 75A5 D1A5" $"C0BC BFBA DCB5 C1C6 BDB8 9A9A A489 C89B" $"4BC8 9B87 AA7E 7EA7 71C1 C698 C6B8 B8C8" $"C2B3 AEC1 C69B C8B8 B894 B8C1 C6B8 BDB8" $"BD94 B8C1 C6B8 BDB7 B8B5 B0B8 BDC2 9FB7" $"BDBA BABD B8B5 B0C1 C6C2 C8B8 BDC1 C6B3" $"AEAF B5BA BABD B8BD B8B7 BCC1 99F1 A302" $"B5DB D101 4534 5345 727E 78A8 ABA6 ABA6" $"A6A7 7841 757B 9A9A 9999 7278 7241 4575" $"AAAA 9F4A 4772 7278 754A 7147 7777 4772" $"7278 457C 7576 7841 7B75 7BFE 7529 7841" $"757B 754A 7676 7B75 7872 757B 7548 757B" $"7676 4672 4178 4475 4772 7676 7DA3 7B7B" $"757A 757B 7B75 4141 FE3E 003D F73E FF3C" $"FFA7 0BA8 584B 7B87 81B0 AFAA AFAA B004" $"B189 5883 88FD 9A20 848A 8458 5582 A4A4" $"A552 5D84 8489 835B 835D 8181 5D84 848A" $"5588 8383 8958 8883 88FE 8329 8958 8388" $"835B 8282 8883 8A84 8388 835A 8388 8282" $"5D84 588A 5683 5D84 8282 87AC 8989 8387" $"8388 8983 5858 FE59 0058 F759 FF5A FEB0" $"1569 5DA0 AAA5 D1C1 BCBF BADB DBC6 99B8" $"BD9A 9AA3 A3C2 C81E C29B 87B0 7E7E BF71" $"9EC1 C1C6 B894 C29F AEAE 9EC1 C2C8 8FBD" $"B8B9 C699 BDB8 BDFE B829 C699 B8BD B894" $"B0B0 BDB8 C8C2 B8BD BA95 B8BD B0B0 9EC1" $"9BC8 8FB8 9EC1 AEAE B5D7 BFBF B8BC B8BD" $"BCB7 9999 F1A3 FFDC 00D1 0145 FF56 3D62" $"8078 A8A6 ACA6 ABA8 78A7 7679 737C 96AA" $"A47B 7979 3F3D 3EAB ABA5 8175 7579 7276" $"7C76 7678 7876 7B7B 7578 727B 7B41 7275" $"4A72 787B 7B41 7875 447B 757B 75FE 761C" $"7C77 7778 727B 4378 7875 7B76 767B 7578" $"727B 7BA5 A575 7B7C 7678 7271 3FF7 3EFF" $"3FFB 3E0D 7EB2 A856 5669 8781 B0AA B0AA" $"AFB0 3481 B182 8983 809A AAA4 8280 8B57" $"595A A3A3 A47F 8383 8983 8288 8383 8A8A" $"8388 8883 8984 8989 5884 835B 8489 8888" $"5889 8356 8883 8883 FE82 1C88 8181 8A84" $"8855 8A8A 8388 8282 8883 8984 8888 B1B1" $"8388 8882 8984 8458 F759 FF5A FF59 FF5A" $"FF59 1887 BAB0 5656 86A2 A5D1 BCC2 BABF" $"D1A5 DAAE BDB8 91AB A09B 9E9C 49C8 9AA4" $"A57E 7E9A 75B8 B8C4 BFB0 B5AE AEC8 C8B9" $"BDBD B8C6 C1BF BF99 C1B8 94C1 C6BD BD99" $"C6B8 8FBD B8BD B8AE AEB0 B5AE AEC8 C2BD" $"8FC8 C8B8 BDB0 B0BD B8C6 C1BD BDE3 E3B8" $"BDB5 B0C6 C1C2 9BF3 A3FF A5FF A302 AADB" $"D101 49FF 6853 637A 7878 ABA6 AC96 A8A8" $"A77C 7379 7C96 9AAA 957A 7241 3E3E ABAB" $"A57C 447B 7247 7675 7C76 4173 7B75 4375" $"7247 7575 7878 7575 783F 7575 7872 7B75" $"7B75 757B 767C 7676 7D77 3F78 7575 7241" $"7B75 7C76 7A75 7147 A5A5 FE7B 0675 76A8" $"7878 3F3F FA3E 043D 3E3E 3F3F FB3E FEA8" $"FF68 006A FE81 04AF AAB0 9AB0 4AB0 B188" $"8389 809A 9AAA 9B81 8458 5A5A A3A3 A47A" $"5688 835C 8281 8883 5885 8883 5583 845D" $"8383 8989 8383 8957 8383 8984 8883 8883" $"8388 8288 8282 8781 578A 8383 8458 8883" $"8882 8783 835D B1B1 FE88 0683 82B2 8989" $"5858 FA59 0A58 5959 5A5A 5959 5A5A 5959" $"FEB0 FF68 1387 9DA5 A5C1 BCC0 ABD1 D1DA" $"B3B8 BD91 AB91 A0B6 9D3F C29B A5A5 7E7E" $"9A6F 8FBD BF9C B0AF B3AE 9BC3 BDB8 8FB8" $"C19E BABA C6C6 B8B8 C698 B8B8 C6C1 BDB8" $"BDB8 B8BD AEB3 B0B0 B3AE 9AC8 B8B8 C29B" $"BDB8 B5B0 BCB8 C09E E3E3 FEBD 06B8 B0DC" $"C6C6 9B9B F3A3 FFA5 FFA3 FED1 0145 5D54" $"4878 787D 7773 79A8 7EA8 7EAA AA7E 787C" $"7C9B A5A9 7F75 443E 3E7D CEA8 8F75 757B" $"7578 7841 7875 7B41 7872 787C 7640 7876" $"7678 7275 7C41 7975 7A72 7978 7876 767B" $"754A 7575 7B76 7778 7872 7875 7B72 4772" $"477E A37E A3A7 A875 7B7C 7672 41FE 3E00" $"3DFC 3E00 40F7 3E0D 7CA7 AD57 4A81 8187" $"8283 89B0 87B0 5687 B0B0 8681 8888 99A3" $"A97F 8356 5959 79CB A48A 8383 8883 8989" $"5889 8388 5889 8489 8882 5889 8282 8A84" $"8389 588B 8387 8389 8181 8282 8883 5B83" $"8388 8283 8989 848A 8388 845D 845D 87AB" $"87AB B1B2 8388 8882 8458 5A5A 5958 FC59" $"005A F759 1888 B1AF 6155 A5A5 B5B0 B8BD" $"D1AA D1AA CACA A29D B5B5 919B A97F 49B8" $"8FA3 A364 BA87 6BB8 B8BD B8C9 C999 C6B8" $"BD99 C6C1 C6B3 AE9D C9B8 B8C8 C2B8 BE9B" $"C8B8 BCBF C4A5 A5B0 B0BD B894 B8B8 BDB0" $"B1C6 C6C2 C8B8 BDC1 9EC1 9EAC CEAA CCDB" $"DCB8 BDBD B8C1 99A5 A5FA A300 A4F7 A302" $"B3DA BF01 3760 6766 607E 7777 7973 A9A3" $"A8A3 AAA5 B2B2 7681 9BAB A4A9 7644 3E3E" $"83A7 A8A9 754A 757B 4072 7872 7B76 7872" $"7245 7676 7872 7D45 7841 7B75 7872 4475" $"4772 7878 7C76 757B 7575 7B75 767C 4172" $"4178 7544 7972 7278 A37E A8A8 7CA7 757B" $"767C 4141 3E3D 3DF0 3EFF A70B D469 686A" $"8782 8289 83B1 ABB0 55AB B0AB BABA 828D" $"99AA A4A9 8356 5959 7FA4 A4A5 835B 8388" $"5884 8984 8883 8984 845C 8282 8984 8855" $"8A58 8883 8A84 5683 5C83 8181 8882 8388" $"8383 8883 8288 5884 588A 8356 8A84 8489" $"AB87 B0B0 88B1 8388 8288 5858 5A59 58F0" $"59FF B116 D672 7190 AAB0 B0BD B8D2 CCD1" $"CCCA C4D3 D3B0 B991 A1A4 A949 B98F A3A3" $"6B91 8788 B894 B8BD 9DC4 C6C1 BDB9 C6C1" $"C19D AEAE C9C4 BE8F C89B BDB8 C8C2 8FB8" $"9CBF A5A5 B5B0 B8BD B8B8 BDB8 B0B5 99C1" $"9BC8 B88F C7C1 C1C6 CEAC D1D1 B5DB B8BD" $"B8BD 9999 A5A4 EFA3 FFDA 00E5 013B 1552" $"4440 797B 7578 9396 ABA8 A8A9 B8B8 A9B8" $"A9AB A5A9 99FD 3E34 4CA1 ADD4 7A7A 7871" $"7279 767C 4172 7379 7B75 7278 757B 4475" $"7B75 757B 7278 7C76 7A7A 787E 7676 4772" $"7B75 7778 7D77 7C7C 7278 757B 76FE 7CFE" $"A707 7CA8 9378 727B 753D F43E FF3F FD3E" $"FF3C 0DA8 C1D7 5649 4C82 8883 819B 9AAF" $"AA0A AAA9 B8B8 A9B9 AAA9 A3A9 9AFD 591F" $"51A5 A4CC 8181 8983 848A 8288 5884 8389" $"8883 8489 8388 5683 8883 8388 8489 8882" $"FE81 1187 8282 5D84 8883 8081 8782 8888" $"848A 8389 82FE 88FE B107 88B0 9B89 8488" $"8358 FA59 FF5A FD59 FF5A FD59 FF5A 18B0" $"C8DB 6A5E 75A6 BDB8 A5BE ABBF B2B2 A9B8" $"B8A9 BAAB A09B B2A3 FDA3 3767 B76A 959D" $"9DC6 C0C1 C7AE B39B C2B8 BDBD B8C1 C6B8" $"BD8F B8BD B8B8 BDC1 C6B3 AE9D 9DA5 AAB0" $"B09E C1BD B8A4 A5B5 B0BC BCC2 C8BA BFB8" $"BDB5 B5FE DB06 B5D1 BEC6 C1BD B8F9 A3FF" $"A5F7 A3FF A502 D1E8 EA01 430D 4552 7879" $"757B 787E 7C96 AEB7 B8A9 FDB8 FFAB 0299" $"7E77 FE3E 444C A1A7 AD94 7A41 7872 4776" $"7678 7842 7376 7B41 7844 757B 7575 7B44" $"7547 7276 7695 7A93 787C 7678 7275 7B77" $"7877 7776 7678 417B 7545 76A7 A07C A77C" $"A1A8 7D78 7775 443E 3E3D F63E FF3F FD3E" $"FF3C 0DA8 ADC5 4A56 8182 8388 8187 809A" $"AF0B B9B8 A9B8 B8B9 B9AA A99A 7E8A FE59" $"2B51 A59F A49A 8158 8984 5D82 828A 8A56" $"8383 8858 8956 8388 8383 8856 835D 8482" $"829B 819B 8188 8289 8483 8880 81FD 8214" $"8A58 8983 5582 B1AB 88B1 88AC B086 8988" $"8356 5959 58FC 59FF 5AFD 59FF 5AFD 59FF" $"5A18 B0B5 C85F 6AA5 A6B8 BDA5 AA91 ABB8" $"C1B8 A9B8 B8BA BAA1 A0A3 8800 CFFE A341" $"67B7 646A B59D 99C6 C19E AEAE C8C8 8FB8" $"B9BD 99C6 8FB8 BDB8 B8BD 8FB8 9EC1 AEAE" $"B69D BEA5 B5B0 C6C1 B8BD A4A5 B0B0 B7B7" $"C89B BFBA 8FB8 DBD6 B5DB B5D6 D1A9 C6C5" $"B88F F9A3 FFA5 F7A3 FFA5 02D1 D6D8 013C" $"FF54 083E 4C79 7376 767B 7676 FEA7 37A3" $"A8A6 ABA5 A575 7B72 413E 3E47 83D2 AB99" $"847C 7678 7281 9B9D 837B 7B41 7876 7C75" $"7B72 7778 727B 7B76 7681 9680 957B 7572" $"7875 437B 7576 76FE 7808 4776 7675 7B7C" $"A77B A5FE A806 7DA8 A890 443F 3FEF 3EFF" $"3F0F 757B AAD6 C457 574E 5A89 8382 8287" $"8282 FEB1 43AB B0AA AFAB AB83 8984 5859" $"5953 8CCB A49A 8588 8289 847F 9A9A 7F88" $"8858 8A82 8883 8884 8889 8488 8882 8286" $"9A86 9B88 8384 8983 5588 8382 8281 8189" $"5D82 8283 8888 B188 B1FE B004 87B0 B09D" $"56F9 59FF 5AF9 59FF 5AFF 591A 8388 B0DC" $"C761 6181 8BBD B8B0 B0B3 AEB0 DBDA DACC" $"D1BA BFBC BCBA BF43 C29B A3A3 7CB0 9F74" $"A18D B3AE C6C1 7590 866B BDBD 9BC8 AEB3" $"B8BD C1C5 C6C1 BDBD B0B0 99AD A0B4 BDB8" $"C4C9 B88F BDB8 AEAE A5A5 C69E AEAE B8BD" $"B5DB BDE3 D1D1 DAB3 D1D1 CF8F F9A3 FFA5" $"F9A3 FFA5 FFA3 04B8 BDCA F4D7 013A 5353" $"485E 7673 7976 7C76 767C 767C A77E A7AB" $"A6AB ABA5 7B41 413E 3E47 72AB ABCA 7E76" $"7647 72AB CDCA 9D75 7572 7976 767B 7578" $"4172 4775 7576 7C96 9795 7A7B 7578 4075" $"7B7B 757C 7693 7E72 7276 7B7B 75A7 A7A5" $"7BA8 78FD A8FF 44FF 3FF1 3E13 3D3E 3E3F" $"7B75 AAD1 AB55 4A6C 8283 8982 8882 8288" $"4282 88B1 87AF AEAA B0B0 B189 5858 5959" $"537B A4A4 CC80 8282 5D84 AACC C79A 8383" $"848B 8282 8883 8958 845D 8383 8288 9A9B" $"9B80 8883 8958 8388 8883 8882 9B87 8484" $"8287 8883 FEB1 0288 B081 FDB0 FF56 F959" $"FF5A F859 1D5A 5859 8883 B0D7 AF60 559B" $"B0B8 BDB0 B5AE AEB5 B0B3 DAAA D0BF BAC1" $"C1E4 BFFF 9BFF A33F 7CA1 7474 D287 AEAE" $"9EC1 A0C2 B586 B8B8 C2C8 AEAE BDB8 C699" $"C19E B8B8 B0B5 ADAE B49B BDB8 C99D B8BD" $"BDB8 B3AE BEAA C1C1 AEB3 BDB8 DBDB E3BD" $"D1A5 DADA D1D1 8F8F F9A3 FFA5 F9A3 08A4" $"A5A3 A3BD B8CA EFBF 0142 4B48 6644 7C75" $"757B 7577 7176 7C76 A6AA A5AD BCAE AEAD" $"ADA8 4F46 463C 3CAD CFD0 8478 7275 7BAE" $"D5F9 A378 7874 7B41 7841 7275 7B76 7678" $"4376 7C87 9775 7B75 7B75 7B7C 7675 7D7A" $"A47C 7C7B 757B 7BFE A708 7BA3 A8A7 A680" $"AA76 7CFE 3E00 40FE 3E00 3DF5 3EFF 4111" $"757B 757B ABD2 AD4A 6856 8983 8388 838A" $"8582 0688 82B0 B0AB A8B8 FDA9 35AA 5155" $"555A 5AA4 C7CC 7F89 8483 88A5 CCF1 9B89" $"8982 8858 8958 8483 8882 828B 5D82 888B" $"9B83 8883 8983 8888 8281 8981 AA80 8088" $"8388 88FE B108 87AB B0B1 B087 B082 88FE" $"5900 5AFE 5900 58F5 59FF 581C 8388 8388" $"AFD6 B555 718F BEB8 B8BD B8CF CAB0 B5AE" $"D9CA C497 A68D 8D97 9741 B25B 8787 A3A3" $"6A91 B261 C6C1 B8BD 618D C061 C6C6 B7BD" $"99C6 9BC2 B8BD B1B1 D0A7 B0B5 9AAA B8BD" $"B7BC B8BD B3AE AFB6 9DC4 9393 BDB8 BDBD" $"DADA DBB4 CCD1 DBDB AAD1 B8BD FEA3 00A4" $"F1A3 FF99 06B8 BDB8 BDC1 E7D6 012D 3F67" $"545D 7B44 7B44 7577 4576 777C 7680 B4D4" $"A8D5 CFD3 D3A8 A392 763C 3CAD ADCF 9E72" $"4875 7BAE D1CF B272 417B 7578 7278 7844" $"757C 7671 7776 767C 7C7B 7475 437B 75FD" $"7613 8095 9697 757B 7AA0 7CA7 76A7 A87E" $"A77C A4AA 7C75 ED3E 1341 727C 757B 75AB" $"D2CF 6957 6C88 5688 5683 8A5E 8234 8388" $"8287 BAD0 A3D0 CBD0 D0AA A59C 825A 5AA4" $"A4CB 9984 5E83 88A5 C7C7 AA84 5888 8389" $"848A 8A56 8387 8285 8A82 8280 8088 8283" $"5588 83FD 8213 879B 9A9B 8388 87AC 88B1" $"82B1 B087 B188 ABB0 8881 ED59 1E58 8489" $"8388 83AF D6D7 7261 A4BD 8FBD 8FB8 CFA8" $"B0B1 B3AE A2D3 BF91 B6B1 BFBF 41B2 ADC8" $"B0A3 A36A 6AB1 7DC1 9FB8 BD61 8892 72C1" $"99BD B8C6 C1C8 C88F B8B6 B1CA CFB0 B090" $"90BD B7B7 8EBD B8AE AEB0 B0A2 B6AD AEB8" $"BDBC DEB3 DAB0 DBD1 AADB B5CC D1BD B7ED" $"A308 99C1 BEB8 BDB8 C1E7 F601 394B 7E78" $"4576 757B 757B 7676 7B75 7B75 76A7 A5B4" $"B7B6 ADCE D1BF D4AD D7AF ACAD D4AD 7B75" $"7B75 AEFC D2A1 757B 7544 7278 7675 7B7B" $"7247 757B 4178 7B7B 7575 7B7B 7A7A 7E99" $"7C7C 7878 9AA9 7AAA A57B FEA8 0AA7 7CA1" $"A8A8 7B75 7272 3F3F F33E FD3F 1372 7876" $"7B72 78AA D6A7 807A 5482 8388 8388 8282" $"894E 8388 8382 B0AB BAB9 B8A9 CACB B9CC" $"A4CC A5A4 A4CC A589 8389 83A5 F2CB 9A83" $"8883 5684 8983 8388 8884 5D83 8858 8A88" $"8883 8388 8881 8180 9A80 8081 819A A981" $"B0B1 88B0 B0B2 B188 ACB0 B089 8384 845A" $"5AF1 59FF 581E 8489 8287 8489 B0DC AF89" $"8387 B1B8 BDB8 BDB8 B8BC B7BD B8B1 DCC4" $"D3C1 C097 B941 A995 956A 8E61 696A 976C" $"BCB7 BFBA 61B7 9F69 B8BD B88F C1C6 B9B8" $"BDBD C19E B8BD 9BC8 BDBD B8B8 BDBD 9D9D" $"87A1 9393 A7A7 9AA9 9DCA E3BD D1D1 DCDB" $"B5D6 D1D1 BFBA C1C1 EFA3 FF9B 08C1 C6B8" $"BCC1 C6CA F4D2 013B FF89 3591 7C7B 757B" $"7545 7C75 7B44 757C 7680 AAAE A8BC BCB0" $"D1AD D4D6 D6AD CFD4 AD75 7B75 7BAE D5CE" $"A275 7B75 7B78 4175 4A75 7478 727B 7578" $"73FE 751E 4A74 757A 95A8 9996 967E 93A9" $"B8B4 AA7B A6A3 7EA7 7CA7 7CA8 797B 7547" $"783D 3FF3 3EFE 3F14 7179 787C 7678 78AA" $"C3A8 8A8A 9C87 8883 8883 5588 830D 8956" $"8387 8287 B0B0 AAB8 B8A9 CBA4 FECC 1BA4" $"C7CC A583 8983 89A5 CCC7 9B83 8883 8889" $"5883 5B83 8289 8488 838A 85FE 8305 5B82" $"8381 9BAA FE9A 1587 9BA9 B8BA B088 B2AB" $"87B1 88B1 88B0 8289 835D 8959 5AF1 5920" $"5884 8A89 8882 8989 B0C8 B093 93C9 B6BD" $"B8BD B88F BDB7 BC8F B8B6 B1A2 CAB8 B2A6" $"A621 85A9 6A95 8D8D 6A91 976C B7BC BABF" $"618D 9A6A B8BD B8BD C699 B894 B8B7 C6C1" $"BDB8 C8C3 FEB8 1D94 B7B8 9DB6 B1A1 ADAD" $"ACBF A9B8 D3CA BDE4 CCAA DBB5 DBB5 D1A6" $"BFBA 9EC6 A2F0 A30A 9BC2 C7C6 BDB8 C6C6" $"CAE1 D301 4C48 897E 7AAA 757B 754A 747B" $"4475 7B7B 4171 7676 7BA5 A8A3 9276 A8A8" $"A4CB D1D1 A399 7841 767C AEFB CFB2 7B44" $"7872 757B 767C 7246 7272 7349 7278 7278" $"7B75 7B74 9AA8 9A9A A9A9 A6AB B7B7 A3FE" $"A80B 7CA6 A8A3 A7A7 767C 7278 7676 F83E" $"0040 FD3E 053D 3E41 4179 78FE 7510 7B75" $"75A8 ADA8 8A80 80B0 8389 835B 8288 560F" $"8388 8858 8382 8288 B1B0 AB9C 82AA AAA4" $"FECB 23A5 9A89 5882 88A5 F1C7 AA88 5689" $"8483 8882 8884 5D84 8483 5D84 8A84 8988" $"8388 829A A89A 9AFE AA03 AFB9 B9AB FEB0" $"0B88 B1B0 ABB1 B182 8884 8982 82F8 59FE" $"5AFF 5905 5859 5858 8B8A FE83 1B88 8383" $"B0B6 B093 899B C8BA BFB8 94B7 BD8F B8BD" $"BD9B C2AE AEBD E3D1 CC32 C8B0 B2B2 A4CB" $"A6A6 ADA3 C699 B0B5 61B6 9170 BD8F C6C1" $"B8BD B0B5 C19E C1C1 B895 C2C8 C1C6 BDB8" $"BDB7 9AA8 9A9A ABAB BABF C1C1 CCFE D10B" $"B3DA D1CC DADA B8BD C1C6 B0B0 F8A3 02A4" $"A5A5 FDA3 FF99 FFC8 FEB8 05BD B8B8 DBE0" $"D101 42FF 8908 95AA A57B A575 7B75 7BFE" $"75FF 782F 7C76 757C A87E 7C7C 7DA8 857F" $"B0B0 B884 A378 7676 AED5 FAA3 7576 7247" $"757B 7676 7872 7847 7372 7841 7841 767B" $"4475 A89A FEA9 14B8 A5AB A8AE A97E A37E" $"A6A6 7EA8 7C76 7C76 4178 757C F13E 0972" $"7872 787B 7B7A 757B 7BFE A8FF 8A08 9BB0" $"B189 B183 8883 88FE 83FF 8A47 8882 8389" $"B087 8888 7FAA 857F A9A9 BA86 B289 8282" $"A5CC F29B 8383 845D 8388 8282 8A84 895D" $"8382 8A58 8958 8388 5683 A89A A9A9 AAB9" $"A9AF AAAF B187 AB87 B1B1 87B0 8882 8882" $"5889 8188 F759 FF5A FD59 0984 8984 8A88" $"8887 8388 88FE B0FF 9308 B4C8 E4BF E3B8" $"BDB8 BDFE B8FF C805 B3AE B8BE D1AA FFB5" $"3F88 B285 7F82 82C2 8FEB C6B0 B061 8DBF" $"5FB8 B9C1 9EB8 BDB0 B0C6 C1C6 9EB8 B7C8" $"9BC6 99B9 BD8F B8A8 9AA9 A9AB BAB9 BFB2" $"B8D2 AACC AADA DAAA D1B3 AEBD B899 C6AF" $"B5F7 A3FF A5FD A30C C1C6 C2C8 BDBD BCB8" $"BDBD DBDB D101 4557 7C86 787E A7A7 A8A8" $"7C76 7771 4778 7574 4278 7872 76A7 7E93" $"B2D4 B0B0 7A7A 7CA6 A77C A77C DDD4 CFA3" $"7878 7379 7575 7847 7676 7278 7278 757C" $"7575 7871 81BA A8D5 A6AB ADD3 CFBD 7FA8" $"77A7 A8A8 A776 A57B 7676 7A75 7B75 4772" $"F53E 1B3C 3B41 727B 757B 7572 7273 7974" $"4278 A8A8 808A 8187 B1B1 B0B0 8882 8A4C" $"845D 8983 8259 898A 8482 B187 9BAA CCA9" $"A981 8188 B0B1 88B1 88D2 C9C7 9B89 8983" $"8983 8389 5D82 8284 8984 8981 8883 838A" $"837F B9A3 D0AA AFA9 D0CB B888 B082 B1B0" $"B0B1 82B0 8882 8287 8388 835D 84F5 5926" $"5A59 5884 8883 8883 8282 8389 8356 81B0" $"B091 9CA5 AADA DAD1 D1B3 AEC8 C29E C6B8" $"B79A C6C8 C2AE DA41 AABE 7297 8585 9D9D" $"B5DB DAB3 DBB5 8076 9261 C6C6 B8BD BABA" $"C69E AEAE C1C6 C1C6 AFB5 B8B8 C8C2 75AF" $"88B6 BABF 97BF B19D ABD1 A5D1 D3D3 DAAE" $"E2BD AEAE BCB8 BDB8 9EC1 F3A3 0E9B C2BD" $"B8BD B8B7 B7B8 BDC1 98A5 D1D1 0144 2087" $"7C93 A8A6 7CA3 7EA7 A777 7772 724A 7578" $"7341 7876 7C78 78D4 D4D1 D1B4 7AA7 A775" $"FEA7 33D8 D4F9 B278 7279 7375 4872 7276" $"7C47 7272 4776 767B 7A78 78BA CDD5 BDA6" $"ABB2 CEAE D5A3 A8A7 A77D A37C A77B 7576" $"7C75 447B 7572 78F5 3EFF 3C05 7978 757B" $"757B FE79 1073 4342 A8A8 A98B 809B B0B0" $"88AB 87B1 B18A 158A 8484 5B83 8985 588A" $"8288 8181 CCCC CBCB BA81 B1B1 81FE B133" $"CDC9 F1AA 8984 8983 835A 8484 8288 5D84" $"845D 8282 8887 8A8A B9CC D0B8 AAAF AFCB" $"A9D0 ABB0 B1B1 86AB 88B1 8883 8288 8356" $"8883 8489 F559 FF5A 058B 8A83 8883 88FE" $"891B 8357 56B0 B0B1 9D91 BED1 D9B3 CCAA" $"DADA C8C8 C1C1 94B8 C6C2 9BC8 AEB3 FFA5" $"FF97 FFA9 2AD3 9DDB DBAD DADB DB7B 76C0" $"72C6 C1BD B8BA 95C1 C1AE B39E C1C1 9EB0" $"B0BD BCC8 C8AF C2B6 9DBA BF9C BA8D B6CC" $"FED1 0DAB CEB3 DABD B8AE B3B8 8FBD B8C1" $"C6F3 A3FF C802 B8BD B8FD BD05 B899 98D1" $"D1D2 0159 FF89 557A AA7C A1A7 A8A8 7EA3" $"A87B 7B74 7B77 7D76 7647 723E 3E96 A1D5" $"D5D8 D8B0 B0A9 AA7C A7D9 D9FC B0A8 A87B" $"A67C A77B 7B7C 7BA3 7DA7 A7A5 7BA8 A8AE" $"B7D7 D7A5 BAA5 7AAB A5D7 D2AB B07C A6A7" $"7C79 7375 7C47 7245 7872 7877 77FD 3E00" $"3DFA 3E1B 757B 7676 7872 7C76 757B 7341" $"3F3F 7CA7 A78A 8A81 B088 ACB1 B2B0 87AB" $"54B0 8888 8288 8389 8282 5D84 5959 9AA4" $"CCCC CDCD A9A9 AFB0 88B1 CCCC F2A6 B0B0" $"88B2 88B1 8888 8988 AB86 B0B0 B188 B0B0" $"AFB9 D0D0 A3B8 B38A B0AB D0CB A9AE 88B0" $"B188 8983 8188 5D84 5C89 8489 8282 5A5A" $"5959 5859 5A5A FD59 2683 8882 8289 8488" $"8283 8885 5859 5988 B1AF 9393 9DCA B5D6" $"DBDC D1AA CCD1 BDBD B7BD AFB4 B0B0 9EC1" $"FFA3 41AB B58D 8D7B 7B85 85C9 CAB5 DB7B" $"7BAF 59DA DABD E4B3 DABD BDBE BDCC A9D8" $"D8E3 BDD1 D1B8 C1A4 A49B B0E5 C0C1 BCA4" $"9FA0 A6B3 D9DB B5BD B8AF B59E C19D C6C1" $"C6B0 B0A5 A5FD A3FF A5FD A310 B8BD B0B0" $"C6C1 BDB8 B8BD C39B A3A3 B5DB D001 5C0B" $"897E 95AB A77C A77C A3A8 7EA8 FEA5 1E7B" $"7676 7C76 7278 3D3E 4C7C ADD5 D8D4 D1D1" $"A5AA A17C D9FE D2DB 7DA7 A57B A7A7 FDA5" $"1FA8 A77C A77B A5A8 78AE A3D2 D7BA AB79" $"A4AB A5B1 D2CC ABA7 76A7 7673 7976 7672" $"79FE 7203 477D 773F FE3E 0240 3E3D FD3E" $"1C77 757B 7C76 7878 767C 7B75 4141 3F3F" $"A7A8 A88A 809B B1B1 88B1 88AB B087 20B0" $"B1B1 B088 8282 8882 8489 5859 5180 A4CC" $"CDC9 CBCB ABB0 AC88 CCF2 C8D1 87AF B188" $"FBB1 1FB0 AF87 B088 B1B0 81AF A5CB D0B8" $"A989 B2B0 ABA9 CACB A9B1 82B1 8283 8982" $"8284 8AFE 840A 5D87 825B 5A59 595A 5959" $"5AFE 5927 8A83 8888 8289 8982 8888 8358" $"5859 59B1 B2B0 9389 B6CA DBB5 DBB5 CCD1" $"AAD1 E3E3 E2BD AEAE B5B0 C1C6 FFA3 1565" $"9160 8D7B 76A9 A9C4 CAD6 B57B A580 8AB3" $"D9E3 BDDA DAFD E31F D1D0 B2D8 BDE3 D1A5" $"B8AD 9FA4 B0A0 BFE4 C1BC 7A9E C3A0 DAAE" $"DBB0 B8BD B0B0 C1C7 FEC1 0A9E B5B0 A6A5" $"A3A3 A4A3 A4A5 FEA3 11CF B8BD B5B0 C6C6" $"B8BD BDB8 9B9B A3A3 DBDC D101 5C03 7E89" $"927D FDA7 367C A7A8 A97E A37B A5A7 A77C" $"7C7B 743F 3F3E 3E44 6FA5 CDDA FFD8 D8AF" $"B5DB D2FB C3A8 79A7 A7AE AED6 B5A1 7CA8" $"7EA3 A8A8 78A7 A7C0 D2D7 D2A3 FEA8 1A7C" $"A7A9 D0D6 D6AB 7C78 717B 7577 3F78 7272" $"7879 7372 7872 413E 3E40 FE3E 0B45 767C" $"757C 757B 747C 927B 75FD 3E08 403E 7CA7" $"A880 8A9C 87FD B102 88B1 B003 B187 AB88" $"FEB1 FE88 2982 5A5A 5959 567D A4CC CDF2" $"CDCD A9AE D1C7 F1B9 B082 B1B1 A9A9 CBAA" $"AC88 B087 ABB0 B081 B1B1 B8CB D0CB ABFE" $"B01A 88B1 A9D0 CCCC AF80 8A83 8883 8A58" $"8984 848A 8983 8489 8458 5959 5AFE 590D" $"5582 8983 8983 8882 889C 8983 5959 FE5A" $"1959 86B1 B087 92BE AAD1 D1DB DBB3 DAD1" $"D1AA CCBD E3DA DAB5 B5BD B7FD A324 8FB3" $"9AC2 719C 7B7B 8D93 8B81 B678 D1A6 DBDB" $"8D8D 8B65 D6B5 D1AA CCD1 D1A5 DADA 8B9F" $"A49F CCFE D11A B5DB A9D0 8585 BF91 C8C2" $"BDB8 C89B C6C1 C2C8 BDB8 C4C9 C199 A3A3" $"A4FE A314 8FB8 BEB8 BEB8 BDB7 B5C8 BCB7" $"A3A3 A5A5 A4A3 A9D1 D101 56FF 8957 77A7" $"A777 A77C A7A7 A878 A8A8 A57B A67C A7A1" $"A57B 4571 3E3E 4444 538B DAD7 D8FE D1D1" $"D6D6 FBAE A8A7 A77C AEF5 F8DC 7CA7 A3A8" $"A87E A8A8 A77C D2D7 D2B1 A87E A878 A7A7" $"AFB8 D6D6 A17C 4178 7544 7771 773F 7841" $"7379 4078 4141 FB3E 0B76 7C75 7B75 7B75" $"7B76 7C75 43FB 3E0D A2A7 A88A 8A82 B1B1" $"82B1 88B1 B1B0 4E81 B0B0 B188 B088 B1AC" $"B188 5F85 5959 5656 528A CDCA CDF2 CBCB" $"CCCC F1A5 B0AF B188 A9F1 EDD1 88B1 ABB0" $"B087 B0B0 B188 CBD0 CBA9 B087 B081 B1B1" $"AFB8 CCCC A480 588A 8356 8A84 8857 8A58" $"8389 5889 5858 FB59 2A82 8883 8883 8883" $"8882 8883 5559 595A 5A59 59AB B1B0 9292" $"A5D1 D1A5 DBB5 DADA D1A4 D1D1 E3BD D9B3" $"DBD6 E3BD 43A7 CAA3 A38F 8F45 7F71 6D7B" $"A5B1 B186 86B6 61D1 D0DB B58D D9B0 92B5" $"DBCC D1D1 AAD1 D1DA B39F A49F 7AD1 AAD1" $"A5DB DBAF B885 85B5 919B C8B8 8FC8 C2C5" $"98C8 9BB8 BD9D C999 99FB A314 B8BD B8BD" $"B8BD B8BD B0B5 B78E A3A3 A5A5 A3A3 CCD1" $"D101 5369 787E 95AA 79A4 A8A3 7EA8 7BA5" $"AA80 A7A3 A8A8 7CA7 7CA1 757B 7C76 7872" $"7241 7AA5 D4CF DAFF D8FC D5DA 7EA8 7DA2" $"D9D5 FDB0 A8A7 7CA7 7CA7 A37E B1BA D6D7" $"CBAF A8A8 7CA7 AA80 7893 ABD2 ABB0 7B75" $"7872 757B 757B 757B 7475 7A74 7544 3E3E" $"4343 7B7B 7872 7B75 7B75 7B7B 7575 F93E" $"0D7C A7A8 7A80 9BB0 89B2 B0AB 87B0 885E" $"B1B0 87AF ABB0 B088 B188 AB83 8988 828A" $"8484 5881 ABCC C7CD F2CA EFCB D087 B087" $"ABCD C9F3 A6B2 B188 B188 B1AB 87B0 B9CC" $"CDCB AFB0 B088 B1B0 8781 9BA4 CBA3 A989" $"8389 8483 8883 8983 8882 8389 8483 5659" $"5957 5788 8889 8488 8388 8388 8883 83F9" $"5918 88B1 B083 89B6 CABD E3D3 CEAA D1BD" $"E3D1 AAD0 CCD1 D1B5 DBB3 D553 B7BC BCB7" $"C8C2 C199 9DC4 9591 6A95 5D87 979D AAD1" $"AACC 736E B059 DBDA B5DB B5DB CCAA A6AF" $"8586 CBAF D1D1 B3DA CAA2 A5BE 749F 7E83" $"BCB7 C6C1 B8BD B7BC B8BD B7B8 C8C2 B88F" $"A3A3 9999 BDBD C6C1 BDB8 BDB8 BDBD B8B8" $"F9A3 02B5 DBD1 0152 1154 6779 AAA4 79A8" $"7EA8 A3A5 7BAA A47E A87E A3FE A704 7C7B" $"757C 76FD 78FF AA49 B2D9 D6FF DCFF D1C2" $"A8A3 A7A7 D9FF F7C4 A77C A8A7 A17B A8A8" $"ABCD D6D6 B8B0 78A8 A776 A595 7E78 B1D2" $"D3AA 757B 4178 7544 7B75 757B 447C 7449" $"7544 3E40 7A74 7576 7779 757B 757B 907B" $"4444 F93E 0DA8 A7A8 5769 80B0 B289 B087" $"B0AB B106 88B0 AB87 B087 ABFE B123 8889" $"8388 828A 8A89 89B0 B0AA D1C9 F2CE F1C7" $"B8B0 ABB1 B1CD F3ED BAB1 88B2 B1AC 87B0" $"B0AA FECC 20B8 B081 B0B1 82AB 9B87 81A9" $"CBCB A283 8958 8983 5689 8383 8856 8984" $"5D83 5659 5A89 FE83 0988 8A83 8883 889D" $"8856 56F9 5918 B2B1 B061 729C CAE3 BDD3" $"ACD1 CCE3 BDD1 CCAA D1AA CCDB DBDA B353" $"BCB7 BCB7 C8C8 C6C6 CACA 709B 6695 628C" $"9282 D1CC D1D1 739D A970 DAB3 DCDB D6B4" $"D1D1 A0C2 8585 B8B0 A5D1 DAAE C4B6 AAA5" $"7A9F A97D B7BC 99C6 B88F BCB7 B8BD 8FBE" $"C29F B88F A3A4 C6C1 B8B9 C5C7 B8BD B8BD" $"D0BD 8F8F F9A3 02DC DBD1 014D FF45 1772" $"787E A3A7 A8A7 7CA7 A77C A7A6 A6A7 7CA7" $"76A7 7C75 7B75 7BFD 7511 86D1 D7B6 A8CA" $"F4D3 CDAB A57B AEA8 FFD8 CFAE FEA8 297D" $"A7A7 7CA7 BFD1 D2D7 76A7 A77C 81AB AED5" $"D387 7EA3 D4D4 7676 7872 7B7B 7575 4772" $"7872 7B76 783F 7278 75FE 7BFF 7605 7B90" $"7878 3E3D F93E FF40 0D7C A6A8 4A4A 7B81" $"87AB B1B2 B087 B001 B088 FDB1 0888 B182" $"B188 8388 8389 FD83 117F CBD0 AEAA CCEC" $"CBD1 AFB1 88AF AAF1 CACB A9FE B029 87B1" $"B188 B1B8 CBCB D082 B1B1 887F AAA5 CCCC" $"8080 A5CC CC82 8289 8488 8883 835D 8489" $"8487 8289 5784 8A83 FE88 FF82 0588 9D89" $"8959 58F9 59FF 5A0F 88B1 B05F 5FA0 A5AA" $"CCDB DCD8 B2DC DCB5 FEDB 05DA B3DB B0DA" $"B303 B8BD BABF FDB8 3E56 A8AD 89B2 D4C2" $"9FE2 C1E3 BDB8 B28C 5DB1 8DD1 D1DB B5DA" $"DAB5 DB94 A89F A4AE DADB B575 A061 8DA0" $"4B89 AD97 97B0 B0C6 C1BD BDB8 B89E C1C6" $"C1B4 B0C6 98C2 C8B8 FEBD FFAC 03BD D0C6" $"C6F7 A3FF A402 B3DA D101 4FFF 5267 407E" $"79A8 7CA7 76A7 7CA7 A17B A67B A7A7 7CA7" $"A776 7B75 7B75 7B7B 7A7B D6D1 D2D2 AE84" $"B7B2 80A6 7AA5 AECF D8FF CFB3 7EA3 7DA2" $"A87C A7A7 B0D1 D2B1 A77C 7676 9BCD D5D5" $"D2D2 7E99 D4B2 767C 7247 7575 447B 7872" $"7247 7676 7972 7878 757B 7575 A77C 7B7B" $"7341 3E3E 3D3D F93E FFA6 0BA8 5656 4C87" $"82B0 88B1 82B0 8713 B0AC 87B1 88B1 B188" $"B1B1 8288 8389 8388 8887 88D0 FECB 1EAF" $"86AF A985 AA87 B1AF D1CA F1CB AE87 AB87" $"ABB2 88B1 B1A9 CBCB A9B1 8882 829A FECC" $"FFCB 2380 9ACC AA82 8884 5D83 8356 8889" $"8484 5D82 828A 848A 8A83 8883 83B0 8788" $"8885 5859 5958 58F9 59FF B116 B06A 6A75" $"AAA6 D1B5 DBAC D8B6 DCD6 B4DB B5DA DAB5" $"DBDA AE08 BDB8 BFBA BDBD BCBD ADFE A843" $"B88F 807A 98BC BCE3 B8D9 5D8C B193 AACC" $"B5D6 DBB3 DBDB 83A8 9F7A DAB3 B0B0 90C2" $"8D8D 9F9F 89A3 9772 B0B5 C19E B8B8 8FBD" $"C6C1 C19E B0B0 C7C1 C8C8 B8BD B8B8 D8B2" $"BDBD C299 F5A3 FFDA 00D1 0149 2545 5276" $"767B 757C A1A5 A5AA A57B A5A8 92A7 7CAA" $"AA7C 767B 9078 7876 7675 7BAE F5D8 FFD5" $"C2A8 7EFE A72C 7CAE CFFF D8CD 81A7 A7A6" $"7CA7 A1A7 7DA5 7BA1 7C76 757B 7BA3 D4D6" $"D7D5 D5D2 877C 7675 7B76 7678 7872 7275" $"7B76 7CFE A70A 7C75 757C 9378 7876 7672" $"41FD 3EFF 3DF9 3E0D 7DB2 A84A 5682 8288" $"8388 ACB1 B1B0 0EAB 88B1 B09A B188 B0B0" $"8882 889D 8989 FE83 0888 A9F1 CAF1 CBB8" $"B087 FEB1 0688 A9CB F1CA D186 FEB1 2288" $"B1AC B087 B188 AC88 8383 8888 9BCC CCCD" $"CCCC CB80 8882 8388 8282 8A8A 8484 8388" $"8288 FEB1 0A88 8383 889D 8A8A 8282 8458" $"FD59 FF58 F959 1886 BAB0 5F6A B0B0 BDB8" $"B5D6 E3E3 CAC4 BDE3 D1BD DAB3 CACA B3AE" $"0FBD D0C6 C6B9 B9B8 BD8D D95D 8C97 82D3" $"ACFE DA2C B38D B18C 5DE3 9BDA DAE2 BCDB" $"D6DC B6E3 BDD6 B5B9 B8BD BD61 9785 868D" $"8D9F 4BB5 B0B8 BDAE AEC8 C8C1 C1B8 BDAE" $"B3FE DB0A B5B7 B7B5 C9C8 C8AE AEC2 9BF3" $"A302 A9DB D101 4165 5245 3E7C 4475 7C76" $"7B7B AAAA A67B A87E A7A7 A5AA A776 7B7B" $"7278 7B7B 757B AEAE FFD8 D5D6 B2A8 A77C" $"A6A7 B2CF D8FF A6AB 7CA7 7CA7 7C7C 7677" $"757B 767C 447B 7575 D4D4 D2B0 AED5 D2D3" $"817C 4475 7C76 4172 7847 757B A7A7 7CA7" $"7C92 7B7B 767C 7278 7C76 4141 3E3D F53E" $"FEA8 0A56 4A4E 8856 8388 8288 88B0 5AB0" $"B288 B087 B1B1 ABB0 B182 8888 8489 8888" $"8388 A9A9 F1CA CBCC BAB0 B188 B0B1 ADCB" $"CAF1 AAB0 88B1 88B2 8888 8081 8388 8288" $"5688 8383 CCCC C8A6 A5CC CBCC 8D88 5683" $"8882 5884 895D 8388 B1B1 88B1 889C 8989" $"8288 848A 8882 5858 5958 F559 FEB0 156A" $"5F81 B58F B8B5 B0BD BDCA CAE4 BDD1 AADA" $"DAC4 CADA AEFF BD4B C1C6 BDBD B8BD 8D8D" $"8C5D 9798 DCD3 DAB3 D9DA 92B1 5D8C BDC3" $"B3DA BCE3 B5B5 B0B1 B8BD B0B5 8FBD B8B8" $"9797 8059 618D 9FA0 B9B5 8FB8 B3AE 9BC2" $"C69E B8BD DADA B5DB B5C8 BCBC B0B5 C2C8" $"B3AE 9B9B F3A3 FED1 0132 3148 673E 7675" $"7B41 7876 7675 7BA7 A1A7 A87D A87B A57C" $"7C74 7975 7576 7672 727C A7AB F3FB DAD5" $"B3A9 A47C A1B4 D5FE D876 A775 7BFD 76FF" $"7919 7278 4475 7C76 4B76 D8D8 CE9D 7ECA" $"D4D8 D5A4 7D77 4A75 7978 7AAA FEA8 0A7D" $"A3A8 A57A 7C76 7B74 7972 EF3E 0D7C A7A8" $"4A69 4E82 8388 588A 8282 8326 88B1 ACB1" $"B286 B088 B188 8884 8983 8382 8284 8487" $"B0AA F2EE CDCB A9B1 AB88 ACAA CCF2 CD82" $"B183 88FD 82FF 8918 848A 5683 8882 5A82" $"CDCD CB9A 80CC C8CC CC9A 8782 5B83 8A89" $"81FD B00A 87AB B0B1 8788 8288 828B 84EF" $"5918 88B1 B055 7281 B0B8 BD9B C8AE AEB8" $"BDDB D6DB DCA9 D1BD E3B5 B549 B9BD B8B8" $"B0B0 C1C1 B6DC 97E1 906A 9772 D2CD B5D6" $"678D A57B B0DB B8BD B0B0 AEAE BDBD C1C6" $"8FB8 B3AE 8CB1 7B7B BA86 89D4 777C 8D54" $"B5B0 93B7 CAC9 A5D1 DBDB DAB3 CCD1 E3BC" $"B5B0 BDB7 C8C2 EFA3 02B5 DBD1 0143 3B55" $"673E 7C7B 7572 7976 7B7B 757C 7CA8 7CA8" $"A3A5 7BA1 7679 737B 7B76 7C47 4176 7681" $"9CDB D6D5 D578 7E76 7CAE F6D4 B17C 767B" $"7576 7C76 7C73 7346 7275 7BFE 7622 91D8" $"D4CF 887E 7ED8 D8D1 D592 7D75 A678 A3AA" $"AA7D A877 A8A8 7EA5 7B92 7C7B 7541 413E" $"40F7 3E00 3DFC 3EFF A70B A858 694E 8888" $"8384 8B82 8788 3083 8888 B288 B0AB B188" $"AC82 8983 8888 8288 5D58 8282 809A CEC9" $"CBCB 8187 8288 A5EC C9A7 8882 8883 8288" $"8288 8383 5D84 8388 FE82 229C CDC9 CC85" $"8080 CCCC C7CC 9C87 83B2 89B2 B0B0 87B0" $"81B0 B087 B188 9C88 8883 5858 595A F759" $"0058 FC59 FFB1 16B0 6272 81B5 BDB8 C2C8" $"AEB3 BDB8 B5B5 DCB5 D1CC E3BD D6B0 4BBD" $"B8BD BDB0 B59E 99B1 B16B 866B 6697 97A5" $"AAB0 B561 B176 4EB5 B0BD B8B0 B5AE B3B8" $"B89E C1B8 BDAE AEB1 C97B 76BB 7189 897C" $"7C88 8DC8 B5B7 E2C9 EED1 D1B5 DBAE DAD1" $"AAE3 BDC8 B5BD B89B 9BA3 A4F1 A3FF DB00" $"D101 2C1C 4855 4676 7247 7676 4772 767C" $"7776 7CA0 A57B A8A8 7878 777C 757B 757B" $"75FE 7B3B 7C76 9BCD D7D4 D287 7C76 D6D6" $"D1B0 7374 767B 7872 4572 7941 767C 7871" $"4679 7FA4 DAD6 A17C 7B75 80CC D9D5 D6C4" $"AB80 A8A3 7BA5 A87D A7A7 7CA7 A37E 7575" $"ED3E FF3F 0D7D A7A8 4A58 5582 845D 8282" $"5D84 8211 8883 8288 ABB1 88B1 B189 8983" $"8883 8883 8883 FD88 3A82 9ACC CCC9 CB80" $"8882 CCCC CBA9 8384 8388 8A84 5C84 8B58" $"8288 8983 5B89 7FA4 CDC9 A580 8883 7ECB" $"CDC9 CCBA B187 B0AB 88B1 B086 B1B1 88B1" $"AB87 8383 ED59 FF5A 1887 B1B0 5562 87B0" $"C19E B0B0 9EC1 B0B5 AFAE B5D6 E3BD D2D2" $"C6C6 06B9 BDB8 BDB8 BDB8 FEBD 3BB3 AE90" $"C27A 769F 4BB5 B085 85A8 83B8 B9B9 BDC8" $"C29D C1C8 9BAE B3C6 C09B C47F A46A 66B7" $"93BD B87F CB73 6E85 70CA A2D1 CCBD E3D1" $"A9DA DAB5 DBCE ACB8 B8EB A302 AAD1 D101" $"2CFF 5459 707C 7278 7C76 7278 7676 7C76" $"7D76 7BA5 7DA2 7278 767C 757B 757A 757B" $"A5A5 A7A7 B0AB D8D8 D2D2 7675 D6D6 CD86" $"7979 4475 4178 7278 7278 7676 4178 7272" $"85CB FBDA A681 757B AFAA D9FF F7D6 B4A4" $"7EA8 A57B A3A8 7DA7 A17C A878 4444 ED3E" $"FF3F 0DA1 A7A8 5757 7C88 8489 8882 8489" $"8212 8288 8289 8288 B187 AB84 8982 8883" $"8883 8783 88FD B139 AFAA CDCD CBCB 8281" $"CCCC C77F 8989 5683 588A 8489 848A 8282" $"5889 8383 85CB EECD AA86 8388 AEA9 CDF3" $"EDCC BAAA 87B0 B188 ABB0 89B1 AC88 B081" $"5656 ED59 FF5A 18AA B1B0 6161 AAB5 C1C6" $"B5B0 C1C6 B0B0 B3AE B6B0 BDE3 AACC C1C6" $"45B8 BDB8 BDB8 BCB8 BDE3 E3DA DAA5 A07B" $"7B9F 9FB0 AF85 85A3 56BD BD8F B89B C8C1" $"C6C2 C8AE AE99 C6BF BF85 CB90 6ABC 99B8" $"BDAF A973 9DA9 85D3 C4AA D1E3 BDCC D1B4" $"DAD6 B5D3 A78F 8FEB A302 CBD1 D101 27FF" $"4525 3E46 7C76 4178 7872 7A49 777D 7278" $"7576 757B 7872 7C92 7872 7B75 7B75 A17C" $"A97E A8A8 BACD FED8 FDD6 30CB 8578 7879" $"737B 757B 4475 7B75 7B7D 787B 7BA4 F6D8" $"D8A3 A9A7 A77B A7B8 CBDA FBD1 C4A8 7EA8" $"A87D A7A1 A77B 7B75 7B3F 3D3D EC3E 0D7C" $"A7A8 4A4A 4E55 8882 588A 8984 891B 5C81" $"8784 8981 8283 8889 8488 9C89 8488 8388" $"83AC 88B1 87B0 B0B9 CCF2 FCCC 16CB 8581" $"8189 8388 8388 5683 8883 8886 8188 889B" $"ECCD CDAB FEB1 1687 B1B8 CBCD EEC7 BAB0" $"87B0 B089 B1AC B188 8883 895A 5958 EC59" $"1888 B1B0 5F5F 8187 B3AE 9BC8 C6C1 C69E" $"AEB3 C4C9 ADAE B8BD C6C1 11B5 C8C6 C1BD" $"B8BD B8D6 B5D2 AAD1 D1AF C2A6 7CFD 852F" $"D48F A7A7 BDB8 BDB8 BD8F B8BD B8BD A9A5" $"BDBD 55B1 7B7B CCD2 DADA B4DB B8CB 6A90" $"7F70 D1AA D1D1 B6DB D6DB BDBD BABF A3A2" $"EBA3 02B5 DBD1 0127 2752 5170 7C76 7678" $"7273 4774 7477 7878 4076 7C7B 7541 7876" $"7C79 7875 7C75 7B7C A8A3 A8A8 78B0 BAD8" $"D8FE D630 D7B8 AEA8 A879 A4A6 7BA5 A5A6" $"7AA5 7BA3 A8A5 A5DA D5FF D8A8 7EA7 7CA7" $"A785 B8DA FFD6 FCA3 A878 A8A7 767C 7C75" $"757B 753F 40EB 3E0D A7A6 A856 557C 8882" $"828A 8485 5D83 5083 8182 8958 8288 8883" $"5889 8288 8A89 8389 8388 88B2 ABB0 B081" $"AFB9 CCCC CBCC CCCD B8AF B0B0 89B2 B288" $"B1B1 B287 B188 ABB0 B1B1 D1CC F3CD B087" $"B188 B1B1 85B8 CDF2 CCF2 ABB0 81B0 B182" $"8888 8383 8983 5A5B EB59 18B1 B0B0 6A69" $"AAB5 AEAE C8C2 C29E C1C1 AEAF C99D AEB3" $"BDB8 99C6 43B0 B5C7 C6B8 BEB8 BDB5 DCCC" $"D1D1 A5A5 AF7C 7C84 8585 86C1 B8D3 D3BD" $"E3E4 BDE3 E3E4 BCE3 BDCC D1E3 E392 8DA6" $"7BD1 AADA B3DB DB85 B86A 9585 AFCC D1A5" $"D1DB B0B5 B5B8 B8BF BAE9 A3FF DB00 D101" $"3259 4552 4676 7941 7D77 4772 7B75 4778" $"7278 7273 7544 3E3D 3E3E 7576 7878 757B" $"A7A7 7CA7 86D2 D4B2 BACC FED8 FCD6 B4A5" $"7BA5 AFA9 D6D6 A681 A8A8 7DA7 A478 A878" $"D9FB D1DA A7A7 A3A8 AF9A B2B2 A9CB D6F7" $"A6AB A776 7973 7872 767C 4279 FE3E 0040" $"EE3E 0E40 7CA7 A84A 5655 828A 5887 825D" $"8488 4E83 5D89 848A 8485 8356 5A59 5A5A" $"8383 8A8A 8388 B1B1 88B1 85D1 CCAA B8CB" $"F2CD F2CC BAAB 88B1 AFA9 CCCC AA86 B0B0" $"89B1 B288 B081 CDEE C7D1 B1B1 ABB0 AD98" $"AFAF A9CB CCED AAAF B182 8983 8984 8288" $"5689 FE59 005A EE59 195A 88B1 B05F 6A87" $"B0C7 99B5 B09E C1BD B89E C6C2 C8C1 C2B8" $"8FA5 A4FF A541 B8B9 C8C8 B8BD DBDB B3DA" $"7BC9 9772 B0C3 A379 AD83 D3C4 BDE3 AFA9" $"8585 C4A2 D1D1 B4DA E3BC D1A5 6990 8892" $"DBDB CCD1 A590 9C9C A9CB 85A9 BCC1 DAAE" $"BDB8 C6C1 B0B5 8FBD FEA3 00A4 EEA3 03A4" $"B5DB D101 2713 5245 5E7C 7278 7777 7278" $"757B 7272 4178 7847 7544 FD3E FF44 3F41" $"727B 75A7 7CA7 A7AB CCD4 D4B0 ABD8 D8D6" $"DB80 AAA5 7BAF CBD6 D6B5 AB7E A3A7 A779" $"A4A8 A8DA FFD1 C37C A77E A8AA CCCE CEB0" $"AFD6 C496 7C7C 7673 7972 4776 7673 73EB" $"3E01 403E FEA7 0A56 4A6C 8884 8982 8284" $"8983 0888 8484 588A 895D 8356 FD5A FF56" $"2C58 8488 83B1 88B1 B1AA CBCD CDAE A9CD" $"CDCC D187 B0B1 88AF CBCC CCB9 AF87 ABB1" $"B189 B2B0 B0CD F2C7 B988 B187 B0A8 FECB" $"0FB0 AFCC BA9A 8088 8283 8984 5D82 8283" $"83EB 591A 5A59 B1B1 AF6A 5F9B B5C1 C6B0" $"B0C1 C6B8 BDC1 C19B C8C6 9EB8 8FA5 A5FF" $"A5FF 8F3F 9BC2 BDB8 DBB5 DADA A1C3 9898" $"A6A0 7979 8389 A2CA E3BD AFCB 8585 D3CA" $"AACC DADA BDE3 D1D1 6A95 8878 B5DB AAD1" $"9FC3 BABA B0AF 8570 AD93 B3AE B8BD C19E" $"B0B0 B8B8 EBA3 04A4 A3DB DBD0 011B 1449" $"663E 767B 753F 777B 7572 417B 757C 7675" $"763E 3E3D F83E 1276 7C92 7CAF CBD6 D6AD" $"B1A8 A2A8 A3A5 79AA AAB2 FED4 22A3 A8A7" $"A77C A7A8 A381 A6FF FFCE B2A3 A8AB A6FF" $"FCDC FCD6 AF7F 7F71 4777 7D47 727C 7641" $"FE78 0372 413E 3DED 3E0D 77A7 A849 674E" $"8288 8359 8A88 8384 0958 8883 8882 8384" $"5A5A 58F8 5912 8288 9C88 AFCB CCCC AAAE" $"B0AA B0AB B389 B0B0 AAFE CC29 ABB0 B1B0" $"88B1 B0AB 85AA EDED CBAF ABB0 AFAA F1EF" $"CEEF CDA6 7F7F 835D 8187 5D84 8882 588A" $"8989 8458 5958 ED59 1881 B0B0 5571 81B0" $"BDB8 9DC9 BDB8 C29B BDB8 BDB8 B7B8 A5A5" $"A3A3 F9A3 12B0 B5C8 B5AF CB85 85A1 A6D1" $"CBD1 CCE4 BDCA CA72 FE97 00CC FED1 23B3" $"DAD1 CC97 BA77 77BA 9CCC D1BF BA8C 8762" $"8785 597F 7FC0 9EAE B39E C1B3 AE9B C8C6" $"C6C2 9BEB A302 A4D1 D101 1315 5567 3E7C" $"4475 7771 7544 7878 757B 7645 7B7B 3D3E" $"3E40 F93E FE76 0E7C 7FA9 D6D6 CEAC 7EA8" $"7EA8 79A4 96AA FED4 28C1 A87E A27D A777" $"A87E ABCD FFE0 CEB2 A87E 7CA6 D8DC FCDC" $"D2D6 CBA9 7278 7777 7278 7676 7872 4172" $"7841 EB3E FFA7 0BA8 5668 4E88 5683 8A85" $"8356 8A0A 8A83 8882 5589 8959 5A59 5AF9" $"59FE 820E 887F A9CC CCCB A987 B087 B089" $"B29C B0FE CC28 B9B0 87AB 87B1 83B0 87AF" $"D1ED CFCB AFB0 8780 AACA CEEF CEC9 CDCB" $"A984 8981 8184 8982 828A 8458 848A 58EB" $"59FE B015 6172 81B5 8FB8 C9C4 B88F C8C8" $"B8BD B88F BCBC A4A5 A3A4 F9A3 FEB0 0EB5" $"7FA9 8585 C3A0 AAD1 AAD1 BDE3 B7CA FE97" $"2882 D1AA CCAA DAAF D1AA BFE0 7753 BA9C" $"D1AA 91BA 5D62 8762 8085 CBA9 C1C6 AEAE" $"C1C6 AEAE C8C2 99C1 C89B EBA3 FED1 0123" $"FF45 0F5E 7C74 7B72 457B 7578 7244 7B72" $"7874 73FD 3EFF 3F45 3D3E 3F3F 3E3E 4279" $"7772 7B75 ADCE D2B1 767D 757B A37E AEA8" $"D4D9 CBAF A7A7 A9A8 A7A7 7CA2 81C8 D1FB" $"9276 767B 7AA5 FCDD D1AA FBD1 D8D4 D5A3" $"7C52 7776 4578 757B 7872 7241 3F3F EF3E" $"FF3F 0D7C A7A8 4A4A 6C88 8288 845C 8883" $"8A06 8456 8884 8984 83FB 591B 5859 5A5A" $"5959 5689 8884 8883 A9CB CBA9 8289 8388" $"AB87 AFAA CCD1 CBAF FEB1 24B0 B1B1 88AD" $"85CC C8F2 9C82 8388 80AA EFCF CBA4 F1C7" $"CDC9 CB99 8056 8382 5C89 8388 8984 8458" $"ED59 FF5A 1488 B1B0 5F5F 9BB5 B7BD C29E" $"BDB8 C8C2 8FBD C1C6 B9B8 FDA3 F9A3 3D8F" $"BDC5 C1BD B897 BA9F 7AB0 B6B8 BDCC AAB8" $"B295 9BCB AFDA DAD2 D1DA DAB5 D797 DB86" $"B5C8 B0B9 BD9D C587 63A8 7EB6 887B 7697" $"6091 6AB1 B09D C6B8 BDC6 C1C2 9BEB A302" $"B5DB D101 2CFF 520F 4676 7B75 7872 757B" $"4178 7575 4772 7942 FE3E 4940 3F3F 3E3E" $"3F3F 3D3E 7373 7841 757B 83A7 ABD2 927C" $"747A 7878 7EA3 D4AD 9A7F 7646 7878 4676" $"7C76 7C7C B4AF 7C7D 4474 8095 D8D8 D187" $"8AD5 D8D8 D5D5 C896 7C76 7272 7B75 7247" $"7841 3F3F 3DF0 3E0F 3F40 A7A7 A856 5655" $"8288 838A 8483 8858 068A 8383 5D84 8956" $"FE59 005A FD59 FF5A 4258 5983 8389 5883" $"887F A4A4 CB9C 8882 8781 8180 A5CC A49A" $"7F82 5481 8154 8288 8280 80AB A588 8956" $"8286 9BCA CACB 8081 CCCD CDCB CBCC 9A88" $"8284 8488 8384 5D8A 5859 5958 F059 165A" $"5BB1 B1B0 6A6A 87B0 BDB8 C8C2 B8BD 9BC8" $"B8B8 9EC1 BD8F FEA3 00A4 F9A3 FFB8 3BC6" $"99B8 BD6B 9174 9FC8 B5B7 BCA5 A589 AD95" $"6A9A 7FAE 85A5 A585 AEB5 B091 9165 5FB5" $"B68F B7A3 B75D 5DA8 5738 8D7B 7B97 97DB" $"ABB5 B0C1 C1BD B8C1 9EC8 9BEB A3FF DB00" $"D101 1C13 5245 5F7C 7544 7C76 4772 7575" $"7878 7676 7940 3D3C F93E 323D 3E71 4576" $"7678 7278 A3CF AEA4 7F7A 757C 76AD CFAB" $"A578 4775 7C78 787A 7478 7377 7776 7674" $"7475 7B7C A6DC FFA3 7E7B 7599 CBD1 FED6" $"06AA 867B 4A75 447B FE75 0040 EC3E 0D7D" $"A7A8 564A 6B88 8356 8882 5D84 8308 8389" $"8982 828B 585B 5AF8 593B 5A85 5E82 828A" $"8481 ABCB A9A4 7F88 8388 82A9 CBAA A489" $"5D83 898A 8A87 8288 838B 8B82 8284 8483" $"8980 AACE F1A5 8088 839B CCC7 CCCB CBA4" $"7F88 5B83 5688 FE83 005A EC59 1587 B1B0" $"6A5F 99B3 B88F B5B0 9EC1 B8B8 C6C6 B0B0" $"C799 A4FE A3FB A340 A4A5 CAA8 AEAE C8C2" $"A5CC B18D A47F BEBA B5B0 8DB0 A09A C69E" $"B8BE C8C8 BCB7 BCB8 D1D1 B0B0 C2C2 B7BC" $"91BA 628C AD89 BDB8 9ACB 888E 8B8B 7E56" $"BD94 B88F BDB8 BABA A4EC A302 AAD1 D101" $"2C13 6445 5F4C 757B 7676 7871 7B7B 7241" $"767C 7240 3C3C FC3E 0040 FC3E 3C77 767C" $"7841 7E78 AEA8 A99A 7544 7C92 ADA8 A681" $"7272 7B75 7241 757B 4273 4471 767C 497A" $"7C75 7C96 FCD8 A384 757B 7E7E A4D5 D6AF" $"D1D1 9075 747B 7B75 7B7B FE3E 0040 EF3E" $"0DA2 A7A8 684A 6B5A 8388 8282 8983 8808" $"8884 5882 8884 585A 5AFC 5942 5A59 595A" $"5A59 8A82 888A 5887 81A9 A3A9 9A83 5688" $"9CA9 A4A5 7F84 8488 8384 5883 8856 835F" $"8582 885D 898A 8380 9AEF CAA5 8683 8880" $"809B CCCB A5CB CB9D 8382 8888 8389 89FE" $"5900 5AEF 5914 ABB1 B07B 5F99 89B8 BDB0" $"B0C6 C0BD BDC1 99B0 B5C1 99FD A3FE A342" $"A4A3 A3A5 A5A3 CFAE B3C8 9BAA A58D 88A9" $"9ABA 91B5 C88D 879B 75C1 C1BD B8C2 9BB8" $"BD8F B8AA CCB0 B59F C8BD B791 AB87 5DAD" $"8FB8 BD7F 7F55 8D8B 5FA8 A8D0 B8B7 BDBD" $"B8BF BFFE A300 A4EF A302 CCD1 D101 290F" $"4955 407E 757B 3F78 757B 4475 7879 7347" $"FC3E 0040 FE3E 003D FD3E 3F77 7D72 4076" $"7C75 7B7E A4A7 AD78 7E7E 99A8 ADA3 7E7B" $"7578 417B 767B 7578 7275 7B74 7B76 7644" $"7B7E 93D8 D9CB 8575 7578 727B 75A5 CDD4" $"ADCB 7F78 7275 4A72 7275 44EF 3EFF 3F0D" $"7CA7 A849 564C 8783 8857 8A83 8856 0483" $"898A 855D FC59 005A FE59 0058 FD59 4182" $"8784 5882 8883 8880 A5A4 A981 8780 9AA3" $"A8AB 8788 8389 5888 8388 8389 8483 8882" $"8882 8256 8887 9BCC CDCB 8583 8389 8488" $"83A4 CCCC A5CB 7F89 8483 5B84 8483 565A" $"5AF1 59FF 5A12 88B1 B055 6175 AAB8 BD9A" $"C8B8 BD8F B8C6 C7C2 9EFC A300 A4F9 A341" $"B0B5 C199 B0B5 B8BD 89AE 9197 A5AA 89A3" $"888C CCAA BDB8 C699 BDB9 BDB8 C9C4 B8BD" $"B7BD AEAE 8FBD AABE 7273 CB85 B8B8 C6C1" $"BDB8 9AC2 976C CB7F C6C1 B894 C1C1 B88F" $"A5A5 EFA3 02B5 DBD1 0118 0F55 6872 787B" $"7578 7244 757B 753F 7278 72F3 3EFF 77FF" $"78FF 763A 7B75 7EA8 ADA8 A378 99A8 A8A9" $"7878 757B 7278 757B 7543 7978 7544 7B75" $"767C 7575 46A3 FAD9 A47F 4A75 783F 757B" $"8181 ACD4 9A7F 7247 7575 7847 7544 3FF0" $"3EFF 3FFF A70B A856 697B 8188 838A 8456" $"8388 0483 5784 8984 F359 FF82 FF8A FF82" $"3B88 8380 AAA9 A5AB 819A AAA3 A481 8183" $"8884 8983 8883 558A 8983 5688 8382 8883" $"8352 ABEE CDA4 7F5B 8389 5783 887F 7FA4" $"CC9A 7F84 5D83 8389 5D83 565B 5AF1 59FF" $"5AFF B110 B061 73A0 A5BD B8C8 C28F B8BD" $"B898 C1C6 C1FB A3F9 A3FF B0FF C6FF B03B" $"BDB8 89B2 9792 CCA5 A3B2 8889 A5A5 B8BD" $"C1C6 B8BD B88F CAC9 B88F BDB8 AEB3 B8B8" $"7ACC 9873 A47F 94B8 C698 B8BD 7575 6B97" $"9A7F C19E B8B8 C69E B88F A6A5 EFA3 FFDB" $"00D1 0112 FF45 0D3A 7974 447A 747B 7B72" $"787B 757B 75F3 3E3F 4178 4475 7778 497A" $"7F7A A4A9 9B9A 9AA9 A67C 757B 4179 4576" $"7B44 757B 7676 7878 7342 7841 7B7B 7C96" $"DAFB A181 757B 767C 829E 9E84 817C 787E" $"767C 7278 7676 7B75 EE3E 0E40 7CA7 A84A" $"4A50 8982 5689 8388 8884 0489 8883 8883" $"F359 3F58 8A56 8388 8951 8186 81A4 A99B" $"9A9A A9AA 8083 8858 8B55 8288 5683 8882" $"8289 8983 5689 5888 8880 9ACD EEA4 8583" $"8882 887F 9B99 7F86 8081 8782 8884 8982" $"8288 83EE 5913 5A87 B0B0 5F5F 8ABD B78F" $"C6C1 BDBD C1C6 BDB8 BDB8 FBA3 F9A3 3F9B" $"C88F B8C5 C670 9DA9 A5A4 A99B 9A9A A9BC" $"93B8 BD9B C88F B8BD 8FB8 BDB0 B0C6 C6B8" $"8FC6 99BD BD91 AB6A 90B5 97B8 BDAE B360" $"7E7D 6199 93A5 AAB0 B5C1 C6B0 B0BD B8EE" $"A303 A4B6 DCD3 0117 FF52 0D3A 7976 7B74" $"4975 7578 4175 7C75 43F7 3E00 40FE 3E0B" $"7279 757B 4172 95A5 957A 7F99 FD9A 1F96" $"7C7B 7578 7276 7C74 757B 7576 7C41 7273" $"7972 7875 757C A6D6 DAA6 7C7A 7576 76FD" $"CF0B A1A7 9379 7676 7247 767C 757B EE3E" $"0E3D A7A7 A856 5650 8983 8883 5C83 8389" $"0458 8389 8355 F759 005A FE59 0B84 8B83" $"8858 849B AB9B 817F 99FC 9A25 8088 838A" $"8482 8882 8388 8382 8858 8483 8984 8983" $"8380 AAC9 CDAA 8087 8382 82CC CCCB CBA5" $"AB9B FE82 0584 5D82 8883 88EE 5900 58FE" $"B0FF 6A0D 8ABD B9BD C19E B8B8 C699 B8BE" $"B88F FBA3 FDA3 00A4 FEA3 0BC2 C8B8 BD99" $"C1B6 C4BE A57F 99FD 9A1F AD93 BDB8 C8C2" $"B8BD B7B8 BDB8 B0B5 99C1 B8BD C1C6 B8B8" $"91BA 666A BA91 BCB8 AEAE FDB1 0BB7 BDBE" $"A6B0 B0C1 9EB0 B5B8 BDED A3FF DC00 D301" $"180E 4564 4078 7872 7777 7841 747B 7544" $"78F2 3E43 7544 7B75 7B75 7C97 997E 7D93" $"A99A A99A 757B 7378 767C 7841 7B7B 4178" $"4772 7B7B 4772 7B75 4772 8095 D6FF A37F" $"447B 85A3 D6D6 ABD3 D4AD D2B1 AB9A 807F" $"7A80 4273 7B44 3F3F F53E FF3F FF3E 0D80" $"AAA9 4A68 4C81 8984 8181 8958 8203 8883" $"568B F259 4183 5688 8388 8380 9B9A 8086" $"9BA9 9AA9 9A83 8885 8982 8889 5889 8958" $"895D 8488 885D 8488 835D 8487 9BC9 F2A4" $"7F56 8885 A4CC CCA5 CCCC A5CB A9A9 9880" $"7F81 8756 8389 56EF 5911 86B0 B15F 7B75" $"A5C6 C1AE AEC6 99B7 BDB7 8FD0 FAA3 F9A3" $"41B8 8FBD B8BD B891 ACA3 89A9 BEA9 9AA9" $"9AB8 BDC2 C6B7 BCC6 99BC BC99 C69F C2BD" $"BD9E C1BD B89E C1AA BE66 95AD 898F BD8F" $"AD83 8373 9E97 6C9F 7AA0 9080 7F9D A28F" $"B8BF 91EF A302 AAD1 D201 200D 5245 7878" $"4178 7D77 7872 7B75 7B75 F63E 013D 40FE" $"3E0B 7B75 757B 757B 7CA6 99A8 7878 FD9A" $"337A 7478 3F76 4472 7875 7578 7172 7875" $"7572 7844 7578 724A A4DA D6A3 8575 757F" $"A3D6 D6AB ABD4 ADAB D2A5 ABCB AA95 9573" $"7975 753F 3FF5 3EFF 3FFF 3E0D A5AA A856" $"4A81 8158 8987 8189 8488 0283 8983 F659" $"0158 5AFE 590B 8883 8388 8388 80AA 9AAA" $"8181 FD9A 3187 8289 5782 5484 8983 8389" $"8384 8A83 8384 8956 8389 8453 ABCD C9A4" $"8583 837F A4CC CCA5 A5CC A5A4 CBA3 A9CB" $"AA9B 9B83 8983 83EF 5910 ABB0 B06A 5FA5" $"A599 C6B3 AEC6 C1BD B8BC B7F9 A3FD A300" $"A4FE A30B BDB8 B8BD B8BD 91BA A3B2 A5A5" $"FD9A 31BC B7C6 98B7 8EC1 C6B7 B7C6 C0C2" $"C8B8 B8C1 C68F B8C6 C17B CC6A 66AD 8FB8" $"B889 AD83 8373 7397 6C74 9F9B A0CB AAB6" $"B6B8 BDBA BAEF A302 CCD1 D101 290F 4853" $"3E7C 7C76 4178 447B 7247 757B 3E3D F93E" $"003D FC3E 0F44 7B7B 7541 7878 9397 7C7C" $"767B 7572 78FE 7530 7B80 957A 7A73 4775" $"7B75 754A 7578 7175 7B75 7B7B A5D8 FFA6" $"7B78 477E 94D4 D4A4 8578 A3A5 95CD A5AB" $"A5AB 9BA9 8A78 7278 41F8 3E00 3DFB 3E0D" $"7CA7 A84A 554E 8888 8258 8A56 8884 045D" $"8388 5958 F959 0058 FC59 0F56 8888 8358" $"8A81 9B9B 8088 8288 8384 89FE 8330 8887" $"9B81 8185 5D83 8883 835B 838B 8483 8883" $"8880 AACA F1AA 7F89 5D87 9CCC CCA4 8581" $"ABAB 9BCC A4AA A4A9 99A9 8A89 8489 58F8" $"5900 58FB 5910 88B1 B055 6081 B5B3 AE9B" $"C88F BDC1 9EB8 BDF9 A3F9 A30F 8FBD BDB8" $"9BC8 A5BE AE93 B3AE BDB8 C1C6 FEB8 30BD" $"A2B6 9D9D C29E B8BD B8B8 94B8 C8C2 B8BD" $"B8BD 91BA 5D8C BA91 C69E AABF 8D8D A485" $"A5CC C4B6 C29A A09A A091 A98A C6C1 C699" $"F1A3 02B5 DBD1 0133 0254 663E FE76 0878" $"7275 7578 7275 443D F83E FF3D FD3E FF75" $"4644 7578 727E 797C 9676 777B 7578 3F75" $"4A7B 757A 9595 7A78 727B 7544 7B75 7677" $"3F7B 7575 7B7B 96FF D8A1 8172 7278 78D4" $"ADCB 7E7E 7880 7A81 819B ABA5 AB9A 9A47" $"7178 723E 3D3E 3E40 F93E 083D 3E3E A7A7" $"A957 684E FE82 048A 8483 8389 0384 8356" $"58F8 59FF 58FD 59FF 8346 5683 8A84 8782" $"809A 8283 8883 8957 835B 8883 819B 9B81" $"8984 8883 5688 8383 8A58 8883 8388 809B" $"F1CA A485 8484 8181 CCA5 CB7E 8781 8781" $"7F7F 9AAA A3A9 9A9A 5D83 8984 5958 5959" $"5AF9 5902 5859 59FE B10D 6171 81B0 AEAE" $"C8C2 B8B8 C6C1 B88F F9A3 F9A3 FFB8 418F" $"B8C8 C2AA A693 ADAE AFBD B8C6 98B8 94BD" $"B89D B6B6 9DC6 C1BD B88F BDB8 B9C8 9BBD" $"B8B8 BD91 AB8D 5DB5 97C1 C1A5 A58D 61CB" $"7EAA A5A2 9D75 7590 A09B A09A 9A9E C0C6" $"C1FD A300 A4F6 A3FF DB00 D201 2C0C 4552" $"467C 7247 7178 7741 757B 77F0 3E3A 757B" $"7A74 7872 7676 A378 767C 4178 757B 7B75" $"7878 9999 747B 754A 7278 767C 7247 767C" $"7247 7C45 7E92 CFD4 A378 7278 7575 ADD4" $"CF83 7278 777D 7B75 7DFE 7607 937E 7878" $"7C76 7C76 FD41 013B 3CFD 3FFD 3E0D 80AA" $"AB4A 5655 8884 5D83 8A89 5883 0188 8AF0" $"593A 8388 8983 8984 8282 AB81 8288 588A" $"8388 8883 8181 9A9A 8288 835B 848A 8288" $"845D 8288 845D 8855 879B C7CC AB81 848A" $"8383 A6CC CC80 848A 8187 8883 89FE 8207" $"9B87 8181 8882 8882 FD58 0559 5A59 595A" $"5AFD 590F 87B0 AF5F 6A87 B5C1 9EC2 C8C7" $"9BB8 BDCF F8A3 F9A3 49B8 BDC6 C1C6 C1AE" $"AECC A5AE B39B C8B8 BDBD B8A5 A5A3 A3B7" $"BDB8 94C1 C6B0 B5C1 9EB0 B5C1 9EBD 8FAA" $"BC92 97CC A5C2 C8B8 B86D 97B1 61C2 C8AE" $"B3BD B8B4 AEB0 B0BE AAA5 A5B3 AEB5 B099" $"999B 9BF7 A302 AAD1 BF01 270B 5245 5E76" $"7872 7841 7279 7544 F03E 3A40 4475 7943" $"7247 7C76 787E 7576 7872 7B75 757B 7878" $"7FA9 757B 7575 7246 7676 7872 7676 7872" $"7676 7877 B2AD 787E 4178 7B7A ADD4 CF9E" $"7841 7777 757C FE76 007C FD78 FD76 0578" $"7272 413C 3CFD 3FFD 3E0D AAC2 C456 4A6C" $"8289 848A 5884 8B83 0056 F059 3A5A 5683" $"8857 845D 8882 8187 8182 8A84 8883 8388" $"8181 7FA9 8388 8383 845D 8282 8984 8282" $"8984 8282 8180 AAA5 8187 588A 8887 A5CC" $"CC9A 8A58 8181 8389 FE82 0088 FD81 FD82" $"0989 8484 585A 5A59 595A 5AFD 590E B0C8" $"C76A 5F9B B0C6 C1C8 9BC2 C8B8 8FF7 A3FA" $"A33E A48F B8C5 99C1 9EB3 AEA5 AAAD AEC8" $"C2BD B8B8 BDA5 A589 B2B8 BDB8 B8C1 9EB0" $"B0C6 C1B0 B0C6 C1B8 B8A4 A372 6CA5 AA9B" $"C8BD BC6C 97B1 7DC8 9BAE AEB8 BEAE AEB0" $"B5FD A5FF AEFF B003 C6C1 C29B F7A3 02D1" $"E9D7 0139 0B48 673E 7C41 7976 7679 7378" $"72EF 3E0F 747A 7378 7C76 757B 7893 767C" $"7575 7247 FE78 10A3 7676 7247 757B 7972" $"7841 7841 7878 4375 FE78 3A72 7C76 7B75" $"783F 7677 ADA7 D2AB 767D 7841 7F78 9BAB" $"AB9B 9A9A 9999 7C96 7A95 7A7A 7877 7278" $"7543 7575 4171 7C76 A9D5 A84A 694E 8857" $"8982 828A 858A 0084 F159 FF5A 0F83 8985" $"8987 8283 8881 9C82 8883 8384 5DFE 812A" $"AB82 8284 5D83 8889 838A 5889 588A 8A55" $"838A 8A89 8488 8288 838A 5782 82A9 A4CB" $"A482 8989 5888 819A AAA9 99FD 9A03 809A" $"819B FE81 1980 8489 8355 8383 5883 8882" $"B0DC B055 7281 B597 C4B0 B0C7 C2C8 C2F7" $"A3FB A3FF A50F C1C6 C2C6 B6B1 B8BD A4BD" $"AEB3 BABA C19E FEA5 43CC B0B0 C29F B8BD" $"C4BF C89B C699 C8C8 8FB8 C8C8 C6C1 BDB8" $"BDB8 C89A ACAD 9791 9F74 B0B6 C699 ABA5" $"90A0 A091 9A9A A3A3 93AD 9DB6 9D9D A5A4" $"C1C6 B88F B8B8 9BC2 B3AE CAF4 D101 3A0B" $"5467 3E76 7972 767C 7841 7841 EF3E 4749" $"7447 7276 767B 7578 7E76 7674 4A78 7378" $"787E 7876 7C78 727B 7441 7972 7872 7872" $"4175 7B3F 7241 7876 457B 7572 7876 7C83" $"CED2 B176 7672 7878 93A5 9BA5 9BA9 9BA8" $"7EA6 7CAB 7B7A 95FE 7801 4175 FE7B 1177" $"7876 76A9 C1A8 5769 4E82 8983 8288 8958" $"8A00 58F1 59FF 5A09 5C83 5D84 8282 8883" $"8187 FE82 3F5B 8985 8181 8781 8288 8A84" $"8882 5789 848A 8489 8458 8388 5784 5889" $"8255 8883 848A 8287 7FCB CBA9 8282 8489" $"819B A49A A399 A99B AA80 AA80 B182 819B" $"8181 8958 83FE 8812 898A 8282 B0C8 B061" $"7281 B0C4 BFB0 B5C6 99C8 9BF7 A3FB A3FF" $"A54C 9EC1 9EC1 B1B1 BDB8 A4AA AEAE B996" $"C6C2 A5A5 AAA5 B0B5 C8C2 BDB7 97C4 C2C8" $"C1C6 C29B B8BD 9AC2 99C6 B88F BDB8 C2C8" $"ACB2 6BBA 9F7A B0B0 C1C6 A5BE 9A90 9B91" $"A99B B289 BC93 CA9E 9DB6 A5A5 C699 B8FE" $"BD06 C7C8 AEAE CAE1 D101 3E09 4854 4676" $"777C 4772 7575 ED3E FF75 4976 7C47 7247" $"727B 7576 7C76 7B76 757C 7695 7A7B 7572" $"7876 7C76 7678 7275 7C71 3F7B 757B 7578" $"727B 7B72 4576 7778 4181 A1D6 AE93 7E44" $"7B7A 95AB AB96 9676 767B 7475 7676 757B" $"7B76 7B76 7CFD 7611 7544 7847 AAAA D44A" $"5655 8283 885D 8483 8359 FC59 FF5A FF59" $"FD5A FB59 FF83 4982 885D 845D 8488 8382" $"8883 8882 8188 829B 8188 8384 8982 8882" $"828A 8483 8984 5888 8388 8389 8488 8884" $"5C82 8389 5886 A5CC A59B 8756 8880 9BA9" $"A99A 9A82 8289 8281 8282 8188 8884 8982" $"88FD 8210 8356 8A5D B0B0 DB53 5F87 B0B9" $"BD9E C1B8 B8FB A3FF A5FF A3FF A5FF A5FB" $"A3FF BA54 AEB3 9EC1 9EC1 BDB8 AEB3 B9BD" $"B0AF B3AE BEA5 BDB8 C1C6 B8BD AEAE C8C2" $"B8BE C29B BDB8 BDB8 C6C1 BDBD C19D B8B9" $"C699 99B7 8E61 BFAC 8FBD 9BB4 9E9E ADAD" $"AEAE BFB9 ADAE B0AF BDBD BABF AEB3 B0B0" $"AEAE BA91 C89F CACA FB01 40FF 5407 707C" $"4577 7278 447C ED3E 6144 7B76 7678 7278" $"7275 7B76 767B 7576 7C76 7680 7A7B 7478" $"4176 437C 7641 7944 7577 3F44 757B 7578" $"4175 7478 727B 4378 727C A6D5 D593 7E76" $"7580 959B A596 8176 7C75 7B7C 767C 7675" $"757B 7576 767C 767C 767B 7572 72AA C3A8" $"5656 7C88 5583 8489 5689 59FC 59FF 5AFF" $"59FD 5AFB 5960 5689 8282 8984 8984 8388" $"8282 8883 8288 8282 8781 8882 8958 8254" $"8882 588B 5683 8A58 5683 8883 8958 8382" $"8984 8754 8984 80AA CCCC 9B87 8383 869B" $"9AA4 9A86 8288 8389 8882 8882 8383 8983" $"8282 8882 8882 8983 8484 B0C8 B05F 5FAA" $"B58F B9C1 C68F BEFB A3FF A5FF A3FF A5FF" $"A5FB A356 91BF AEAE C6C1 C6C1 B8BD AEAE" $"BDB8 B0B5 AEAE AAA5 BDB7 C699 B88E B3AE" $"9BC8 8FB8 C89B 8FB8 BDB8 C699 B8B7 C6C1" $"BC8E C6C1 93BC 8D8D BFAC B9B8 A0B4 8E98" $"AD99 AEB3 BABF B3AE B5B0 B8B8 BFBA AEAE" $"B5B0 B3AE BFBA C2C2 CAE1 D101 38FF 450B" $"3E76 7878 757B 7241 3E3E 3C3C F13E 467C" $"7577 4175 7B72 7875 757D 7775 7B76 7675" $"7A75 7B72 4576 767B 7B72 787B 7578 7875" $"443E 3E71 4576 7678 4172 7875 7B76 767E" $"93AD AD9A 7F78 4776 769B ABA9 8A7C 767B" $"7573 737C 767E FE78 177C 7676 7776 7647" $"7278 78A8 ADC4 4A4A 4E82 8989 8388 8458" $"5902 595A 5AF1 5940 8983 8958 8389 8489" $"8383 8781 8388 8282 8387 8388 855D 8282" $"8888 8489 8883 8A8A 8356 5959 845E 8282" $"8A58 8489 8388 8282 879B A4A4 9A7F 895D" $"8282 9AAA A98A 8882 89FE 8302 8882 87FE" $"8116 8882 8283 8282 5D84 8989 B0B5 C75F" $"5F81 B0C6 C6B8 BDC1 99F5 A3F9 A346 BEB8" $"C79B BABF C1C6 B8B8 B3AE B8BD AEAE B8BC" $"B8BD C39F AEAE BDBD C1C6 BDB8 C6C6 B78F" $"A3A3 CAA8 AEAE C89B C1C6 B8BD AEAE AABE" $"6A6A 9A7F C69E B0B0 90A0 A98A B3AE BFBA" $"B8B8 B5B0 AAFE A50C B3AE B0B1 AEAE 9EC1" $"C6C6 D1D6 D701 400D 5264 3E7C 7241 7B75" $"4141 3E3E 3C3C F63E 003D FD3E 4975 4479" $"727B 7541 7844 7A77 777B 757C 767B 757B" $"7571 7776 7C75 7678 4175 7B72 4075 433D" $"3E45 7176 7C78 7278 4175 7B76 7C78 78D4" $"D4CB 7F72 7276 7C9B A59A 9A76 7675 4479" $"7976 7678 9478 78FE 7614 7C76 7C72 7841" $"72A8 D0AB 5668 4E88 8458 8883 5858 5902" $"595A 5AF6 5900 58FD 5949 8356 8B84 8983" $"5889 5687 8181 8883 8882 8883 8883 848A" $"8288 8383 8958 8388 8458 8355 5859 5E84" $"8288 8A84 8958 8388 8288 8181 CCCC CB7F" $"8484 8288 9AA4 9A9A 8282 8356 8989 8282" $"819C 8181 FE82 1388 8288 8489 5884 B0D7" $"AF6A 7B81 B5C1 99BD B899 99F5 A3F9 A33A" $"B88F C8C2 BFBA 99C6 8FBC AEAE BDB8 B3AE" $"BDB8 BDB8 C2C8 AEB3 B8B9 C699 B8BD C199" $"B78E A3A3 A8CA AEB3 C8C2 C699 B8BD AEB3" $"A5A5 9595 CB7F C1C1 B0B5 90FE 9AFF AE16" $"BA91 BDBD B0B0 A5BF A5A5 AEAE B0B5 AEB3" $"C1C6 99C1 D1F7 BF01 3A06 4552 7878 7B75" $"77EC 3EFF 3F35 747A 757B 7247 7676 7B75" $"7278 4475 7278 7241 7147 7676 4772 4772" $"757B 7544 7B7A 7841 3E3E 4172 7841 767C" $"757B 7543 7841 7B75 AEA8 A883 FE78 2442" $"7E92 A99A 9580 4778 7544 7C76 9580 757B" $"757B 7B75 4A75 7872 7B75 A7AD CF4A 5681" $"8188 838A FD59 FE59 FF5A FD59 FF5A FB59" $"FF5A 5D84 8983 8884 5D82 8288 8384 8956" $"8384 8984 5883 5D82 825D 845D 8483 8883" $"5688 878A 5859 5958 8489 5882 8883 8883" $"5589 5888 83A9 A3A3 7E89 898A 5987 9AA9" $"9A9B 875D 8983 5688 829B 8783 8883 8888" $"835B 8389 8488 83B1 B6D7 5F6A A5A5 BDB8" $"CFFA A3FF A5FD A3FF A5F9 A356 C2C8 B8BD" $"C19E AEAE BDB8 C1C6 8FB8 C1C6 C29B C09E" $"B0B0 9EC1 9EC1 B8BD B88F BDBC C89B A3A3" $"9BC2 C699 B0B5 B8BD B88F C699 BDB8 8D88" $"916B C6C6 C89C AABD A99A B6A2 9EC6 B88F" $"B5B0 B6A2 B8BD B8BD BDB8 94B8 C9C4 BDB8" $"D1D6 F601 3906 5245 4078 7B75 3DEC 3EFF" $"3F1C 437A 7544 7873 7C75 7B75 4572 7B75" $"7841 7878 7278 7C76 7972 7278 4475 7BFE" $"753D 7241 3E3E 4141 7278 7576 7B75 7B75" $"7871 7B75 9ED0 CF9E 723F 7278 7879 9AA9" $"947A 7272 7B76 7675 7A95 7B75 7B75 757B" $"7575 4078 757B A7C0 AD56 4A4C 8188 8358" $"FD59 FE59 FF5A FD59 FF5A FB59 FF5A 1C57" $"8983 5689 8588 8188 835C 8488 8389 588A" $"8A84 8988 828A 8484 8956 8388 FE83 3C84" $"5859 5958 5884 8981 8288 8388 8389 8388" $"8399 CCCA 9984 5784 8A81 829A A99A 8184" $"8488 8382 8181 9B88 8388 8383 8883 8358" $"8983 88B1 C9B5 6A5F 75A5 BDB8 F9A3 FFA5" $"FDA3 FFA5 F9A3 1C9B C8B8 8FC6 C2B3 ADBD" $"B89D C1BD B8C6 99C8 C8C1 C6B5 B0C7 C1C1" $"C68F B8BD FEB8 36C2 9BA3 A39B 9BC1 C6AF" $"B0BD B8BD B8C6 C0BD B87D B2BA 86C1 98C2" $"C8A5 A69A A9B5 9DC1 C1BD B9B0 AF9D B6BD" $"B8BD B8B8 BDB8 B89D C9B8 BDD1 E8D6 0135" $"0548 673C 7B41 78FE 3E00 40ED 3E21 7576" $"7879 757B 7278 4273 7C76 7278 7575 7277" $"7575 7942 7279 7872 7A7B 7278 7841 7841" $"FD3E 1541 7247 7844 7B41 7875 7B41 787A" $"A093 7E75 7B7B 7575 7BFE 9907 9A76 7C72" $"787C 927E FE78 127C 7648 7272 787B 754A" $"75A8 A8C4 4A69 4F88 5889 FE59 015A 59FE" $"59FF 5AF3 59FF 831F 8A8B 8388 8489 5683" $"8882 8489 8383 8489 8383 8956 8389 8984" $"8889 848A 8958 8A58 FD59 2058 845D 8956" $"8858 8A83 8858 8A81 A69B 8783 8888 8383" $"889A 9A99 9A82 8884 8988 9C87 FE81 1288" $"825E 8484 8988 835B 83B0 B0C7 5572 8ABD" $"99C6 FEA3 00A4 FDA3 FFA5 FBA3 F9A3 21B8" $"B9C8 C8B8 BDC1 C68F B8B3 AEC1 C6B8 B8C2" $"C7BA BABD 8FBF C4C6 C1BC BCC2 C8C6 99C8" $"9BFD A320 99C1 9EC6 8FBD 9BC8 B8BD 9BC8" $"9DC0 BEAA B8BD BDB8 B8BD A4A4 999A B0B5" $"C1C6 B5C8 AAFE A50C B3AE 9FC1 C1C6 BDB8" $"96BA D1D1 D701 3F05 5455 4475 7241 FC3E" $"023D 3E3D F63E 0040 FD3E 2144 7B41 727B" $"7541 7973 7977 7645 7244 7B78 4175 4A73" $"7379 4172 4775 7578 4172 7872 41FE 3E37" $"3D41 4172 7275 7578 7144 7578 727A 8078" $"787B 7575 447B 757E 999A 9A76 7647 7276" $"7C77 9378 7876 7678 7247 7276 7B75 75A8" $"D4AB 5758 5683 8458 FC59 0458 5958 5A5A" $"F859 005A FD59 2156 8858 8488 8358 8A83" $"8983 825C 8456 888A 5883 5B83 8389 5784" $"5D83 838A 5884 8984 58FE 59FE 58FF 84FF" $"8310 8A83 5683 8A84 8187 8181 8883 8356" $"8883 7FFE 9AFF 821A 5D84 8288 809B 8181" $"8282 8984 5D84 8388 8383 B0DB AF61 628F" $"B8C1 99F9 A3FF A5FB A3FE A300 A4FD A321" $"8FBD 9BC2 BDB8 99C7 B8BD AFAE 9DC1 8FBD" $"C89B BA96 B8B8 C497 C19E B7B7 C89B C1C6" $"C29B FDA3 FF99 FFC1 FFB8 2AC8 C28F B8C8" $"C29D A2A5 A5BD B8B8 8FBD B88A A49A 9AB0" $"B09E C1B0 B5A4 BEA5 A5AE AEC6 C19E C1B9" $"BDBA BAD1 FBBF 0135 0352 455D 7BFE 3E00" $"40ED 3E27 403E 757B 757B 4475 7872 7C75" $"4778 757B 7972 757B 767C 7377 757B 7677" $"7841 757B 7373 7841 3E3E 403F FE3E FF78" $"2F72 767C 7772 757B 7B75 7872 4772 7B7B" $"7278 7676 A99A 7A80 7676 7871 7B76 7E78" $"757B 767C 7379 4475 7878 AAAA CF56 4A6C" $"88FE 5903 5A59 595A 005A F159 5C5A 5983" $"8883 8856 8389 8489 835D 8983 888A 8483" $"8882 8885 8883 8882 8389 5883 8883 838A" $"5859 595B 5A59 595A 8C89 8482 8889 8483" $"8888 838A 845D 8488 8884 8982 82A9 9A81" $"8782 828A 8489 8487 8183 8882 8883 8956" $"838A 8AB0 B0D7 6A5F 9BB5 FEA3 04A4 A3A3" $"A5A5 F7A3 FBA3 23A4 A3B8 BDB8 BD8F B8C6" $"C1BE B89E C6B8 BDC7 C1B8 BDAE B3C2 C5B8" $"BDB0 B1C6 99B8 BDB8 B8C8 9BFB A32E A5D2" $"C6C1 B0B5 C7C2 B8BD BDB8 C8C2 9FC2 BDBD" $"C1C6 B0B0 A898 A5AA AEAE C6C0 BCB8 AAA5" $"B8BD B0B5 B8BD 8FB8 C8C8 CACA F601 2403" $"5245 3D45 E73E 2544 757B 757B 7678 4175" $"7B72 737B 7572 4775 7B77 7647 727C 757C" $"7678 727B 7548 7372 413E 3E3F 3FFE 3E31" $"3D72 4776 7672 4775 4475 7B41 7872 7875" $"7447 727C 759A AA95 7A7C 7646 7275 7B78" $"937B 7576 7679 737B 7541 73AA C3AD 564A" $"4E55 FB59 005A 005A EF59 5A56 8388 8388" $"8389 5883 8884 8588 8384 5D83 8883 825D" $"8489 8388 8289 8488 835C 8384 5859 595A" $"5A59 595A 5984 5D82 8284 5D83 5683 8858" $"8A84 8A83 825D 8488 819A AA9B 8188 825D" $"8483 8981 9B88 8382 8289 8388 8358 85B0" $"C8B5 6A5F 8187 FBA3 FFA5 F7A3 F9A3 218F" $"B8BD B8BD B9C6 99B8 BDC1 C2BD B8C1 9EB8" $"BDAF AE9E C1BE B8B5 B0C6 C1BD B894 B8C2" $"9BFB A32E A5A4 C19E B0B0 C29F B88F B8BD" $"9BC8 C2C8 B8B7 9EC1 B5AF 98A9 BEA5 B3AE" $"9EC1 B7BC A5BE BDB8 B0B0 BDB8 BDB8 9BC3" $"CAE1 D601 1503 523F 3C43 E73E 2172 7843" $"7578 727C 7747 7272 7875 4A75 7B75 7547" $"717B 7572 4775 4A75 7C44 7B72 7878 41F8" $"3E33 7771 457C 767B 7C72 7876 7678 7240" $"7877 7D72 787A 959A 9A75 7B76 7677 727C" $"7679 787D 7741 7872 7875 7BA8 ADC7 5643" $"5057 5959 5A5A FE59 EE59 2184 8A55 8389" $"8488 835D 8484 8A83 5B83 8883 835D 8388" $"8384 5D83 5B83 8956 8884 898A 58F8 5933" $"8A85 5E88 8288 8984 8982 8289 8458 8981" $"8784 8981 9B9A 9A83 8882 8288 8488 8282" $"8187 8258 8984 8A83 88B0 B5C7 614E 8D93" $"A3A3 A5A5 F3A3 F9A3 21C2 C88F B8C6 C1B3" $"AF9E C1C1 C6B8 94B8 BDB8 B89E C0BD B8C2" $"9FB8 94B8 BE8F BDC1 C6C8 9BF8 A32B CFCA" $"A8BD B8BD BEC1 C6B0 B0C6 C19D C9AE B3C1" $"C69D B69A 9AB8 BDB0 B0C5 C1BD B8A6 A5B5" $"B099 C6C2 C8B8 BDD3 D8C7 0112 0346 2900" $"43E7 3E1A 4178 757B 7247 7676 7872 7840" $"7575 7B75 447B 7278 7544 7872 7475 7BFE" $"7503 7841 7241 F73E 3245 7176 7C75 7547" $"7376 7C41 7872 7877 7747 7281 95A9 9A75" $"4476 7C47 7276 7C78 7877 7779 7278 417B" $"75A8 CFC7 4A2E 2457 5959 5A5A FE59 EE59" $"1A58 8A83 8884 5D82 8289 848A 5883 8388" $"8356 8884 8983 568A 8482 8388 FE83 0389" $"5884 58F7 5932 5E85 8288 8383 5D85 8288" $"5889 8489 8181 5D84 889B A99A 8356 8288" $"5D84 8288 8181 8282 8A84 8A58 8883 B0D7" $"C755 3A5C 93A3 A3A5 A5F3 A3F9 A31A 9BC8" $"B8BD C19E AEAE C6C1 C699 B8B8 BDB8 8FBD" $"C1C6 B88F C8C2 B7B8 BDFE B803 C699 C29B" $"F7A3 2AA8 CAB8 BDB8 B89E C2B0 B599 C6C4" $"C9AE AE9E C1A3 B6A9 9AB8 8FB0 B59E C1B8" $"BDA5 A5B0 B0C7 C1C8 9BBD B8D3 F8C7 0122" $"FF00 013C 43EB 3E25 3D3E 3E3F 7576 7872" $"4475 7878 757B 4178 7772 757B 7B75 7B75" $"7878 7278 7B75 447B 7671 767C 7141 FE3E" $"0040 FB3E 1F41 7278 417B 7576 7C45 7276" $"7678 4178 7276 7B72 7295 957B 7B71 7776" $"7678 727B 75FC 7609 7C72 47AA AAAD 0909" $"5057 FD59 FF5A 0059 F259 2558 5958 5981" $"8289 8456 8389 8983 8858 8988 8483 8888" $"8388 838A 8A84 8989 8356 8889 8582 8883" $"58FE 5900 5AFB 591F 5884 8958 8883 8288" $"5C84 8282 8A58 8984 8287 8484 9B9B 8888" $"848A 8282 8984 8883 FC82 0988 845D B0B0" $"B522 228D 93FD A3FF A5F5 A3F9 A321 B7B8" $"C6C1 8FB8 C6C6 B8BD 99C6 C5C1 B8BD BDB8" $"BDB8 C8C8 C1C6 BFBA 8FBD CFCA AEB3 C29B" $"FEA3 00A4 FBA3 2A9B C2C6 99BD B8AE B39D" $"C1AE AEC8 9BC6 C1B0 B4C1 C1B6 B6BD BDC2" $"C8AE AEC6 C1BD B8B0 B0AE AEB0 B5C1 9ECA" $"CAD6 0120 0310 0000 43ED 3E00 3DFE 3E23" $"413F 4B76 4178 7C75 7241 7B76 7872 7247" $"7544 757B 4475 4172 7941 757B 7675 4577" $"7675 783F F73E 2E3F 4141 7275 7B76 7672" $"787D 7778 7272 4776 7647 787A 8075 7577" $"3F7C 7647 7275 7B76 7D76 7C76 7578 72AA" $"D1C2 1A09 2557 FD59 FF5A 0059 F459 0058" $"FE59 235A 595A 8258 8989 8384 5888 8389" $"8484 5D83 5683 8856 8358 848A 5883 8983" $"835E 8A82 818A 57F7 592E 5758 5884 8388" $"8282 8489 8983 8A84 845D 8282 5D89 8187" $"8383 8A58 8882 5D84 8388 8289 8288 8281" $"8984 B0D7 C934 225D 93FD A3FF A5F5 A3FB" $"A323 A4A3 94B8 99C6 BEB8 C199 BDB9 C6C1" $"C19E B88F B8BD 8FB8 9BC2 C799 BABF B9B8" $"A8CF AEAD C89A F7A3 2A9A 9B99 C1B8 BDAE" $"AEC1 C6B4 AFC8 C2C1 9EB0 B09E C69D A2B8" $"B8C8 9BB3 AE9E C1B8 BDB0 B6AE B3B0 AFC6" $"C1CA EFE9 011E 0301 0D3C 43FE 3E02 3D3F" $"3FED 3E0D 757B 7B75 7278 757B 447B 7575" $"7872 FE7B FF75 0E7B 7878 7676 4772 7872" $"7575 7847 7644 F83E 2F40 3F3F 3E3E 4470" $"4778 7872 4178 4475 7872 7878 7676 7B76" $"7177 7575 7278 7676 7B75 7B75 7676 7247" $"7676 A8AD AB0A 1650 57FE 5903 585A 5A59" $"FC59 FF5A F559 0D83 8889 8384 8983 8856" $"8883 838A 84FE 88FF 830E 888A 8A83 835D" $"8489 8483 8389 5D83 56F8 5900 5AFD 592A" $"5F84 5D89 8A84 5889 5683 8984 8A8A 8282" $"8883 858A 8383 8489 8282 8883 8883 8282" $"845D 8282 B0B4 AF22 2F8D 93F5 A3FF A5FD" $"A3F9 A30D B8BD BCB7 C1C6 B8BD 8FBD B8B8" $"C8C2 FEBD FFB8 0EBD C8C8 AEAE 9EC1 C6C1" $"B8B8 C69E B98F F8A3 00A4 FDA3 26AA CB9E" $"C6C8 C299 C691 BAC6 C1C8 C8AE AEBD B9CA" $"CFB8 B8C1 C6B0 B0BD B8BD B8AE AEC1 9EAE" $"AED1 D6BF 0112 0301 2800 43FD 3EFF 3FED" $"3E0D 4375 757B 7247 757B 7575 447B 4178" $"FE75 1144 7B75 7241 767C 7278 4178 754A" $"7172 7544 3DF8 3EFF 3FFD 3EFF 7226 4178" $"7278 757B 4178 7141 767C 4475 4577 447B" $"7245 767B 4475 7B75 757B 7278 767C A8C1" $"D20A 2E25 57FD 59FF 5A00 59FC 59FF 5AF5" $"590D 5583 8389 845D 8388 8383 5688 588A" $"FE83 1156 8883 8458 8388 8489 5889 835B" $"8384 8356 58F4 59FF 5AFF 8426 588A 8489" $"8389 5889 8358 8288 5683 5E8A 5688 845C" $"8287 5683 8883 8187 8489 8288 B0C8 D622" $"455D 93F5 A3FF A5FD A3F9 A30D 8FB8 B7BC" $"C19E B8BD B8B8 8FBD 9BC8 FEB8 108F BDB8" $"C29B AEB3 C1C6 99C6 B894 C0C1 B88F F3A3" $"FFA5 FFC1 229B C8C1 C6BA BF99 C6C2 9BAE" $"B38F B8A8 CF8F BDC1 9DB0 B48F B8BD B8AD" $"B3C1 C6AE B3D1 E8E5 0106 030F 013C 44EF" $"3EFF 3CFB 3E1D 7378 4475 7872 7872 7B7B" $"757B 7676 4773 7878 7278 747B 7872 7B75" $"7B75 7872 FE78 0041 F33E FF3C FF3E 2678" $"7278 737C 757B 757B 7A72 7875 7B76 7678" $"727C 7678 7278 7875 7B77 7778 7278 41A8" $"ADAB 180A 5056 FA59 F659 FF5A FB59 2385" $"8956 8389 8489 8488 8883 8982 825D 858A" $"8A84 8982 8889 8488 8388 838A 8489 898A" $"585A 5AF5 59FF 5AFF 5926 8A84 8A85 8983" $"8983 8887 848A 8389 8282 8984 8782 8984" $"8989 8388 8181 8A84 8958 B0B5 AF30 228C" $"91EF A3F9 A323 C5C9 8FB8 C6C1 C6C1 BDBD" $"B7BC B0B0 9EC2 C8C8 C1C6 B7BD C6C1 BDB8" $"BDB8 C8C2 C6C6 C89B A5A5 F1A3 22C8 C2C8" $"C3BE B8BC B7BD BCC1 C6B7 BCAE AEC6 C1B2" $"ACC6 C1C6 C6B8 BDAE AEC8 C2C6 99D1 D6BF" $"0106 0301 0F00 44EF 3EFF 3CFB 3E21 4078" $"7B75 4772 7247 7575 7B75 7C76 7872 4172" $"7841 7B76 4178 7544 757B 4178 7341 7241" $"F33E FF3C FF3E FF41 2472 4775 7B75 4475" $"7546 727B 757C 7572 4776 7645 7272 417C" $"757D 7741 7872 78A8 D0C4 0A18 2456 FA59" $"F659 FF5A FB59 2358 8988 835D 8484 5D83" $"8389 8388 8289 8458 8489 5888 8358 8983" $"5683 8858 8A85 5884 585A 5AF5 59FF 5AFF" $"59FF 5824 845D 8388 8356 8383 5D84 8983" $"8881 845D 8282 5C84 8458 8983 8781 588A" $"8489 B0D7 C722 305B 91EF A3F9 A323 9DC9" $"BDB8 9EC1 C19E B8B8 BCB7 B5B0 C6C1 9BC2" $"C699 BDB9 99C6 B88F B8BD 9BC8 C299 C29B" $"A5A5 F1A3 FF9B 20C2 9FB8 BDB7 8FB8 B89E" $"C1BC B7B3 ADC1 9EAC AC9D C1C1 99BE B8B3" $"AE9B C8C1 C6D1 F7D7 00F8 0329 003C 43EF" $"3EFF 3CFB 3EFF 7318 7278 7676 7B75 7345" $"7245 7544 7872 7B7B 7178 7575 7C76 7177" $"7BFE 7503 7872 7941 EC3E 233D 7443 757B" $"7872 7B75 7247 7247 757B 7377 767D 7B75" $"7247 757B 7B44 7675 AAD6 A82F 0750 57FA" $"59F6 59FF 5AFB 59FF 8318 8489 8282 8883" $"855C 845C 8356 8984 8888 8389 8383 8882" $"858A 88FE 8307 8984 8B58 5959 5A5A F059" $"2358 8457 8388 8A84 8883 845D 845D 8388" $"8588 8288 8883 845D 8388 8856 8383 B0DB" $"B043 1D8D 93EF A3F9 A3FF B818 C1C6 B0B0" $"BDB8 C39E C19D B78F C6C1 BDBD C0C6 B8B8" $"B3AE CACF BDFE B807 C6C1 C89B A3A3 A5A5" $"EFA3 1EC2 9BB8 BDC8 C2BD B8C1 9EC1 9EB8" $"BDC2 C5B8 BEBD B8C1 9EB8 BDBD 8FB9 B8CA" $"F3D1 00F6 0302 2900 43EF 3EFF 3CFB 3E21" $"4873 4772 757C 4375 7872 7872 757B 7247" $"7475 4179 754A 7676 4577 7544 7B7B 4179" $"7341 EB3E 1644 437B 7541 7875 4478 7278" $"727B 7578 417B 7644 7578 727B FE75 FF7B" $"06AA C4A8 092F 2557 FA59 F659 FF5A FB59" $"255C 835D 8481 8855 838A 8489 8483 8984" $"5D82 8358 8A83 5B82 825E 8A83 5688 8858" $"8A85 5859 595A 5AEF 5916 5857 8883 588A" $"8356 8984 8984 8883 8958 8782 5683 8984" $"88FE 83FF 8806 B0C9 B01F 435D 93EF A3F9" $"A325 94B8 9EC1 AFB5 8FB8 C8C2 C6C1 B7BC" $"C19E B7B8 99C7 B894 AEAE A8CF B88F BDBD" $"99C7 C39B A3A3 A5A5 EFA3 169C 9BBD B89B" $"C8B8 8FC6 C1C6 C1BD B8C6 99BC B88F B8C6" $"C1BD FEB8 FFBD 02CA E2D1 00B3 050F 013C" $"433D 3DED 3E03 403E 3C3C FD3E 0040 F33E" $"023D 3F3F FD3E FF3F FD3E FF3F EF3E 003D" $"FA3E 2041 7241 7472 7275 7B72 4176 7C75" $"7B78 7872 4176 7C47 727B 44AA AAD4 180A" $"5057 5858 FC59 F259 035A 595A 5AFD 5900" $"5AF3 5900 58FD 59FF 5AFB 59FF 5AEF 5900" $"58FA 591E 5884 608C 8484 8388 8458 8288" $"8388 8989 8458 8288 5D84 8856 B0B0 DB30" $"228D 93EF A3FD A300 A4FA A300 A4EE A3FD" $"A5E1 A31A 9BC2 B1D8 C1C1 B8BD C29B AEB3" $"B8BD C6C6 C29B AEB3 9EC1 BD8F CACA FB00" $"B403 020F 0043 E93E FF3C F83E 003D FA3E" $"0340 3E3E 3FFC 3E07 403F 3E3D 3E3E 3F40" $"F03E 003D F93E FF41 1C3A 3B41 4774 4478" $"7876 7744 7572 4178 7876 7672 7775 75AA" $"C3A8 0B18 2557 FA59 F059 FF5A F859 0058" $"FA59 005A FE59 0258 5959 FE5A FF59 0458" $"5959 5A5B F059 0058 F959 FF58 1C5B 5C58" $"5D82 568A 8A82 8356 8384 588A 8A82 8284" $"8883 83B0 C8B0 2330 5D93 EFA3 E8A3 00A4" $"FBA3 FFA5 01A6 A5E1 A3FF 9B18 ACAD 999E" $"B78F C8C8 AEAF 8FB8 C199 C8C8 AEAE C1C5" $"B8B8 CAE1 D100 B203 2900 3C43 F53E FF3F" $"F23E 003D F83E 003D FC3E 013D 40FE 3E04" $"3D3E 3F3F 3DFE 3EFF 3CE9 3E04 403E 3F3F" $"3DFD 3E17 3D3E 3E41 3B77 3E78 7241 7245" $"7145 713E 77A5 ABA8 2F06 5057 FA59 FC59" $"FF5A F259 0058 FD59 FF5A FF59 005A FB59" $"0158 5AFE 5904 5859 5A5A 58FE 59FF 5AE9" $"5904 5A59 5A5A 58FD 5917 5859 5960 5C8A" $"5989 8458 845E 855E 8559 8AB1 B6B0 3D15" $"8D93 EFA3 F1A3 FFA5 FFA3 01A5 A4FB A300" $"A4DC A300 A4F6 A310 B1AD CFA3 C6C1 9BC2" $"A8CA A8CA A3CF E3E8 D100 9403 0129 0043" $"F53E FF3F FA3E 0040 F13E 003F F63E 033D" $"3E3F 3FFD 3EFF 3CEA 3E04 3D3E 3E40 3FF9" $"3EFF 3B01 3E40 FD41 FD3E 083D 3E7B A5A9" $"072F 2457 FA59 FC59 FF5A FA59 005A F559" $"FF5A FF59 015B 5AF7 5903 5859 5A5A FD59" $"FF5A EA59 0458 5959 5B5A F959 FF5C 0159" $"5AFD 58FD 5908 5859 88B1 B117 3D5C 93EF" $"A3FE A300 A4F5 A3FF A5FF A301 A6A5 C9A3" $"FFAD 05A3 A499 999B 9BFB A302 BDE3 D201" $"37FF 000D 4048 4040 4141 4544 4343 4040" $"4444 FD41 0744 4340 4041 4144 44FD 41FF" $"42FF 4115 4344 4545 4141 4443 4444 4140" $"4241 4444 4343 4040 4444 FD41 FF44 FF41" $"0340 3F44 44FD 41FF 44FF 41FE 4300 42FD" $"41FF 44FF 40FF 4101 4443 FD41 FF45 FD41" $"FF44 FF43 FF41 FF42 FF41 FFA8 04A9 0B0C" $"4C53 FC57 0156 57FE 57FF 56FD 5701 5655" $"FD57 FF56 FD57 FF56 FF57 1556 5755 5557" $"5758 5756 5657 5658 5756 5657 5758 5856" $"56FD 57FF 56FE 57FE 56FD 57FF 56FF 57FF" $"5601 5756 FD57 FF56 FF58 FF57 0156 55FD" $"57FF 55FD 57FD 56FF 57FF 56FF 57FF B004" $"B127 2A75 7BFD 96FF 8FFD 96FF 8FFD 96FF" $"8FFD 96FF 8FFD 96FF 8FFF 961B 9798 8F8F" $"9696 9796 8F8F 9695 9897 8F8F 9696 9797" $"8F8F 9797 9696 8F8F FE96 0E95 8F8F 9595" $"9797 8F8F 9696 9595 908F FD96 FF8F FF97" $"FF96 FF8F FD96 FF8F FD96 FF8F FF97 FF96" $"FF8F FF96 FFDB 00D2 0162 7F29 0006 4000" $"383A 003D 3D00 3C38 003C 3C00 3A3A 003C" $"3C00 383A 003C 3C00 3A3A 003A 3A00 383C" $"003D 3D00 3A3C 003C 3E00 3A39 003C 3C00" $"3C38 003C 3C00 393A 003C 3C00 3A38 003C" $"3C00 3A38 003B 3C00 3A3C 003A 3A00 3A3A" $"003C 3C00 383A 003C 3C00 3A3A 003D 3D00" $"3A3A 003C 3C00 3C3A 003A 3A00 3A47 77A9" $"300B 1E4C 2851 5127 5050 277F 5051 284F" $"4F28 5151 284F 4F28 5151 274F 4F28 5151" $"2850 5028 5050 284F 4F27 5150 274F 5028" $"5151 284F 4F27 5052 284F 4F28 5151 284F" $"4F28 5151 284F 4F27 5150 284E 4F28 5150" $"2750 5028 5151 284F 4F28 5251 284F 4F28" $"5151 274F 4F28 5151 284F 4F28 5051 2850" $"5028 5154 82B1 4D27 4B75 6390 9062 8989" $"6390 9064 8A8A 6390 9063 8A8A 5E63 9090" $"628A 8A63 9090 638A 8A63 8F92 658A 8A62" $"9090 638A 8B63 9092 658A 8A63 9092 658A" $"8A65 9290 638A 8A63 9090 638A 8A62 8F91" $"6589 8A63 908F 628A 8A63 9090 648A 8A65" $"9290 638A 8A63 9090 628A 8A63 9090 638A" $"8A65 9290 638A 8A63 9087 B0D2 0162 7F0F" $"0002 0229 0002 0F00 0028 0000 0F00 000F" $"0002 2B00 000F 0001 0F00 0028 0000 0F00" $"000F 0000 2900 0011 0002 0F00 0028 0000" $"0F00 000F 0002 2A00 000F 0003 1200 0027" $"0000 1100 0011 0000 2900 000F 0001 0E00" $"0028 0000 0F00 000F 0002 2B00 000F 0001" $"0F00 0027 0000 0F00 000F 0000 2900 000F" $"000B 4A44 1808 0606 2F07 0918 0B0B 2F7F" $"0B07 180B 0C18 0706 2E0B 0B18 0709 180B" $"0B2F 0B07 180C 0D18 0706 2F0B 0B19 0709" $"180C 0C2F 0B07 180B 0C17 0606 2D0A 0A18" $"0708 170B 0B30 0C07 190C 0D19 0706 2F0B" $"0B18 0709 160C 0C2F 0B07 180B 0C18 0706" $"2E0C 0B18 0709 180B 0B30 0C07 180A 0C18" $"0706 2F0F 0F18 071C 5256 3021 1818 421B" $"1F2E 2727 4B27 1B2D 272A 2D1B 1840 2726" $"5E2E 1D1E 2D27 274B 271D 2E27 2A2E 1D15" $"3D27 272E 1B1F 2E27 274B 271B 2D27 2A2A" $"1818 3E25 252E 1D1E 2D27 264C 271D 2F27" $"2A2F 1D15 3D27 272D 1B1E 2B27 274B 271B" $"2D27 2A2D 1B18 4027 262E 1D1E 2D27 274C" $"271D 2E25 272E 1D15 3D30 302D 1B40 718F" $"0162 6C10 012B 1201 0E00 2900 0E00 0029" $"0128 0029 0112 0200 2802 2900 2900 0E00" $"002A 0227 0029 0210 0000 2801 2900 2900" $"0C00 0129 0128 002A 0211 0201 2802 2901" $"2B00 0E00 0027 0227 0029 0210 0000 2801" $"2900 2900 0C00 0029 0128 0029 0112 0200" $"2702 2900 2900 0E00 002A 0227 0029 0229" $"FE00 0F29 0126 003C 190A 2E17 0916 072F" $"0C19 0B7F 0C2F 092F 0B2F 0817 060C 2F09" $"2F07 2F0C 190B 0C30 0930 0C2F 0918 060C" $"2F09 2F07 2F0E 1A0B 0D2F 092F 0B30 0816" $"070C 3009 2F06 2E0C 190C 0D2E 0930 0C2F" $"0918 060C 2F09 2F07 2F0D 1A0B 0C2F 092F" $"0B2F 0817 060D 3009 2F07 2F0C 190C 0D30" $"092F 0A2F 092F 060F 112F 0931 114F 3222" $"402A 1E2B 1D43 2A38 272A 421E 4B27 421D" $"2A18 2A4B 5E1F 431B 422A 3827 2A44 1F4C" $"2743 1F28 152A 4B1E 421D 432B 3827 2B42" $"1E4B 2741 1B29 1A27 491F 431B 422A 3827" $"2A42 1F4C 2743 1F28 152A 4B1E 421B 422A" $"3827 2A42 1E4B 2742 1D2A 182A 4C1F 431B" $"422A 3827 2A44 1F49 2543 1F3D 1530 3342" $"1E53 338A 00FF" }; libiodbc-3.52.9/iodbcadm/macosx/administrator.c0000644000076400007640000017306412323210535016401 00000000000000/* * administrator.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include "getfpn.h" extern wchar_t* convert_CFString_to_wchar(const CFStringRef str); extern CFStringRef convert_wchar_to_CFString(wchar_t *str); extern void create_driverremove (HWND hwnd, TDRIVERREMOVE * driverremove_t); extern UInt32 DSN_nrows; extern UInt32 FDSN_nrows; static char *szComponentNames[] = { "org.iodbc.core", "org.iodbc.inst", "org.iodbc.adm", "org.iodbc.drvproxy", "org.iodbc.trans" }; CFStringRef Components_array[5][sizeof (szComponentNames) / sizeof (char *)]; UInt32 Components_nrows; CFStringRef ConnectionPool_array[3][256]; UInt32 ConnectionPool_nrows; extern TDSNCHOOSER *DSNCHOOSER; extern TDRIVERCHOOSER *DRIVERCHOOSER; extern UInt32 Drivers_nrows; extern CFStringRef Drivers_array[4][256]; /*static pascal Boolean admin_filter_tracefiles (AEDesc * item, void *info, NavCallBackUserData callBackUD, NavFilterModes filterMode) { Boolean display = true; NavFileOrFolderInfo *inf = (NavFileOrFolderInfo *) info; if (item->descriptorType == typeFSS) if (!inf->isFolder && inf->fileAndFolder.fileInfo.finderInfo.fdType != 'TEXT') display = false; return display; }*/ static pascal void admin_nav_events (NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, NavCallBackUserData callBackUD) { switch (callBackSelector) { case kNavCBEvent: switch (callBackParms->eventData.eventDataParms.event->what) { case nullEvent: break; case updateEvt: break; case activateEvt: break; default: break; }; break; }; } static pascal OSStatus component_getset_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean setValue) { OSStatus err = noErr; if (!setValue) switch (property) { case DBNAME_ID: err = SetDataBrowserItemDataText (itemData, Components_array[0][itemID - DBITEM_ID - 1]); break; case DBVERSION_ID: err = SetDataBrowserItemDataText (itemData, Components_array[1][itemID - DBITEM_ID - 1]); break; case DBFILE_ID: err = SetDataBrowserItemDataText (itemData, Components_array[2][itemID - DBITEM_ID - 1]); break; case DBDATE_ID: err = SetDataBrowserItemDataText (itemData, Components_array[3][itemID - DBITEM_ID - 1]); break; case DBSIZE_ID: err = SetDataBrowserItemDataText (itemData, Components_array[4][itemID - DBITEM_ID - 1]); break; case kDataBrowserItemIsActiveProperty: if (itemID > DBITEM_ID && itemID <= DBITEM_ID + Components_nrows) err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsEditableProperty: err = SetDataBrowserItemDataBooleanValue (itemData, itemID == DBITEM_ID); break; case kDataBrowserItemIsContainerProperty: err = SetDataBrowserItemDataBooleanValue (itemData, itemID == DBITEM_ID); break; case kDataBrowserContainerAliasIDProperty: break; case kDataBrowserItemParentContainerProperty: break; default: err = errDataBrowserPropertyNotSupported; break; } else err = errDataBrowserPropertyNotSupported; return err; } static void addcomponents_to_list (ControlRef widget) { DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[5] = { 100, 75, 100, 75, 50 }; SInt16 outBaseline; Point ioBound; CFStringRef itemref, libname = NULL; CFDictionaryRef bundledict; CFBundleRef bundle; CFBundleRef bundle0 = NULL; char *cbuff; struct stat _stat; CFURLRef liburl; int i, j; if (!widget) return; GetThemeDrawingState (&outState); /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); /* On Mac OS X 10.0.x : clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (component_getset_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, DBITEM_ID); /* Make the clean up */ for (i = 0; i < Components_nrows ; i++, item++) { CFRelease (Components_array[0][i]); Components_array[0][i] = NULL; CFRelease (Components_array[1][i]); Components_array[1][i] = NULL; CFRelease (Components_array[2][i]); Components_array[2][i] = NULL; CFRelease (Components_array[3][i]); Components_array[3][i] = NULL; CFRelease (Components_array[4][i]); Components_array[4][i] = NULL; RemoveDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); } /* Global Initialization */ Components_nrows = 0; item = DBITEM_ID + 1; /* Add lines by lines */ for (i = 0; i < sizeof (szComponentNames) / sizeof (char *); i++) { bundle = CFBundleGetBundleWithIdentifier (itemref = CFStringCreateWithCString (NULL, szComponentNames[i], kCFStringEncodingUTF8)); if (i == 0) bundle0 = bundle; if (bundle) { CFStringRef typeOfPackage = NULL; CFStringRef execName = NULL; BOOL isBundle = FALSE; bundledict = CFBundleGetInfoDictionary (bundle); Components_array[0][i] = CFStringCreateCopy (NULL, CFDictionaryGetValue (bundledict, CFSTR ("CFBundleName"))); Components_array[1][i] = CFStringCreateCopy (NULL, CFDictionaryGetValue (bundledict, CFSTR ("CFBundleVersion"))); Components_array[2][i] = CFStringCreateCopy (NULL, CFDictionaryGetValue (bundledict, CFSTR ("CFBundleIdentifier"))); typeOfPackage = CFDictionaryGetValue (bundledict, CFSTR ("CFBundlePackageType")); if (typeOfPackage && CFStringCompare(typeOfPackage, CFSTR("BNDL"), 0) == kCFCompareEqualTo) { isBundle = TRUE; } execName = CFDictionaryGetValue (bundledict, CFSTR ("CFBundleExecutable")); if (isBundle && bundle0) { CFMutableStringRef mstr; mstr = CFStringCreateMutableCopy(NULL, 0, execName); CFStringAppend(mstr, CFSTR(".bundle/Contents/MacOS") ); liburl = CFBundleCopyResourceURL (bundle0, execName, NULL, mstr); CFRelease(mstr); } else liburl = CFBundleCopyResourceURL (bundle, execName, NULL, NULL); if (liburl && (libname = CFURLCopyFileSystemPath (liburl, kCFURLPOSIXPathStyle))) { if ( cbuff = convert_CFString_to_char(libname) ) { /* Get some information about the component */ if (!stat (cbuff, &_stat)) { CFStringRef strRef; struct tm drivertime; char buf[100]; localtime_r (&_stat.st_mtime, &drivertime); strftime (buf, sizeof(buf), "%c", &drivertime); Components_array[3][i] = CFStringCreateWithCString(NULL, buf, kCFStringEncodingUTF8); Components_array[4][i] = CFStringCreateWithFormat(NULL, NULL, strRef = CFStringCreateWithCString(NULL, "%d Kb", kCFStringEncodingUTF8), (int) (_stat.st_size / 1024)); CFRelease(strRef); } else { Components_array[3][i] = CFStringCreateWithCString(NULL, "-", kCFStringEncodingUTF8);; Components_array[4][i] = CFStringCreateWithCString(NULL, "-", kCFStringEncodingUTF8);; } free(cbuff); } CFRelease (libname); } for(j = 0 ; j < 5 ; j++) { GetThemeTextDimensions (Components_array[j][i], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[j] < ioBound.h) colSize[j] = ioBound.h; } AddDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); item++; Components_nrows++; } CFRelease (itemref); } ActivateControl (widget); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (widget, DBNAME_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBVERSION_ID, colSize[1] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBFILE_ID, colSize[2] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBDATE_ID, colSize[3] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBSIZE_ID, colSize[4] + 20); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); if(outState) DisposeThemeDrawingState (outState); } static pascal OSStatus connectionpool_getset_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean setValue) { OSStatus err = noErr; if (!setValue) { switch (property) { case DBNAME_ID: SetDataBrowserItemDataText (itemData, ConnectionPool_array[0][itemID - DBITEM_ID - 1]); break; case CPTIMEOUT_ID: SetDataBrowserItemDataText (itemData, ConnectionPool_array[1][itemID - DBITEM_ID - 1]); break; case CPPROBE_ID: SetDataBrowserItemDataText (itemData, ConnectionPool_array[2][itemID - DBITEM_ID - 1]); break; case kDataBrowserItemIsActiveProperty: if (itemID > DBITEM_ID && itemID <= DBITEM_ID + ConnectionPool_nrows) err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsEditableProperty: err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsContainerProperty: err = SetDataBrowserItemDataBooleanValue (itemData, itemID == DBITEM_ID); break; case kDataBrowserContainerAliasIDProperty: break; case kDataBrowserItemParentContainerProperty: break; default: err = errDataBrowserPropertyNotSupported; break; } } else err = errDataBrowserPropertyNotSupported; return err; } pascal OSStatus cp_finish_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TCONNECTIONPOOLING *connectionpool_t = (TCONNECTIONPOOLING *) inUserData; wchar_t ptime[1024] = { L'\0' }, *prov; wchar_t pprobe[1024] = { L'\0' }; DataBrowserItemID first, last; OSStatus err = noErr; CFStringRef strRef; Size len; UWORD configMode; /* Retrieve the selected line */ if ((err = GetDataBrowserSelectionAnchor (connectionpool_t->driverlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + ConnectionPool_nrows) { /* Get the driver name and the timeout */ GetControlData (connectionpool_t->timeout_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &strRef, &len); /* Prepare to save it */ WCSCPY(ptime, L"CPTimeout="); prov = convert_CFString_to_wchar(strRef); CFRelease(strRef); if(prov) { WCSCAT(ptime, prov); free(prov); } GetControlData (connectionpool_t->probe_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &strRef, &len); /* Prepare to save it */ WCSCPY(pprobe, L"CPProbe="); prov = convert_CFString_to_wchar(strRef); CFRelease(strRef); if(prov) { WCSCAT(pprobe, prov); free(prov); } SQLGetConfigMode(&configMode); SQLSetConfigMode(ODBC_SYSTEM_DSN); prov = convert_CFString_to_wchar(ConnectionPool_array[0][first - DBITEM_ID - 1]); if(prov) { SQLSetConfigMode(ODBC_SYSTEM_DSN); if (!SQLConfigDriverW (connectionpool_t->mainwnd, ODBC_CONFIG_DRIVER, prov, ptime, NULL, 0, NULL)) _iodbcdm_errorboxw (connectionpool_t->mainwnd, prov, L"An error occurred when trying to set the connection pooling time-out "); SQLSetConfigMode(ODBC_SYSTEM_DSN); if (!SQLConfigDriverW (connectionpool_t->mainwnd, ODBC_CONFIG_DRIVER, prov, pprobe, NULL, 0, NULL)) _iodbcdm_errorboxw (connectionpool_t->mainwnd, prov, L"An error occurred when trying to set the connection probe query "); free(prov); } SQLSetConfigMode(configMode); addconnectionpool_to_list (connectionpool_t->driverlist, connectionpool_t->mainwnd); } } /* Destroy the dialog box */ DisposeWindow (connectionpool_t->mainwnd); free (connectionpool_t); return err; } pascal OSStatus cp_cancel_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TCONNECTIONPOOLING *connectionpool_t = (TCONNECTIONPOOLING *) inUserData; DisposeWindow (connectionpool_t->mainwnd); free (connectionpool_t); return noErr; } static void connectionpool_notification_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message) { TCONNECTIONPOOLING *connectionpool_t = malloc (sizeof (TCONNECTIONPOOLING)); EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; ControlRef controlRef; WindowPtr cptimeout; ControlID controlID; IBNibRef nibRef; OSStatus err; switch (message) { case kDataBrowserItemDoubleClicked: /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.adm")), CFSTR ("connectionpool"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ CreateWindowFromNib (nibRef, CFSTR ("Dialog"), &cptimeout); DisposeNibReference (nibRef); /* Get the different controls and attach callbacks */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, CPFINISH_CNTL, cptimeout, controlRef); InstallEventHandler (GetControlEventTarget (controlRef), NewEventHandlerUPP (cp_finish_clicked), 1, &controlSpec, connectionpool_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, CPCANCEL_CNTL, cptimeout, controlRef); InstallEventHandler (GetControlEventTarget (controlRef), NewEventHandlerUPP (cp_cancel_clicked), 1, &controlSpec, connectionpool_t, NULL); /* Set the right value */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, CPTITLE_CNTL, cptimeout, controlRef); SetControlData (controlRef, 0, kControlStaticTextCFStringTag, sizeof(CFStringRef), &ConnectionPool_array[0][itemID - DBITEM_ID - 1]); DrawOneControl (controlRef); GETCONTROLBYID (controlID, CNTL_SIGNATURE, CPTIMEOUT_CNTL, cptimeout, controlRef); SetControlData (controlRef, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &ConnectionPool_array[1][itemID - DBITEM_ID - 1]); DrawOneControl (controlRef); connectionpool_t->timeout_entry = controlRef; GETCONTROLBYID (controlID, CNTL_SIGNATURE, CPPROBE_CNTL, cptimeout, controlRef); SetControlData (controlRef, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &ConnectionPool_array[2][itemID - DBITEM_ID - 1]); DrawOneControl (controlRef); connectionpool_t->probe_entry = controlRef; /* Prepare the connection struct */ connectionpool_t->driverlist = browser; connectionpool_t->mainwnd = cptimeout; /* Show the window */ ShowWindow (cptimeout); SetPort ((GrafPtr) GetWindowPort (cptimeout)); } else goto error; break; }; return; error: fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); return; } void addconnectionpool_to_list (ControlRef widget, WindowRef dlg) { wchar_t drvdesc[1024], drvattrs[1024]; DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[3] = { 150, 150, 150 }; SInt16 outBaseline; Point ioBound; SQLSMALLINT len, len1; SQLRETURN ret; HENV henv; int i; if (!widget) return; GetThemeDrawingState (&outState); /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); /* On Mac OS X 10.0.x : clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (connectionpool_getset_item); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (connectionpool_notification_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, DBITEM_ID); /* Create a HENV to get the list of drivers then */ ret = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto end; } /* Set the version ODBC API to use */ SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER); /* Get the list of drivers */ ret = SQLDriversW (henv, SQL_FETCH_FIRST, drvdesc, sizeof (drvdesc) / sizeof(wchar_t), &len, drvattrs, sizeof (drvattrs) / sizeof(wchar_t), &len1); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto error; } /* Make the clean up */ for (i = 0; i < ConnectionPool_nrows; i++, item++) { CFRelease (ConnectionPool_array[0][i]); ConnectionPool_array[0][i] = NULL; CFRelease (ConnectionPool_array[1][i]); ConnectionPool_array[1][i] = NULL; CFRelease (ConnectionPool_array[2][i]); ConnectionPool_array[2][i] = NULL; RemoveDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); } /* Global Initialization */ ConnectionPool_nrows = 0; item = DBITEM_ID + 1; while (ret != SQL_NO_DATA) { ConnectionPool_array[0][ConnectionPool_nrows] = convert_wchar_to_CFString(drvdesc); /* Get the cp timeout */ SQLSetConfigMode (ODBC_BOTH_DSN); SQLGetPrivateProfileStringW (drvdesc, L"CPTimeout", L"", drvattrs, sizeof (drvattrs) / sizeof(wchar_t), L"odbcinst.ini"); if (drvattrs[0] == L'\0') SQLGetPrivateProfileStringW (L"Default", L"CPTimeout", L"", drvattrs, sizeof (drvattrs) / sizeof(wchar_t), L"odbcinst.ini"); ConnectionPool_array[1][ConnectionPool_nrows] = convert_wchar_to_CFString(WCSLEN(drvattrs) ? drvattrs : L""); SQLGetPrivateProfileStringW (drvdesc, L"CPProbe", L"", drvattrs, sizeof (drvattrs) / sizeof(wchar_t), L"odbcinst.ini"); if (drvattrs[0] == L'\0') SQLGetPrivateProfileStringW (L"Default", L"CPProbe", L"", drvattrs, sizeof (drvattrs) / sizeof(wchar_t), L"odbcinst.ini"); ConnectionPool_array[2][ConnectionPool_nrows] = convert_wchar_to_CFString(WCSLEN(drvattrs) ? drvattrs : L""); for(i = 0 ; i < 3 ; i++) { GetThemeTextDimensions (ConnectionPool_array[i][ConnectionPool_nrows], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } AddDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); item++; ConnectionPool_nrows++; /* Process next one */ ret = SQLDriversW (henv, SQL_FETCH_NEXT, drvdesc, sizeof (drvdesc) / sizeof(wchar_t), &len, drvattrs, sizeof (drvattrs) / sizeof(wchar_t), &len1); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO && ret != SQL_NO_DATA) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto error; } } error: /* Clean all that */ SQLFreeHandle (SQL_HANDLE_ENV, henv); end: ActivateControl (widget); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (widget, DBNAME_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, CPTIMEOUT_ID, colSize[1] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, CPPROBE_ID, colSize[2] + 20); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); if(outState) DisposeThemeDrawingState (outState); } pascal OSStatus driver_add_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDRIVERCHOOSER *choose_t = (TDRIVERCHOOSER *) inUserData; wchar_t connstr[4096] = { L'\0' }, tokenstr[4096] = { L'\0' }; DataBrowserItemID first, last; wchar_t *cstr; OSStatus err; if (choose_t) { cstr = (LPWSTR)create_driversetup (choose_t->mainwnd, NULL, (LPCSTR)connstr, FALSE, TRUE); if (cstr && cstr != connstr && cstr != (LPWSTR)- 1L) { SQLSetConfigMode (!wcscmp(cstr, L"USR") ? ODBC_USER_DSN : ODBC_SYSTEM_DSN); if (!SQLInstallDriverExW (cstr + 4, NULL, tokenstr, sizeof (tokenstr) / sizeof(wchar_t), NULL, ODBC_INSTALL_COMPLETE, NULL)) { _iodbcdm_errorboxw (choose_t->mainwnd, NULL, L"An error occurred when trying to add the driver"); goto done; } free (cstr); } adddrivers_to_list (choose_t->driverlist, choose_t->mainwnd, TRUE); done: if ((err = GetDataBrowserSelectionAnchor (choose_t->driverlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->b_remove); DeactivateControl (choose_t->b_configure); } } } return noErr; } pascal OSStatus driver_remove_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDRIVERCHOOSER *choose_t = (TDRIVERCHOOSER *) inUserData; TDRIVERREMOVE driverremove_t; DataBrowserItemID first, last; wchar_t tokenstr[4096] = { L'\0' }; wchar_t *szDriver; OSStatus err; if (choose_t) { /* Retrieve the DSN name */ if ((err = GetDataBrowserSelectionAnchor (choose_t->driverlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + Drivers_nrows) { /* Get the driver */ szDriver = convert_CFString_to_wchar(Drivers_array[0][first - DBITEM_ID - 1]); if(szDriver) { /* Initialize some values */ driverremove_t.dsns = 0; SQLSetConfigMode (ODBC_USER_DSN); if (SQLGetPrivateProfileStringW (szDriver, NULL, L"", tokenstr, sizeof (tokenstr) / sizeof(wchar_t), L"odbcinst.ini")) driverremove_t.dsns = 1; SQLSetConfigMode (ODBC_SYSTEM_DSN); if (SQLGetPrivateProfileStringW (szDriver, NULL, L"", tokenstr, sizeof (tokenstr) / sizeof(wchar_t), L"odbcinst.ini")) driverremove_t.dsns = driverremove_t.dsns || 2; /* Call the right function */ create_driverremove (choose_t->mainwnd, &driverremove_t); if (driverremove_t.dsns!=-1 && create_confirmw (choose_t->mainwnd, szDriver, L"Are you sure you want to perform the removal of this driver ?")) { if (driverremove_t.dsns & 1) { SQLSetConfigMode (ODBC_USER_DSN); if (!SQLRemoveDriverW (szDriver,driverremove_t.deletedsn,NULL)) { _iodbcdm_errorboxw (choose_t->mainwnd, szDriver, L"An error occurred when trying to remove the driver "); goto done; } } if (driverremove_t.dsns & 2) { SQLSetConfigMode (ODBC_SYSTEM_DSN); if (!SQLRemoveDriverW (szDriver,driverremove_t.deletedsn,NULL)) { _iodbcdm_errorboxw (choose_t->mainwnd, szDriver, L"An error occurred when trying to remove the driver "); goto done; } } adddrivers_to_list (choose_t->driverlist, choose_t->mainwnd, TRUE); } free(szDriver); } } } done: if ((err = GetDataBrowserSelectionAnchor (choose_t->driverlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->b_remove); DeactivateControl (choose_t->b_configure); } } } return noErr; } pascal OSStatus driver_configure_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDRIVERCHOOSER *choose_t = (TDRIVERCHOOSER *) inUserData; DataBrowserItemID first, last; wchar_t connstr[4096] = { L'\0' }, tokenstr[4096] = { L'\0' }; wchar_t *curr, *cour, *cstr, *szDriver; int size = sizeof (connstr) / sizeof(wchar_t); OSStatus err; UWORD conf = ODBC_USER_DSN; if (choose_t) { /* Retrieve the Driver name */ if ((err = GetDataBrowserSelectionAnchor (choose_t->driverlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + Drivers_nrows) { /* Get the driver */ szDriver = convert_CFString_to_wchar(Drivers_array[0][first - DBITEM_ID - 1]); /* Call the right function */ if (szDriver) { SQLSetConfigMode (ODBC_USER_DSN); if (!SQLGetPrivateProfileStringW (szDriver, NULL, L"", tokenstr, sizeof (tokenstr) / sizeof(wchar_t), L"odbcinst.ini")) { SQLSetConfigMode (conf = ODBC_SYSTEM_DSN); if (!SQLGetPrivateProfileStringW (szDriver, NULL, L"", tokenstr, sizeof (tokenstr) / sizeof(wchar_t), L"odbcinst.ini")) { _iodbcdm_errorboxw (choose_t->mainwnd, szDriver, L"An error occurred when trying to configure the driver "); goto done; } } for (curr = tokenstr, cour = connstr; *curr != L'\0' ; curr += (WCSLEN (curr) + 1), cour += (WCSLEN (cour) + 1)) { WCSCPY (cour, curr); cour[WCSLEN (curr)] = L'='; SQLSetConfigMode (conf); SQLGetPrivateProfileStringW (szDriver, curr, L"", cour + WCSLEN (curr) + 1, size - WCSLEN (curr) - 1, L"odbcinst.ini"); size -= (WCSLEN (cour) + 1); } *cour = L'\0'; cstr = (LPWSTR)create_driversetup (choose_t->mainwnd, (LPCSTR)szDriver, (LPCSTR)connstr, FALSE, (conf == ODBC_SYSTEM_DSN) ? FALSE : TRUE); if (cstr && cstr != connstr && cstr != (LPWSTR) - 1L) { SQLSetConfigMode (conf); if (!SQLInstallDriverExW (cstr + 4, NULL, tokenstr, sizeof (tokenstr) / sizeof(wchar_t), NULL, ODBC_INSTALL_COMPLETE, NULL)) { _iodbcdm_errorboxw (choose_t->mainwnd, NULL, L"An error occurred when trying to configure the driver "); goto done; } free (cstr); } adddrivers_to_list (choose_t->driverlist, choose_t->mainwnd, TRUE); } } } done: if ((err = GetDataBrowserSelectionAnchor (choose_t->driverlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->b_remove); DeactivateControl (choose_t->b_configure); } } } return noErr; } pascal OSStatus tracing_start_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TTRACING *tracing_t = (TTRACING *) inUserData; char *prov; CFStringRef strRef; Size strl; int mode; if (tracing_t) { /* Clear previous setting */ SQLSetConfigMode (ODBC_USER_DSN); SQLWritePrivateProfileString ("ODBC", "Trace", NULL, NULL); SQLSetConfigMode (ODBC_USER_DSN); SQLWritePrivateProfileString ("ODBC", "TraceAutoStop", NULL, NULL); SQLSetConfigMode (ODBC_USER_DSN); SQLWritePrivateProfileString ("ODBC", "TraceFile", NULL, NULL); SQLSetConfigMode (ODBC_USER_DSN); SQLWritePrivateProfileString ("ODBC", "TraceDLL", NULL, NULL); SQLSetConfigMode (ODBC_SYSTEM_DSN); SQLWritePrivateProfileString ("ODBC", "Trace", NULL, NULL); SQLSetConfigMode (ODBC_SYSTEM_DSN); SQLWritePrivateProfileString ("ODBC", "TraceAutoStop", NULL, NULL); SQLSetConfigMode (ODBC_SYSTEM_DSN); SQLWritePrivateProfileString ("ODBC", "TraceFile", NULL, NULL); SQLSetConfigMode (ODBC_SYSTEM_DSN); SQLWritePrivateProfileString ("ODBC", "TraceDLL", NULL, NULL); if (GetControlValue(tracing_t->trace_wide) == 1) mode = ODBC_USER_DSN; else mode = ODBC_SYSTEM_DSN; /* Write keywords for tracing in the ini file */ SQLSetConfigMode(mode); if(GetControlValue (tracing_t->trace_rb) == 2 || GetControlValue (tracing_t->trace_rb) == 3) SQLWritePrivateProfileString ("ODBC", "Trace", "1", NULL); else SQLWritePrivateProfileString ("ODBC", "Trace", "0", NULL); SQLSetConfigMode(mode); if(GetControlValue (tracing_t->trace_rb) == 3) SQLWritePrivateProfileString ("ODBC", "TraceAutoStop", "1", NULL); else SQLWritePrivateProfileString ("ODBC", "TraceAutoStop", "0", NULL); GetControlData (tracing_t->logfile_entry, kControlEditTextPart, kControlEditTextCFStringTag, sizeof (CFStringRef), &strRef, &strl); prov = (char*)convert_CFString_to_wchar(strRef); SQLSetConfigMode(mode); SQLWritePrivateProfileStringW (L"ODBC", L"TraceFile", (wchar_t*)prov, NULL); CFRelease(strRef); free(prov); GetControlData (tracing_t->tracelib_entry, kControlEditTextPart, kControlEditTextCFStringTag, sizeof (CFStringRef), &strRef, &strl); prov = (char*)convert_CFString_to_wchar(strRef); SQLSetConfigMode(mode); SQLWritePrivateProfileStringW (L"ODBC", L"TraceDLL", (wchar_t*)prov, NULL); CFRelease(strRef); free(prov); } return noErr; } pascal OSStatus tracing_logfile_choosen (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { NavDialogOptions dialogOptions; TTRACING *tracing_t = (TTRACING *) inUserData; NavReplyRecord reply; char tokenstr[4096] = { 0 }; OSStatus err; FSSpec file; char *dir; NavGetDefaultDialogOptions (&dialogOptions); STRCPY (dialogOptions.windowTitle + 1, "Choose your trace file ..."); dialogOptions.windowTitle[0] = STRLEN ("Choose your trace file ..."); STRCPY (dialogOptions.savedFileName + 1, "sql.log"); dialogOptions.savedFileName[0] = STRLEN ("sql.log"); err = NavPutFile (NULL, &reply, &dialogOptions, NewNavEventUPP (admin_nav_events), /*NewNavObjectFilterUPP (admin_filter_tracefiles)*/ 'TEXT', kNavGenericSignature, NULL); /* NavChooseObject (NULL, &reply, &dialogOptions, NewNavEventUPP (admin_nav_events), NewNavObjectFilterUPP (admin_filter_tracefiles), NULL);*/ if (!err && reply.validRecord) { /* Get and transform the file descriptor from the reply */ err = AEGetNthPtr (&reply.selection, 1, typeFSS, NULL, NULL, &file, sizeof (file), NULL); if (!err) { /* Get back some information about the directory */ dir = get_full_pathname (file.parID, file.vRefNum); sprintf (tokenstr, "%s/", dir ? dir : ""); strncat (tokenstr, (char *)&file.name[1], file.name[0]); /* Display the constructed string re. the file choosen */ SetControlData (tracing_t->logfile_entry, 0, kControlEditTextTextTag, STRLEN (tokenstr) ? STRLEN (tokenstr) : STRLEN ("sql.log"), STRLEN (tokenstr) ? tokenstr : "sql.log"); DrawOneControl (tracing_t->logfile_entry); /* Clean up */ if (dir) free (dir); } } NavDisposeReply (&reply); return noErr; } pascal OSStatus tracing_browse_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { NavDialogOptions dialogOptions; TTRACING *tracing_t = (TTRACING *) inUserData; NavReplyRecord reply; char tokenstr[4096] = { 0 }; OSStatus err; FSSpec file; char *dir; NavGetDefaultDialogOptions (&dialogOptions); STRCPY (dialogOptions.windowTitle + 1, "Choose your trace library ..."); dialogOptions.windowTitle[0] = STRLEN ("Choose your trace library ..."); STRCPY (dialogOptions.savedFileName + 1, "ODBC Trace Library"); dialogOptions.savedFileName[0] = STRLEN ("ODBC Trace Library"); err = NavChooseFile (NULL, &reply, &dialogOptions, NewNavEventUPP (admin_nav_events), NULL, NULL, NULL, NULL); if (!err && reply.validRecord) { /* Get and transform the file descriptor from the reply */ err = AEGetNthPtr (&reply.selection, 1, typeFSS, NULL, NULL, &file, sizeof (file), NULL); if (!err) { /* Get back some information about the directory */ dir = get_full_pathname (file.parID, file.vRefNum); sprintf (tokenstr, "%s/", dir ? dir : ""); strncat (tokenstr, &file.name[1], file.name[0]); /* Display the constructed string re. the file choosen */ SetControlData (tracing_t->tracelib_entry, 0, kControlEditTextTextTag, STRLEN (tokenstr), tokenstr); DrawOneControl (tracing_t->tracelib_entry); /* Clean up */ if (dir) free (dir); } } NavDisposeReply (&reply); return noErr; } pascal OSStatus admin_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *dsnchoose_t = (inUserData) ? ((void **) inUserData)[0] : NULL; TDRIVERCHOOSER *driverchoose_t = (inUserData) ? ((void **) inUserData)[1] : NULL; TTRACING *tracing_t = (inUserData) ? ((void **) inUserData)[2] : NULL; TCOMPONENT *component_t = (inUserData) ? ((void **) inUserData)[3] : NULL; TCONNECTIONPOOLING *connectionpool_t = (inUserData) ? ((void **) inUserData)[4] : NULL; WindowRef mainwnd = (inUserData) ? ((void **) inUserData)[5] : NULL; CFStringRef strRef; wchar_t *prov; Size strl; if (dsnchoose_t) { dsnchoose_t->udsnlist = dsnchoose_t->sdsnlist = dsnchoose_t->dir_list = NULL; dsnchoose_t->fadd = dsnchoose_t->fremove = dsnchoose_t->ftest = dsnchoose_t->fconfigure = NULL; dsnchoose_t->uadd = dsnchoose_t->uremove = dsnchoose_t->utest = dsnchoose_t->uconfigure = NULL; dsnchoose_t->sadd = dsnchoose_t->sremove = dsnchoose_t->stest = dsnchoose_t->sconfigure = NULL; dsnchoose_t->file_list = dsnchoose_t->file_entry = dsnchoose_t->dir_combo = NULL; dsnchoose_t->type_dsn = -1; dsnchoose_t->dsn = NULL; } if (driverchoose_t) driverchoose_t->driverlist = NULL; if (component_t) component_t->componentlist = NULL; if (tracing_t) { if (tracing_t->changed) tracing_start_clicked (NULL, NULL, tracing_t); tracing_t->logfile_entry = tracing_t->tracelib_entry = NULL; tracing_t->b_start_stop = tracing_t->trace_rb = NULL; } if (connectionpool_t) { if (connectionpool_t->changed) { UWORD configMode; SQLGetConfigMode(&configMode); /* Write keywords for tracing in the ini file */ SQLSetConfigMode(ODBC_SYSTEM_DSN); SQLWritePrivateProfileString ("ODBC Connection Pooling", "PerfMon", (GetControlValue (connectionpool_t->perfmon_rb) == 1) ? "1" : "0", "odbcinst.ini"); GetControlData (connectionpool_t->retwait_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &strRef, &strl); prov = (wchar_t*)convert_CFString_to_char(strRef); if(prov) { SQLSetConfigMode(ODBC_SYSTEM_DSN); SQLWritePrivateProfileString ("ODBC Connection Pooling", "Retry Wait", (char*)prov, "odbcinst.ini"); free(prov); } CFRelease(strRef); SQLSetConfigMode(configMode); } connectionpool_t->perfmon_rb = connectionpool_t->retwait_entry = NULL; connectionpool_t->driverlist = NULL; connectionpool_t->mainwnd = NULL; } if (mainwnd) { ((void **) inUserData)[5] = NULL; DisposeWindow (mainwnd); } return noErr; } pascal OSStatus admin_cancel_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *dsnchoose_t = (inUserData) ? ((void **) inUserData)[0] : NULL; TDRIVERCHOOSER *driverchoose_t = (inUserData) ? ((void **) inUserData)[1] : NULL; TTRACING *tracing_t = (inUserData) ? ((void **) inUserData)[2] : NULL; TCOMPONENT *component_t = (inUserData) ? ((void **) inUserData)[3] : NULL; TCONNECTIONPOOLING *connectionpool_t = (inUserData) ? ((void **) inUserData)[4] : NULL; WindowRef mainwnd = (inUserData) ? ((void **) inUserData)[5] : NULL; if (dsnchoose_t) { dsnchoose_t->udsnlist = dsnchoose_t->sdsnlist = dsnchoose_t->dir_list = NULL; dsnchoose_t->fadd = dsnchoose_t->fremove = dsnchoose_t->ftest = dsnchoose_t->fconfigure = NULL; dsnchoose_t->uadd = dsnchoose_t->uremove = dsnchoose_t->utest = dsnchoose_t->uconfigure = NULL; dsnchoose_t->sadd = dsnchoose_t->sremove = dsnchoose_t->stest = dsnchoose_t->sconfigure = NULL; dsnchoose_t->file_list = dsnchoose_t->file_entry = dsnchoose_t->dir_combo = NULL; dsnchoose_t->type_dsn = -1; dsnchoose_t->dsn = NULL; } if (driverchoose_t) driverchoose_t->driverlist = NULL; if (component_t) component_t->componentlist = NULL; if (tracing_t) { tracing_t->logfile_entry = tracing_t->tracelib_entry = tracing_t->b_start_stop = NULL; tracing_t->trace_rb = NULL; } if (connectionpool_t) { connectionpool_t->perfmon_rb = connectionpool_t->retwait_entry = NULL; connectionpool_t->driverlist = NULL; connectionpool_t->mainwnd = NULL; } if (mainwnd) { ((void **) inUserData)[5] = NULL; DisposeWindow (mainwnd); } return noErr; } void DisplayTabControlNumber (int index, ControlRef tabControl, WindowRef wnd, int *tabs) { ControlRef userPane; ControlID controlID; UInt16 i; controlID.signature = TABS_SIGNATURE; for (i = 1; i <= tabs[0]; i++) { controlID.id = tabs[i]; GetControlByID (wnd, &controlID, &userPane); SetControlVisibility (userPane, i == index, true); } DrawOneControl (tabControl); } pascal OSStatus admin_switch_page (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { int tabs[] = { NUMBER_TAB, UDSN_TAB, SDSN_TAB, FDSN_TAB, DRIVER_TAB, POOL_TAB, TRACE_TAB, ABOUT_TAB }; TDSNCHOOSER *dsnchoose_t = (inUserData) ? ((void **) inUserData)[0] : NULL; TDRIVERCHOOSER *driverchoose_t = (inUserData) ? ((void **) inUserData)[1] : NULL; TTRACING *tracing_t = (inUserData) ? ((void **) inUserData)[2] : NULL; TCOMPONENT *component_t = (inUserData) ? ((void **) inUserData)[3] : NULL; TCONNECTIONPOOLING *connectionpool_t = (inUserData) ? ((void **) inUserData)[4] : NULL; WindowRef mainwnd = (inUserData) ? ((void **) inUserData)[5] : NULL; BOOL trace = FALSE, traceauto = FALSE, perfmon = FALSE; DataBrowserItemID first, last; wchar_t tokenstr[4096] = { L'\0' }, tokenstr1[4096] = { L'\0' }; ControlRef tabControl; ControlID controlID; CFStringRef strRef; struct passwd *pwdent; int tab_index; OSStatus err; /* Search which tab is activated */ controlID.signature = TABS_SIGNATURE; controlID.id = GLOBAL_TAB; GetControlByID (mainwnd, &controlID, &tabControl); DisplayTabControlNumber (tab_index = GetControlValue (tabControl), tabControl, mainwnd, tabs); if (tab_index == *(int *) (((void **) inUserData)[6])) return noErr; ClearKeyboardFocus (mainwnd); *(int *) (((void **) inUserData)[6]) = tab_index; switch (tab_index) { /* User DSN panel */ case 1: if (dsnchoose_t) { DSNCHOOSER = dsnchoose_t; DSN_nrows = 0; dsnchoose_t->type_dsn = USER_DSN; adddsns_to_list (dsnchoose_t->udsnlist, FALSE, mainwnd); if ((err = GetDataBrowserSelectionAnchor (dsnchoose_t->udsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (dsnchoose_t->uremove); DeactivateControl (dsnchoose_t->uconfigure); DeactivateControl (dsnchoose_t->utest); } } } break; /* System DSN panel */ case 2: if (dsnchoose_t) { DSNCHOOSER = dsnchoose_t; DSN_nrows = 0; dsnchoose_t->type_dsn = SYSTEM_DSN; adddsns_to_list (dsnchoose_t->sdsnlist, TRUE, mainwnd); if ((err = GetDataBrowserSelectionAnchor (dsnchoose_t->sdsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (dsnchoose_t->sremove); DeactivateControl (dsnchoose_t->sconfigure); DeactivateControl (dsnchoose_t->stest); } } } break; /* File DSN panel */ case 3: if (dsnchoose_t) { DSNCHOOSER = dsnchoose_t; dsnchoose_t->type_dsn = FILE_DSN; addfdsns_to_list (dsnchoose_t, dsnchoose_t->curr_dir, false); if ((err = GetDataBrowserSelectionAnchor (dsnchoose_t->fdsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (dsnchoose_t->fremove); DeactivateControl (dsnchoose_t->fconfigure); DeactivateControl (dsnchoose_t->ftest); } } } break; /* ODBC drivers panel */ case 4: if (driverchoose_t) { DRIVERCHOOSER = driverchoose_t; adddrivers_to_list (driverchoose_t->driverlist, mainwnd, TRUE); if ((err = GetDataBrowserSelectionAnchor (driverchoose_t->driverlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (driverchoose_t->b_remove); DeactivateControl (driverchoose_t->b_configure); } } } break; /* Connection Pooling panel */ case 5: if (!connectionpool_t->changed) { /* Get the connection pooling options */ SQLGetPrivateProfileString ("ODBC Connection Pooling", "Perfmon", "", (char *)tokenstr, sizeof (tokenstr), "odbcinst.ini"); if (!strcasecmp ((char*)tokenstr, "1") || !strcasecmp ((char*)tokenstr, "On")) perfmon = TRUE; SQLGetPrivateProfileString ("ODBC Connection Pooling", "Retry Wait", "", (char*)tokenstr, sizeof (tokenstr), "odbcinst.ini"); if (perfmon) SetControlValue (connectionpool_t->perfmon_rb, 1); else SetControlValue (connectionpool_t->perfmon_rb, 2); strRef = CFStringCreateWithCString (NULL, (char *)tokenstr, kCFStringEncodingASCII); SetControlData (connectionpool_t->retwait_entry, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &strRef); DrawOneControl (connectionpool_t->retwait_entry); CFRelease(strRef); connectionpool_t->changed = TRUE; } addconnectionpool_to_list (connectionpool_t->driverlist, mainwnd); break; /* Tracing panel */ case 6: if (!tracing_t->changed) { int mode = ODBC_SYSTEM_DSN; /* Get the traces options */ SQLSetConfigMode (mode); SQLGetPrivateProfileStringW (L"ODBC", L"TraceFile", L"", tokenstr, sizeof (tokenstr) / sizeof(wchar_t), NULL); if (tokenstr[0] != L'\0') { /* All users wide */ SetControlValue (tracing_t->trace_wide, 2); } else { /* Only for current user */ mode = ODBC_USER_DSN; SQLSetConfigMode (mode); SetControlValue (tracing_t->trace_wide, 1); } SQLSetConfigMode (mode); SQLGetPrivateProfileString ("ODBC", "Trace", "", (char*)tokenstr, sizeof (tokenstr), NULL); if (!strcasecmp ((char*)tokenstr, "1") || !strcasecmp ((char*)tokenstr, "On")) trace = TRUE; SQLSetConfigMode (mode); SQLGetPrivateProfileString ("ODBC", "TraceAutoStop", "", (char*)tokenstr, sizeof (tokenstr), NULL); if (!strcasecmp ((char*)tokenstr, "1") || !strcasecmp ((char*)tokenstr, "On")) traceauto = TRUE; SQLSetConfigMode (mode); SQLGetPrivateProfileStringW (L"ODBC", L"TraceFile", L"", tokenstr, sizeof (tokenstr) / sizeof(wchar_t), NULL); SQLSetConfigMode (mode); SQLGetPrivateProfileStringW (L"ODBC", L"TraceDLL", L"", tokenstr1, sizeof (tokenstr1) / sizeof(wchar_t), NULL); /* Set the widgets */ if (trace) { if (!traceauto) SetControlValue (tracing_t->trace_rb, 2); else SetControlValue (tracing_t->trace_rb, 3); } else SetControlValue (tracing_t->trace_rb, 1); if( tokenstr[0] == L'\0' ) { wchar_t *prov; pwdent = getpwuid (getuid()); prov = dm_SQL_A2W (pwdent->pw_dir, SQL_NTS); WCSCPY (tokenstr, prov ? prov : L""); WCSCAT (tokenstr, L"/sql.log"); } strRef = convert_wchar_to_CFString(tokenstr); SetControlData (tracing_t->logfile_entry, kControlEditTextPart, kControlEditTextCFStringTag, sizeof(CFStringRef), &strRef); CFRelease(strRef); DrawOneControl (tracing_t->logfile_entry); strRef = convert_wchar_to_CFString(tokenstr1); SetControlData (tracing_t->tracelib_entry, kControlEditTextPart, kControlEditTextCFStringTag, sizeof(CFStringRef), &strRef); CFRelease(strRef); DrawOneControl (tracing_t->tracelib_entry); tracing_t->changed = TRUE; } break; /* About panel */ case 7: if (component_t) addcomponents_to_list (component_t->componentlist); break; }; AdvanceKeyboardFocus (mainwnd); return noErr; } pascal OSStatus filedsn_select_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *dsnchoose_t = (TDSNCHOOSER *) inUserData; if (dsnchoose_t) { MenuRef menu = GetControlPopupMenuHandle(dsnchoose_t->fdir); int id = GetControlValue (dsnchoose_t->fdir); CFStringRef menuText; char str[1024]; CopyMenuItemTextAsCFString(menu, id, &menuText); CFStringGetCString(menuText, str, sizeof(str), kCFStringEncodingUTF8); CFRelease(menuText); addfdsns_to_list (dsnchoose_t, str, true); } return noErr; } void create_administrator (HWND hwnd) { int tabs[] = { NUMBER_TAB, UDSN_TAB, SDSN_TAB, FDSN_TAB, DRIVER_TAB, POOL_TAB, TRACE_TAB, ABOUT_TAB }; EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; ControlRef tabControl, control; ControlID controlID; IBNibRef nibRef; OSStatus err; WindowPtr admin; void *inparams[7]; TDSNCHOOSER dsnchoose_t; TDRIVERCHOOSER driverchoose_t; TCOMPONENT component_t; TTRACING tracing_t; TCONNECTIONPOOLING connectionpool_t; RgnHandle cursorRgn = NULL; EventRecord event; int current_tab = -1; CFStringRef libname = NULL; CFBundleRef bundle; CFURLRef liburl; SInt16 rscId = -1, oldId = CurResFile(); FDSN_nrows = 0; Components_nrows = 0; DSN_nrows = 0; ConnectionPool_nrows = 0; Drivers_nrows = 0; if (hwnd == NULL) return; /* Load the ressource data file */ bundle = CFBundleGetBundleWithIdentifier (CFSTR("org.iodbc.adm")); if (bundle) { liburl = CFBundleCopyExecutableURL (bundle); if ((libname = CFURLCopyFileSystemPath (liburl, kCFURLPOSIXPathStyle))) { FSRef ref; char *pr1 = convert_CFString_to_char(libname); if(pr1) { char forkName[2048]; int i; STRCPY (forkName, pr1); free(pr1); for(i=STRLEN(forkName)-1 ; i>0 && forkName[i]!='/' ; i--); if (i != 0) { forkName[i] = '\0'; } for(i=STRLEN(forkName)-1 ; i>0 && forkName[i]!='/' ; i--); if(i != 0) { STRCPY (forkName + i + 1, "Resources/iODBCadm.rsrc"); err = FSPathMakeRef (forkName, &ref, FALSE); err = FSOpenResourceFile (&ref, 0, NULL, fsRdPerm, &rscId); } } CFRelease (libname); } } if(rscId != -1) UseResFile (rscId); /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.adm")), CFSTR ("odbcadmin"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ err = CreateWindowFromNib (nibRef, CFSTR ("Window"), &admin); if (err != noErr) goto error; /* And no need anymore the nib */ DisposeNibReference (nibRef); } else goto error; /* Find the tab control . */ GETCONTROLBYID (controlID, TABS_SIGNATURE, GLOBAL_TAB, admin, tabControl); /* Create for each tab a structure */ /* TDSNCHOOSER */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, ULIST_CNTL, admin, dsnchoose_t.udsnlist); GETCONTROLBYID (controlID, CNTL_SIGNATURE, SLIST_CNTL, admin, dsnchoose_t.sdsnlist); GETCONTROLBYID (controlID, CNTL_SIGNATURE, FLIST_CNTL, admin, dsnchoose_t.fdsnlist); GETCONTROLBYID (controlID, CNTL_SIGNATURE, UADD_CNTL, admin, dsnchoose_t.uadd); GETCONTROLBYID (controlID, CNTL_SIGNATURE, SADD_CNTL, admin, dsnchoose_t.sadd); GETCONTROLBYID (controlID, CNTL_SIGNATURE, FADD_CNTL, admin, dsnchoose_t.fadd); GETCONTROLBYID (controlID, CNTL_SIGNATURE, UDEL_CNTL, admin, dsnchoose_t.uremove); GETCONTROLBYID (controlID, CNTL_SIGNATURE, SDEL_CNTL, admin, dsnchoose_t.sremove); GETCONTROLBYID (controlID, CNTL_SIGNATURE, FDEL_CNTL, admin, dsnchoose_t.fremove); GETCONTROLBYID (controlID, CNTL_SIGNATURE, UTST_CNTL, admin, dsnchoose_t.utest); GETCONTROLBYID (controlID, CNTL_SIGNATURE, STST_CNTL, admin, dsnchoose_t.stest); GETCONTROLBYID (controlID, CNTL_SIGNATURE, FTST_CNTL, admin, dsnchoose_t.ftest); GETCONTROLBYID (controlID, CNTL_SIGNATURE, UCFG_CNTL, admin, dsnchoose_t.uconfigure); GETCONTROLBYID (controlID, CNTL_SIGNATURE, SCFG_CNTL, admin, dsnchoose_t.sconfigure); GETCONTROLBYID (controlID, CNTL_SIGNATURE, FCFG_CNTL, admin, dsnchoose_t.fconfigure); GETCONTROLBYID (controlID, CNTL_SIGNATURE, FDIR_CNTL, admin, dsnchoose_t.fdir); dsnchoose_t.type_dsn = USER_DSN; dsnchoose_t.mainwnd = admin; /* TDRIVERCHOOSER */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, DLIST_CNTL, admin, driverchoose_t.driverlist); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DADD_CNTL, admin, driverchoose_t.b_add); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DDEL_CNTL, admin, driverchoose_t.b_remove); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DCFG_CNTL, admin, driverchoose_t.b_configure); driverchoose_t.mainwnd = admin; /* TCONNECTIONPOOLING */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, PLIST_CNTL, admin, connectionpool_t.driverlist); GETCONTROLBYID (controlID, CNTL_SIGNATURE, PPERF_CNTL, admin, connectionpool_t.perfmon_rb); GETCONTROLBYID (controlID, CNTL_SIGNATURE, PRETR_CNTL, admin, connectionpool_t.retwait_entry); connectionpool_t.changed = false; connectionpool_t.mainwnd = admin; /* TTRACING */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, TLOG_CNTL, admin, tracing_t.logfile_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, TTRLIB_CNTL, admin, tracing_t.tracelib_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, TOPTI_CNTL, admin, tracing_t.trace_rb); GETCONTROLBYID (controlID, CNTL_SIGNATURE, TWIDE_CNTL, admin, tracing_t.trace_wide); GETCONTROLBYID (controlID, CNTL_SIGNATURE, TSTART_CNTL, admin, tracing_t.b_start_stop); tracing_t.changed = false; /* TCOMPONENT */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, CLIST_CNTL, admin, component_t.componentlist); /* Install an event handler on the tab control. */ InstallEventHandler (GetControlEventTarget (tabControl), NewEventHandlerUPP (admin_switch_page), 1, &controlSpec, inparams, NULL); /* Install an event handler on the OK button */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, OKBUT_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (admin_ok_clicked), 1, &controlSpec, inparams, NULL); /* Install an event handler on the Cancel button */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, CANCELBUT_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (admin_cancel_clicked), 1, &controlSpec, inparams, NULL); /* Install an event handler on the Apply button of the tracing panel */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, TSTART_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (tracing_start_clicked), 1, &controlSpec, &tracing_t, NULL); /* Install an event handler on the Browse button of the tracing panel (log file) */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, TLOGB_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (tracing_logfile_choosen), 1, &controlSpec, &tracing_t, NULL); /* Install an event handler on the Browse button of the tracing panel (lib file) */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, TLIBB_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (tracing_browse_clicked), 1, &controlSpec, &tracing_t, NULL); /* Install an event handler on the Add button of the user DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, UADD_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (userdsn_add_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Remove button of the user DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, UDEL_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (userdsn_remove_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Configure button of the user DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, UCFG_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (userdsn_configure_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Test button of the user DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, UTST_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (userdsn_test_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Add button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, SADD_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (systemdsn_add_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Remove button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, SDEL_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (systemdsn_remove_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Configure button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, SCFG_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (systemdsn_configure_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Test button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, STST_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (systemdsn_test_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Add button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, FADD_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (filedsn_add_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Remove button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, FDEL_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (filedsn_remove_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Select dir menu of the File DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, FDIR_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (filedsn_select_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Configure button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, FCFG_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (filedsn_configure_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Test button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, FTST_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (filedsn_test_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the SetDir button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, FSETDIR_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (filedsn_setdir_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Add button of the driver panel */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, DADD_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (driver_add_clicked), 1, &controlSpec, &driverchoose_t, NULL); /* Install an event handler on the Remove button of the driver panel */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, DDEL_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (driver_remove_clicked), 1, &controlSpec, &driverchoose_t, NULL); /* Install an event handler on the Configure button of the driver panel */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, DCFG_CNTL, admin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (driver_configure_clicked), 1, &controlSpec, &driverchoose_t, NULL); inparams[0] = &dsnchoose_t; inparams[1] = &driverchoose_t; inparams[2] = &tracing_t; inparams[3] = &component_t; inparams[4] = &connectionpool_t; inparams[5] = admin; inparams[6] = ¤t_tab; SQLSetConfigMode (ODBC_BOTH_DSN); if (!SQLGetPrivateProfileString("ODBC", "FileDSNPath", "", dsnchoose_t.curr_dir, sizeof(dsnchoose_t.curr_dir), "odbcinst.ini")) strcpy(dsnchoose_t.curr_dir, DEFAULT_FILEDSNPATH); /* Force to go on the first tab */ DisplayTabControlNumber (1, tabControl, admin, tabs); admin_switch_page (NULL, NULL, inparams); AdvanceKeyboardFocus (admin); /* Show the window */ ShowWindow (admin); SetPort ((GrafPtr) GetWindowPort (admin)); while (inparams[5]) WaitNextEvent (everyEvent, &event, 60L, cursorRgn); if(rscId != -1) { CloseResFile (rscId); UseResFile (oldId); } return; error: fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); if(rscId != -1) { CloseResFile (rscId); UseResFile (oldId); } return; } libiodbc-3.52.9/iodbcadm/macosx/messagebox.c0000644000076400007640000001210512323210535015642 00000000000000/* * messagebox.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include wchar_t* convert_CFString_to_wchar(const CFStringRef str); CFStringRef convert_wchar_to_CFString(wchar_t *str); void __create_message (HWND hwnd, SQLPOINTER dsn, SQLPOINTER text, SQLCHAR waMode, AlertType id) { CFStringRef msg, msg1; DialogRef dlg; SInt16 out; char buf[1024]; if (hwnd == NULL) return; if (waMode == 'A') { if (dsn) { STRCPY(buf, "DSN: "); STRCAT(buf, dsn); msg = CFStringCreateWithBytes (NULL, (unsigned char*)buf, STRLEN(buf), kCFStringEncodingUTF8, false); msg1 = CFStringCreateWithBytes (NULL, (unsigned char*)text, STRLEN(text), kCFStringEncodingUTF8, false); } else { STRCPY(buf, ""); msg = CFStringCreateWithBytes (NULL, (unsigned char*)text, STRLEN(text), kCFStringEncodingUTF8, false); msg1 = CFStringCreateWithBytes (NULL, (unsigned char*)buf, STRLEN(buf), kCFStringEncodingUTF8, false); } } else { if (dsn) { WCSCPY(buf, L"DSN: "); WCSCAT(buf, dsn); msg = convert_wchar_to_CFString((wchar_t*)buf); msg1 = convert_wchar_to_CFString((wchar_t*)text); } else { WCSCPY(buf, L""); msg = convert_wchar_to_CFString((wchar_t*)text); msg1 = convert_wchar_to_CFString((wchar_t*)buf); } } CreateStandardAlert (id, msg, msg1, NULL, &dlg); RunStandardAlert (dlg, NULL, &out); CFRelease(msg); CFRelease(msg1); return; } void create_message (HWND hwnd, LPCSTR dsn, LPCSTR text) { __create_message (hwnd, (SQLPOINTER)dsn, (SQLPOINTER)text, 'A', kAlertStopAlert); } void create_messagew (HWND hwnd, LPCWSTR dsn, LPCWSTR text) { __create_message (hwnd, (SQLPOINTER)dsn, (SQLPOINTER)text, 'W', kAlertStopAlert); } libiodbc-3.52.9/iodbcadm/macosx/gui.h0000644000076400007640000002557312323210535014313 00000000000000/* * gui.h * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #ifndef _MACXGUI_H #define _MACXGUI_H #define USER_DSN 0 #define SYSTEM_DSN 1 #define FILE_DSN 2 /* The column values for data browsers */ #define DBITEM_ID 'OPLs' #define DBNAME_ID 'name' #define DBVERSION_ID 'vers' #define DBFILE_ID 'file' #define DBDATE_ID 'date' #define DBSIZE_ID 'size' #define CPTIMEOUT_ID ' to ' #define CPPROBE_ID 'sql ' #define DSNDRV_ID 'drv ' #define DSNDESC_ID 'desc' #define TABS_SIGNATURE 'tabs' #define CNTL_SIGNATURE 'CNTL' #define PICT_SIGNATURE 'PICT' #define GSKEYWORD_ID 'keyw' #define GSVALUE_ID 'valu' /* The global tab control */ #define GLOBAL_TAB 128 #define NUMBER_TAB 7 #define OKBUT_CNTL 149 #define CANCELBUT_CNTL 150 /* All user tab items */ #define UDSN_TAB 129 #define ULIST_CNTL 128 #define UADD_CNTL 130 #define UDEL_CNTL 131 #define UCFG_CNTL 132 #define UTST_CNTL 133 /* All system tab items */ #define SDSN_TAB 130 #define SLIST_CNTL 129 #define SADD_CNTL 134 #define SDEL_CNTL 135 #define SCFG_CNTL 136 #define STST_CNTL 137 /* All fileDsn tab items */ #define FDSN_TAB 155 #define FLIST_CNTL 156 #define FADD_CNTL 157 #define FDEL_CNTL 158 #define FCFG_CNTL 159 #define FTST_CNTL 160 #define FDIR_CNTL 161 #define FSETDIR_CNTL 162 /* All driver tab items */ #define DRIVER_TAB 131 #define DLIST_CNTL 138 #define DADD_CNTL 139 #define DDEL_CNTL 140 #define DCFG_CNTL 141 /* All connection pooling tab items */ #define POOL_TAB 132 #define PLIST_CNTL 142 #define PPERF_CNTL 143 #define PRETR_CNTL 144 /* All tracing tab items */ #define TRACE_TAB 133 #define TLOG_CNTL 145 #define TTRLIB_CNTL 146 #define TOPTI_CNTL 147 #define TSTART_CNTL 151 #define TLOGB_CNTL 152 #define TLIBB_CNTL 153 #define TWIDE_CNTL 154 /* All about tab items */ #define ABOUT_TAB 134 #define CLIST_CNTL 148 /* Control IDs for the connection pool dialog */ #define CPFINISH_CNTL 1000 #define CPCANCEL_CNTL 1001 #define CPTIMEOUT_CNTL 1002 #define CPPROBE_CNTL 1003 #define CPGROUP_CNTL 1004 #define CPTITLE_CNTL 1005 /* Control IDs for the driver list dialog */ #define DCFINISH_CNTL 1000 #define DCCANCEL_CNTL 1001 #define DCLIST_CNTL 2000 #define GETCONTROLBYID(ctlID, ctlSIGN, ctl, wndREF, ctrlREF) { \ ctlID.signature = ctlSIGN; \ ctlID.id = ctl; \ GetControlByID(wndREF, &ctlID, &ctrlREF); \ } extern char *szDSNColumnNames[]; extern char *szTabNames[]; extern char *szDSNButtons[]; extern char *szDriverColumnNames[]; typedef struct TFILEDSN { ControlRef name_entry; WindowRef mainwnd; wchar_t *name; } TFILEDSN; typedef struct TDSNCHOOSER { ControlRef udsnlist, sdsnlist, fdsnlist; ControlRef uadd, uremove, utest, uconfigure; ControlRef sadd, sremove, stest, sconfigure; ControlRef fadd, fremove, ftest, fconfigure; ControlRef fdir; ControlRef dir_list, file_list, file_entry, dir_combo; WindowRef mainwnd; wchar_t *dsn; wchar_t *fdsn; char curr_dir[1024]; int type_dsn; } TDSNCHOOSER; typedef struct TDRIVERCHOOSER { ControlRef driverlist, b_add, b_remove, b_configure; WindowRef mainwnd; wchar_t *driver; } TDRIVERCHOOSER; typedef struct TFDRIVERCHOOSER { ControlRef driverlist, dsn_entry; ControlRef back_button, continue_button; ControlRef tab_panel, mess_entry; WindowRef mainwnd; int tab_number; char *curr_dir; char *attrs; char *dsn; BOOL verify_conn; wchar_t *driver; BOOL ok; } TFDRIVERCHOOSER; typedef struct TCONNECTIONPOOLING { ControlRef driverlist, perfmon_rb, retwait_entry, timeout_entry, probe_entry; WindowRef mainwnd; BOOL changed; wchar_t *timeout; } TCONNECTIONPOOLING; typedef struct TTRANSLATORCHOOSER { ControlRef translatorlist, b_finish, b_cancel; WindowRef mainwnd; wchar_t *translator; } TTRANSLATORCHOOSER; typedef struct TCOMPONENT { ControlRef componentlist; } TCOMPONENT; typedef struct TTRACING { ControlRef logfile_entry, tracelib_entry, b_start_stop, trace_rb; ControlRef trace_wide; BOOL changed; } TTRACING; typedef struct TCONFIRM { WindowRef mainwnd; BOOL yes_no; } TCONFIRM; typedef struct TDRIVERSETUP { ControlRef name_entry, driver_entry, setup_entry, key_list, bupdate; ControlRef key_entry, value_entry, filesel, sysuser_rb; WindowRef mainwnd; LPWSTR connstr; } TDRIVERSETUP; typedef struct TDRIVERREMOVE { ControlRef user_cb, system_cb, dsn_rb; WindowRef mainwnd; BOOL deletedsn; int dsns; } TDRIVERREMOVE; typedef struct TGENSETUP { ControlRef dsn_entry, key_list, bupdate; ControlRef key_entry, value_entry; ControlRef verify_conn_cb; WindowRef mainwnd; char *connstr; BOOL verify_conn; } TGENSETUP; typedef struct TKEYVAL { ControlRef key_list, bupdate; ControlRef key_entry, value_entry; ControlRef verify_conn_cb; WindowRef mainwnd; char *connstr; BOOL verify_conn; } TKEYVAL; extern char* convert_CFString_to_char(const CFStringRef str); pascal OSStatus userdsn_add_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus userdsn_remove_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus userdsn_configure_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus userdsn_test_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus systemdsn_add_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus systemdsn_remove_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus systemdsn_configure_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus systemdsn_test_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus filedsn_add_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus filedsn_remove_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus filedsn_configure_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus filedsn_test_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus filedsn_setdir_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus filedsn_select_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus translators_getset_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean changeValue); pascal OSStatus driver_configure_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus driverchooser_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); pascal OSStatus translatorchooser_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData); void translators_notification_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message); void DisplayTabControlNumber (int index, ControlRef tabControl, WindowRef wnd, int *tabs); void adddrivers_to_list (ControlRef widget, WindowRef dlg, BOOL addNotification); void addtranslators_to_list (ControlRef widget, WindowRef dlg); void adddsns_to_list (ControlRef widget, BOOL systemDSN, WindowRef dlg); void addconnectionpool_to_list (ControlRef widget, WindowRef dlg); void addfdsns_to_list (TDSNCHOOSER *dsnchoose_t, char *path, Boolean b_reset); LPSTR create_keyval (WindowRef wnd, LPCSTR attrs, BOOL *verify_conn); LPSTR create_gensetup (HWND hwnd, LPCSTR dsn, LPCSTR attrs, BOOL add, BOOL *verify_conn); void create_fdriverchooser (HWND hwnd, TFDRIVERCHOOSER * choose_t); #endif libiodbc-3.52.9/iodbcadm/macosx/errorbox.c0000644000076400007640000001235412323210535015355 00000000000000/* * errorbox.c * * $Id$ * * The iODBC driver manager. * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include wchar_t* convert_CFString_to_wchar(const CFStringRef str) { wchar_t *prov = malloc(sizeof(wchar_t) * (CFStringGetLength(str)+1)); CFIndex i; if(prov) { for(i = 0 ; i * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include Boolean manage_return = false; pascal OSStatus about_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { WindowPtr about = (WindowPtr) *((void**)inUserData); if (about) { DisposeWindow (about); *((void**)inUserData) = NULL; } return noErr; } #define OK_CNTL 140 pascal OSStatus HandleMenuCommand (EventHandlerCallRef referee, EventRef inEvent, void *data) { EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; OSStatus result = noErr, err; RgnHandle cursorRgn = NULL; HICommand command; IBNibRef nibRef; WindowPtr about; ControlID controlID; ControlRef control; EventRecord event; switch (GetEventClass (inEvent)) { case kEventClassCommand: /* Extract the command from the event */ GetEventParameter (inEvent, kEventParamDirectObject, typeHICommand, NULL, sizeof (command), NULL, &command); check (command.attributes & kHICommandFromMenu); /* Treat the command */ switch (command.commandID) { case 'abou': /* Search the bundle for a .nib file named 'about'. */ err = CreateNibReference (CFSTR ("about"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ CreateWindowFromNib (nibRef, CFSTR ("Window"), &about); DisposeNibReference (nibRef); GETCONTROLBYID (controlID, CNTL_SIGNATURE, OK_CNTL, about, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (about_ok_clicked), 1, &controlSpec, &about, NULL); /* Show the window */ ShowWindow (about); SetPort ((GrafPtr) GetWindowPort (about)); /* The main loop */ while (about) WaitNextEvent (everyEvent, &event, 60L, cursorRgn); } break; default: result = eventNotHandledErr; }; break; default: result = eventNotHandledErr; }; return result; } void * main_thread (void *threadParam) { RunApplicationEventLoop (); return NULL; } pascal OSErr QuitEventHandler (const AppleEvent * theEvent, AppleEvent * theReply, SInt32 refCon) { QuitApplicationEventLoop (); kill(getpid(), SIGKILL); return noErr; } int macosx_gui (int *argc, char **argv[]) { EventTypeSpec menuEvents[] = { {kEventClassCommand, kEventCommandProcess} }; WindowRef mainwnd = (WindowRef) (-1L); pthread_attr_t pattr; pthread_t thread_id; IBNibRef nibRef; OSStatus err; MenuRef menu; InitCursor (); AEInstallEventHandler (kCoreEventClass, kAEQuitApplication, NewAEEventHandlerUPP (QuitEventHandler), 0L, false); /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReference (CFSTR ("main"), &nibRef); if (err == noErr) { /* Load the menu bar */ err = SetMenuBarFromNib (nibRef, CFSTR ("MainMenu")); if (err != noErr) { fprintf (stderr, "Can't load MenuBar. Err: %d\n", (int) err); ExitToShell (); } /* And no need anymore the nib */ DisposeNibReference (nibRef); } else goto error; /* Install the menu handler */ menu = GetMenuHandle (128); InstallMenuEventHandler (menu, NewEventHandlerUPP (HandleMenuCommand), sizeof (menuEvents), menuEvents, NULL, NULL); /* Install a thread */ pthread_attr_init (&pattr); pthread_attr_setdetachstate (&pattr, PTHREAD_CREATE_DETACHED); pthread_create (&thread_id, &pattr, main_thread, mainwnd); manage_return = SQLManageDataSources (mainwnd); pthread_attr_destroy (&pattr); return manage_return; error: fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); ExitToShell (); return 0; } void display_help (void) { printf ("-help\t\t\tDisplay the list of options.\n\r"); printf ("-odbc filename\t\tSet the location of the user ODBC.INI file.\n\r"); printf ("-odbcinst filename\tSet the location of the user ODBCINST.INI file.\n\r"); printf ("-sysodbc filename\tSet the location of the system ODBC.INI file.\n\r"); printf ("-sysodbcinst filename\tSet the location of the system ODBCINST.INI file.\n\r"); printf ("-debug\t\t\tThe error messages are displayed on the console.\n\r"); printf ("-admin odbcinstfile\tUsed to administrate the system odbcinst.ini file.\n\r\n\r"); printf ("-odbcfiledsn filename\tSet the location of the default File DSN directory.\n\r"); _exit (1); } int main (int argc, char *argv[]) { BOOL debug = FALSE; char *gui = NULL; int i = 1; setlocale (LC_ALL, ""); /* Use native locale */ printf ("OpenLink iODBC Administrator (Mac OS X)\n"); printf ("iODBC Driver Manager %s\n", VERSION); printf ("Copyright (C) 2000-2014 OpenLink Software\n"); printf ("Please report all bugs to \n"); /* Check options commands */ if (argc > 1) { for (; i < argc; i++) { if (!strcasecmp (argv[i], "-help")) display_help (); if (!strcasecmp (argv[i], "-debug")) debug = TRUE; if (!strcasecmp (argv[i], "-odbc")) { if (i + 1 >= argc) display_help (); setenv ("ODBCINI", argv[++i], TRUE); } if (!strcasecmp (argv[i], "-admin")) { if (i + 1 >= argc) display_help (); setenv ("ODBCINSTINI", argv[++i], TRUE); setenv ("SYSODBCINSTINI", argv[i], TRUE); } if (!strcasecmp (argv[i], "-odbcinst")) { if (i + 1 >= argc) display_help (); setenv ("ODBCINSTINI", argv[++i], TRUE); } if (!strcasecmp (argv[i], "-sysodbc")) { if (i + 1 >= argc) display_help (); setenv ("SYSODBCINI", argv[++i], TRUE); } if (!strcasecmp (argv[i], "-sysodbcinst")) { if (i + 1 >= argc) display_help (); setenv ("SYSODBCINSTINI", argv[++i], TRUE); } if (!strcasecmp (argv[i], "-gui")) { if (i + 2 >= argc) display_help (); gui = argv[++i]; } if (!strcasecmp (argv[i], "-odbcfiledsn")) { if (i + 1 >= argc) display_help (); setenv ("ODBCFILEDSN", argv[++i], TRUE); } } } if (!debug) { #ifndef __APPLE__ close (STDOUT_FILENO); close (STDERR_FILENO); #endif } return macosx_gui (&argc, &argv); } libiodbc-3.52.9/iodbcadm/macosx/driversetup.c0000644000076400007640000007722112323210535016073 00000000000000/* * driversetup.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include "getfpn.h" #include #define DSDESCRIPTION_CNTL 6007 #define DSDRIVER_CNTL 6008 #define DSDRVBROWSE_CNTL 6009 #define DSSETUP_CNTL 6010 #define DSSTPBROWSE_CNTL 6011 #define DSSYSUSER_CNTL 6012 #define DSLIST_CNTL 6006 #define DSKEYWORD_CNTL 6004 #define DSVALUE_CNTL 6005 #define DSADD_CNTL 6002 #define DSUPDATE_CNTL 6003 #define DSOK_CNTL 6000 #define DSCANCEL_CNTL 6001 #define DRUSER_CNTL 8002 #define DRSYSTEM_CNTL 8003 #define DRDSN_CNTL 8004 #define DROK_CNTL 8000 #define DRCANCEL_CNTL 8001 #define DSKEYWORD_ID 'keyw' #define DSVALUE_ID 'valu' extern wchar_t* convert_CFString_to_wchar(const CFStringRef str); extern CFStringRef convert_wchar_to_CFString(wchar_t *str); static int STRCONN_NB_TOKENS = 3; UInt32 DRIVERSETUP_nrows; CFStringRef DRIVERSETUP_array[2][100]; TDRIVERSETUP *DRIVERSETUP = NULL; static pascal OSStatus driversetup_getset_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean changeValue) { OSStatus err = noErr; if (!changeValue) switch (property) { case DSKEYWORD_ID: SetDataBrowserItemDataText (itemData, DRIVERSETUP_array[0][itemID - DBITEM_ID - 1]); break; case DSVALUE_ID: SetDataBrowserItemDataText (itemData, DRIVERSETUP_array[1][itemID - DBITEM_ID - 1]); break; case kDataBrowserItemIsActiveProperty: if (itemID > DBITEM_ID && itemID <= DBITEM_ID + DRIVERSETUP_nrows) err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsEditableProperty: err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsContainerProperty: err = SetDataBrowserItemDataBooleanValue (itemData, itemID == DBITEM_ID); break; case kDataBrowserContainerAliasIDProperty: break; case kDataBrowserItemParentContainerProperty: break; default: err = errDataBrowserPropertyNotSupported; break; } else err = errDataBrowserPropertyNotSupported; return err; } static void driversetup_notification_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message) { static Boolean ignore_next = false, selected = false; switch (message) { case kDataBrowserItemSelected: if (DRIVERSETUP) { ActivateControl (DRIVERSETUP->bupdate); DrawOneControl (DRIVERSETUP->bupdate); SetControlData (DRIVERSETUP->key_entry, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &DRIVERSETUP_array[0][itemID - DBITEM_ID - 1]); DrawOneControl (DRIVERSETUP->key_entry); SetControlData (DRIVERSETUP->value_entry, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &DRIVERSETUP_array[1][itemID - DBITEM_ID - 1]); DrawOneControl (DRIVERSETUP->value_entry); } if (selected) ignore_next = true; else selected = true; break; case kDataBrowserItemDeselected: if (!ignore_next && DRIVERSETUP) { DeactivateControl (DRIVERSETUP->bupdate); DrawOneControl (DRIVERSETUP->bupdate); SetControlData (DRIVERSETUP->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (DRIVERSETUP->key_entry); SetControlData (DRIVERSETUP->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (DRIVERSETUP->value_entry); selected = false; } else { ignore_next = false; selected = true; } break; }; } static void addkeywords_to_list (ControlRef widget, LPWSTR attrs, TDRIVERSETUP * driversetup_t) { DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; wchar_t *curr, *cour; CFStringRef strRef; int i; if (!widget) return; GetThemeDrawingState (&outState); /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (driversetup_notification_item); /* On Mac OS X 10.0.x : clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (driversetup_getset_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, DBITEM_ID); /* Make the clean up */ for (i = 0; i < DRIVERSETUP_nrows; i++) { CFRelease (DRIVERSETUP_array[0][i]); DRIVERSETUP_array[0][i] = NULL; CFRelease (DRIVERSETUP_array[1][i]); DRIVERSETUP_array[1][i] = NULL; RemoveDataBrowserItems (widget, DBITEM_ID, 1, &item, DSKEYWORD_ID); } /* Global Initialization */ DRIVERSETUP_nrows = 0; item = DBITEM_ID + 1; for (curr = (LPWSTR) attrs; *curr != L'\0' ; curr += (WCSLEN (curr) + 1)) { if (!wcsncasecmp (curr, L"Driver=", WCSLEN (L"Driver="))) { strRef = convert_wchar_to_CFString(curr + WCSLEN (L"Driver=")); SetControlData (driversetup_t->driver_entry, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &strRef); CFRelease(strRef); DrawOneControl (driversetup_t->driver_entry); continue; } if (!wcsncasecmp (curr, L"Setup=", WCSLEN (L"Setup="))) { strRef = convert_wchar_to_CFString(curr + WCSLEN (L"Setup=")); SetControlData (driversetup_t->setup_entry, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &strRef); CFRelease(strRef); DrawOneControl (driversetup_t->setup_entry); continue; } if ((cour = wcschr (curr, L'='))) { *cour = L'\0'; DRIVERSETUP_array[0][DRIVERSETUP_nrows] = convert_wchar_to_CFString(curr); *cour = L'='; DRIVERSETUP_array[1][DRIVERSETUP_nrows] = convert_wchar_to_CFString(cour + 1); } else DRIVERSETUP_array[0][DRIVERSETUP_nrows] = convert_wchar_to_CFString(L""); for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (DRIVERSETUP_array[i][DRIVERSETUP_nrows], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } AddDataBrowserItems (widget, DBITEM_ID, 1, &item, DSKEYWORD_ID); item++; DRIVERSETUP_nrows++; } ActivateControl (widget); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (widget, DSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DSVALUE_ID, colSize[1] + 20); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); if(outState) DisposeThemeDrawingState (outState); } static void parse_attribute_line (TDRIVERSETUP * driversetup_t, LPWSTR driver, LPWSTR attrs, BOOL add, BOOL user) { CFStringRef strRef; if (driver) { strRef = convert_wchar_to_CFString(driver); SetControlData (driversetup_t->name_entry, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &strRef); CFRelease(strRef); /* Activate the radio box re. the set */ SetControlValue (driversetup_t->sysuser_rb, user ? 1 : 2); /* Activate controls re. the add or setup */ if (add) { DeactivateControl (driversetup_t->name_entry); ActivateControl (driversetup_t->sysuser_rb); } else { ActivateControl (driversetup_t->name_entry); DeactivateControl (driversetup_t->sysuser_rb); } DrawOneControl (driversetup_t->name_entry); } addkeywords_to_list (driversetup_t->key_list, attrs, driversetup_t); } pascal OSStatus driversetup_drvbrowse_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { NavDialogOptions dialogOptions; TDRIVERSETUP *driversetup_t = (TDRIVERSETUP *) inUserData; NavReplyRecord reply; char tokenstr[4096] = { 0 }; OSStatus err; FSSpec file; char *dir; NavGetDefaultDialogOptions (&dialogOptions); err = NavChooseFile (NULL, &reply, &dialogOptions, NULL, NULL, NULL, NULL, NULL); if (!err && reply.validRecord) { /* Get and transform the file descriptor from the reply */ err = AEGetNthPtr (&reply.selection, 1, typeFSS, NULL, NULL, &file, sizeof (file), NULL); if (!err) { /* Get back some information about the directory */ dir = get_full_pathname (file.parID, file.vRefNum); sprintf (tokenstr, "%s/", dir ? dir : ""); strncat (tokenstr, &file.name[1], file.name[0]); /* Display the constructed string re. the file choosen */ SetControlData (driversetup_t->driver_entry, 0, kControlEditTextTextTag, STRLEN (tokenstr), tokenstr); DrawOneControl (driversetup_t->driver_entry); /* Clean up */ if (dir) free (dir); } } NavDisposeReply (&reply); return noErr; } pascal OSStatus driversetup_stpbrowse_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { NavDialogOptions dialogOptions; TDRIVERSETUP *driversetup_t = (TDRIVERSETUP *) inUserData; NavReplyRecord reply; char tokenstr[4096] = { 0 }; OSStatus err; FSSpec file; char *dir; NavGetDefaultDialogOptions (&dialogOptions); err = NavChooseFile (NULL, &reply, &dialogOptions, NULL, NULL, NULL, NULL, NULL); if (!err && reply.validRecord) { /* Get and transform the file descriptor from the reply */ err = AEGetNthPtr (&reply.selection, 1, typeFSS, NULL, NULL, &file, sizeof (file), NULL); if (!err) { /* Get back some information about the directory */ dir = get_full_pathname (file.parID, file.vRefNum); sprintf (tokenstr, "%s/", dir ? dir : ""); strncat (tokenstr, &file.name[1], file.name[0]); /* Display the constructed string re. the file choosen */ SetControlData (driversetup_t->setup_entry, 0, kControlEditTextTextTag, STRLEN (tokenstr), tokenstr); DrawOneControl (driversetup_t->setup_entry); /* Clean up */ if (dir) free (dir); } } NavDisposeReply (&reply); return noErr; } pascal OSStatus driversetup_add_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDRIVERSETUP *driversetup_t = (TDRIVERSETUP *) inUserData; DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; CFStringRef data[2]; Size len; int i = 0, j; if (driversetup_t) { GetThemeDrawingState (&outState); GetControlData (driversetup_t->key_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[0], &len); if (CFStringGetLength(data[0])) { GetControlData (driversetup_t->value_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[1], &len); /* Try to see if the keyword already exists */ for (i = 0; i < DRIVERSETUP_nrows; i++, item++) if (CFStringCompare (data[0], DRIVERSETUP_array[0][i], 0) == kCFCompareEqualTo) goto done; /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (driversetup_notification_item); /* On Mac OS X 10.0.x : clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (driversetup_getset_item); SetDataBrowserCallbacks (driversetup_t->key_list, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (driversetup_t->key_list, DBITEM_ID); if(ikey_list, DBITEM_ID, 1, &item, DSKEYWORD_ID, kDataBrowserItemNoProperty); } else if(len) { /* Add a line */ DRIVERSETUP_array[0][i] = data[0]; DRIVERSETUP_array[1][i] = data[1]; AddDataBrowserItems (driversetup_t->key_list, DBITEM_ID, 1, &item, DSKEYWORD_ID); DRIVERSETUP_nrows++; } for(j = 0 ; j < DRIVERSETUP_nrows ; j++) { for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (DRIVERSETUP_array[i][j], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } } ActivateControl (driversetup_t->key_list); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (driversetup_t->key_list, DSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (driversetup_t->key_list, DSVALUE_ID, colSize[1] + 20); DrawOneControl (driversetup_t->key_list); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); if(outState) DisposeThemeDrawingState (outState); } done: SetControlData (driversetup_t->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (driversetup_t->key_entry); SetControlData (driversetup_t->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (driversetup_t->value_entry); DeactivateControl (driversetup_t->bupdate); DrawOneControl (driversetup_t->bupdate); } return noErr; } pascal OSStatus driversetup_update_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDRIVERSETUP *driversetup_t = (TDRIVERSETUP *) inUserData; DataBrowserItemID item = DBITEM_ID + 1, first, last; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; CFStringRef data[2]; Size len; int i = 0, j; if (driversetup_t) { GetThemeDrawingState (&outState); GetControlData (driversetup_t->key_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[0], &len); if (CFStringGetLength(data[0])) { GetControlData (driversetup_t->value_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[1], &len); if(GetDataBrowserSelectionAnchor (driversetup_t->key_list, &first, &last) == noErr) { i = first - DBITEM_ID - 1; item += i; } else i = 0; /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (driversetup_notification_item); /* On Mac OS X 10.0.x : clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (driversetup_getset_item); SetDataBrowserCallbacks (driversetup_t->key_list, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (driversetup_t->key_list, DBITEM_ID); /* An update operation */ if(ikey_list, DBITEM_ID, 1, &item, DSKEYWORD_ID, kDataBrowserItemNoProperty); } for(j = 0 ; j < DRIVERSETUP_nrows ; j++) { for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (DRIVERSETUP_array[i][j], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } } ActivateControl (driversetup_t->key_list); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (driversetup_t->key_list, DSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (driversetup_t->key_list, DSVALUE_ID, colSize[1] + 20); DrawOneControl (driversetup_t->key_list); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); if(outState) DisposeThemeDrawingState (outState); } SetControlData (driversetup_t->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (driversetup_t->key_entry); SetControlData (driversetup_t->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (driversetup_t->value_entry); DeactivateControl (driversetup_t->bupdate); DrawOneControl (driversetup_t->bupdate); } return noErr; } pascal OSStatus driversetup_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDRIVERSETUP *driversetup_t = (TDRIVERSETUP *) inUserData; int i = 0, size = 0; wchar_t *cour, *prov; CFStringRef strRef; Size len; if (driversetup_t) { /* What is the size of the block to malloc */ GetControlData (driversetup_t->name_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &strRef, &len); size += CFStringGetLength(strRef) + 1; CFRelease(strRef); GetControlData (driversetup_t->driver_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &strRef, &len); size += CFStringGetLength(strRef) + WCSLEN (L"Driver=") + 1; CFRelease(strRef); GetControlData (driversetup_t->setup_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &strRef, &len); size += CFStringGetLength(strRef) + WCSLEN (L"Setup=") + 1; CFRelease(strRef); size += WCSLEN( (GetControlValue (driversetup_t->sysuser_rb) == 1) ? L"USR" : L"SYS" ) + 1; /* Malloc it */ if ((driversetup_t->connstr = (wchar_t *) malloc (++size * sizeof(wchar_t)))) { WCSCPY(driversetup_t->connstr, (GetControlValue (driversetup_t->sysuser_rb) == 1) ? L"USR" : L"SYS"); for (cour = driversetup_t->connstr + 4; i < STRCONN_NB_TOKENS ; i++) { switch (i) { case 0: GetControlData (driversetup_t->name_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &strRef, &len); prov = convert_CFString_to_wchar(strRef); if(prov) { WCSCPY(cour, prov); free(prov); } break; case 1: GetControlData (driversetup_t->driver_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &strRef, &len); prov = convert_CFString_to_wchar(strRef); if(prov) { WCSCPY(cour, L"Driver="); WCSCAT(cour, prov); free(prov); } break; case 2: GetControlData (driversetup_t->setup_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &strRef, &len); prov = convert_CFString_to_wchar(strRef); if(prov) { WCSCPY(cour, L"Setup="); WCSCAT(cour, prov); free(prov); } break; }; CFRelease(strRef); cour += (WCSLEN (cour) + 1); } for (i = 0; i < DRIVERSETUP_nrows; i++) { cour = driversetup_t->connstr; driversetup_t->connstr = (LPWSTR) malloc ((size + CFStringGetLength(DRIVERSETUP_array[0][i]) + CFStringGetLength(DRIVERSETUP_array[1][i]) + 2) * sizeof(wchar_t)); if (driversetup_t->connstr) { memcpy (driversetup_t->connstr, cour, size*sizeof(wchar_t)); prov = convert_CFString_to_wchar(DRIVERSETUP_array[0][i]); if(prov) { WCSCPY(driversetup_t->connstr + size - 1, prov); WCSCAT(driversetup_t->connstr + size - 1, L"="); free(prov); prov = convert_CFString_to_wchar(DRIVERSETUP_array[1][i]); if(prov) { WCSCAT(driversetup_t->connstr + size - 1, prov); free(prov); } } free (cour); size += CFStringGetLength(DRIVERSETUP_array[0][i]) + CFStringGetLength(DRIVERSETUP_array[1][i]) + 2; } else driversetup_t->connstr = cour; } driversetup_t->connstr[size - 1] = L'\0'; } driversetup_t->name_entry = driversetup_t->driver_entry = NULL; driversetup_t->sysuser_rb = driversetup_t->setup_entry = NULL; driversetup_t->key_list = driversetup_t->filesel = NULL; DRIVERSETUP = NULL; DRIVERSETUP_nrows = 0; DisposeWindow (driversetup_t->mainwnd); driversetup_t->mainwnd = NULL; } return noErr; } pascal OSStatus driversetup_cancel_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDRIVERSETUP *driversetup_t = (TDRIVERSETUP *) inUserData; if (driversetup_t) { driversetup_t->connstr = (LPWSTR) - 1L; driversetup_t->name_entry = driversetup_t->driver_entry = NULL; driversetup_t->sysuser_rb = driversetup_t->setup_entry = NULL; driversetup_t->key_list = driversetup_t->filesel = NULL; DRIVERSETUP = NULL; DRIVERSETUP_nrows = 0; DisposeWindow (driversetup_t->mainwnd); driversetup_t->mainwnd = NULL; } return noErr; } LPSTR create_driversetup (HWND hwnd, LPCSTR driver, LPCSTR attrs, BOOL add, BOOL user) { EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; RgnHandle cursorRgn = NULL; TDRIVERSETUP driversetup_t; ControlID controlID; WindowRef wdrvsetup; ControlRef control; EventRecord event; IBNibRef nibRef; OSStatus err; /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.adm")), CFSTR ("driversetup"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ CreateWindowFromNib (nibRef, CFSTR ("Dialog"), &wdrvsetup); DisposeNibReference (nibRef); /* Install handlers for the finish button, the cancel */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, DSDESCRIPTION_CNTL, wdrvsetup, driversetup_t.name_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DSSYSUSER_CNTL, wdrvsetup, driversetup_t.sysuser_rb); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DSDRIVER_CNTL, wdrvsetup, driversetup_t.driver_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DSSETUP_CNTL, wdrvsetup, driversetup_t.setup_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DSLIST_CNTL, wdrvsetup, driversetup_t.key_list); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DSKEYWORD_CNTL, wdrvsetup, driversetup_t.key_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DSVALUE_CNTL, wdrvsetup, driversetup_t.value_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DSUPDATE_CNTL, wdrvsetup, driversetup_t.bupdate); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DSADD_CNTL, wdrvsetup, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (driversetup_add_clicked), 1, &controlSpec, &driversetup_t, NULL); InstallEventHandler (GetControlEventTarget (driversetup_t.bupdate), NewEventHandlerUPP (driversetup_update_clicked), 1, &controlSpec, &driversetup_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DSOK_CNTL, wdrvsetup, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (driversetup_ok_clicked), 1, &controlSpec, &driversetup_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DSCANCEL_CNTL, wdrvsetup, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (driversetup_cancel_clicked), 1, &controlSpec, &driversetup_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DSDRVBROWSE_CNTL, wdrvsetup, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (driversetup_drvbrowse_clicked), 1, &controlSpec, &driversetup_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DSSTPBROWSE_CNTL, wdrvsetup, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (driversetup_stpbrowse_clicked), 1, &controlSpec, &driversetup_t, NULL); /* Parse the attributes line */ driversetup_t.mainwnd = wdrvsetup; parse_attribute_line (&driversetup_t, (LPWSTR)driver, (LPWSTR)attrs, add, user); AdvanceKeyboardFocus (wdrvsetup); /* Show the window and run the loop */ DeactivateControl (driversetup_t.bupdate); DRIVERSETUP = &driversetup_t; ShowWindow (wdrvsetup); /* The main loop */ while (driversetup_t.mainwnd) WaitNextEvent (everyEvent, &event, 60L, cursorRgn); } else goto error; return (LPSTR)driversetup_t.connstr; error: fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); return (LPSTR)driversetup_t.connstr; } pascal OSStatus driverremove_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDRIVERREMOVE *driverremove_t = (TDRIVERREMOVE *) inUserData; if (driverremove_t) { driverremove_t->dsns = GetControlValue (driverremove_t->system_cb); driverremove_t->dsns = (driverremove_t->dsns<<1) | GetControlValue (driverremove_t->user_cb); driverremove_t->deletedsn = GetControlValue (driverremove_t->dsn_rb) - 1; driverremove_t->user_cb = driverremove_t->system_cb = NULL; driverremove_t->dsn_rb = NULL; DisposeWindow (driverremove_t->mainwnd); driverremove_t->mainwnd = NULL; } return noErr; } pascal OSStatus driverremove_cancel_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDRIVERREMOVE *driverremove_t = (TDRIVERREMOVE *) inUserData; if (driverremove_t) { driverremove_t->dsns = -1; driverremove_t->deletedsn = FALSE; driverremove_t->user_cb = driverremove_t->system_cb = NULL; driverremove_t->dsn_rb = NULL; DisposeWindow (driverremove_t->mainwnd); driverremove_t->mainwnd = NULL; } return noErr; } void create_driverremove (HWND hwnd, TDRIVERREMOVE * driverremove_t) { EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; RgnHandle cursorRgn = NULL; ControlID controlID; WindowRef wdrvremove; ControlRef control; EventRecord event; IBNibRef nibRef; OSStatus err; if (hwnd == NULL) return; /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.adm")), CFSTR ("driverremove"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ CreateWindowFromNib (nibRef, CFSTR ("Dialog"), &wdrvremove); DisposeNibReference (nibRef); /* Install handlers for the finish button, the cancel */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, DRUSER_CNTL, wdrvremove, driverremove_t->user_cb) GETCONTROLBYID (controlID, CNTL_SIGNATURE, DRSYSTEM_CNTL, wdrvremove, driverremove_t->system_cb) GETCONTROLBYID (controlID, CNTL_SIGNATURE, DRDSN_CNTL, wdrvremove, driverremove_t->dsn_rb) GETCONTROLBYID (controlID, CNTL_SIGNATURE, DROK_CNTL, wdrvremove, control) InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (driverremove_ok_clicked), 1, &controlSpec, driverremove_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, DRCANCEL_CNTL, wdrvremove, control) InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (driverremove_cancel_clicked), 1, &controlSpec, driverremove_t, NULL); /* Set the controls */ SetControlValue (driverremove_t->user_cb, driverremove_t->dsns & 1); SetControlValue (driverremove_t->system_cb, driverremove_t->dsns>>1 & 1); driverremove_t->mainwnd = wdrvremove; ShowWindow (wdrvremove); /* The main loop */ while (driverremove_t->mainwnd) WaitNextEvent (everyEvent, &event, 60L, cursorRgn); } else goto error; return; error: fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); return; } libiodbc-3.52.9/iodbcadm/macosx/dsnchooser.c0000644000076400007640000013540612323210535015666 00000000000000/* * dsnchooser.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include extern wchar_t* convert_CFString_to_wchar(const CFStringRef str); extern CFStringRef convert_wchar_to_CFString(wchar_t *str); extern void __create_message (HWND hwnd, SQLPOINTER dsn, SQLPOINTER text, SQLCHAR waMode, AlertType id); extern UInt32 FDSN_nrows; UInt32 DSN_nrows; CFStringRef DSN_array[3][200]; extern CFStringRef FDSN_array[]; extern char FDSN_type[]; TDSNCHOOSER *DSNCHOOSER = NULL; static pascal OSStatus dsn_getset_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean changeValue) { OSStatus err = noErr; if (!changeValue) switch (property) { case DBNAME_ID: SetDataBrowserItemDataText (itemData, DSN_array[0][itemID - DBITEM_ID - 1]); break; case DSNDESC_ID: SetDataBrowserItemDataText (itemData, DSN_array[1][itemID - DBITEM_ID - 1]); break; case DSNDRV_ID: SetDataBrowserItemDataText (itemData, DSN_array[2][itemID - DBITEM_ID - 1]); break; case kDataBrowserItemIsActiveProperty: if (itemID > DBITEM_ID && itemID <= DBITEM_ID + DSN_nrows) err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsEditableProperty: err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsContainerProperty: err = SetDataBrowserItemDataBooleanValue (itemData, itemID == DBITEM_ID); break; case kDataBrowserContainerAliasIDProperty: break; case kDataBrowserItemParentContainerProperty: break; default: err = errDataBrowserPropertyNotSupported; break; } else err = errDataBrowserPropertyNotSupported; return err; } static void dsn_notification_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message) { static Boolean ignore_next = false, selected = false; switch (message) { case kDataBrowserItemSelected: switch (DSNCHOOSER->type_dsn) { case USER_DSN: ActivateControl (DSNCHOOSER->uremove); DrawOneControl (DSNCHOOSER->uremove); ActivateControl (DSNCHOOSER->utest); DrawOneControl (DSNCHOOSER->utest); ActivateControl (DSNCHOOSER->uconfigure); DrawOneControl (DSNCHOOSER->uconfigure); break; case SYSTEM_DSN: ActivateControl (DSNCHOOSER->sremove); DrawOneControl (DSNCHOOSER->sremove); ActivateControl (DSNCHOOSER->stest); DrawOneControl (DSNCHOOSER->stest); ActivateControl (DSNCHOOSER->sconfigure); DrawOneControl (DSNCHOOSER->sconfigure); break; }; if (selected) ignore_next = true; else selected = true; break; case kDataBrowserItemDeselected: if (!ignore_next) { switch (DSNCHOOSER->type_dsn) { case USER_DSN: DeactivateControl (DSNCHOOSER->uremove); DrawOneControl (DSNCHOOSER->uremove); DeactivateControl (DSNCHOOSER->utest); DrawOneControl (DSNCHOOSER->utest); DeactivateControl (DSNCHOOSER->uconfigure); DrawOneControl (DSNCHOOSER->uconfigure); break; case SYSTEM_DSN: DeactivateControl (DSNCHOOSER->sremove); DrawOneControl (DSNCHOOSER->sremove); DeactivateControl (DSNCHOOSER->stest); DrawOneControl (DSNCHOOSER->stest); DeactivateControl (DSNCHOOSER->sconfigure); DrawOneControl (DSNCHOOSER->sconfigure); break; }; } else { ignore_next = false; selected = true; } break; case kDataBrowserItemDoubleClicked: switch (DSNCHOOSER->type_dsn) { case USER_DSN: userdsn_configure_clicked (NULL, NULL, DSNCHOOSER); break; case SYSTEM_DSN: systemdsn_configure_clicked (NULL, NULL, DSNCHOOSER); break; }; break; }; } void adddsns_to_list (ControlRef widget, BOOL systemDSN, WindowRef dlg) { DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; wchar_t dsnname[1024], dsndesc[1024]; ThemeDrawingState outState = NULL; UInt16 colSize[3] = { 100, 100, 150 }; SInt16 outBaseline; SQLSMALLINT len; SQLRETURN ret; Point ioBound; HENV henv; int i; if (!widget) return; GetThemeDrawingState (&outState); /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (dsn_notification_item); /* On Mac OS X 10.0.x : clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (dsn_getset_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, DBITEM_ID); /* Make the clean up */ for (i = 0; i < DSN_nrows; i++, item++) { CFRelease (DSN_array[0][i]); DSN_array[0][i] = NULL; CFRelease (DSN_array[1][i]); DSN_array[1][i] = NULL; CFRelease (DSN_array[2][i]); DSN_array[2][i] = NULL; RemoveDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); } /* Global Initialization */ DSN_nrows = 0; item = DBITEM_ID + 1; /* Create a HENV to get the list of data sources then */ ret = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto end; } /* Set the version ODBC API to use */ SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER); /* Get the list of datasources */ ret = SQLDataSourcesW (henv, systemDSN ? SQL_FETCH_FIRST_SYSTEM : SQL_FETCH_FIRST_USER, dsnname, sizeof (dsnname)/sizeof(wchar_t), &len, dsndesc, sizeof (dsndesc)/sizeof(wchar_t), NULL); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO && ret != SQL_NO_DATA) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto error; } while (ret != SQL_NO_DATA) { DSN_array[0][DSN_nrows] = convert_wchar_to_CFString(dsnname); if (dsndesc[0] == L'\0') { SQLSetConfigMode (ODBC_BOTH_DSN); SQLGetPrivateProfileStringW (L"Default", L"Driver", L"", dsndesc, sizeof (dsndesc)/sizeof(wchar_t), L"odbc.ini"); } DSN_array[2][DSN_nrows] = convert_wchar_to_CFString(WCSLEN (dsndesc) ? dsndesc : L"-"); /* Get the description */ SQLSetConfigMode (systemDSN ? ODBC_SYSTEM_DSN : ODBC_USER_DSN); SQLGetPrivateProfileStringW (dsnname, L"Description", L"", dsndesc, sizeof (dsndesc)/sizeof(wchar_t), L"odbc.ini"); DSN_array[1][DSN_nrows] = convert_wchar_to_CFString(WCSLEN (dsndesc) ? dsndesc : L"-"); for(i = 0 ; i < 3 ; i++) { GetThemeTextDimensions (DSN_array[i][DSN_nrows], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } AddDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); item++; DSN_nrows++; /* Process next one */ ret = SQLDataSourcesW (henv, SQL_FETCH_NEXT, dsnname, sizeof (dsnname)/sizeof(wchar_t), &len, dsndesc, sizeof (dsndesc)/sizeof(wchar_t), NULL); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO && ret != SQL_NO_DATA) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto error; } } error: /* Clean all that */ SQLFreeHandle (SQL_HANDLE_ENV, henv); end: ActivateControl (widget); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (widget, DBNAME_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DSNDESC_ID, colSize[1] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DSNDRV_ID, colSize[2] + 20); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); if(outState) DisposeThemeDrawingState (outState); } pascal OSStatus userdsn_add_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) inUserData; wchar_t drv[1024] = { L'\0' }; DataBrowserItemID first, last; OSStatus err; int sqlstat; if (choose_t) { SQLSetConfigMode (ODBC_USER_DSN); /* Try first to get the driver name */ if (_iodbcdm_drvchoose_dialboxw (choose_t->mainwnd, drv, sizeof (drv) / sizeof(wchar_t), &sqlstat) == SQL_SUCCESS) { SQLSetConfigMode (ODBC_USER_DSN); if (!SQLConfigDataSourceW (choose_t->mainwnd, ODBC_ADD_DSN, drv + WCSLEN (L"DRIVER="), L"\0\0")) { _iodbcdm_errorboxw (choose_t->mainwnd, NULL, L"An error occurred when trying to add the DSN : "); goto done; } adddsns_to_list (choose_t->udsnlist, FALSE, choose_t->mainwnd); } done: if ((err = GetDataBrowserSelectionAnchor (choose_t->udsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->uremove); DeactivateControl (choose_t->uconfigure); DeactivateControl (choose_t->utest); } } } return noErr; } pascal OSStatus userdsn_remove_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) inUserData; DataBrowserItemID first, last; wchar_t *szDSN, *szDriver; wchar_t dsn[1024] = { L'\0' }; OSStatus err; if (choose_t) { /* Retrieve the DSN name */ if ((err = GetDataBrowserSelectionAnchor (choose_t->udsnlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + DSN_nrows) { /* Get the DSN */ szDSN = convert_CFString_to_wchar(DSN_array[0][first - DBITEM_ID - 1]); if(szDSN) { /* Get the driver */ szDriver = convert_CFString_to_wchar(DSN_array[2][first - DBITEM_ID - 1]); if(szDriver) { if (create_confirmw (choose_t->mainwnd, szDSN, L"Are you sure you want to remove this DSN ?")) { /* Call the right function */ WCSCPY(dsn, L"DSN="); WCSCAT(dsn, szDSN); dsn[WCSLEN(dsn)+1] = L'\0'; if (!SQLConfigDataSourceW (choose_t->mainwnd, ODBC_REMOVE_DSN, szDriver, dsn)) _iodbcdm_errorboxw (choose_t->mainwnd, szDSN, L"An error occurred when trying to remove the DSN "); } adddsns_to_list (choose_t->udsnlist, FALSE, choose_t->mainwnd); free(szDriver); } free(szDSN); } } } if ((err = GetDataBrowserSelectionAnchor (choose_t->udsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->uremove); DeactivateControl (choose_t->uconfigure); DeactivateControl (choose_t->utest); } } } return noErr; } pascal OSStatus userdsn_configure_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) inUserData; wchar_t connstr[4096] = { L'\0' }, tokenstr[4096] = { L'\0' }; wchar_t *szDSN, *szDriver; DataBrowserItemID first, last; int size = sizeof (connstr)/sizeof(wchar_t); wchar_t *curr, *cour; OSStatus err; DWORD error; if (choose_t) { /* Retrieve the DSN name */ if ((err = GetDataBrowserSelectionAnchor (choose_t->udsnlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + DSN_nrows) { /* Get the DSN */ szDSN = convert_CFString_to_wchar(DSN_array[0][first - DBITEM_ID - 1]); if(szDSN) { /* Get the driver */ szDriver = convert_CFString_to_wchar(DSN_array[2][first - DBITEM_ID - 1]); if(szDriver) { /* Call the right function */ WCSCPY(connstr, L"DSN="); WCSCAT(connstr, szDSN); connstr[WCSLEN(connstr)+1] = L'\0'; size -= (WCSLEN (connstr) + 1); SQLSetConfigMode (ODBC_USER_DSN); if (!SQLGetPrivateProfileStringW (szDSN, NULL, L"", tokenstr, sizeof (tokenstr)/sizeof(wchar_t), NULL)) { _iodbcdm_errorboxw (choose_t->mainwnd, szDSN, L"An error occurred when trying to configure the DSN "); goto done; } for (curr = tokenstr, cour = connstr + WCSLEN (connstr) + 1; *curr != L'\0' ; curr += (WCSLEN (curr) + 1), cour += (WCSLEN (cour) + 1)) { WCSCPY (cour, curr); cour[WCSLEN (curr)] = L'='; SQLSetConfigMode (ODBC_USER_DSN); SQLGetPrivateProfileStringW (szDSN, curr, L"", cour + WCSLEN (curr) + 1, size - WCSLEN (curr) - 1, NULL); size -= (WCSLEN (cour) + 1); } *cour = L'\0'; if (!SQLConfigDataSourceW (choose_t->mainwnd, ODBC_CONFIG_DSN, szDriver, connstr)) { if (SQLInstallerErrorW (1, &error, connstr, sizeof (connstr)/sizeof(wchar_t), NULL) != SQL_NO_DATA && error != ODBC_ERROR_REQUEST_FAILED) create_errorw (choose_t->mainwnd, szDSN, L"An error occurred when trying to configure the DSN : ", connstr); goto done; } adddsns_to_list (choose_t->udsnlist, FALSE, choose_t->mainwnd); free(szDriver); } free(szDSN); } } } done: if ((err = GetDataBrowserSelectionAnchor (choose_t->udsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->uremove); DeactivateControl (choose_t->uconfigure); DeactivateControl (choose_t->utest); } } } return noErr; } pascal OSStatus userdsn_test_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) inUserData; wchar_t connstr[4096] = { L'\0' }, outconnstr[4096] = { L'\0' }; wchar_t *szDSN = NULL, *szDriver = NULL; DataBrowserItemID first, last; HENV henv; HDBC hdbc; SWORD buflen; OSStatus err; if (choose_t) { /* Retrieve the DSN name */ if ((err = GetDataBrowserSelectionAnchor (choose_t->udsnlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + DSN_nrows) { /* Get the DSN */ szDSN = convert_CFString_to_wchar(DSN_array[0][first - DBITEM_ID - 1]); if(szDSN) { /* Get the driver */ szDriver = convert_CFString_to_wchar(DSN_array[2][first - DBITEM_ID - 1]); if(szDriver) { /* Make the connection */ #if (ODBCVER < 0x300) if (SQLAllocEnv (&henv) != SQL_SUCCESS) #else if (SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv) != SQL_SUCCESS) #endif { _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, SQL_NULL_HDBC, SQL_NULL_HSTMT); goto done; } #if (ODBCVER < 0x300) if (SQLAllocConnect (henv, &hdbc) != SQL_SUCCESS) #else SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER); if (SQLAllocHandle (SQL_HANDLE_DBC, henv, &hdbc) != SQL_SUCCESS) #endif { _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, hdbc, SQL_NULL_HSTMT); SQLFreeEnv (henv); goto done; } WCSCPY(connstr, L"DSN="); WCSCAT(connstr, szDSN); SQLSetConfigMode (ODBC_USER_DSN); if (SQLDriverConnectW (hdbc, choose_t->mainwnd, connstr, SQL_NTS, outconnstr, sizeof (outconnstr) / sizeof(wchar_t), &buflen, SQL_DRIVER_PROMPT) != SQL_SUCCESS) { _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, hdbc, SQL_NULL_HSTMT); } else { __create_message (choose_t->mainwnd, szDSN, L"The connection DSN was tested successfully, and can be used at this time.", 'W', kAlertNoteAlert); SQLDisconnect (hdbc); } #if (ODBCVER < 0x300) SQLFreeConnect (hdbc); SQLFreeEnv (henv); #else SQLFreeHandle (SQL_HANDLE_DBC, hdbc); SQLFreeHandle (SQL_HANDLE_ENV, henv); #endif } } } } done: if(szDSN) free(szDSN); if(szDriver) free(szDriver); if ((err = GetDataBrowserSelectionAnchor (choose_t->udsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->uremove); DeactivateControl (choose_t->uconfigure); DeactivateControl (choose_t->utest); } } } return noErr; } pascal OSStatus systemdsn_add_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) inUserData; wchar_t drv[1024] = { L'\0' }; DataBrowserItemID first, last; OSStatus err; int sqlstat; if (choose_t) { /* Try first to get the driver name */ if (_iodbcdm_drvchoose_dialboxw (choose_t->mainwnd, drv, sizeof (drv) / sizeof(wchar_t), &sqlstat) == SQL_SUCCESS) { if (!SQLConfigDataSourceW (choose_t->mainwnd, ODBC_ADD_SYS_DSN, drv + WCSLEN (L"DRIVER="), L"\0\0")) { _iodbcdm_errorboxw (choose_t->mainwnd, NULL, L"An error occurred when trying to add the DSN : "); goto done; } adddsns_to_list (choose_t->sdsnlist, TRUE, choose_t->mainwnd); } done: if ((err = GetDataBrowserSelectionAnchor (choose_t->sdsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->sremove); DeactivateControl (choose_t->sconfigure); DeactivateControl (choose_t->stest); } } } return noErr; } pascal OSStatus systemdsn_remove_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) inUserData; DataBrowserItemID first, last; wchar_t *szDSN, *szDriver; wchar_t dsn[1024] = { L'\0' }; OSStatus err; if (choose_t) { /* Retrieve the DSN name */ if ((err = GetDataBrowserSelectionAnchor (choose_t->sdsnlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + DSN_nrows) { /* Get the DSN */ szDSN = convert_CFString_to_wchar(DSN_array[0][first - DBITEM_ID - 1]); if(szDSN) { /* Get the driver */ szDriver = convert_CFString_to_wchar(DSN_array[2][first - DBITEM_ID - 1]); if(szDriver) { if (create_confirmw (choose_t->mainwnd, szDSN, L"Are you sure you want to remove this DSN ?")) { /* Call the right function */ WCSCPY(dsn, L"DSN="); WCSCAT(dsn, szDSN); dsn[WCSLEN(dsn)+1] = L'\0'; if (!SQLConfigDataSourceW (choose_t->mainwnd, ODBC_REMOVE_SYS_DSN, szDriver, dsn)) _iodbcdm_errorboxw (choose_t->mainwnd, szDSN, L"An error occurred when trying to remove the DSN "); } adddsns_to_list (choose_t->sdsnlist, TRUE, choose_t->mainwnd); free(szDriver); } free(szDSN); } } } if ((err = GetDataBrowserSelectionAnchor (choose_t->sdsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->sremove); DeactivateControl (choose_t->sconfigure); DeactivateControl (choose_t->stest); } } } return noErr; } pascal OSStatus systemdsn_configure_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) inUserData; wchar_t connstr[4096] = { L'\0' }, tokenstr[4096] = { L'\0' }; wchar_t *szDSN, *szDriver; DataBrowserItemID first, last; int size = sizeof (connstr)/sizeof(wchar_t); wchar_t *curr, *cour; OSStatus err; DWORD error; if (choose_t) { /* Retrieve the DSN name */ if ((err = GetDataBrowserSelectionAnchor (choose_t->sdsnlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + DSN_nrows) { /* Get the DSN */ szDSN = convert_CFString_to_wchar(DSN_array[0][first - DBITEM_ID - 1]); if(szDSN) { /* Get the driver */ szDriver = convert_CFString_to_wchar(DSN_array[2][first - DBITEM_ID - 1]); if(szDriver) { /* Call the right function */ WCSCPY(connstr, L"DSN="); WCSCAT(connstr, szDSN); connstr[WCSLEN(connstr)+1] = L'\0'; size -= (WCSLEN (connstr) + 1); SQLSetConfigMode (ODBC_SYSTEM_DSN); if (!SQLGetPrivateProfileStringW (szDSN, NULL, L"", tokenstr, sizeof (tokenstr)/sizeof(wchar_t), NULL)) { _iodbcdm_errorboxw (choose_t->mainwnd, szDSN, L"An error occurred when trying to configure the DSN "); goto done; } for (curr = tokenstr, cour = connstr + WCSLEN (connstr) + 1; *curr != L'\0' ; curr += (WCSLEN (curr) + 1), cour += (WCSLEN (cour) + 1)) { WCSCPY (cour, curr); cour[WCSLEN (curr)] = L'='; SQLSetConfigMode (ODBC_SYSTEM_DSN); SQLGetPrivateProfileStringW (szDSN, curr, L"", cour + WCSLEN (curr) + 1, size - WCSLEN (curr) - 1, NULL); size -= (WCSLEN (cour) + 1); } *cour = L'\0'; if (!SQLConfigDataSourceW (choose_t->mainwnd, ODBC_CONFIG_SYS_DSN, szDriver, connstr)) { if (SQLInstallerErrorW (1, &error, connstr, sizeof (connstr)/sizeof(wchar_t), NULL) != SQL_NO_DATA && error != ODBC_ERROR_REQUEST_FAILED) create_errorw (choose_t->mainwnd, szDSN, L"An error occurred when trying to configure the DSN : ", connstr); goto done; } adddsns_to_list (choose_t->sdsnlist, TRUE, choose_t->mainwnd); free(szDriver); } free(szDSN); } } } done: if ((err = GetDataBrowserSelectionAnchor (choose_t->sdsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->sremove); DeactivateControl (choose_t->sconfigure); DeactivateControl (choose_t->stest); } } } return noErr; } pascal OSStatus systemdsn_test_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *choose_t = (TDSNCHOOSER *) inUserData; wchar_t connstr[4096] = { L'\0' }, outconnstr[4096] = { L'\0' }; wchar_t *szDSN = NULL, *szDriver = NULL; DataBrowserItemID first, last; HENV henv; HDBC hdbc; SWORD buflen; OSStatus err; if (choose_t) { /* Retrieve the DSN name */ if ((err = GetDataBrowserSelectionAnchor (choose_t->sdsnlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + DSN_nrows) { /* Get the DSN */ szDSN = convert_CFString_to_wchar(DSN_array[0][first - DBITEM_ID - 1]); if(szDSN) { /* Get the driver */ szDriver = convert_CFString_to_wchar(DSN_array[2][first - DBITEM_ID - 1]); if(szDriver) { /* Make the connection */ #if (ODBCVER < 0x300) if (SQLAllocEnv (&henv) != SQL_SUCCESS) #else if (SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv) != SQL_SUCCESS) #endif { _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, SQL_NULL_HDBC, SQL_NULL_HSTMT); goto done; } #if (ODBCVER < 0x300) if (SQLAllocConnect (henv, &hdbc) != SQL_SUCCESS) #else SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER); if (SQLAllocHandle (SQL_HANDLE_DBC, henv, &hdbc) != SQL_SUCCESS) #endif { _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, hdbc, SQL_NULL_HSTMT); SQLFreeEnv (henv); goto done; } WCSCPY(connstr, L"DSN="); WCSCAT(connstr, szDSN); SQLSetConfigMode (ODBC_SYSTEM_DSN); if (SQLDriverConnectW (hdbc, choose_t->mainwnd, connstr, SQL_NTS, outconnstr, sizeof (outconnstr)/sizeof(wchar_t), &buflen, SQL_DRIVER_PROMPT) != SQL_SUCCESS) { _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, hdbc, SQL_NULL_HSTMT); } else { __create_message (choose_t->mainwnd, szDSN, L"The connection DSN was tested successfully, and can be used at this time.", 'W', kAlertNoteAlert); SQLDisconnect (hdbc); } #if (ODBCVER < 0x300) SQLFreeConnect (hdbc); SQLFreeEnv (henv); #else SQLFreeHandle (SQL_HANDLE_DBC, hdbc); SQLFreeHandle (SQL_HANDLE_ENV, henv); #endif } } } } done: if(szDSN) free(szDSN); if(szDriver) free(szDriver); if ((err = GetDataBrowserSelectionAnchor (choose_t->sdsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (choose_t->sremove); DeactivateControl (choose_t->sconfigure); DeactivateControl (choose_t->stest); } } } return noErr; } pascal OSStatus dsnchooser_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *dsnchoose_t = (inUserData) ? ((void **) inUserData)[0] : NULL; WindowRef mainwnd = (inUserData) ? ((void **) inUserData)[1] : NULL; DataBrowserItemID first, last; OSStatus err; if (dsnchoose_t) { dsnchoose_t->dsn = NULL; dsnchoose_t->fdsn = NULL; switch (dsnchoose_t->type_dsn) { case USER_DSN: /* Get the selection */ if ((err = GetDataBrowserSelectionAnchor (dsnchoose_t->udsnlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + DSN_nrows) { /* Get the driver name */ dsnchoose_t->dsn = convert_CFString_to_wchar(DSN_array[0][first - DBITEM_ID - 1]); } } break; case SYSTEM_DSN: /* Get the selection */ if ((err = GetDataBrowserSelectionAnchor (dsnchoose_t->sdsnlist, &first, &last)) == noErr) { if (first > DBITEM_ID && first <= DBITEM_ID + DSN_nrows) { /* Get the driver name */ dsnchoose_t->dsn = convert_CFString_to_wchar(DSN_array[0][first - DBITEM_ID - 1]); } } break; case FILE_DSN: /* Get the selection */ if ((err = GetDataBrowserSelectionAnchor (dsnchoose_t->fdsnlist, &first, &last)) == noErr) { char str[1024]; char *path; if (first > DBITEM_ID && first <= DBITEM_ID + FDSN_nrows) { if (FDSN_type[first - DBITEM_ID - 1] != 0) { CFStringGetCString(FDSN_array[first - DBITEM_ID - 1], str, sizeof(str), kCFStringEncodingUTF8); asprintf (&path, "%s/%s", (dsnchoose_t->curr_dir ? dsnchoose_t->curr_dir : ""), str); /* Get the driver name */ dsnchoose_t->fdsn = dm_SQL_U8toW(path, SQL_NTS); if (path) free(path); } } } break; default: break; }; dsnchoose_t->udsnlist = dsnchoose_t->sdsnlist = dsnchoose_t->fdsnlist = NULL; dsnchoose_t->uadd = dsnchoose_t->uremove = NULL; dsnchoose_t->utest = dsnchoose_t->uconfigure = NULL; dsnchoose_t->sadd = dsnchoose_t->sremove = NULL; dsnchoose_t->stest = dsnchoose_t->sconfigure = NULL; dsnchoose_t->fadd = dsnchoose_t->fremove = NULL; dsnchoose_t->ftest = dsnchoose_t->fconfigure = NULL; dsnchoose_t->fdir = dsnchoose_t->dir_list = dsnchoose_t->file_list = NULL; dsnchoose_t->file_entry = dsnchoose_t->dir_combo = NULL; dsnchoose_t->mainwnd = NULL; } if (mainwnd) { DisposeWindow (mainwnd); dsnchoose_t->mainwnd = NULL; } DSN_nrows = 0; FDSN_nrows = 0; return noErr; } pascal OSStatus dsnchooser_cancel_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TDSNCHOOSER *dsnchoose_t = (inUserData) ? ((void **) inUserData)[0] : NULL; WindowRef mainwnd = (inUserData) ? ((void **) inUserData)[1] : NULL; if (dsnchoose_t) { dsnchoose_t->udsnlist = dsnchoose_t->sdsnlist = NULL; dsnchoose_t->uadd = dsnchoose_t->uremove = NULL; dsnchoose_t->utest = dsnchoose_t->uconfigure = NULL; dsnchoose_t->sadd = dsnchoose_t->sremove = NULL; dsnchoose_t->stest = dsnchoose_t->sconfigure = NULL; dsnchoose_t->fadd = dsnchoose_t->fremove = NULL; dsnchoose_t->ftest = dsnchoose_t->fconfigure = NULL; dsnchoose_t->fdir = dsnchoose_t->dir_list = dsnchoose_t->file_list = NULL; dsnchoose_t->file_entry = dsnchoose_t->dir_combo = NULL; dsnchoose_t->type_dsn = -1; dsnchoose_t->dsn = NULL; dsnchoose_t->fdsn = NULL; dsnchoose_t->mainwnd = NULL; } if (mainwnd) { DisposeWindow (mainwnd); dsnchoose_t->mainwnd = NULL; } DSN_nrows = 0; FDSN_nrows = 0; return noErr; } pascal OSStatus dsnchooser_switch_page (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { int tabs[] = { 3, UDSN_TAB, SDSN_TAB, FDSN_TAB }; TDSNCHOOSER *dsnchoose_t = (inUserData) ? ((void **) inUserData)[0] : NULL; WindowRef mainwnd = (inUserData) ? ((void **) inUserData)[1] : NULL; DataBrowserItemID first, last; ControlRef tabControl; ControlID controlID; int tab_index; OSStatus err; /* Search which tab is activated */ controlID.signature = TABS_SIGNATURE; controlID.id = GLOBAL_TAB; GetControlByID (mainwnd, &controlID, &tabControl); DisplayTabControlNumber (tab_index = GetControlValue (tabControl), tabControl, mainwnd, tabs); if (tab_index == *(int *) (((void **) inUserData)[2])) return noErr; ClearKeyboardFocus (mainwnd); *(int *) (((void **) inUserData)[2]) = tab_index; switch (tab_index) { /* User DSN panel */ case 1: if (dsnchoose_t) { DSNCHOOSER = dsnchoose_t; DSN_nrows = 0; dsnchoose_t->type_dsn = USER_DSN; adddsns_to_list (dsnchoose_t->udsnlist, FALSE, mainwnd); if ((err = GetDataBrowserSelectionAnchor (dsnchoose_t->udsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (dsnchoose_t->uremove); DeactivateControl (dsnchoose_t->uconfigure); DeactivateControl (dsnchoose_t->utest); } } } break; /* System DSN panel */ case 2: if (dsnchoose_t) { DSNCHOOSER = dsnchoose_t; DSN_nrows = 0; dsnchoose_t->type_dsn = SYSTEM_DSN; adddsns_to_list (dsnchoose_t->sdsnlist, TRUE, mainwnd); if ((err = GetDataBrowserSelectionAnchor (dsnchoose_t->sdsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (dsnchoose_t->sremove); DeactivateControl (dsnchoose_t->sconfigure); DeactivateControl (dsnchoose_t->stest); } } } break; /* File DSN panel */ case 3: if (dsnchoose_t) { DSNCHOOSER = dsnchoose_t; dsnchoose_t->type_dsn = FILE_DSN; addfdsns_to_list (dsnchoose_t, dsnchoose_t->curr_dir, false); if ((err = GetDataBrowserSelectionAnchor (dsnchoose_t->fdsnlist, &first, &last)) == noErr) { if (!first && !last) { DeactivateControl (dsnchoose_t->fremove); DeactivateControl (dsnchoose_t->fconfigure); DeactivateControl (dsnchoose_t->ftest); } } } break; }; AdvanceKeyboardFocus (mainwnd); return noErr; } void create_dsnchooser (HWND hwnd, TDSNCHOOSER * dsnchoose_t) { int tabs[] = { 3, UDSN_TAB, SDSN_TAB, FDSN_TAB }; EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; ControlRef tabControl, control; RgnHandle cursorRgn = NULL; EventRecord event; ControlID controlID; IBNibRef nibRef; OSStatus err; WindowPtr dsnchooser; void *inparams[3]; int current_tab = -1; CFStringRef libname = NULL; CFBundleRef bundle; CFURLRef liburl; SInt16 rscId = -1, oldId = CurResFile(); if (hwnd == NULL) return; /* Load the ressource data file */ bundle = CFBundleGetBundleWithIdentifier (CFSTR("org.iodbc.adm")); if (bundle) { liburl = CFBundleCopyExecutableURL (bundle); if ((libname = CFURLCopyFileSystemPath (liburl, kCFURLPOSIXPathStyle))) { FSRef ref; char *pr1 = convert_CFString_to_char(libname); if(pr1) { char forkName[2048]; int i; STRCPY (forkName, pr1); free(pr1); for(i=STRLEN(forkName)-1 ; i>0 && forkName[i]!='/' ; i--); if (i != 0) { forkName[i] = '\0'; } for(i=STRLEN(forkName)-1 ; i>0 && forkName[i]!='/' ; i--); if(i != 0) { STRCPY (forkName + i + 1, "Resources/iODBCadm.rsrc"); err = FSPathMakeRef (forkName, &ref, FALSE); err = FSOpenResourceFile (&ref, 0, NULL, fsRdPerm, &rscId); } } CFRelease (libname); } } if(rscId != -1) UseResFile (rscId); /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.adm")), CFSTR ("dsnchooser"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ err = CreateWindowFromNib (nibRef, CFSTR ("Window"), &dsnchooser); if (err != noErr) goto error; /* And no need anymore the nib */ DisposeNibReference (nibRef); } else goto error; /* Find the tab control . */ GETCONTROLBYID (controlID, TABS_SIGNATURE, GLOBAL_TAB, dsnchooser, tabControl); /* Create for each tab a structure */ /* TDSNCHOOSER */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, ULIST_CNTL, dsnchooser, dsnchoose_t->udsnlist); GETCONTROLBYID (controlID, CNTL_SIGNATURE, SLIST_CNTL, dsnchooser, dsnchoose_t->sdsnlist); GETCONTROLBYID (controlID, CNTL_SIGNATURE, FLIST_CNTL, dsnchooser, dsnchoose_t->fdsnlist); GETCONTROLBYID (controlID, CNTL_SIGNATURE, UADD_CNTL, dsnchooser, dsnchoose_t->uadd); GETCONTROLBYID (controlID, CNTL_SIGNATURE, SADD_CNTL, dsnchooser, dsnchoose_t->sadd); GETCONTROLBYID (controlID, CNTL_SIGNATURE, FADD_CNTL, dsnchooser, dsnchoose_t->fadd); GETCONTROLBYID (controlID, CNTL_SIGNATURE, UDEL_CNTL, dsnchooser, dsnchoose_t->uremove); GETCONTROLBYID (controlID, CNTL_SIGNATURE, SDEL_CNTL, dsnchooser, dsnchoose_t->sremove); GETCONTROLBYID (controlID, CNTL_SIGNATURE, FDEL_CNTL, dsnchooser, dsnchoose_t->fremove); GETCONTROLBYID (controlID, CNTL_SIGNATURE, UTST_CNTL, dsnchooser, dsnchoose_t->utest); GETCONTROLBYID (controlID, CNTL_SIGNATURE, STST_CNTL, dsnchooser, dsnchoose_t->stest); GETCONTROLBYID (controlID, CNTL_SIGNATURE, FTST_CNTL, dsnchooser, dsnchoose_t->ftest); GETCONTROLBYID (controlID, CNTL_SIGNATURE, UCFG_CNTL, dsnchooser, dsnchoose_t->uconfigure); GETCONTROLBYID (controlID, CNTL_SIGNATURE, SCFG_CNTL, dsnchooser, dsnchoose_t->sconfigure); GETCONTROLBYID (controlID, CNTL_SIGNATURE, FCFG_CNTL, dsnchooser, dsnchoose_t->fconfigure); GETCONTROLBYID (controlID, CNTL_SIGNATURE, FDIR_CNTL, dsnchooser, dsnchoose_t->fdir); dsnchoose_t->type_dsn = USER_DSN; dsnchoose_t->mainwnd = dsnchooser; /* Install an event handler on the tab control. */ InstallEventHandler (GetControlEventTarget (tabControl), NewEventHandlerUPP (dsnchooser_switch_page), 1, &controlSpec, inparams, NULL); /* Install an event handler on the OK button */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, OKBUT_CNTL, dsnchooser, control) InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (dsnchooser_ok_clicked), 1, &controlSpec, inparams, NULL); /* Install an event handler on the Cancel button */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, CANCELBUT_CNTL, dsnchooser, control) InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (dsnchooser_cancel_clicked), 1, &controlSpec, inparams, NULL); /* Install an event handler on the Add button of the user DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, UADD_CNTL, dsnchooser, control) InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (userdsn_add_clicked), 1, &controlSpec, dsnchoose_t, NULL); /* Install an event handler on the Remove button of the user DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, UDEL_CNTL, dsnchooser, control) InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (userdsn_remove_clicked), 1, &controlSpec, dsnchoose_t, NULL); /* Install an event handler on the Configure button of the user DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, UCFG_CNTL, dsnchooser, control) InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (userdsn_configure_clicked), 1, &controlSpec, dsnchoose_t, NULL); /* Install an event handler on the Test button of the user DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, UTST_CNTL, dsnchooser, control) InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (userdsn_test_clicked), 1, &controlSpec, dsnchoose_t, NULL); /* Install an event handler on the Add button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, SADD_CNTL, dsnchooser, control) InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (systemdsn_add_clicked), 1, &controlSpec, dsnchoose_t, NULL); /* Install an event handler on the Remove button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, SDEL_CNTL, dsnchooser, control) InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (systemdsn_remove_clicked), 1, &controlSpec, dsnchoose_t, NULL); /* Install an event handler on the Configure button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, SCFG_CNTL, dsnchooser, control) InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (systemdsn_configure_clicked), 1, &controlSpec, dsnchoose_t, NULL); /* Install an event handler on the Test button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, STST_CNTL, dsnchooser, control) InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (systemdsn_test_clicked), 1, &controlSpec, dsnchoose_t, NULL); /* Install an event handler on the Add button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, FADD_CNTL, dsnchooser, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (filedsn_add_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Remove button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, FDEL_CNTL, dsnchooser, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (filedsn_remove_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Select dir menu of the File DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, FDIR_CNTL, dsnchooser, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (filedsn_select_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Configure button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, FCFG_CNTL, dsnchooser, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (filedsn_configure_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the Test button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, FTST_CNTL, dsnchooser, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (filedsn_test_clicked), 1, &controlSpec, &dsnchoose_t, NULL); /* Install an event handler on the SetDir button of the system DSNs */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, FSETDIR_CNTL, dsnchooser, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (filedsn_setdir_clicked), 1, &controlSpec, &dsnchoose_t, NULL); inparams[0] = dsnchoose_t; inparams[1] = dsnchooser; inparams[2] = ¤t_tab; SQLSetConfigMode (ODBC_BOTH_DSN); if (!SQLGetPrivateProfileString("ODBC", "FileDSNPath", "", dsnchoose_t->curr_dir, sizeof(dsnchoose_t->curr_dir), "odbcinst.ini")) strcpy(dsnchoose_t->curr_dir, DEFAULT_FILEDSNPATH); /* Force to go on the first tab */ DisplayTabControlNumber (1, tabControl, dsnchooser, tabs); dsnchooser_switch_page (NULL, NULL, inparams); AdvanceKeyboardFocus (dsnchooser); /* Show the window */ ShowWindow (dsnchooser); SetPort ((GrafPtr) GetWindowPort (dsnchooser)); /* The main loop */ while (dsnchoose_t->mainwnd) WaitNextEvent (everyEvent, &event, 60L, cursorRgn); if(rscId != -1) { CloseResFile (rscId); UseResFile (oldId); } return; error: fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); if(rscId != -1) { CloseResFile (rscId); UseResFile (oldId); } return; } libiodbc-3.52.9/drvproxy/0000755000076400007640000000000012323210721012260 500000000000000libiodbc-3.52.9/drvproxy/Info.c0000644000076400007640000000636012323210535013247 00000000000000/* * info.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include char *iodbcproxy_version = VERSION; libiodbc-3.52.9/drvproxy/gtk/0000755000076400007640000000000012323210721013045 500000000000000libiodbc-3.52.9/drvproxy/gtk/Makefile.in0000644000076400007640000004372212323210643015045 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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 = drvproxy/gtk DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libdrvproxy_gtk_la_DEPENDENCIES = am_libdrvproxy_gtk_la_OBJECTS = gensetup.lo loginbox.lo libdrvproxy_gtk_la_OBJECTS = $(am_libdrvproxy_gtk_la_OBJECTS) libdrvproxy_gtk_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libdrvproxy_gtk_la_LDFLAGS) $(LDFLAGS) -o $@ @GTK_TRUE@am_libdrvproxy_gtk_la_rpath = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/admin/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 = $(libdrvproxy_gtk_la_SOURCES) DIST_SOURCES = $(libdrvproxy_gtk_la_SOURCES) HEADERS = $(noinst_HEADERS) 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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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@ @GTK_TRUE@noinst_LTLIBRARIES = libdrvproxy-gtk.la AM_CPPFLAGS = \ -I$(top_srcdir)/include -I$(top_srcdir)/iodbc \ @GTK_CFLAGS@ -D__GTK__ libdrvproxy_gtk_la_LDFLAGS = #-static libdrvproxy_gtk_la_LIBADD = @GTK_LIBS@ libdrvproxy_gtk_la_SOURCES = \ gensetup.c \ loginbox.c noinst_HEADERS = gui.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 drvproxy/gtk/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu drvproxy/gtk/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libdrvproxy-gtk.la: $(libdrvproxy_gtk_la_OBJECTS) $(libdrvproxy_gtk_la_DEPENDENCIES) $(libdrvproxy_gtk_la_LINK) $(am_libdrvproxy_gtk_la_rpath) $(libdrvproxy_gtk_la_OBJECTS) $(libdrvproxy_gtk_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gensetup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loginbox.Plo@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 $(LTLIBRARIES) $(HEADERS) 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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 clean-noinstLTLIBRARIES \ 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: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags 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 # 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: libiodbc-3.52.9/drvproxy/gtk/gensetup.c0000644000076400007640000005565312323210535015004 00000000000000/* * gensetup.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "gui.h" static char* STRCONN = "DSN=%s\0Description=%s\0\0"; static int STRCONN_NB_TOKENS = 2; static char *szKeysColumnNames[] = { "Keyword", "Value" }; static char *szKeysButtons[] = { "_Add", "_Update" }; static void addkeywords_to_list(GtkWidget* widget, LPCSTR attrs, TGENSETUP *gensetup_t) { char *curr, *cour; char *data[2]; if (!GTK_IS_CLIST (widget)) return; gtk_clist_clear (GTK_CLIST (widget)); for (curr = (LPSTR) attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "Description=", STRLEN ("Description="))) gtk_entry_set_text (GTK_ENTRY (gensetup_t->comment_entry), curr + STRLEN ("Description=")); if (!strncasecmp (curr, "DSN=", STRLEN ("DSN=")) || !strncasecmp (curr, "Driver=", STRLEN ("Driver=")) || !strncasecmp (curr, "Description=", STRLEN ("Description="))) continue; if ((cour = strchr (curr, '='))) { *cour = '\0'; data[0] = curr; data[1] = cour + 1; gtk_clist_append (GTK_CLIST (widget), data); *cour = '='; } else { data[0] = ""; gtk_clist_append (GTK_CLIST (widget), data); } } if (GTK_CLIST (widget)->rows > 0) gtk_clist_sort (GTK_CLIST (widget)); } static void parse_attribute_line(TGENSETUP *gensetup_t, LPCSTR dsn, LPCSTR attrs, BOOL add) { if (dsn) { gtk_entry_set_text (GTK_ENTRY (gensetup_t->dsn_entry), dsn); if (add) gtk_widget_set_sensitive (gensetup_t->dsn_entry, TRUE); else gtk_widget_set_sensitive (gensetup_t->dsn_entry, FALSE); } addkeywords_to_list (gensetup_t->key_list, attrs, gensetup_t); } static void gensetup_add_clicked(GtkWidget* widget, TGENSETUP *gensetup_t) { char *szKey; char *data[2]; int i = 0; if (gensetup_t) { data[0] = (char*)gtk_entry_get_text (GTK_ENTRY (gensetup_t->key_entry)); if (STRLEN (data[0])) { data[1] = (char*)gtk_entry_get_text (GTK_ENTRY (gensetup_t->value_entry)); /* Try to see if the keyword already exists */ for (i = 0; i < GTK_CLIST (gensetup_t->key_list)->rows; i++) { gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), i, 0, &szKey); if (STREQ (data[0], szKey)) goto done; } /* An update operation */ if (i < GTK_CLIST (gensetup_t->key_list)->rows) { gtk_clist_set_text (GTK_CLIST (gensetup_t->key_list), i, 1, data[1]); } else if (STRLEN (data[1])) { gtk_clist_append (GTK_CLIST (gensetup_t->key_list), data); } } gtk_clist_sort (GTK_CLIST (gensetup_t->key_list)); done: gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), ""); gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), ""); } } static void gensetup_update_clicked(GtkWidget* widget, TGENSETUP *gensetup_t) { char *data[2]; int i; if (gensetup_t) { data[0] = (char*)gtk_entry_get_text (GTK_ENTRY (gensetup_t->key_entry)); if (STRLEN (data[0])) { data[1] = (char*)gtk_entry_get_text (GTK_ENTRY (gensetup_t->value_entry)); if (GTK_CLIST (gensetup_t->key_list)->selection != NULL) i = GPOINTER_TO_INT (GTK_CLIST (gensetup_t->key_list)->selection-> data); else i = 0; /* An update operation */ if (i < GTK_CLIST (gensetup_t->key_list)->rows) { gtk_clist_set_text (GTK_CLIST (gensetup_t->key_list), i, 0, data[0]); gtk_clist_set_text (GTK_CLIST (gensetup_t->key_list), i, 1, data[1]); } } gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), ""); gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), ""); } } static void gensetup_list_select(GtkWidget* widget, gint row, gint column, GdkEvent *event, TGENSETUP *gensetup_t) { char *szKey, *szValue; if (gensetup_t && GTK_CLIST (gensetup_t->key_list)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), GPOINTER_TO_INT (GTK_CLIST (gensetup_t->key_list)->selection->data), 0, &szKey); gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), GPOINTER_TO_INT (GTK_CLIST (gensetup_t->key_list)->selection->data), 1, &szValue); gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), szKey); gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), szValue); gtk_widget_set_sensitive (gensetup_t->bupdate, TRUE); } } static void gensetup_list_unselect(GtkWidget* widget, gint row, gint column, GdkEvent *event, TGENSETUP *gensetup_t) { if (gensetup_t) { gtk_widget_set_sensitive (gensetup_t->bupdate, FALSE); gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), ""); gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), ""); } } static void gensetup_ok_clicked(GtkWidget* widget, TGENSETUP *gensetup_t) { char *curr, *cour, *szKey, *szValue; int i = 0, size = 0; if (gensetup_t) { /* What is the size of the block to malloc */ size += STRLEN (gtk_entry_get_text (GTK_ENTRY (gensetup_t->dsn_entry))) + STRLEN ("DSN=") + 1; size += STRLEN (gtk_entry_get_text (GTK_ENTRY (gensetup_t-> comment_entry))) + STRLEN ("Description=") + 1; /* Malloc it (+1 for list-terminating NUL) */ if ((gensetup_t->connstr = (char *) malloc (size + 1))) { for (curr = STRCONN, cour = gensetup_t->connstr; i < STRCONN_NB_TOKENS; i++, curr += (STRLEN (curr) + 1)) switch (i) { case 0: sprintf (cour, curr, gtk_entry_get_text (GTK_ENTRY (gensetup_t->dsn_entry))); cour += (STRLEN (cour) + 1); break; case 1: sprintf (cour, curr, gtk_entry_get_text (GTK_ENTRY (gensetup_t-> comment_entry))); cour += (STRLEN (cour) + 1); break; }; for (i = 0; i < GTK_CLIST (gensetup_t->key_list)->rows; i++) { gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), i, 0, &szKey); gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), i, 1, &szValue); cour = gensetup_t->connstr; gensetup_t->connstr = (char *) malloc (size + STRLEN (szKey) + STRLEN (szValue) + 2); if (gensetup_t->connstr) { memcpy (gensetup_t->connstr, cour, size); sprintf (gensetup_t->connstr + size, "%s=%s", szKey, szValue); free (cour); size += STRLEN (szKey) + STRLEN (szValue) + 2; } else gensetup_t->connstr = cour; } /* add list-terminating NUL */ gensetup_t->connstr[size] = '\0'; } gensetup_t->dsn_entry = gensetup_t->comment_entry = NULL; gensetup_t->key_list = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (gensetup_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (gensetup_t->mainwnd); } } static void gensetup_cancel_clicked(GtkWidget* widget, TGENSETUP *gensetup_t) { if (gensetup_t) { gensetup_t->connstr = (LPSTR) - 1L; gensetup_t->dsn_entry = gensetup_t->comment_entry = NULL; gensetup_t->key_list = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (gensetup_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (gensetup_t->mainwnd); } } static gint delete_event( GtkWidget *widget, GdkEvent *event, TGENSETUP *gensetup_t) { gensetup_cancel_clicked (widget, gensetup_t); return FALSE; } LPSTR create_gensetup (HWND hwnd, LPCSTR dsn, LPCSTR attrs, BOOL add) { GtkWidget *dgensetup; GtkWidget *vbox42; GtkWidget *vbox43; GtkWidget *frame100; GtkWidget *alignment84; GtkWidget *label166; GtkWidget *frame103; GtkWidget *alignment87; GtkWidget *table11; GtkWidget *label171; GtkWidget *label172; GtkWidget *t_dsn; GtkWidget *t_comment; GtkWidget *frame101; GtkWidget *alignment85; GtkWidget *scrolledwindow22; GtkWidget *clist1; GtkWidget *label167; GtkWidget *label168; GtkWidget *frame102; GtkWidget *alignment86; GtkWidget *hbox58; GtkWidget *table10; GtkWidget *label169; GtkWidget *t_value; GtkWidget *b_update; GtkWidget *b_add; GtkWidget *t_keyword; GtkWidget *label170; GtkWidget *hbuttonbox4; GtkWidget *b_cancel; GtkWidget *b_ok; TGENSETUP gensetup_t; char buff[1024]; if (hwnd == NULL || !GTK_IS_WIDGET (hwnd)) return (LPSTR) attrs; dgensetup = gtk_dialog_new (); gtk_widget_set_name (dgensetup, "dgensetup"); gtk_widget_set_size_request (dgensetup, 356, 445); sprintf (buff, "Setup of DSN %s ...", (dsn) ? dsn : "Unknown"); gtk_window_set_title (GTK_WINDOW (dgensetup), buff); gtk_window_set_position (GTK_WINDOW (dgensetup), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (dgensetup), TRUE); gtk_window_set_default_size (GTK_WINDOW (dgensetup), 600, 450); gtk_window_set_type_hint (GTK_WINDOW (dgensetup), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (dgensetup); #endif vbox42 = GTK_DIALOG (dgensetup)->vbox; gtk_widget_set_name (vbox42, "vbox42"); gtk_widget_show (vbox42); vbox43 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox43, "vbox43"); gtk_widget_show (vbox43); gtk_box_pack_start (GTK_BOX (vbox42), vbox43, TRUE, TRUE, 0); frame100 = gtk_frame_new (NULL); gtk_widget_set_name (frame100, "frame100"); gtk_widget_show (frame100); gtk_box_pack_start (GTK_BOX (vbox43), frame100, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame100), GTK_SHADOW_NONE); alignment84 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment84, "alignment84"); gtk_widget_show (alignment84); gtk_container_add (GTK_CONTAINER (frame100), alignment84); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment84), 4, 4, 0, 0); label166 = gtk_label_new (_("Generic ODBC driver Setup")); gtk_widget_set_name (label166, "label166"); gtk_widget_show (label166); gtk_container_add (GTK_CONTAINER (alignment84), label166); frame103 = gtk_frame_new (NULL); gtk_widget_set_name (frame103, "frame103"); gtk_widget_show (frame103); gtk_box_pack_start (GTK_BOX (vbox43), frame103, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame103), GTK_SHADOW_NONE); alignment87 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment87, "alignment87"); gtk_widget_show (alignment87); gtk_container_add (GTK_CONTAINER (frame103), alignment87); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment87), 6, 0, 0, 0); table11 = gtk_table_new (2, 2, FALSE); gtk_widget_set_name (table11, "table11"); gtk_widget_show (table11); gtk_container_add (GTK_CONTAINER (alignment87), table11); gtk_table_set_row_spacings (GTK_TABLE (table11), 6); gtk_table_set_col_spacings (GTK_TABLE (table11), 4); label171 = gtk_label_new (_("Data Source Name (DSN) :")); gtk_widget_set_name (label171, "label171"); gtk_widget_show (label171); gtk_table_attach (GTK_TABLE (table11), label171, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label171), 0, 0.5); label172 = gtk_label_new (_(" Comment :")); gtk_widget_set_name (label172, "label172"); gtk_widget_show (label172); gtk_table_attach (GTK_TABLE (table11), label172, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label172), 0, 0.5); t_dsn = gtk_entry_new (); gtk_widget_set_name (t_dsn, "t_dsn"); gtk_widget_show (t_dsn); gtk_table_attach (GTK_TABLE (table11), t_dsn, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); t_comment = gtk_entry_new (); gtk_widget_set_name (t_comment, "t_comment"); gtk_widget_show (t_comment); gtk_table_attach (GTK_TABLE (table11), t_comment, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); frame101 = gtk_frame_new (NULL); gtk_widget_set_name (frame101, "frame101"); gtk_widget_show (frame101); gtk_box_pack_start (GTK_BOX (vbox43), frame101, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame101), GTK_SHADOW_NONE); alignment85 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment85, "alignment85"); gtk_widget_show (alignment85); gtk_container_add (GTK_CONTAINER (frame101), alignment85); scrolledwindow22 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrolledwindow22, "scrolledwindow22"); gtk_widget_show (scrolledwindow22); gtk_container_add (GTK_CONTAINER (alignment85), scrolledwindow22); clist1 = gtk_clist_new (2); gtk_widget_set_name (clist1, "clist1"); gtk_widget_show (clist1); gtk_container_add (GTK_CONTAINER (scrolledwindow22), clist1); gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 137); gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 80); gtk_clist_column_titles_show (GTK_CLIST (clist1)); label167 = gtk_label_new (_("Keyword")); gtk_widget_set_name (label167, "label167"); gtk_widget_show (label167); gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, label167); gtk_widget_set_size_request (label167, 137, -1); label168 = gtk_label_new (_("Value")); gtk_widget_set_name (label168, "label168"); gtk_widget_show (label168); gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, label168); frame102 = gtk_frame_new (NULL); gtk_widget_set_name (frame102, "frame102"); gtk_widget_show (frame102); gtk_box_pack_start (GTK_BOX (vbox43), frame102, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame102), GTK_SHADOW_NONE); alignment86 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment86, "alignment86"); gtk_widget_show (alignment86); gtk_container_add (GTK_CONTAINER (frame102), alignment86); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment86), 3, 0, 0, 0); hbox58 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox58, "hbox58"); gtk_widget_show (hbox58); gtk_container_add (GTK_CONTAINER (alignment86), hbox58); table10 = gtk_table_new (2, 3, FALSE); gtk_widget_set_name (table10, "table10"); gtk_widget_show (table10); gtk_box_pack_start (GTK_BOX (hbox58), table10, TRUE, TRUE, 0); label169 = gtk_label_new (_("Value : ")); gtk_widget_set_name (label169, "label169"); gtk_widget_show (label169); gtk_table_attach (GTK_TABLE (table10), label169, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); t_value = gtk_entry_new (); gtk_widget_set_name (t_value, "t_value"); gtk_widget_show (t_value); gtk_table_attach (GTK_TABLE (table10), t_value, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); b_update = gtk_button_new_with_mnemonic (_(" _Update ")); gtk_widget_set_name (b_update, "b_update"); gtk_widget_show (b_update); gtk_table_attach (GTK_TABLE (table10), b_update, 2, 3, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (b_update), 6); b_add = gtk_button_new_from_stock ("gtk-add"); gtk_widget_set_name (b_add, "b_add"); gtk_widget_show (b_add); gtk_table_attach (GTK_TABLE (table10), b_add, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (b_add), 6); t_keyword = gtk_entry_new (); gtk_widget_set_name (t_keyword, "t_keyword"); gtk_widget_show (t_keyword); gtk_table_attach (GTK_TABLE (table10), t_keyword, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); label170 = gtk_label_new (_("Keyword : ")); gtk_widget_set_name (label170, "label170"); gtk_widget_show (label170); gtk_table_attach (GTK_TABLE (table10), label170, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); hbuttonbox4 = GTK_DIALOG (dgensetup)->action_area; gtk_widget_set_name (hbuttonbox4, "hbuttonbox4"); gtk_widget_show (hbuttonbox4); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox4), GTK_BUTTONBOX_END); b_cancel = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_set_name (b_cancel, "b_cancel"); gtk_widget_show (b_cancel); gtk_dialog_add_action_widget (GTK_DIALOG (dgensetup), b_cancel, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (b_cancel, GTK_CAN_DEFAULT); b_ok = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_set_name (b_ok, "b_ok"); gtk_widget_show (b_ok); gtk_dialog_add_action_widget (GTK_DIALOG (dgensetup), b_ok, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (b_ok, GTK_CAN_DEFAULT); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (dgensetup, dgensetup, "dgensetup"); GLADE_HOOKUP_OBJECT_NO_REF (dgensetup, vbox42, "vbox42"); GLADE_HOOKUP_OBJECT (dgensetup, vbox43, "vbox43"); GLADE_HOOKUP_OBJECT (dgensetup, frame100, "frame100"); GLADE_HOOKUP_OBJECT (dgensetup, alignment84, "alignment84"); GLADE_HOOKUP_OBJECT (dgensetup, label166, "label166"); GLADE_HOOKUP_OBJECT (dgensetup, frame103, "frame103"); GLADE_HOOKUP_OBJECT (dgensetup, alignment87, "alignment87"); GLADE_HOOKUP_OBJECT (dgensetup, table11, "table11"); GLADE_HOOKUP_OBJECT (dgensetup, label171, "label171"); GLADE_HOOKUP_OBJECT (dgensetup, label172, "label172"); GLADE_HOOKUP_OBJECT (dgensetup, t_dsn, "t_dsn"); GLADE_HOOKUP_OBJECT (dgensetup, t_comment, "t_comment"); GLADE_HOOKUP_OBJECT (dgensetup, frame101, "frame101"); GLADE_HOOKUP_OBJECT (dgensetup, alignment85, "alignment85"); GLADE_HOOKUP_OBJECT (dgensetup, scrolledwindow22, "scrolledwindow22"); GLADE_HOOKUP_OBJECT (dgensetup, clist1, "clist1"); GLADE_HOOKUP_OBJECT (dgensetup, label167, "label167"); GLADE_HOOKUP_OBJECT (dgensetup, label168, "label168"); GLADE_HOOKUP_OBJECT (dgensetup, frame102, "frame102"); GLADE_HOOKUP_OBJECT (dgensetup, alignment86, "alignment86"); GLADE_HOOKUP_OBJECT (dgensetup, hbox58, "hbox58"); GLADE_HOOKUP_OBJECT (dgensetup, table10, "table10"); GLADE_HOOKUP_OBJECT (dgensetup, label169, "label169"); GLADE_HOOKUP_OBJECT (dgensetup, t_value, "t_value"); GLADE_HOOKUP_OBJECT (dgensetup, b_update, "b_update"); GLADE_HOOKUP_OBJECT (dgensetup, b_add, "b_add"); GLADE_HOOKUP_OBJECT (dgensetup, t_keyword, "t_keyword"); GLADE_HOOKUP_OBJECT (dgensetup, label170, "label170"); GLADE_HOOKUP_OBJECT_NO_REF (dgensetup, hbuttonbox4, "hbuttonbox4"); GLADE_HOOKUP_OBJECT (dgensetup, b_cancel, "b_cancel"); GLADE_HOOKUP_OBJECT (dgensetup, b_ok, "b_ok"); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (b_ok), "clicked", GTK_SIGNAL_FUNC (gensetup_ok_clicked), &gensetup_t); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (b_cancel), "clicked", GTK_SIGNAL_FUNC (gensetup_cancel_clicked), &gensetup_t); /* Add button events */ gtk_signal_connect (GTK_OBJECT (b_add), "clicked", GTK_SIGNAL_FUNC (gensetup_add_clicked), &gensetup_t); /* Update button events */ gtk_signal_connect (GTK_OBJECT (b_update), "clicked", GTK_SIGNAL_FUNC (gensetup_update_clicked), &gensetup_t); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (dgensetup), "delete_event", GTK_SIGNAL_FUNC (delete_event), &gensetup_t); gtk_signal_connect (GTK_OBJECT (dgensetup), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* List events */ gtk_signal_connect (GTK_OBJECT (clist1), "select_row", GTK_SIGNAL_FUNC (gensetup_list_select), &gensetup_t); gtk_signal_connect (GTK_OBJECT (clist1), "unselect_row", GTK_SIGNAL_FUNC (gensetup_list_unselect), &gensetup_t); gensetup_t.dsn_entry = t_dsn; gensetup_t.comment_entry = t_comment; gensetup_t.key_list = clist1; gensetup_t.bupdate = b_update; gensetup_t.key_entry = t_keyword; gensetup_t.value_entry = t_value; gensetup_t.mainwnd = dgensetup; /* Parse the attributes line */ parse_attribute_line (&gensetup_t, dsn, attrs, add); gtk_widget_show_all (dgensetup); gtk_main (); return gensetup_t.connstr; } libiodbc-3.52.9/drvproxy/gtk/loginbox.c0000644000076400007640000002413612323210535014763 00000000000000/* * loginbox.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "gui.h" static void login_ok_clicked (GtkWidget *widget, TLOGIN *log_t) { if (log_t) { log_t->user = (char *) malloc (sizeof (char) * (STRLEN (gtk_entry_get_text (GTK_ENTRY (log_t->username))) + 1)); log_t->pwd = (char *) malloc (sizeof (char) * (STRLEN (gtk_entry_get_text (GTK_ENTRY (log_t->password))) + 1)); if (log_t->user) strcpy (log_t->user, gtk_entry_get_text (GTK_ENTRY (log_t->username))); if (log_t->pwd) strcpy (log_t->pwd, gtk_entry_get_text (GTK_ENTRY (log_t->password))); log_t->username = log_t->password = NULL; log_t->ok = TRUE; gtk_signal_disconnect_by_func (GTK_OBJECT (log_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (log_t->mainwnd); } } static void login_cancel_clicked (GtkWidget *widget, TLOGIN *log_t) { if (log_t) { log_t->user = log_t->pwd = NULL; log_t->username = log_t->password = NULL; log_t->ok = FALSE; gtk_signal_disconnect_by_func (GTK_OBJECT (log_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (log_t->mainwnd); } } static gint delete_event (GtkWidget *widget, GdkEvent *event, TLOGIN *log_t) { login_cancel_clicked (widget, log_t); return FALSE; } void create_login (HWND hwnd, LPCSTR username, LPCSTR password, LPCSTR dsn, TLOGIN *log_t) { GtkWidget *login; GtkWidget *dialog_vbox8; GtkWidget *frame99; GtkWidget *alignment83; GtkWidget *table9; GtkWidget *label165; GtkWidget *t_user; GtkWidget *t_password; GtkWidget *label164; GtkWidget *dialog_action_area8; GtkWidget *b_ok; GtkWidget *b_cancel; char buff[1024]; if (hwnd == (HWND) - 1L) { gtk_init (0, NULL); hwnd = gtk_window_new (GTK_WINDOW_TOPLEVEL); } if (hwnd == NULL || !GTK_IS_WIDGET (hwnd)) return; login = gtk_dialog_new (); gtk_widget_set_name (login, "login"); gtk_widget_set_size_request (login, 400, 150); sprintf (buff, "Login for DSN %s ...", (dsn) ? dsn : "Unknown"); gtk_window_set_title (GTK_WINDOW (login), buff); gtk_window_set_position (GTK_WINDOW (login), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (login), TRUE); gtk_window_set_default_size (GTK_WINDOW (login), 400, 150); gtk_window_set_type_hint (GTK_WINDOW (login), GDK_WINDOW_TYPE_HINT_DIALOG); #if GTK_CHECK_VERSION(2,0,0) gtk_widget_show (login); #endif dialog_vbox8 = GTK_DIALOG (login)->vbox; gtk_widget_set_name (dialog_vbox8, "dialog_vbox8"); gtk_widget_show (dialog_vbox8); frame99 = gtk_frame_new (NULL); gtk_widget_set_name (frame99, "frame99"); gtk_widget_show (frame99); gtk_box_pack_start (GTK_BOX (dialog_vbox8), frame99, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame99), GTK_SHADOW_NONE); alignment83 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment83, "alignment83"); gtk_widget_show (alignment83); gtk_container_add (GTK_CONTAINER (frame99), alignment83); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment83), 4, 0, 6, 7); table9 = gtk_table_new (2, 2, FALSE); gtk_widget_set_name (table9, "table9"); gtk_widget_show (table9); gtk_container_add (GTK_CONTAINER (alignment83), table9); gtk_table_set_row_spacings (GTK_TABLE (table9), 10); gtk_table_set_col_spacings (GTK_TABLE (table9), 6); label165 = gtk_label_new (_("Password :")); gtk_widget_set_name (label165, "label165"); gtk_widget_show (label165); gtk_table_attach (GTK_TABLE (table9), label165, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label165), 0, 0.5); t_user = gtk_entry_new (); gtk_widget_set_name (t_user, "t_user"); gtk_widget_show (t_user); gtk_table_attach (GTK_TABLE (table9), t_user, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); if (username && STRLEN (username)) gtk_entry_set_text (GTK_ENTRY (t_user), username); t_password = gtk_entry_new (); gtk_widget_set_name (t_password, "t_password"); gtk_widget_show (t_password); gtk_table_attach (GTK_TABLE (table9), t_password, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_entry_set_visibility (GTK_ENTRY (t_password), FALSE); if (password && STRLEN (password)) gtk_entry_set_text (GTK_ENTRY (t_password), password); label164 = gtk_label_new (_("Username :")); gtk_widget_set_name (label164, "label164"); gtk_widget_show (label164); gtk_table_attach (GTK_TABLE (table9), label164, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label164), 0, 0.5); dialog_action_area8 = GTK_DIALOG (login)->action_area; gtk_widget_set_name (dialog_action_area8, "dialog_action_area8"); gtk_widget_show (dialog_action_area8); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area8), GTK_BUTTONBOX_END); b_cancel = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_set_name (b_cancel, "b_cancel"); gtk_widget_show (b_cancel); gtk_dialog_add_action_widget (GTK_DIALOG (login), b_cancel, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (b_cancel, GTK_CAN_DEFAULT); b_ok = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_set_name (b_ok, "b_ok"); gtk_widget_show (b_ok); gtk_dialog_add_action_widget (GTK_DIALOG (login), b_ok, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (b_ok, GTK_CAN_DEFAULT); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (login, login, "login"); GLADE_HOOKUP_OBJECT_NO_REF (login, dialog_vbox8, "dialog_vbox8"); GLADE_HOOKUP_OBJECT (login, frame99, "frame99"); GLADE_HOOKUP_OBJECT (login, alignment83, "alignment83"); GLADE_HOOKUP_OBJECT (login, table9, "table9"); GLADE_HOOKUP_OBJECT (login, label165, "label165"); GLADE_HOOKUP_OBJECT (login, t_user, "t_user"); GLADE_HOOKUP_OBJECT (login, t_password, "t_password"); GLADE_HOOKUP_OBJECT (login, label164, "label164"); GLADE_HOOKUP_OBJECT_NO_REF (login, dialog_action_area8, "dialog_action_area8"); GLADE_HOOKUP_OBJECT (login, b_ok, "b_ok"); GLADE_HOOKUP_OBJECT (login, b_cancel, "b_cancel"); /* Ok button events */ gtk_signal_connect (GTK_OBJECT (b_ok), "clicked", GTK_SIGNAL_FUNC (login_ok_clicked), log_t); /* Cancel button events */ gtk_signal_connect (GTK_OBJECT (b_cancel), "clicked", GTK_SIGNAL_FUNC (login_cancel_clicked), log_t); /* Close window button events */ gtk_signal_connect (GTK_OBJECT (login), "delete_event", GTK_SIGNAL_FUNC (delete_event), log_t); gtk_signal_connect (GTK_OBJECT (login), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); log_t->username = t_user; log_t->password = t_password; log_t->user = log_t->pwd = NULL; log_t->mainwnd = login; gtk_widget_show_all (login); gtk_main (); } libiodbc-3.52.9/drvproxy/gtk/gui.h0000644000076400007640000000773412323210535013740 00000000000000/* * gui.h * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #ifndef _GTKGUI_H #define _GTKGUI_H #define GLADE_HOOKUP_OBJECT(component,widget,name) \ gtk_widget_ref(widget); \ gtk_object_set_data_full (GTK_OBJECT (component), name, \ widget, (GtkDestroyNotify) gtk_widget_unref) #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ gtk_object_set_data (GTK_OBJECT (component), name, widget) #define _(X) X typedef struct TLOGIN { GtkWidget *username, *password, *mainwnd; char *user, *pwd; BOOL ok; } TLOGIN; typedef struct TGENSETUP { GtkWidget *dsn_entry, *comment_entry, *key_list, *bupdate; GtkWidget *key_entry, *value_entry; GtkWidget *mainwnd; LPSTR connstr; } TGENSETUP; typedef struct TCONFIRM { GtkWidget *mainwnd; BOOL yes_no; } TCONFIRM; #endif libiodbc-3.52.9/drvproxy/gtk/Makefile.am0000644000076400007640000000663612323210535015037 00000000000000# # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # if GTK noinst_LTLIBRARIES = libdrvproxy-gtk.la endif AM_CPPFLAGS = \ -I$(top_srcdir)/include -I$(top_srcdir)/iodbc \ @GTK_CFLAGS@ -D__GTK__ libdrvproxy_gtk_la_LDFLAGS = #-static libdrvproxy_gtk_la_LIBADD = @GTK_LIBS@ libdrvproxy_gtk_la_SOURCES = \ gensetup.c \ loginbox.c noinst_HEADERS = gui.h libiodbc-3.52.9/drvproxy/Makefile.in0000644000076400007640000006552312323210643014263 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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 = drvproxy DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = 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__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @GTK_FALSE@libdrvproxy_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @GTK_FALSE@ ../iodbcadm/libiodbcadm.la \ @GTK_FALSE@ ../iodbcinst/libiodbc_common.la \ @GTK_FALSE@ ../iodbcinst/libiodbcinst.la @GTK_TRUE@libdrvproxy_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @GTK_TRUE@ ../iodbcadm/libiodbcadm.la \ @GTK_TRUE@ ../drvproxy/gtk/libdrvproxy-gtk.la \ @GTK_TRUE@ ../iodbcinst/libiodbc_common.la \ @GTK_TRUE@ ../iodbcinst/libiodbcinst.la am_libdrvproxy_la_OBJECTS = ConfigDSN.lo ConfigDriver.lo Info.lo \ drvconn.lo libdrvproxy_la_OBJECTS = $(am_libdrvproxy_la_OBJECTS) libdrvproxy_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libdrvproxy_la_LDFLAGS) $(LDFLAGS) -o $@ @GUI_TRUE@am_libdrvproxy_la_rpath = -rpath $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/admin/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 = $(libdrvproxy_la_SOURCES) DIST_SOURCES = $(libdrvproxy_la_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 HEADERS = $(noinst_HEADERS) 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 = gtk 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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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@ @GUI_TRUE@SUBDIRS = gtk @GUI_TRUE@lib_LTLIBRARIES = libdrvproxy.la @GTK_FALSE@AM_CPPFLAGS = \ @GTK_FALSE@ -I$(top_srcdir)/include \ @GTK_FALSE@ -I$(top_srcdir)/iodbc \ @GTK_FALSE@ -I$(top_srcdir)/iodbcinst\ @GTK_FALSE@ -I$(top_srcdir)/iodbcadm @GTK_TRUE@AM_CPPFLAGS = \ @GTK_TRUE@ -I$(top_srcdir)/include \ @GTK_TRUE@ -I$(top_srcdir)/iodbc \ @GTK_TRUE@ -I$(top_srcdir)/iodbcinst \ @GTK_TRUE@ -I$(top_srcdir)/iodbcadm \ @GTK_TRUE@ @GTK_CFLAGS@ -D__GTK__ libdrvproxy_la_LDFLAGS = -version-info @lib_version@ \ -export-symbols $(srcdir)/drvproxy.exp @GTK_FALSE@libdrvproxy_la_LIBADD = \ @GTK_FALSE@ $(LIBADD_DL) \ @GTK_FALSE@ ../iodbcadm/libiodbcadm.la \ @GTK_FALSE@ ../iodbcinst/libiodbc_common.la \ @GTK_FALSE@ ../iodbcinst/libiodbcinst.la @GTK_TRUE@libdrvproxy_la_LIBADD = \ @GTK_TRUE@ $(LIBADD_DL) \ @GTK_TRUE@ ../iodbcadm/libiodbcadm.la \ @GTK_TRUE@ ../drvproxy/gtk/libdrvproxy-gtk.la \ @GTK_TRUE@ ../iodbcinst/libiodbc_common.la \ @GTK_TRUE@ ../iodbcinst/libiodbcinst.la \ @GTK_TRUE@ @GTK_LIBS@ libdrvproxy_la_SOURCES = \ ConfigDSN.c \ ConfigDriver.c \ Info.c \ drvconn.c noinst_HEADERS = gui.h EXTRA_DIST = \ $(srcdir)/drvproxy.exp \ $(srcdir)/macosx/confirm.c \ $(srcdir)/macosx/gensetup.c \ $(srcdir)/macosx/gui.h \ $(srcdir)/macosx/loginbox.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 drvproxy/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu drvproxy/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libdrvproxy.la: $(libdrvproxy_la_OBJECTS) $(libdrvproxy_la_DEPENDENCIES) $(libdrvproxy_la_LINK) $(am_libdrvproxy_la_rpath) $(libdrvproxy_la_OBJECTS) $(libdrvproxy_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConfigDSN.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConfigDriver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Info.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drvconn.Plo@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 # 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) @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 check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ 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-libLTLIBRARIES install-man 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-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-libLTLIBRARIES # 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: libiodbc-3.52.9/drvproxy/ConfigDSN.c0000644000076400007640000002121612323210535014123 00000000000000/* * ConfigDSN.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ /* ----------- Finished and tested with shadowing ----------- */ #include #include #include #include #include "gui.h" BOOL INSTAPI ConfigDSN ( HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes) { char *dsn = NULL, *connstr = NULL, *curr, *cour = NULL; char dsnread[4096] = { 0 }; char prov[4096] = { 0 }; int driver_type = -1, flags = 0; BOOL retcode = FALSE; UWORD confMode = ODBC_USER_DSN; /* Map the request User/System */ if (fRequest < ODBC_ADD_DSN || fRequest > ODBC_REMOVE_DSN) { SQLPostInstallerError (ODBC_ERROR_INVALID_REQUEST_TYPE, NULL); goto done; } if (!lpszDriver || !STRLEN (lpszDriver)) { SQLPostInstallerError (ODBC_ERROR_INVALID_NAME, NULL); goto done; } /* Retrieve the config mode */ SQLGetConfigMode (&confMode); /* Retrieve the DSN if one exist */ for (curr = (LPSTR) lpszAttributes; curr && *curr; curr += (STRLEN (curr) + 1)) { if (!strncmp (curr, "DSN=", STRLEN ("DSN="))) { dsn = curr + STRLEN ("DSN="); break; } } /* Retrieve the corresponding driver */ if (strstr (lpszDriver, "OpenLink") || strstr (lpszDriver, "Openlink") || strstr (lpszDriver, "oplodbc")) { driver_type = 0; for (curr = (LPSTR) lpszAttributes, cour = prov; curr && *curr; curr += (STRLEN (curr) + 1), cour += (STRLEN (cour) + 1)) { if (!strncasecmp (curr, "Host=", STRLEN ("Host=")) && STRLEN (curr + STRLEN ("Host="))) { STRCPY (cour, curr); flags |= 0x1; continue; } if (!strncasecmp (curr, "ServerType=", STRLEN ("ServerType=")) && STRLEN (curr + STRLEN ("ServerType="))) { STRCPY (cour, curr); flags |= 0x2; continue; } STRCPY (cour, curr); } if (cour && !(flags & 1)) { STRCPY (cour, "Host=localhost\0"); cour += (STRLEN (cour) + 1); } if (cour && !(flags & 2)) { STRCPY (cour, "ServerType=Proxy\0"); cour += (STRLEN (cour) + 1); } if (cour) *cour = 0; } else if ((strstr (lpszDriver, "Virtuoso") || strstr (lpszDriver, "virtodbc"))) driver_type = 1; /* For each request */ switch (fRequest) { case ODBC_ADD_DSN: /* Check if the DSN with this name already exists */ SQLSetConfigMode (confMode); #ifdef WIN32 if (hwndParent && dsn && SQLGetPrivateProfileString ("ODBC 32 bit Data Sources", dsn, "", dsnread, sizeof (dsnread), NULL) && !create_confirm (hwndParent, dsn, "Are you sure you want to overwrite this DSN ?")) #else if (hwndParent && dsn && SQLGetPrivateProfileString ("ODBC Data Sources", dsn, "", dsnread, sizeof (dsnread), NULL) && !create_confirm (hwndParent, dsn, "Are you sure you want to overwrite this DSN ?")) #endif goto done; /* Call the right setup function */ connstr = create_gensetup (hwndParent, dsn, STRLEN (prov) ? prov : lpszAttributes, TRUE); /* Check output parameters */ if (!connstr) { SQLPostInstallerError (ODBC_ERROR_OUT_OF_MEM, NULL); goto done; } if (connstr == (LPSTR) - 1L) goto done; /* Add the DSN to the ODBC Data Sources */ SQLSetConfigMode (confMode); if (!SQLWriteDSNToIni (dsn = connstr + STRLEN ("DSN="), lpszDriver)) goto done; /* Add each keyword and values */ for (curr = connstr; *curr; curr += (STRLEN (curr) + 1)) { if (strncmp (curr, "DSN=", STRLEN ("DSN="))) { STRCPY (dsnread, curr); cour = strchr (dsnread, '='); if (cour) *cour = 0; SQLSetConfigMode (confMode); if (!SQLWritePrivateProfileString (dsn, dsnread, (cour && STRLEN (cour + 1)) ? cour + 1 : NULL, NULL)) goto done; } } break; case ODBC_CONFIG_DSN: if (!dsn || !STRLEN (dsn)) { SQLPostInstallerError (ODBC_ERROR_INVALID_KEYWORD_VALUE, NULL); goto done; } /* Call the right setup function */ connstr = create_gensetup (hwndParent, dsn, STRLEN (prov) ? prov : lpszAttributes, FALSE); /* Check output parameters */ if (!connstr) { SQLPostInstallerError (ODBC_ERROR_OUT_OF_MEM, NULL); goto done; } if (connstr == (LPSTR) - 1L) goto done; /* Compare if the DSN changed */ if (strcmp (connstr + STRLEN ("DSN="), dsn)) { /* Remove the previous DSN */ SQLSetConfigMode (confMode); if (!SQLRemoveDSNFromIni (dsn)) goto done; /* Add the new DSN section */ SQLSetConfigMode (confMode); if (!SQLWriteDSNToIni (dsn = connstr + STRLEN ("DSN="), lpszDriver)) goto done; } /* Add each keyword and values */ for (curr = connstr; *curr; curr += (STRLEN (curr) + 1)) { if (strncmp (curr, "DSN=", STRLEN ("DSN="))) { STRCPY (dsnread, curr); cour = strchr (dsnread, '='); if (cour) *cour = 0; SQLSetConfigMode (confMode); if (!SQLWritePrivateProfileString (dsn, dsnread, (cour && STRLEN (cour + 1)) ? cour + 1 : NULL, NULL)) goto done; } } break; case ODBC_REMOVE_DSN: if (!dsn || !STRLEN (dsn)) { SQLPostInstallerError (ODBC_ERROR_INVALID_KEYWORD_VALUE, NULL); goto done; } /* Just remove the DSN */ SQLSetConfigMode (confMode); if (!SQLRemoveDSNFromIni (dsn)) goto done; break; }; quit: retcode = TRUE; done: if (connstr && connstr != (LPSTR) - 1L && connstr != lpszAttributes && connstr != prov) free (connstr); return retcode; } libiodbc-3.52.9/drvproxy/drvconn.c0000644000076400007640000001263412323210535014026 00000000000000/* * drvconn.c * * $Id$ * * The data_sources dialog for SQLDriverConnect and a login box procedures * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "gui.h" #include #include #include SQLRETURN SQL_API _iodbcdm_drvconn_dialbox ( HWND hwnd, LPSTR szInOutConnStr, DWORD cbInOutConnStr, int * sqlStat, SQLUSMALLINT fDriverCompletion, UWORD * config) { RETCODE retcode = SQL_ERROR; char *szDSN = NULL, *szDriver = NULL, *szUID = NULL, *szPWD = NULL, *curr; TLOGIN log_t; /* Check input parameters */ if (!hwnd || !szInOutConnStr || cbInOutConnStr < 1) goto quit; /* Check if the DSN is already set or DRIVER */ for (curr = szInOutConnStr; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "DSN=", STRLEN ("DSN="))) { szDSN = curr + STRLEN ("DSN="); continue; } if (!strncasecmp (curr, "DRIVER=", STRLEN ("DRIVER="))) { szDriver = curr + STRLEN ("DRIVER="); continue; } if (!strncasecmp (curr, "UID=", STRLEN ("UID="))) { szUID = curr + STRLEN ("UID="); continue; } if (!strncasecmp (curr, "UserName=", STRLEN ("UserName="))) { szUID = curr + STRLEN ("UserName="); continue; } if (!strncasecmp (curr, "LastUser=", STRLEN ("LastUser="))) { szUID = curr + STRLEN ("LastUser="); continue; } if (!strncasecmp (curr, "PWD=", STRLEN ("PWD="))) { szPWD = curr + STRLEN ("PWD="); continue; } if (!strncasecmp (curr, "Password=", STRLEN ("Password="))) { szPWD = curr + STRLEN ("Password="); continue; } } if (fDriverCompletion != SQL_DRIVER_NOPROMPT && (!szUID || !szPWD)) { create_login (hwnd, szUID, szPWD, szDSN ? szDSN : "(File DSN)", &log_t); if (log_t.user && !szUID) { sprintf (curr, "UID=%s", log_t.user); curr += STRLEN (curr); *curr++ = '\0'; free (log_t.user); } if (log_t.pwd && !szPWD) { sprintf (curr, "PWD=%s", log_t.pwd); curr += STRLEN (curr); *curr++ = '\0'; free (log_t.pwd); } /* add list-terminating '\0' */ *curr = '\0'; } retcode = log_t.ok ? SQL_SUCCESS : SQL_NO_DATA_FOUND; quit: for (curr = szInOutConnStr; *curr; curr = szDSN + 1) { szDSN = curr + STRLEN (curr); if (szDSN[1]) szDSN[0] = ';'; } return retcode; } libiodbc-3.52.9/drvproxy/gui.h0000644000076400007640000000742112323210535013144 00000000000000/* * gui.h * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #if defined(__BEOS__) #include "be/gui.h" #elif defined(macintosh) #include "mac/gui.h" #elif defined(__GTK__) #include "gtk/gui.h" #elif defined(__QT__) #include "qt/gui.h" #elif defined(__APPLE__) #include "macosx/gui.h" #endif #ifdef __cplusplus extern "C" { #endif #ifndef _GUI_H #define _GUI_H LPSTR create_gensetup (HWND hwnd, LPCSTR dsn, LPCSTR attrs, BOOL add); void create_login (HWND hwnd, LPCSTR username, LPCSTR password, LPCSTR dsn, TLOGIN *log_t); BOOL create_confirm (HWND hwnd, LPCSTR dsn, LPCSTR text); #ifdef __cplusplus } #endif #endif libiodbc-3.52.9/drvproxy/drvproxy.exp0000644000076400007640000000012512323204667014625 00000000000000ConfigDriver ConfigDSN _iodbcdm_drvconn_dialbox _iodbcdm_loginbox iodbcproxy_version libiodbc-3.52.9/drvproxy/Makefile.am0000644000076400007640000001022512323210535014237 00000000000000# # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # if GUI SUBDIRS = gtk lib_LTLIBRARIES = libdrvproxy.la endif if GTK AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/iodbc \ -I$(top_srcdir)/iodbcinst \ -I$(top_srcdir)/iodbcadm \ @GTK_CFLAGS@ -D__GTK__ else AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/iodbc \ -I$(top_srcdir)/iodbcinst\ -I$(top_srcdir)/iodbcadm endif libdrvproxy_la_LDFLAGS = -version-info @lib_version@ \ -export-symbols $(srcdir)/drvproxy.exp if GTK libdrvproxy_la_LIBADD = \ $(LIBADD_DL) \ ../iodbcadm/libiodbcadm.la \ ../drvproxy/gtk/libdrvproxy-gtk.la \ ../iodbcinst/libiodbc_common.la \ ../iodbcinst/libiodbcinst.la \ @GTK_LIBS@ else libdrvproxy_la_LIBADD = \ $(LIBADD_DL) \ ../iodbcadm/libiodbcadm.la \ ../iodbcinst/libiodbc_common.la \ ../iodbcinst/libiodbcinst.la endif libdrvproxy_la_SOURCES = \ ConfigDSN.c \ ConfigDriver.c \ Info.c \ drvconn.c noinst_HEADERS = gui.h EXTRA_DIST = \ $(srcdir)/drvproxy.exp \ $(srcdir)/macosx/confirm.c \ $(srcdir)/macosx/gensetup.c \ $(srcdir)/macosx/gui.h \ $(srcdir)/macosx/loginbox.c libiodbc-3.52.9/drvproxy/ConfigDriver.c0000644000076400007640000001476512323210535014745 00000000000000/* * ConfigDriver.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include "gui.h" BOOL INSTAPI ConfigDriver ( HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszArgs, LPSTR lpszMsg, WORD cbMsgMax, WORD * pcbMsgOut) { char *curr, *cour; char driverread[4096] = { 0 }; BOOL retcode = FALSE; UWORD confMode = ODBC_USER_DSN; /* Map the request User/System */ if (fRequest < ODBC_INSTALL_DRIVER || fRequest > ODBC_CONFIG_DRIVER_MAX) { SQLPostInstallerError (ODBC_ERROR_INVALID_REQUEST_TYPE, NULL); goto done; } if (!lpszDriver || !STRLEN (lpszDriver)) { SQLPostInstallerError (ODBC_ERROR_INVALID_NAME, NULL); goto done; } /* Retrieve the config mode */ SQLGetConfigMode (&confMode); /* Treat corresponding to the request */ switch (fRequest) { case ODBC_INSTALL_DRIVER: /* Check if the DRIVER with this name already exists */ SQLSetConfigMode (confMode); #ifdef WIN32 if (hwndParent && SQLGetPrivateProfileString ("ODBC 32 bit Drivers", lpszDriver, "", driverread, sizeof (driverread), "odbcinst.ini") && !create_confirm (hwndParent, NULL, "Are you sure you want to overwrite this driver ?")) #else # ifdef _MACX if (hwndParent && SQLGetPrivateProfileString ("ODBC Drivers", lpszDriver, "", driverread, sizeof (driverread), "odbcinst.ini") && !create_confirm (hwndParent, NULL, "Are you sure you want to overwrite this driver ?")) # else if (hwndParent && SQLGetPrivateProfileString ("ODBC Drivers", lpszDriver, "", driverread, sizeof (driverread), "odbcinst.ini") && !create_confirm (hwndParent, NULL, "Are you sure you want to overwrite this driver ?")) # endif #endif { SQLPostInstallerError (ODBC_ERROR_DRIVER_SPECIFIC, "Driver already installed previously."); goto done; } /* Add the Driver to the ODBC Drivers */ SQLSetConfigMode (confMode); if (!SQLInstallDriverEx (lpszArgs, NULL, driverread, sizeof (driverread), NULL, ODBC_INSTALL_COMPLETE, NULL)) { SQLPostInstallerError (ODBC_ERROR_DRIVER_SPECIFIC, "Could not add the driver information."); goto done; } break; case ODBC_CONFIG_DRIVER: if (!lpszArgs || !STRLEN (lpszArgs)) { SQLPostInstallerError (ODBC_ERROR_DRIVER_SPECIFIC, "No enough parameters for configururation."); goto done; } /* Add each keyword and values */ for (curr = (LPSTR) lpszArgs; *curr; curr += (STRLEN (curr) + 1)) { STRCPY (driverread, curr); cour = strchr (driverread, '='); if (cour) *cour = 0; SQLSetConfigMode (confMode); if (!SQLWritePrivateProfileString (lpszDriver, driverread, (cour && STRLEN (cour + 1)) ? cour + 1 : NULL, "odbcinst.ini")) goto done; } break; case ODBC_REMOVE_DRIVER: /* Remove the Driver to the ODBC Drivers */ SQLSetConfigMode (confMode); if (!SQLRemoveDriver (lpszDriver, TRUE, NULL)) { SQLPostInstallerError (ODBC_ERROR_DRIVER_SPECIFIC, "Could not remove driver information."); goto done; } break; default: SQLPostInstallerError (ODBC_ERROR_REQUEST_FAILED, NULL); goto done; }; quit: retcode = TRUE; done: if (pcbMsgOut) *pcbMsgOut = 0; return retcode; } libiodbc-3.52.9/drvproxy/macosx/0000755000076400007640000000000012323210721013552 500000000000000libiodbc-3.52.9/drvproxy/macosx/confirm.c0000644000076400007640000001623512323210535015305 00000000000000/* * confirm.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #define CONFYES_CNTL 3000 #define CONFNO_CNTL 3001 #define CONFTEXT_CNTL 3002 wchar_t* convert_CFString_to_wchar(const CFStringRef str); CFStringRef convert_wchar_to_CFString(wchar_t *str); pascal OSStatus confirmadm_yes_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TCONFIRM *confirm_t = (TCONFIRM *) inUserData; if (confirm_t) { DisposeWindow (confirm_t->mainwnd); confirm_t->mainwnd = NULL; confirm_t->yes_no = true; } return noErr; } pascal OSStatus confirmadm_no_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TCONFIRM *confirm_t = (TCONFIRM *) inUserData; if (confirm_t) { DisposeWindow (confirm_t->mainwnd); confirm_t->mainwnd = NULL; confirm_t->yes_no = false; } return noErr; } BOOL create_confirm_Internal (HWND hwnd, SQLPOINTER dsn, SQLPOINTER text, SQLCHAR waMode) { EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; RgnHandle cursorRgn = NULL; ControlID controlID; ControlRef control; WindowRef wconfirm; TCONFIRM confirm_t; EventRecord event; IBNibRef nibRef; CFStringRef msg; OSStatus err; /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.drvproxy")), CFSTR ("confirmation"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ CreateWindowFromNib (nibRef, CFSTR ("Dialog"), &wconfirm); DisposeNibReference (nibRef); /* Set the title with the DSN name */ if (dsn) { if (waMode == 'A') msg = CFStringCreateWithBytes (NULL, (unsigned char*)dsn, STRLEN(dsn), kCFStringEncodingUTF8, false); else msg = convert_wchar_to_CFString((wchar_t*)dsn); SetWindowTitleWithCFString (wconfirm, msg); CFRelease(msg); } /* Install handlers for the finish button, the cancel */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, CONFYES_CNTL, wconfirm, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (confirmadm_yes_clicked), 1, &controlSpec, &confirm_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, CONFNO_CNTL, wconfirm, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (confirmadm_no_clicked), 1, &controlSpec, &confirm_t, NULL); /* Change the static field with the message */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, CONFTEXT_CNTL, wconfirm, control); if (waMode == 'A') SetControlData (control, 0, kControlEditTextTextTag, STRLEN (text), text); else { msg = convert_wchar_to_CFString((wchar_t*)text); SetControlData (control, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &msg); CFRelease(msg); } DrawOneControl (control); confirm_t.yes_no = FALSE; confirm_t.mainwnd = wconfirm; /* Show the window and run the loop */ ShowWindow (wconfirm); /* The main loop */ while (confirm_t.mainwnd) WaitNextEvent (everyEvent, &event, 60L, cursorRgn); } else goto error; return confirm_t.yes_no; error: fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); return confirm_t.yes_no; } BOOL create_confirm (HWND hwnd, LPCSTR dsn, LPCSTR text) { return create_confirm_Internal (hwnd, (SQLPOINTER)dsn, (SQLPOINTER)text, 'A'); } BOOL create_confirmw (HWND hwnd, LPCWSTR dsn, LPCWSTR text) { return create_confirm_Internal (hwnd, (SQLPOINTER)dsn, (SQLPOINTER)text, 'W'); } CFStringRef convert_wchar_to_CFString(wchar_t *str) { CFMutableStringRef prov = CFStringCreateMutable(NULL, 0); CFIndex i; UniChar c; if(prov) { for(i = 0 ; str[i] != L'\0' ; i++) { c = (UniChar)str[i]; CFStringAppendCharacters(prov, &c, 1); } } return prov; } libiodbc-3.52.9/drvproxy/macosx/gensetup.c0000644000076400007640000005530312323210535015501 00000000000000/* * gensetup.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #define GSDSN_CNTL 4007 #define GSCOMMENT_CNTL 4008 #define GSLIST_CNTL 4006 #define GSKEYWORD_CNTL 4004 #define GSVALUE_CNTL 4005 #define GSADD_CNTL 4002 #define GSUPDATE_CNTL 4003 #define GSOK_CNTL 4000 #define GSCANCEL_CNTL 4001 static char *STRCONN = "DSN=%s\0Description=%s\0\0"; static int STRCONN_NB_TOKENS = 2; UInt32 DSNSETUP_nrows; CFStringRef DSNSETUP_array[2][100]; TGENSETUP *DSNSETUP = NULL; wchar_t* convert_CFString_to_wchar(const CFStringRef str) { wchar_t *prov = malloc(sizeof(wchar_t) * (CFStringGetLength(str)+1)); CFIndex i; if(prov) { for(i = 0 ; i DBITEM_ID && itemID <= DBITEM_ID + DSNSETUP_nrows) err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsEditableProperty: err = SetDataBrowserItemDataBooleanValue (itemData, true); break; case kDataBrowserItemIsContainerProperty: err = SetDataBrowserItemDataBooleanValue (itemData, itemID == DBITEM_ID); break; case kDataBrowserContainerAliasIDProperty: break; case kDataBrowserItemParentContainerProperty: break; default: err = errDataBrowserPropertyNotSupported; break; } else err = errDataBrowserPropertyNotSupported; return err; } static void dsnsetup_notification_item (ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message) { static Boolean ignore_next = false, selected = false; switch (message) { case kDataBrowserItemSelected: if (DSNSETUP) { ActivateControl (DSNSETUP->bupdate); DrawOneControl (DSNSETUP->bupdate); SetControlData (DSNSETUP->key_entry, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &DSNSETUP_array[0][itemID - DBITEM_ID - 1]); DrawOneControl (DSNSETUP->key_entry); SetControlData (DSNSETUP->value_entry, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &DSNSETUP_array[1][itemID - DBITEM_ID - 1]); DrawOneControl (DSNSETUP->value_entry); } if (selected) ignore_next = true; else selected = true; break; case kDataBrowserItemDeselected: if (!ignore_next && DSNSETUP) { DeactivateControl (DSNSETUP->bupdate); DrawOneControl (DSNSETUP->bupdate); SetControlData (DSNSETUP->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (DSNSETUP->key_entry); SetControlData (DSNSETUP->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (DSNSETUP->value_entry); selected = false; } else { ignore_next = false; selected = true; } break; }; } static void addkeywords_to_list (ControlRef widget, LPCSTR attrs, TGENSETUP * gensetup_t) { DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; char *curr, *cour; int i; if (!widget) return; GetThemeDrawingState (&outState); /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (dsnsetup_notification_item); /* On Mac OS X 10.0.x : this is clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (dsnsetup_getset_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, DBITEM_ID); /* Make the clean up */ for (i = 0; i < DSNSETUP_nrows; i++) { CFRelease (DSNSETUP_array[0][i]); DSNSETUP_array[0][i] = NULL; CFRelease (DSNSETUP_array[1][i]); DSNSETUP_array[1][i] = NULL; } /* Global Initialization */ DSNSETUP_nrows = 0; item = DBITEM_ID + 1; for (curr = (LPSTR) attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "Description=", STRLEN ("Description="))) { SetControlData (gensetup_t->comment_entry, 0, kControlEditTextTextTag, STRLEN (curr + STRLEN ("Description=")), curr + STRLEN ("Description=")); DrawOneControl (gensetup_t->comment_entry); } if (!strncasecmp (curr, "DSN=", STRLEN ("DSN=")) || !strncasecmp (curr, "Driver=", STRLEN ("Driver=")) || !strncasecmp (curr, "Description=", STRLEN ("Description="))) continue; if ((cour = strchr (curr, '='))) { *cour = '\0'; DSNSETUP_array[0][DSNSETUP_nrows] = CFStringCreateWithCString (NULL, curr, kCFStringEncodingUTF8); *cour = '='; DSNSETUP_array[1][DSNSETUP_nrows] = CFStringCreateWithCString (NULL, cour + 1, kCFStringEncodingUTF8); } else DSNSETUP_array[0][DSNSETUP_nrows] = CFStringCreateWithCString (NULL, "", kCFStringEncodingUTF8); for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (DSNSETUP_array[i][DSNSETUP_nrows], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } AddDataBrowserItems (widget, DBITEM_ID, 1, &item, GSKEYWORD_ID); item++; DSNSETUP_nrows++; } ActivateControl (widget); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (widget, GSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, GSVALUE_ID, colSize[1] + 20); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); } static void parse_attribute_line (TGENSETUP * gensetup_t, LPCSTR dsn, LPCSTR attrs, BOOL add) { if (dsn) { SetControlData (gensetup_t->dsn_entry, 0, kControlEditTextTextTag, STRLEN (dsn), (UInt8 *) dsn); if (add) DeactivateControl (gensetup_t->dsn_entry); else ActivateControl (gensetup_t->dsn_entry); DrawOneControl (gensetup_t->dsn_entry); } addkeywords_to_list (gensetup_t->key_list, attrs, gensetup_t); } pascal OSStatus gensetup_add_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TGENSETUP *gensetup_t = (TGENSETUP *) inUserData; DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; CFStringRef data[2]; Size len; int i = 0, j; if (gensetup_t) { GetThemeDrawingState (&outState); GetControlData (gensetup_t->key_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[0], &len); if (CFStringGetLength(data[0])) { GetControlData (gensetup_t->value_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[1], &len); /* Try to see if the keyword already exists */ for (i = 0; i < DSNSETUP_nrows; i++, item++) if (CFStringCompare (data[0], DSNSETUP_array[0][i], 0) == kCFCompareEqualTo) goto done; /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (dsnsetup_notification_item); /* On Mac OS X 10.0.x : this is clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (dsnsetup_getset_item); SetDataBrowserCallbacks (gensetup_t->key_list, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (gensetup_t->key_list, DBITEM_ID); /* An update operation */ if(ikey_list, DBITEM_ID, 1, &item, GSKEYWORD_ID, kDataBrowserItemNoProperty); } else if(len) { DSNSETUP_array[0][i] = data[0]; DSNSETUP_array[1][i] = data[1]; AddDataBrowserItems (gensetup_t->key_list, DBITEM_ID, 1, &item, GSKEYWORD_ID); DSNSETUP_nrows++; } for(j = 0 ; j < DSNSETUP_nrows ; j++) { for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (DSNSETUP_array[i][j], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } } ActivateControl (gensetup_t->key_list); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (gensetup_t->key_list, GSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (gensetup_t->key_list, GSVALUE_ID, colSize[1] + 20); DrawOneControl (gensetup_t->key_list); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); } done: SetControlData (gensetup_t->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (gensetup_t->key_entry); SetControlData (gensetup_t->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (gensetup_t->value_entry); DeactivateControl (DSNSETUP->bupdate); DrawOneControl (DSNSETUP->bupdate); } return noErr; } pascal OSStatus gensetup_update_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TGENSETUP *gensetup_t = (TGENSETUP *) inUserData; DataBrowserItemID item = DBITEM_ID + 1, first, last; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; CFStringRef data[2]; Size len; int i = 0, j; if (gensetup_t) { GetThemeDrawingState (&outState); GetControlData (gensetup_t->key_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[0], &len); if (CFStringGetLength(data[0])) { GetControlData (gensetup_t->value_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[1], &len); if(GetDataBrowserSelectionAnchor (gensetup_t->key_list, &first, &last) == noErr) { i = first - DBITEM_ID - 1; item += i; } else i = 0; /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (dsnsetup_notification_item); /* On Mac OS X 10.0.x : this is clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (dsnsetup_getset_item); SetDataBrowserCallbacks (gensetup_t->key_list, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (gensetup_t->key_list, DBITEM_ID); /* An update operation */ if(ikey_list, DBITEM_ID, 1, &item, GSKEYWORD_ID, kDataBrowserItemNoProperty); } for(j = 0 ; j < DSNSETUP_nrows ; j++) { for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (DSNSETUP_array[i][j], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } } ActivateControl (gensetup_t->key_list); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (gensetup_t->key_list, GSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (gensetup_t->key_list, GSVALUE_ID, colSize[1] + 20); DrawOneControl (gensetup_t->key_list); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); } SetControlData (gensetup_t->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (gensetup_t->key_entry); SetControlData (gensetup_t->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (gensetup_t->value_entry); DeactivateControl (DSNSETUP->bupdate); DrawOneControl (DSNSETUP->bupdate); } return noErr; } pascal OSStatus gensetup_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TGENSETUP *gensetup_t = (TGENSETUP *) inUserData; char *cour, *curr; int i = 0, size = 0; char msg[1024], msg1[1024]; Size len; if (gensetup_t) { /* What is the size of the block to malloc */ GetControlDataSize (gensetup_t->dsn_entry, 0, kControlEditTextTextTag, &len); size += len + STRLEN ("DSN=") + 1; GetControlDataSize (gensetup_t->comment_entry, 0, kControlEditTextTextTag, &len); size += len + STRLEN ("Description=") + 1; /* Malloc it */ if ((gensetup_t->connstr = (char *) malloc (++size))) { for (curr = STRCONN, cour = gensetup_t->connstr; i < STRCONN_NB_TOKENS; i++, curr += (STRLEN (curr) + 1)) switch (i) { case 0: GetControlData (gensetup_t->dsn_entry, 0, kControlEditTextTextTag, sizeof (msg), msg, &len); msg[len] = '\0'; sprintf (cour, curr, msg); cour += (STRLEN (cour) + 1); break; case 1: GetControlData (gensetup_t->comment_entry, 0, kControlEditTextTextTag, sizeof (msg), msg, &len); msg[len] = '\0'; sprintf (cour, curr, msg); cour += (STRLEN (cour) + 1); break; }; for (i = 0; i < DSNSETUP_nrows; i++) { CFStringGetCString (DSNSETUP_array[0][i], msg, sizeof (msg), kCFStringEncodingUTF8); CFStringGetCString (DSNSETUP_array[1][i], msg1, sizeof (msg1), kCFStringEncodingUTF8); cour = (char *) gensetup_t->connstr; gensetup_t->connstr = (LPSTR) malloc (size + STRLEN (msg) + STRLEN (msg1) + 2); if (gensetup_t->connstr) { memcpy (gensetup_t->connstr, cour, size); sprintf (((char*)gensetup_t->connstr) + size - 1, "%s=%s", msg, msg1); free (cour); size += STRLEN (msg) + STRLEN (msg1) + 2; } else gensetup_t->connstr = cour; } ((char*)gensetup_t->connstr)[size - 1] = '\0'; } DisposeWindow (gensetup_t->mainwnd); gensetup_t->mainwnd = NULL; gensetup_t->dsn_entry = gensetup_t->comment_entry = NULL; gensetup_t->key_list = NULL; DSNSETUP = NULL; } return noErr; } pascal OSStatus gensetup_cancel_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TGENSETUP *gensetup_t = (TGENSETUP *) inUserData; if (gensetup_t) { gensetup_t->connstr = (LPSTR) - 1L; gensetup_t->dsn_entry = gensetup_t->comment_entry = NULL; gensetup_t->key_list = NULL; DSNSETUP = NULL; DisposeWindow (gensetup_t->mainwnd); gensetup_t->mainwnd = NULL; } return noErr; } LPSTR create_gensetup (HWND hwnd, LPCSTR dsn, LPCSTR attrs, BOOL add) { EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; RgnHandle cursorRgn = NULL; TGENSETUP gensetup_t; ControlID controlID; WindowRef wgensetup; ControlRef control; EventRecord event; IBNibRef nibRef; OSStatus err; char msg[1024]; /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.drvproxy")), CFSTR ("gensetup"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ CreateWindowFromNib (nibRef, CFSTR ("Dialog"), &wgensetup); DisposeNibReference (nibRef); /* Set the title with the DSN */ if (dsn) { msg[0] = STRLEN ("Setup of ") + STRLEN(dsn); sprintf (msg+1, "Setup of %s", (char*)dsn); SetWTitle (wgensetup, msg); } /* Install handlers for the finish button, the cancel */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSDSN_CNTL, wgensetup, gensetup_t.dsn_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSCOMMENT_CNTL, wgensetup, gensetup_t.comment_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSLIST_CNTL, wgensetup, gensetup_t.key_list); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSKEYWORD_CNTL, wgensetup, gensetup_t.key_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSVALUE_CNTL, wgensetup, gensetup_t.value_entry); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSUPDATE_CNTL, wgensetup, gensetup_t.bupdate); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSADD_CNTL, wgensetup, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (gensetup_add_clicked), 1, &controlSpec, &gensetup_t, NULL); InstallEventHandler (GetControlEventTarget (gensetup_t.bupdate), NewEventHandlerUPP (gensetup_update_clicked), 1, &controlSpec, &gensetup_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSOK_CNTL, wgensetup, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (gensetup_ok_clicked), 1, &controlSpec, &gensetup_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, GSCANCEL_CNTL, wgensetup, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (gensetup_cancel_clicked), 1, &controlSpec, &gensetup_t, NULL); /* Parse the attributes line */ gensetup_t.mainwnd = wgensetup; parse_attribute_line (&gensetup_t, dsn, attrs, add); AdvanceKeyboardFocus (wgensetup); /* Show the window and run the loop */ DeactivateControl (gensetup_t.bupdate); DSNSETUP = &gensetup_t; ShowWindow (wgensetup); /* The main loop */ while (gensetup_t.mainwnd) { switch (WaitNextEvent (everyEvent, &event, 60L, cursorRgn)) { }; } } else goto error; return gensetup_t.connstr; error: fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); return gensetup_t.connstr; } libiodbc-3.52.9/drvproxy/macosx/loginbox.c0000644000076400007640000001577112323210535015475 00000000000000/* * loginbox.c * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #define LBUSER_CNTL 5002 #define LBPASS_CNTL 5003 #define LBOK_CNTL 5000 #define LBCANCEL_CNTL 5001 extern char* convert_CFString_to_char(const CFStringRef str); extern CFStringRef convert_char_to_CFString(char *str); pascal OSStatus login_ok_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TLOGIN *log_t = (TLOGIN *) inUserData; Size len; CFStringRef strRef; if (log_t) { /* Retrieve the user name */ GetControlData (log_t->username, kControlEditTextPart, kControlEditTextCFStringTag, sizeof(CFStringRef), &strRef, &len); log_t->user = convert_CFString_to_char (strRef); /* Retrieve the password */ GetControlData (log_t->password, 0, kControlEditTextPasswordCFStringTag, sizeof(CFStringRef), &strRef, &len); log_t->pwd = convert_CFString_to_char (strRef); log_t->username = log_t->password = NULL; log_t->ok = TRUE; DisposeWindow (log_t->mainwnd); log_t->mainwnd = NULL; } return noErr; } pascal OSStatus login_cancel_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TLOGIN *log_t = (TLOGIN *) inUserData; if (log_t) { log_t->user = log_t->pwd = NULL; log_t->username = log_t->password = NULL; log_t->ok = FALSE; DisposeWindow (log_t->mainwnd); log_t->mainwnd = NULL; } return noErr; } void create_login (HWND hwnd, LPCSTR username, LPCSTR password, LPCSTR dsn, TLOGIN * log_t) { EventTypeSpec controlSpec = { kEventClassControl, kEventControlHit }; RgnHandle cursorRgn = NULL; WindowRef wlogin; ControlRef control; ControlID controlID; EventRecord event; IBNibRef nibRef; OSStatus err; char msg[1024]; if (hwnd == NULL) return; /* Search the bundle for a .nib file named 'odbcadmin'. */ err = CreateNibReferenceWithCFBundle (CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.drvproxy")), CFSTR ("login"), &nibRef); if (err == noErr) { /* Nib found ... so create the window */ CreateWindowFromNib (nibRef, CFSTR ("Dialog"), &wlogin); DisposeNibReference (nibRef); /* Set the title with the DSN */ if (dsn) { msg[0] = STRLEN ("Login for ") + STRLEN(dsn); sprintf (msg+1, "Login for %s", (char*)dsn); SetWTitle (wlogin, msg); } /* Set the control into the structure */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, LBUSER_CNTL, wlogin, log_t->username); GETCONTROLBYID (controlID, CNTL_SIGNATURE, LBPASS_CNTL, wlogin, log_t->password); log_t->user = log_t->pwd = NULL; log_t->mainwnd = wlogin; /* Install handlers for the finish button, the cancel */ GETCONTROLBYID (controlID, CNTL_SIGNATURE, LBOK_CNTL, wlogin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (login_ok_clicked), 1, &controlSpec, log_t, NULL); GETCONTROLBYID (controlID, CNTL_SIGNATURE, LBCANCEL_CNTL, wlogin, control); InstallEventHandler (GetControlEventTarget (control), NewEventHandlerUPP (login_cancel_clicked), 1, &controlSpec, log_t, NULL); SetControlData (log_t->username, 0, kControlEditTextTextTag, username ? STRLEN (username) : STRLEN(""), (UInt8 *) username ? username : ""); SetControlData (log_t->password, 0, kControlEditTextPasswordTag, password ? STRLEN (password) : STRLEN(""), (UInt8 *) password ? password : ""); /* Show the window and run the loop */ AdvanceKeyboardFocus (wlogin); ShowWindow (wlogin); /* The main loop */ while (log_t->mainwnd) { switch (WaitNextEvent (everyEvent, &event, 60L, cursorRgn)) { }; } } else goto error; return; error: fprintf (stderr, "Can't load Window. Err: %d\n", (int) err); return; } libiodbc-3.52.9/drvproxy/macosx/gui.h0000644000076400007640000000772312323210535014443 00000000000000/* * gui.h * * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #ifndef _MACXGUI_H #define _MACXGUI_H /* The column values for data browsers */ #define DBITEM_ID 'OPLs' #define GSKEYWORD_ID 'keyw' #define GSVALUE_ID 'valu' #define TABS_SIGNATURE 'tabs' #define CNTL_SIGNATURE 'CNTL' #define GETCONTROLBYID(ctlID, ctlSIGN, ctl, wndREF, ctrlREF) { \ ctlID.signature = ctlSIGN; \ ctlID.id = ctl; \ GetControlByID(wndREF, &ctlID, &ctrlREF); \ } typedef struct TLOGIN { ControlRef username, password; WindowRef mainwnd; char *user, *pwd; BOOL ok; } TLOGIN; typedef struct TCONFIRM { WindowRef mainwnd; BOOL yes_no; } TCONFIRM; typedef struct TGENSETUP { ControlRef dsn_entry, comment_entry, key_list, bupdate; ControlRef key_entry, value_entry; WindowRef mainwnd; char *connstr; } TGENSETUP; #endif libiodbc-3.52.9/include/0000755000076400007640000000000012323210721012006 500000000000000libiodbc-3.52.9/include/sqlucode.h0000644000076400007640000005433512323210535013733 00000000000000/* * sqlucode.h * * $Id$ * * ODBC Unicode defines * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _SQLUCODE_H #define _SQLUCODE_H #ifndef _SQLEXT_H #include #endif #ifdef __cplusplus extern "C" { #endif /* * SQL datatypes - Unicode */ #define SQL_WCHAR (-8) #define SQL_WVARCHAR (-9) #define SQL_WLONGVARCHAR (-10) #define SQL_C_WCHAR SQL_WCHAR #ifdef UNICODE #define SQL_C_TCHAR SQL_C_WCHAR #else #define SQL_C_TCHAR SQL_C_CHAR #endif /* SQLTablesW */ #if (ODBCVER >= 0x0300) #define SQL_ALL_CATALOGSW L"%" #define SQL_ALL_SCHEMASW L"%" #define SQL_ALL_TABLE_TYPESW L"%" #endif /* ODBCVER >= 0x0300 */ /* * Size of SQLSTATE - Unicode */ #define SQL_SQLSTATE_SIZEW 10 /* * Function Prototypes - Unicode */ SQLRETURN SQL_API SQLColAttributeW ( SQLHSTMT hstmt, SQLUSMALLINT iCol, SQLUSMALLINT iField, SQLPOINTER pCharAttr, SQLSMALLINT cbCharAttrMax, SQLSMALLINT * pcbCharAttr, SQLLEN * pNumAttr); SQLRETURN SQL_API SQLColAttributesW ( SQLHSTMT hstmt, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLLEN * pfDesc); SQLRETURN SQL_API SQLConnectW ( SQLHDBC hdbc, SQLWCHAR * szDSN, SQLSMALLINT cbDSN, SQLWCHAR * szUID, SQLSMALLINT cbUID, SQLWCHAR * szAuthStr, SQLSMALLINT cbAuthStr); SQLRETURN SQL_API SQLDescribeColW ( SQLHSTMT hstmt, SQLUSMALLINT icol, SQLWCHAR * szColName, SQLSMALLINT cbColNameMax, SQLSMALLINT * pcbColName, SQLSMALLINT * pfSqlType, SQLULEN * pcbColDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable); SQLRETURN SQL_API SQLErrorW ( SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLWCHAR * szSqlState, SQLINTEGER * pfNativeError, SQLWCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg); SQLRETURN SQL_API SQLExecDirectW ( SQLHSTMT hstmt, SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStr); SQLRETURN SQL_API SQLGetConnectAttrW ( SQLHDBC hdbc, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue); SQLRETURN SQL_API SQLGetCursorNameW ( SQLHSTMT hstmt, SQLWCHAR * szCursor, SQLSMALLINT cbCursorMax, SQLSMALLINT * pcbCursor); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLSetDescFieldW ( SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength); SQLRETURN SQL_API SQLGetDescFieldW ( SQLHDESC hdesc, SQLSMALLINT iRecord, SQLSMALLINT iField, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue); SQLRETURN SQL_API SQLGetDescRecW ( SQLHDESC hdesc, SQLSMALLINT iRecord, SQLWCHAR * szName, SQLSMALLINT cbNameMax, SQLSMALLINT * pcbName, SQLSMALLINT * pfType, SQLSMALLINT * pfSubType, SQLLEN * pLength, SQLSMALLINT * pPrecision, SQLSMALLINT * pScale, SQLSMALLINT * pNullable); SQLRETURN SQL_API SQLGetDiagFieldW ( SQLSMALLINT fHandleType, SQLHANDLE handle, SQLSMALLINT iRecord, SQLSMALLINT fDiagField, SQLPOINTER rgbDiagInfo, SQLSMALLINT cbDiagInfoMax, SQLSMALLINT * pcbDiagInfo); SQLRETURN SQL_API SQLGetDiagRecW ( SQLSMALLINT fHandleType, SQLHANDLE handle, SQLSMALLINT iRecord, SQLWCHAR * szSqlState, SQLINTEGER * pfNativeError, SQLWCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg); #endif SQLRETURN SQL_API SQLPrepareW ( SQLHSTMT hstmt, SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStr); SQLRETURN SQL_API SQLSetConnectAttrW ( SQLHDBC hdbc, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValue); SQLRETURN SQL_API SQLSetCursorNameW ( SQLHSTMT hstmt, SQLWCHAR * szCursor, SQLSMALLINT cbCursor); SQLRETURN SQL_API SQLColumnsW ( SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName); SQLRETURN SQL_API SQLGetConnectOptionW ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLPOINTER pvParam); SQLRETURN SQL_API SQLGetInfoW ( SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue); SQLRETURN SQL_API SQLGetTypeInfoW ( SQLHSTMT StatementHandle, SQLSMALLINT DataType); SQLRETURN SQL_API SQLSetConnectOptionW ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam); SQLRETURN SQL_API SQLSpecialColumnsW ( SQLHSTMT hstmt, SQLUSMALLINT fColType, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fScope, SQLUSMALLINT fNullable); SQLRETURN SQL_API SQLStatisticsW ( SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fUnique, SQLUSMALLINT fAccuracy); SQLRETURN SQL_API SQLTablesW ( SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szTableType, SQLSMALLINT cbTableType); SQLRETURN SQL_API SQLDataSourcesW ( SQLHENV henv, SQLUSMALLINT fDirection, SQLWCHAR * szDSN, SQLSMALLINT cbDSNMax, SQLSMALLINT * pcbDSN, SQLWCHAR * szDescription, SQLSMALLINT cbDescriptionMax, SQLSMALLINT * pcbDescription); SQLRETURN SQL_API SQLDriverConnectW ( SQLHDBC hdbc, SQLHWND hwnd, SQLWCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLWCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion); SQLRETURN SQL_API SQLBrowseConnectW ( SQLHDBC hdbc, SQLWCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLWCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut); SQLRETURN SQL_API SQLColumnPrivilegesW ( SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName); SQLRETURN SQL_API SQLGetStmtAttrW ( SQLHSTMT hstmt, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue); SQLRETURN SQL_API SQLSetStmtAttrW ( SQLHSTMT hstmt, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax); SQLRETURN SQL_API SQLForeignKeysW ( SQLHSTMT hstmt, SQLWCHAR * szPkCatalogName, SQLSMALLINT cbPkCatalogName, SQLWCHAR * szPkSchemaName, SQLSMALLINT cbPkSchemaName, SQLWCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLWCHAR * szFkCatalogName, SQLSMALLINT cbFkCatalogName, SQLWCHAR * szFkSchemaName, SQLSMALLINT cbFkSchemaName, SQLWCHAR * szFkTableName, SQLSMALLINT cbFkTableName); SQLRETURN SQL_API SQLNativeSqlW ( SQLHDBC hdbc, SQLWCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER * pcbSqlStr); SQLRETURN SQL_API SQLPrimaryKeysW ( SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName); SQLRETURN SQL_API SQLProcedureColumnsW ( SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szProcName, SQLSMALLINT cbProcName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName); SQLRETURN SQL_API SQLProceduresW ( SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szProcName, SQLSMALLINT cbProcName); SQLRETURN SQL_API SQLTablePrivilegesW ( SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName); SQLRETURN SQL_API SQLDriversW ( SQLHENV henv, SQLUSMALLINT fDirection, SQLWCHAR * szDriverDesc, SQLSMALLINT cbDriverDescMax, SQLSMALLINT * pcbDriverDesc, SQLWCHAR * szDriverAttributes, SQLSMALLINT cbDrvrAttrMax, SQLSMALLINT * pcbDrvrAttr); /* * Function prototypes - ANSI */ SQLRETURN SQL_API SQLColAttributeA ( SQLHSTMT hstmt, SQLUSMALLINT iCol, SQLUSMALLINT iField, SQLPOINTER pCharAttr, SQLSMALLINT cbCharAttrMax, SQLSMALLINT * pcbCharAttr, SQLLEN * pNumAttr); SQLRETURN SQL_API SQLColAttributesA ( SQLHSTMT hstmt, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLLEN * pfDesc); SQLRETURN SQL_API SQLConnectA ( SQLHDBC hdbc, SQLCHAR * szDSN, SQLSMALLINT cbDSN, SQLCHAR * szUID, SQLSMALLINT cbUID, SQLCHAR * szAuthStr, SQLSMALLINT cbAuthStr); SQLRETURN SQL_API SQLDescribeColA ( SQLHSTMT hstmt, SQLUSMALLINT icol, SQLCHAR * szColName, SQLSMALLINT cbColNameMax, SQLSMALLINT * pcbColName, SQLSMALLINT * pfSqlType, SQLULEN * pcbColDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable); SQLRETURN SQL_API SQLErrorA ( SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLCHAR * szSqlState, SQLINTEGER * pfNativeError, SQLCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg); SQLRETURN SQL_API SQLExecDirectA ( SQLHSTMT hstmt, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStr); SQLRETURN SQL_API SQLGetConnectAttrA ( SQLHDBC hdbc, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue); SQLRETURN SQL_API SQLGetCursorNameA ( SQLHSTMT hstmt, SQLCHAR * szCursor, SQLSMALLINT cbCursorMax, SQLSMALLINT * pcbCursor); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLSetDescFieldA ( SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength); SQLRETURN SQL_API SQLGetDescFieldA ( SQLHDESC hdesc, SQLSMALLINT iRecord, SQLSMALLINT iField, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue); SQLRETURN SQL_API SQLGetDescRecA ( SQLHDESC hdesc, SQLSMALLINT iRecord, SQLCHAR * szName, SQLSMALLINT cbNameMax, SQLSMALLINT * pcbName, SQLSMALLINT * pfType, SQLSMALLINT * pfSubType, SQLLEN * pLength, SQLSMALLINT * pPrecision, SQLSMALLINT * pScale, SQLSMALLINT * pNullable); SQLRETURN SQL_API SQLGetDiagFieldA ( SQLSMALLINT fHandleType, SQLHANDLE handle, SQLSMALLINT iRecord, SQLSMALLINT fDiagField, SQLPOINTER rgbDiagInfo, SQLSMALLINT cbDiagInfoMax, SQLSMALLINT * pcbDiagInfo); SQLRETURN SQL_API SQLGetDiagRecA ( SQLSMALLINT fHandleType, SQLHANDLE handle, SQLSMALLINT iRecord, SQLCHAR * szSqlState, SQLINTEGER * pfNativeError, SQLCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg); #endif SQLRETURN SQL_API SQLPrepareA ( SQLHSTMT hstmt, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStr); SQLRETURN SQL_API SQLSetConnectAttrA ( SQLHDBC hdbc, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValue); SQLRETURN SQL_API SQLSetCursorNameA ( SQLHSTMT hstmt, SQLCHAR * szCursor, SQLSMALLINT cbCursor); SQLRETURN SQL_API SQLColumnsA ( SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName); SQLRETURN SQL_API SQLGetConnectOptionA ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLPOINTER pvParam); SQLRETURN SQL_API SQLGetInfoA ( SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue); SQLRETURN SQL_API SQLGetTypeInfoA ( SQLHSTMT StatementHandle, SQLSMALLINT DataType); SQLRETURN SQL_API SQLSetConnectOptionA ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam); SQLRETURN SQL_API SQLSpecialColumnsA ( SQLHSTMT hstmt, SQLUSMALLINT fColType, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fScope, SQLUSMALLINT fNullable); SQLRETURN SQL_API SQLStatisticsA ( SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fUnique, SQLUSMALLINT fAccuracy); SQLRETURN SQL_API SQLTablesA ( SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szTableType, SQLSMALLINT cbTableType); SQLRETURN SQL_API SQLDataSourcesA ( SQLHENV henv, SQLUSMALLINT fDirection, SQLCHAR * szDSN, SQLSMALLINT cbDSNMax, SQLSMALLINT * pcbDSN, SQLCHAR * szDescription, SQLSMALLINT cbDescriptionMax, SQLSMALLINT * pcbDescription); SQLRETURN SQL_API SQLDriverConnectA ( SQLHDBC hdbc, SQLHWND hwnd, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion); SQLRETURN SQL_API SQLBrowseConnectA ( SQLHDBC hdbc, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut); SQLRETURN SQL_API SQLColumnPrivilegesA ( SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName); SQLRETURN SQL_API SQLGetStmtAttrA ( SQLHSTMT hstmt, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue); SQLRETURN SQL_API SQLSetStmtAttrA ( SQLHSTMT hstmt, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax); SQLRETURN SQL_API SQLForeignKeysA ( SQLHSTMT hstmt, SQLCHAR * szPkCatalogName, SQLSMALLINT cbPkCatalogName, SQLCHAR * szPkSchemaName, SQLSMALLINT cbPkSchemaName, SQLCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLCHAR * szFkCatalogName, SQLSMALLINT cbFkCatalogName, SQLCHAR * szFkSchemaName, SQLSMALLINT cbFkSchemaName, SQLCHAR * szFkTableName, SQLSMALLINT cbFkTableName); SQLRETURN SQL_API SQLNativeSqlA ( SQLHDBC hdbc, SQLCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER * pcbSqlStr); SQLRETURN SQL_API SQLPrimaryKeysA ( SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName); SQLRETURN SQL_API SQLProcedureColumnsA ( SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szProcName, SQLSMALLINT cbProcName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName); SQLRETURN SQL_API SQLProceduresA ( SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szProcName, SQLSMALLINT cbProcName); SQLRETURN SQL_API SQLTablePrivilegesA ( SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName); SQLRETURN SQL_API SQLDriversA ( SQLHENV henv, SQLUSMALLINT fDirection, SQLCHAR * szDriverDesc, SQLSMALLINT cbDriverDescMax, SQLSMALLINT * pcbDriverDesc, SQLCHAR * szDriverAttributes, SQLSMALLINT cbDrvrAttrMax, SQLSMALLINT * pcbDrvrAttr); /* * Mapping macros for Unicode */ #ifndef SQL_NOUNICODEMAP /* define this to disable the mapping */ #ifdef UNICODE #define SQLColAttribute SQLColAttributeW #define SQLColAttributes SQLColAttributesW #define SQLConnect SQLConnectW #define SQLDescribeCol SQLDescribeColW #define SQLError SQLErrorW #define SQLExecDirect SQLExecDirectW #define SQLGetConnectAttr SQLGetConnectAttrW #define SQLGetCursorName SQLGetCursorNameW #define SQLGetDescField SQLGetDescFieldW #define SQLGetDescRec SQLGetDescRecW #define SQLGetDiagField SQLGetDiagFieldW #define SQLGetDiagRec SQLGetDiagRecW #define SQLPrepare SQLPrepareW #define SQLSetConnectAttr SQLSetConnectAttrW #define SQLSetCursorName SQLSetCursorNameW #define SQLSetDescField SQLSetDescFieldW #define SQLSetStmtAttr SQLSetStmtAttrW #define SQLGetStmtAttr SQLGetStmtAttrW #define SQLColumns SQLColumnsW #define SQLGetConnectOption SQLGetConnectOptionW #define SQLGetInfo SQLGetInfoW #define SQLGetTypeInfo SQLGetTypeInfoW #define SQLSetConnectOption SQLSetConnectOptionW #define SQLSpecialColumns SQLSpecialColumnsW #define SQLStatistics SQLStatisticsW #define SQLTables SQLTablesW #define SQLDataSources SQLDataSourcesW #define SQLDriverConnect SQLDriverConnectW #define SQLBrowseConnect SQLBrowseConnectW #define SQLColumnPrivileges SQLColumnPrivilegesW #define SQLForeignKeys SQLForeignKeysW #define SQLNativeSql SQLNativeSqlW #define SQLPrimaryKeys SQLPrimaryKeysW #define SQLProcedureColumns SQLProcedureColumnsW #define SQLProcedures SQLProceduresW #define SQLTablePrivileges SQLTablePrivilegesW #define SQLDrivers SQLDriversW #endif /* UNICODE */ #endif /* SQL_NOUNICODEMAP */ #ifdef __cplusplus } #endif #endif /* _SQLUCODE_H */ libiodbc-3.52.9/include/Makefile.in0000644000076400007640000004242612323210643014006 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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 = include DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = 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__installdirs = "$(DESTDIR)$(includedir)" HEADERS = $(include_HEADERS) $(noinst_HEADERS) 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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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@ include_HEADERS = \ isql.h \ isqlext.h \ isqltypes.h \ sql.h \ sqlext.h \ sqlucode.h \ sqltypes.h \ odbcinst.h \ iodbcunix.h \ iodbcinst.h \ iodbcext.h noinst_HEADERS = \ iodbc.h all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status include/config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" @list='$(include_HEADERS)'; test -n "$(includedir)" || 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_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(includedir)" && rm -f $$files 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) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(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) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(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 $(HEADERS) config.h installdirs: for dir in "$(DESTDIR)$(includedir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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 distclean-hdr distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS 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-includeHEADERS .MAKE: all install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic distclean-hdr \ 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-includeHEADERS 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 tags uninstall uninstall-am uninstall-includeHEADERS # 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: libiodbc-3.52.9/include/isqltypes.h0000644000076400007640000000675212323210535014151 00000000000000/* * isqltypes.h * * $Id$ * * iODBC typedefs * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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 is deprecated in favor of sqltypes.h and will be removed * sometime in the future. Please recode your applications to use * the standard names sql.h, sqlext.h and sqltypes.h. */ #include libiodbc-3.52.9/include/iodbc.h0000644000076400007640000002146712323210535013174 00000000000000/* * * iodbc.h * * $Id$ * * Configuration * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _IODBC_H #define _IODBC_H #ifdef HAVE_CONFIG_H #include #endif #ifndef VERSION #define VERSION "3.52.8" #define MAJ_VERSION "3" #define MIN_VERSION "52" #endif #ifndef IODBC_BUILD #define IODBC_BUILD 8120326 /* 0001.0928 */ #endif #if !defined(WINDOWS) && !defined(WIN32_SYSTEM) #define _UNIX_ #include #include #include #include #define MEM_ALLOC(size) (malloc((size_t)(size))) #define MEM_FREE(ptr) {if(ptr) free(ptr);} #define STRCPY(t, s) (strcpy((char*)(t), (char*)(s))) #define STRNCPY(t,s,n) (strncpy((char*)(t), (char*)(s), (size_t)(n))) #define STRCAT(t, s) (strcat((char*)(t), (char*)(s))) #define STRNCAT(t,s,n) (strncat((char*)(t), (char*)(s), (size_t)(n))) #define STREQ(a, b) (strcmp((char*)(a), (char*)(b)) == 0) #define STRNEQ(a, b, n) (strncmp((char*)(a), (char*)(b), (size_t)(n)) == 0) #define STRLEN(str) ((str)? strlen((char*)(str)):0) #define STRDUP(t) (strdup((char*)(t))) #define STRCASEEQ(a, b) (strcasecmp((char*)(a), (char*)(b)) == 0) #define STRNCASEEQ(a, b, n) (strncasecmp((char*)(a), (char*)(b), (size_t)(n)) == 0) #define WCSCPY(t, s) (wcscpy((wchar_t*)(t), (wchar_t*)(s))) #define WCSNCPY(t,s,n) (wcsncpy((wchar_t*)(t), (wchar_t*)(s), (size_t)(n))) #define WCSCAT(t, s) (wcscat((wchar_t*)(t), (wchar_t*)(s))) #define WCSNCAT(t,s,n) (wcsncat((wchar_t*)(t), (wchar_t*)(s), (size_t)(n))) #define WCSEQ(a, b) (wcscmp((wchar_t*)(a), (wchar_t*)(b)) == 0) #define WCSNEQ(a, b, n) (wcsncmp((wchar_t*)(a), (wchar_t*)(b), (size_t)(n)) == 0) #define WCSLEN(str) ((str)? wcslen((wchar_t*)(str)):0) #define WCSDUP(t) (wcsdup((wchar_t*)(t))) #define WCSCASEEQ(a, b) (wcscasecmp((wchar_t*)(a), (wchar_t*)(b)) == 0) #define WCSNCASEEQ(a, b, n) (wcsncasecmp((wchar_t*)(a), (wchar_t*)(b), (size_t)(n)) == 0) #define EXPORT #define CALLBACK #define FAR #ifndef WIN32 #define UNALIGNED #endif /* * If not defined, use this as the system default odbc.ini file */ #if !defined(SYS_ODBC_INI) || (defined(__APPLE__) && !defined(ODBC_INI_APP)) # if defined(__BEOS__) # define SYS_ODBC_INI "/boot/beos/etc/odbc.ini" # elif defined(_MAC) # ifdef __POWERPC__ # define SYS_ODBC_INI "Boot:System Folder:Preferences:ODBC Preferences PPC" # else # define SYS_ODBC_INI "Boot:System Folder:Preferences:ODBC Preferences" # endif # elif defined(__APPLE__) # define SYS_ODBC_INI "/etc/odbc.ini" # define ODBC_INI_APP "/Library/ODBC/odbc.ini" # else # define SYS_ODBC_INI "/etc/odbc.ini" # endif #endif #if !defined(SYS_ODBCINST_INI) || (defined(__APPLE__) && !defined(ODBCINST_INI_APP)) # if defined(__BEOS__) # define SYS_ODBCINST_INI "/boot/beos/etc/odbcinst.ini" # elif defined(macintosh) # elif defined(__APPLE__) # define SYS_ODBCINST_INI "/etc/odbcinst.ini" # define ODBCINST_INI_APP "/Library/ODBC/odbcinst.ini" # else # define SYS_ODBCINST_INI "/etc/odbcinst.ini" # endif #endif #endif /* _UNIX_ */ #if defined(WINDOWS) || defined(WIN32_SYSTEM) #include #include #ifdef _MSVC_ #define MEM_ALLOC(size) (fmalloc((size_t)(size))) #define MEM_FREE(ptr) ((ptr)? ffree((PTR)(ptr)):0) #define STRCPY(t, s) (fstrcpy((char FAR*)(t), (char FAR*)(s))) #define STRNCPY(t,s,n) (fstrncpy((char FAR*)(t), (char FAR*)(s), (size_t)(n))) #define STRLEN(str) ((str)? fstrlen((char FAR*)(str)):0) #define STREQ(a, b) (fstrcmp((char FAR*)(a), (char FAR*)(b) == 0)) #define STRCAT(t, s) (strcat((char*)(t), (char*)(s))) #define STRNCAT(t,s,n) (strncat((char*)(t), (char*)(s), (size_t)(n))) #define STRNCMP(t,s,n) (strncmp((char*)(t), (char*)(s), (size_t)(n))) #endif #ifdef _BORLAND_ #define MEM_ALLOC(size) (farmalloc((unsigned long)(size))) #define MEM_FREE(ptr) ((ptr)? farfree((void far*)(ptr)):0) #define STRCPY(t, s) (_fstrcpy((char FAR*)(t), (char FAR*)(s))) #define STRNCPY(t,s,n) (_fstrncpy((char FAR*)(t), (char FAR*)(s), (size_t)(n))) #define STRLEN(str) ((str)? _fstrlen((char FAR*)(str)):0) #define STREQ(a, b) (_fstrcmp((char FAR*)(a), (char FAR*)(b) == 0)) #define STRCAT(t, s) (strcat((char*)(t), (char*)(s))) #define STRNCAT(t,s,n) (strncat((char*)(t), (char*)(s), (size_t)(n))) #define STRNCMP(t,s,n) (strncmp((char*)(t), (char*)(s), (size_t)(n))) #endif #endif /* WINDOWS */ #ifdef VMS /* * VMS also defines _UNIX_ above. This is OK for iODBC since all used UNIX * interfaces are supported. * The DEC C RTL actually supports dlopen(), etc, but I have made my own * implementation that supports: * - Proper error messages from dlopen() * - The ability to place the driver in other directories than SYS$SHARE: * - Neither implementation can do dlopen(NULL,), but my implementation * will not crash in this case. * To use old DEC C dlopen() implementation, remove the following define. */ #define DLDAPI_VMS_IODBC /* Use enhanced dlopen() */ #endif /* * Mac OS X Section */ #if defined (__APPLE__) # include # if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3) # undef DLDAPI_DYLD # undef DLDAPI_MACX # define HAVE_LIBDL 1 # endif #endif #define SYSERR (-1) #ifndef NULL #define NULL ((void *)0UL) #endif /* * Map generic pointer to internal pointer */ #define STMT(stmt, var) \ STMT_t *stmt = (STMT_t *)var #define CONN(con, var) \ DBC_t *con = (DBC_t *)var #define GENV(genv, var) \ GENV_t *genv = (GENV_t *)var #define ENVR(env, var) \ ENV_t *env = (ENV_t *)var #define DESC(desc, var) \ DESC_t *desc = (DESC_t *)var #define NEW_VAR(type, var) \ type *var = (type *)MEM_ALLOC(sizeof(type)) /* these are deprecated defines from the odbc headers */ #define SQL_CONNECT_OPT_DRVR_START 1000 #endif /* _IODBC_H */ libiodbc-3.52.9/include/sqltypes.h0000644000076400007640000002334412323210535013774 00000000000000/* * sqltypes.h * * $Id$ * * ODBC typedefs * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _SQLTYPES_H #define _SQLTYPES_H /* * Set default specification to ODBC 3.51 */ #ifndef ODBCVER #define ODBCVER 0x0351 #endif /* * Include Windows style defines and typedefs on Unix */ #ifndef _IODBCUNIX_H #include #endif #ifdef __cplusplus extern "C" { #endif /* * Environment specific definitions */ #ifndef EXPORT #define EXPORT #endif #ifdef WIN32 #define SQL_API __stdcall #else #define SQL_API #endif /* * API declaration data types */ typedef unsigned char SQLCHAR; typedef signed short SQLSMALLINT; typedef unsigned short SQLUSMALLINT; #if (SIZEOF_LONG == 8) typedef signed int SQLINTEGER; typedef unsigned int SQLUINTEGER; #else typedef signed long SQLINTEGER; typedef unsigned long SQLUINTEGER; #endif typedef void * SQLPOINTER; #if (ODBCVER >= 0x0300) typedef signed char SQLSCHAR; typedef unsigned char SQLDATE; typedef unsigned char SQLDECIMAL; typedef unsigned char SQLNUMERIC; typedef double SQLDOUBLE; typedef double SQLFLOAT; typedef float SQLREAL; typedef unsigned char SQLTIME; typedef unsigned char SQLTIMESTAMP; typedef unsigned char SQLVARCHAR; #endif /* ODBCVER >= 0x0300 */ /* * New Win64 datatypes */ #ifdef _WIN64 typedef INT64 SQLLEN; typedef UINT64 SQLULEN; typedef UINT64 SQLSETPOSIROW; #elif defined(STRICT_ODBC_TYPES) typedef long SQLLEN; typedef unsigned long SQLULEN; typedef unsigned short SQLSETPOSIROW; #else #define SQLLEN long #define SQLULEN unsigned long #define SQLSETPOSIROW unsigned short #endif /* * Backward compatibility with older platform sdks */ typedef SQLULEN SQLROWCOUNT; typedef SQLULEN SQLROWSETSIZE; typedef SQLULEN SQLTRANSID; typedef SQLLEN SQLROWOFFSET; /* * Generic pointer types */ typedef void * PTR; typedef void * SQLHANDLE; /* * Handles */ typedef void * HENV; typedef void * HDBC; typedef void * HSTMT; typedef SQLHANDLE SQLHENV; typedef SQLHANDLE SQLHDBC; typedef SQLHANDLE SQLHSTMT; #if (ODBCVER >= 0x0300) typedef SQLHANDLE SQLHDESC; #endif /* ODBCVER >= 0x0300 */ /* * Window Handle */ #if defined(WIN32) || defined (_WIN64) || defined(OS2) typedef HWND SQLHWND; #elif defined(macintosh) #include typedef WindowPtr HWND; typedef HWND SQLHWND; #else typedef SQLPOINTER HWND; typedef SQLPOINTER SQLHWND; #endif /* * SQL portable types for C */ typedef unsigned char UCHAR; typedef signed char SCHAR; typedef short int SWORD; typedef unsigned short int UWORD; typedef long int SDWORD; typedef unsigned long int UDWORD; typedef signed short SSHORT; typedef unsigned short USHORT; typedef signed long SLONG; typedef unsigned long ULONG; typedef float SFLOAT; typedef double SDOUBLE; typedef double LDOUBLE; /* * Return type for functions */ typedef signed short RETCODE; typedef SQLSMALLINT SQLRETURN; /* * SQL portable types for C - DATA, TIME, TIMESTAMP, and BOOKMARK */ typedef SQLULEN BOOKMARK; typedef struct tagDATE_STRUCT { SQLSMALLINT year; SQLUSMALLINT month; SQLUSMALLINT day; } DATE_STRUCT; #if (ODBCVER >= 0x0300) typedef DATE_STRUCT SQL_DATE_STRUCT; #endif /* ODBCVER >= 0x0300 */ typedef struct tagTIME_STRUCT { SQLUSMALLINT hour; SQLUSMALLINT minute; SQLUSMALLINT second; } TIME_STRUCT; #if (ODBCVER >= 0x0300) typedef TIME_STRUCT SQL_TIME_STRUCT; #endif /* ODBCVER >= 0x0300 */ typedef struct tagTIMESTAMP_STRUCT { SQLSMALLINT year; SQLUSMALLINT month; SQLUSMALLINT day; SQLUSMALLINT hour; SQLUSMALLINT minute; SQLUSMALLINT second; SQLUINTEGER fraction; } TIMESTAMP_STRUCT; #if (ODBCVER >= 0x0300) typedef TIMESTAMP_STRUCT SQL_TIMESTAMP_STRUCT; #endif /* ODBCVER >= 0x0300 */ /* * Enumeration for DATETIME_INTERVAL_SUBCODE values for interval data types * * These values are from SQL-92 */ #if (ODBCVER >= 0x0300) typedef enum { SQL_IS_YEAR = 1, SQL_IS_MONTH = 2, SQL_IS_DAY = 3, SQL_IS_HOUR = 4, SQL_IS_MINUTE = 5, SQL_IS_SECOND = 6, SQL_IS_YEAR_TO_MONTH = 7, SQL_IS_DAY_TO_HOUR = 8, SQL_IS_DAY_TO_MINUTE = 9, SQL_IS_DAY_TO_SECOND = 10, SQL_IS_HOUR_TO_MINUTE = 11, SQL_IS_HOUR_TO_SECOND = 12, SQL_IS_MINUTE_TO_SECOND = 13 } SQLINTERVAL; typedef struct tagSQL_YEAR_MONTH { SQLUINTEGER year; SQLUINTEGER month; } SQL_YEAR_MONTH_STRUCT; typedef struct tagSQL_DAY_SECOND { SQLUINTEGER day; SQLUINTEGER hour; SQLUINTEGER minute; SQLUINTEGER second; SQLUINTEGER fraction; } SQL_DAY_SECOND_STRUCT; typedef struct tagSQL_INTERVAL_STRUCT { SQLINTERVAL interval_type; SQLSMALLINT interval_sign; union { SQL_YEAR_MONTH_STRUCT year_month; SQL_DAY_SECOND_STRUCT day_second; } intval; } SQL_INTERVAL_STRUCT; #endif /* ODBCVER >= 0x0300 */ /* * The ODBC C types for SQL_C_SBIGINT and SQL_C_UBIGINT */ #if (ODBCVER >= 0x0300) #if defined(_MSC_VER) && (_MSC_VER >= 900) # define ODBCINT64 __int64 #endif #ifndef ODBCINT64 # if (SIZEOF_LONG == 8) # define ODBCINT64 long # else # define ODBCINT64 long long # endif #endif /* ODBCINT64 */ #if defined (ODBCINT64) typedef signed ODBCINT64 SQLBIGINT; typedef unsigned ODBCINT64 SQLUBIGINT; #endif /* ODBCINT64 */ #endif /* ODBCVER >= 0x0300 */ /* * The internal representation of the numeric data type */ #if (ODBCVER >= 0x0300) #define SQL_MAX_NUMERIC_LEN 16 typedef struct tagSQL_NUMERIC_STRUCT { SQLCHAR precision; SQLSCHAR scale; SQLCHAR sign; /* 0 for negative, 1 for positive */ SQLCHAR val[SQL_MAX_NUMERIC_LEN]; } SQL_NUMERIC_STRUCT; #endif /* ODBCVER >= 0x0300 */ #if (ODBCVER >= 0x0350) #ifdef GUID_DEFINED typedef GUID SQLGUID; #else typedef struct tagSQLGUID { unsigned int Data1; unsigned short Data2; unsigned short Data3; unsigned char Data4[8]; /* BYTE */ } SQLGUID; #endif /* GUID_DEFINED */ #endif /* ODBCVER >= 0x0350 */ #if defined(WIN32) typedef unsigned short SQLWCHAR; #else # include # if defined(__cplusplus) || \ defined(_WCHAR_T) || \ defined(_WCHAR_T_DEFINED) || \ defined(_WCHAR_T_DEFINED_) || \ defined(_WCHAR_T_DECLARED) || \ defined(_BSD_WCHAR_T_DEFINED_) || \ defined(_BSD_WCHAR_T_) || \ defined(_BSD_CT_RUNE_T_) typedef wchar_t SQLWCHAR; # else # error Please make sure your system supports the wchar_t type # endif #endif /* WIN32 */ #ifdef UNICODE typedef SQLWCHAR SQLTCHAR; #else typedef SQLCHAR SQLTCHAR; #endif /* UNICODE */ #ifdef __cplusplus } #endif #endif /* _SQLTYPES_H */ libiodbc-3.52.9/include/odbcinst.h0000644000076400007640000004044612323210535013717 00000000000000/* * odbcinst.h * * $Id$ * * iODBC Installer defines * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _ODBCINST_H #define _ODBCINST_H /* * Set default specification to ODBC 3.51 */ #ifndef ODBCVER #define ODBCVER 0x0351 #endif #ifndef _SQL_H #include #endif #ifndef _SQLEXT_H #include #endif #ifdef __cplusplus extern "C" { #endif #ifndef EXPORT #define EXPORT #endif #ifndef SYS_ODBCINST_INI # if defined(__BEOS__) # define SYS_ODBCINST_INI "/boot/beos/etc/odbcinst.ini" # endif # if defined(macintosh) # ifdef __POWERPC__ # define SYS_ODBCINST_INI "Boot:System Folder:Preferences:ODBC Installer Preferences PPC" # else # define SYS_ODBCINST_INI "Boot:System Folder:Preferences:ODBC Installer Preferences" # endif # else # define SYS_ODBCINST_INI "/etc/odbcinst.ini" # endif #endif #ifndef SYS_ODBC_INI # if defined(__BEOS__) # define SYS_ODBC_INI "/boot/beos/etc/odbc.ini" # endif # if defined(macintosh) # ifdef __POWERPC__ # define SYS_ODBC_INI "Boot:System Folder:Preferences:ODBC Preferences PPC" # else # define SYS_ODBC_INI "Boot:System Folder:Preferences:ODBC Preferences" # endif # else # define SYS_ODBC_INI "/etc/odbc.ini" # endif #endif #ifndef DEFAULT_FILEDSNPATH # if defined(__BEOS__) # define DEFAULT_FILEDSNPATH "/boot/beos/etc/ODBCDataSources" # elif defined(macintosh) # ifdef __POWERPC__ # define DEFAULT_FILEDSNPATH "Boot:System Folder:Preferences:ODBC Preferences PPC:ODBCDataSources" # else # define DEFAULT_FILEDSNPATH "Boot:System Folder:Preferences:ODBC Preferences:ODBCDataSources" # endif # elif defined (__APPLE__) # define DEFAULT_FILEDSNPATH "/Library/ODBC/ODBCDataSources" # else # define DEFAULT_FILEDSNPATH "/etc/ODBCDataSources" # endif #endif #define USERDSN_ONLY 0 #define SYSTEMDSN_ONLY 1 #ifdef WIN32 #define INSTAPI __stdcall #else #define INSTAPI #endif /* * SQLConfigDataSource */ #define ODBC_ADD_DSN 1 #define ODBC_CONFIG_DSN 2 #define ODBC_REMOVE_DSN 3 #if (ODBCVER >= 0x0250) #define ODBC_ADD_SYS_DSN 4 #define ODBC_CONFIG_SYS_DSN 5 #define ODBC_REMOVE_SYS_DSN 6 #if (ODBCVER >= 0x0300) #define ODBC_REMOVE_DEFAULT_DSN 7 #endif /* ODBCVER >= 0x0300 */ /* install request flags */ #define ODBC_INSTALL_INQUIRY 1 #define ODBC_INSTALL_COMPLETE 2 /* config driver flags */ #define ODBC_INSTALL_DRIVER 1 #define ODBC_REMOVE_DRIVER 2 #define ODBC_CONFIG_DRIVER 3 #define ODBC_CONFIG_DRIVER_MAX 100 #endif /* SQLGetConfigMode and SQLSetConfigMode flags */ #if (ODBCVER >= 0x0300) #define ODBC_BOTH_DSN 0 #define ODBC_USER_DSN 1 #define ODBC_SYSTEM_DSN 2 #endif /* ODBCVER >= 0x0300 */ /* SQLInstallerError code */ #if (ODBCVER >= 0x0300) #define ODBC_ERROR_GENERAL_ERR 1 #define ODBC_ERROR_INVALID_BUFF_LEN 2 #define ODBC_ERROR_INVALID_HWND 3 #define ODBC_ERROR_INVALID_STR 4 #define ODBC_ERROR_INVALID_REQUEST_TYPE 5 #define ODBC_ERROR_COMPONENT_NOT_FOUND 6 #define ODBC_ERROR_INVALID_NAME 7 #define ODBC_ERROR_INVALID_KEYWORD_VALUE 8 #define ODBC_ERROR_INVALID_DSN 9 #define ODBC_ERROR_INVALID_INF 10 #define ODBC_ERROR_REQUEST_FAILED 11 #define ODBC_ERROR_INVALID_PATH 12 #define ODBC_ERROR_LOAD_LIB_FAILED 13 #define ODBC_ERROR_INVALID_PARAM_SEQUENCE 14 #define ODBC_ERROR_INVALID_LOG_FILE 15 #define ODBC_ERROR_USER_CANCELED 16 #define ODBC_ERROR_USAGE_UPDATE_FAILED 17 #define ODBC_ERROR_CREATE_DSN_FAILED 18 #define ODBC_ERROR_WRITING_SYSINFO_FAILED 19 #define ODBC_ERROR_REMOVE_DSN_FAILED 20 #define ODBC_ERROR_OUT_OF_MEM 21 #define ODBC_ERROR_OUTPUT_STRING_TRUNCATED 22 #define ODBC_ERROR_DRIVER_SPECIFIC 23 #endif /* ODBCVER >= 0x0300 */ /* * Function Prototypes */ BOOL INSTAPI SQLGetConfigMode ( UWORD* pwConfigMode); BOOL INSTAPI SQLInstallDriverEx ( LPCSTR lpszDriver, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD* pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount); BOOL INSTAPI SQLInstallDriverExW ( LPCWSTR lpszDriver, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD* pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount); RETCODE INSTAPI SQLInstallerError ( WORD iError, DWORD* pfErrorCode, LPSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD* pcbErrorMsg); RETCODE INSTAPI SQLInstallerErrorW ( WORD iError, DWORD* pfErrorCode, LPWSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD* pcbErrorMsg); RETCODE INSTAPI SQLPostInstallerError ( DWORD fErrorCode, LPSTR szErrorMsg); RETCODE INSTAPI SQLPostInstallerErrorW ( DWORD fErrorCode, LPWSTR szErrorMsg); BOOL INSTAPI SQLInstallTranslatorEx ( LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD* pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount); BOOL INSTAPI SQLInstallTranslatorExW ( LPCWSTR lpszTranslator, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD* pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount); BOOL INSTAPI SQLReadFileDSN ( LPCSTR lpszFileName, LPCSTR lpszAppName, LPCSTR lpszKeyName, LPSTR lpszString, WORD cbString, WORD* pcbString); BOOL INSTAPI SQLReadFileDSNW ( LPCWSTR lpszFileName, LPCWSTR lpszAppName, LPCWSTR lpszKeyName, LPWSTR lpszString, WORD cbString, WORD* pcbString); BOOL INSTAPI SQLWriteFileDSN ( LPCSTR lpszFileName, LPCSTR lpszAppName, LPCSTR lpszKeyName, LPSTR lpszString); BOOL INSTAPI SQLWriteFileDSNW ( LPCWSTR lpszFileName, LPCWSTR lpszAppName, LPCWSTR lpszKeyName, LPWSTR lpszString); BOOL INSTAPI SQLSetConfigMode ( UWORD wConfigMode); BOOL INSTAPI SQLInstallODBC ( HWND hwndParent, LPCSTR lpszInfFile, LPCSTR lpszSrcPath, LPCSTR lpszDrivers); BOOL INSTAPI SQLInstallODBCW ( HWND hwndParent, LPCWSTR lpszInfFile, LPCWSTR lpszSrcPath, LPCWSTR lpszDrivers); BOOL INSTAPI SQLManageDataSources (HWND hwndParent); BOOL INSTAPI SQLCreateDataSource ( HWND hwndParent, LPCSTR lpszDSN); BOOL INSTAPI SQLCreateDataSourceW ( HWND hwndParent, LPCWSTR lpszDSN); BOOL INSTAPI SQLGetTranslator ( HWND hwnd, LPSTR lpszName, WORD cbNameMax, WORD * pcbNameOut, LPSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut, DWORD * pvOption); BOOL INSTAPI SQLGetTranslatorW ( HWND hwnd, LPWSTR lpszName, WORD cbNameMax, WORD * pcbNameOut, LPWSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut, DWORD * pvOption); /* Low level APIs * NOTE: The high-level APIs should always be used. These APIs * have been left for compatibility. */ BOOL INSTAPI SQLInstallDriver ( LPCSTR lpszInfFile, LPCSTR lpszDriver, LPSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut); BOOL INSTAPI SQLInstallDriverW ( LPCWSTR lpszInfFile, LPCWSTR lpszDriver, LPWSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut); BOOL INSTAPI SQLInstallDriverManager ( LPSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut); BOOL INSTAPI SQLInstallDriverManagerW ( LPWSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut); BOOL INSTAPI SQLGetInstalledDrivers ( LPSTR lpszBuf, WORD cbBufMax, WORD * pcbBufOut); BOOL INSTAPI SQLGetInstalledDriversW ( LPWSTR lpszBuf, WORD cbBufMax, WORD * pcbBufOut); BOOL INSTAPI SQLGetAvailableDrivers ( LPCSTR lpszInfFile, LPSTR lpszBuf, WORD cbBufMax, WORD * pcbBufOut); BOOL INSTAPI SQLGetAvailableDriversW ( LPCWSTR lpszInfFile, LPWSTR lpszBuf, WORD cbBufMax, WORD * pcbBufOut); BOOL INSTAPI SQLConfigDataSource ( HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes); BOOL INSTAPI SQLConfigDataSourceW ( HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszAttributes); BOOL INSTAPI SQLRemoveDefaultDataSource (void); BOOL INSTAPI SQLWriteDSNToIni ( LPCSTR lpszDSN, LPCSTR lpszDriver); BOOL INSTAPI SQLWriteDSNToIniW ( LPCWSTR lpszDSN, LPCWSTR lpszDriver); BOOL INSTAPI SQLRemoveDSNFromIni (LPCSTR lpszDSN); BOOL INSTAPI SQLRemoveDSNFromIniW (LPCWSTR lpszDSN); BOOL INSTAPI SQLValidDSN (LPCSTR lpszDSN); BOOL INSTAPI SQLValidDSNW (LPCWSTR lpszDSN); BOOL INSTAPI SQLWritePrivateProfileString ( LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszString, LPCSTR lpszFilename); BOOL INSTAPI SQLWritePrivateProfileStringW ( LPCWSTR lpszSection, LPCWSTR lpszEntry, LPCWSTR lpszString, LPCWSTR lpszFilename); int INSTAPI SQLGetPrivateProfileString ( LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszDefault, LPSTR lpszRetBuffer, int cbRetBuffer, LPCSTR lpszFilename); int INSTAPI SQLGetPrivateProfileStringW ( LPCWSTR lpszSection, LPCWSTR lpszEntry, LPCWSTR lpszDefault, LPWSTR lpszRetBuffer, int cbRetBuffer, LPCWSTR lpszFilename); BOOL INSTAPI SQLRemoveDriverManager (LPDWORD lpdwUsageCount); BOOL INSTAPI SQLInstallTranslator ( LPCSTR lpszInfFile, LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount); BOOL INSTAPI SQLInstallTranslatorW ( LPCWSTR lpszInfFile, LPCWSTR lpszTranslator, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount); BOOL INSTAPI SQLRemoveTranslator ( LPCSTR lpszTranslator, LPDWORD lpdwUsageCount); BOOL INSTAPI SQLRemoveTranslatorW ( LPCWSTR lpszTranslator, LPDWORD lpdwUsageCount); BOOL INSTAPI SQLRemoveDriver ( LPCSTR lpszDriver, BOOL fRemoveDSN, LPDWORD lpdwUsageCount); BOOL INSTAPI SQLRemoveDriverW ( LPCWSTR lpszDriver, BOOL fRemoveDSN, LPDWORD lpdwUsageCount); BOOL INSTAPI SQLConfigDriver ( HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszArgs, LPSTR lpszMsg, WORD cbMsgMax, WORD * pcbMsgOut); BOOL INSTAPI SQLConfigDriverW ( HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszArgs, LPWSTR lpszMsg, WORD cbMsgMax, WORD * pcbMsgOut); /* Driver specific Setup APIs called by installer */ typedef BOOL INSTAPI (*pConfigDSNFunc) ( HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes); typedef BOOL INSTAPI (*pConfigDSNWFunc) ( HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszAttributes); typedef BOOL INSTAPI (*pConfigDriverFunc) ( HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszArgs, LPSTR lpszMsg, WORD cbMsgMax, WORD * pcbMsgOut); typedef BOOL INSTAPI (*pConfigDriverWFunc) ( HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszArgs, LPWSTR lpszMsg, WORD cbMsgMax, WORD * pcbMsgOut); typedef BOOL INSTAPI (*pConfigTranslatorFunc) ( HWND hwndParent, DWORD *pvOption); BOOL INSTAPI ConfigDSN ( HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes); BOOL INSTAPI ConfigDSNW ( HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszAttributes); BOOL INSTAPI ConfigTranslator (HWND hwndParent, DWORD * pvOption); BOOL INSTAPI ConfigDriver ( HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszArgs, LPSTR lpszMsg, WORD cbMsgMax, WORD * pcbMsgOut); BOOL INSTAPI ConfigDriverW ( HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszArgs, LPWSTR lpszMsg, WORD cbMsgMax, WORD * pcbMsgOut); #ifndef SQL_NOUNICODEMAP #ifdef UNICODE #define SQLInstallODBC SQLInstallODBCW #define SQLCreateDataSource SQLCreateDataSourceW #define SQLGetTranslator SQLGetTranslatorW #define SQLInstallDriver SQLInstallDriverW #define SQLInstallDriverManager SQLInstallDriverManagerW #define SQLGetInstalledDrivers SQLGetInstalledDriversW #define SQLGetAvailableDrivers SQLGetAvailableDriversW #define SQLConfigDataSource SQLConfigDataSourceW #define SQLWriteDSNToIni SQLWriteDSNToIniW #define SQLRemoveDSNFromIni SQLRemoveDSNFromIniW #define SQLValidDSN SQLValidDSNW #define SQLWritePrivateProfileString SQLWritePrivateProfileStringW #define SQLGetPrivateProfileString SQLGetPrivateProfileStringW #define SQLInstallTranslator SQLInstallTranslatorW #define SQLRemoveTranslator SQLRemoveTranslatorW #define SQLRemoveDriver SQLRemoveDriverW #define SQLConfigDriver SQLConfigDriverW #define SQLInstallerError SQLInstallerErrorW #define SQLPostInstallerError SQLPostInstallerErrorW #define SQLReadFileDSN SQLReadFileDSNW #define SQLWriteFileDSN SQLWriteFileDSNW #define SQLInstallDriverEx SQLInstallDriverExW #define SQLInstallTranslatorEx SQLInstallTranslatorExW #endif /* UNICODE */ #endif /* SQL_NOUNICODEMAP */ #ifdef __cplusplus } #endif #endif /* _ODBCINST_H */ libiodbc-3.52.9/include/iodbcunix.h0000644000076400007640000001114012323210535014063 00000000000000/* * iodbcunix.h * * $Id$ * * ODBC defines for Unix * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _IODBCUNIX_H #define _IODBCUNIX_H /* * Standard header files */ #include #include #if defined(__WCHAR_TYPE__) && !defined(MACOSX102) #include #endif /* * Windows-style declarations */ #define NEAR #define FAR #define EXPORT #define PASCAL #define VOID void #define CALLBACK #define _cdecl #define __stdcall /* * Boolean support */ #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #ifdef __cplusplus extern "C" { #endif /* * Windows-style typedefs */ #if defined (OBSOLETE_WINDOWS_TYPES) typedef unsigned char BYTE; #endif typedef unsigned short WORD; typedef unsigned int DWORD; typedef char * LPSTR; typedef const char * LPCSTR; typedef wchar_t * LPWSTR; typedef const wchar_t * LPCWSTR; typedef DWORD * LPDWORD; #if !defined(BOOL) && !defined(_OBJC_OBJC_H_) typedef int BOOL; #endif /* * Determine sizeof(long) in case it is not determined by configure/config.h */ #ifndef SIZEOF_LONG #if defined (_LP64) || \ defined (__LP64__) || \ defined (__64BIT__) || \ defined (__alpha) || \ defined (__sparcv9) || \ defined (__arch64__) #define SIZEOF_LONG 8 /* 64 bit operating systems */ #else #define SIZEOF_LONG 4 /* 32 bit operating systems */ #endif #endif /* SIZEOF_LONG */ #ifdef __cplusplus } #endif #endif /* _IODBCUNIX_H */ libiodbc-3.52.9/include/isqlext.h0000644000076400007640000000675112323210535013604 00000000000000/* * isqlext.h * * $Id$ * * iODBC defines (ext) * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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 is deprecated in favor of sqlext.h and will be removed * sometime in the future. Please recode your applications to use * the standard names sql.h, sqlext.h and sqltypes.h. */ #include libiodbc-3.52.9/include/sql.h0000644000076400007640000007510012323210535012704 00000000000000/* * sql.h * * $Id$ * * ODBC defines * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _SQL_H #define _SQL_H /* * Set default specification to ODBC 3.51 */ #ifndef ODBCVER #define ODBCVER 0x0351 #endif #ifndef _SQLTYPES_H #include #endif #ifdef __cplusplus extern "C" { #endif /* * Useful Constants */ #define SQL_MAX_MESSAGE_LENGTH 512 /* * Handle types */ #if (ODBCVER >= 0x0300) #define SQL_HANDLE_ENV 1 #define SQL_HANDLE_DBC 2 #define SQL_HANDLE_STMT 3 #define SQL_HANDLE_DESC 4 #endif /* ODBCVER >= 0x0300 */ /* * Function return codes */ #define SQL_SUCCESS 0 #define SQL_SUCCESS_WITH_INFO 1 #define SQL_STILL_EXECUTING 2 #define SQL_ERROR (-1) #define SQL_INVALID_HANDLE (-2) #define SQL_NEED_DATA 99 #if (ODBCVER >= 0x0300) #define SQL_NO_DATA 100 #endif /* ODBCVER >= 0x0300 */ /* * Test for SQL_SUCCESS or SQL_SUCCESS_WITH_INFO */ #define SQL_SUCCEEDED(rc) (((rc) & (~1)) == 0) /* * Special length values */ #define SQL_NULL_DATA (-1) #define SQL_DATA_AT_EXEC (-2) /* * Flags for null-terminated strings */ #define SQL_NTS (-3) #define SQL_NTSL (-3L) /* * Standard SQL datatypes, using ANSI type numbering */ #define SQL_UNKNOWN_TYPE 0 #define SQL_CHAR 1 #define SQL_NUMERIC 2 #define SQL_DECIMAL 3 #define SQL_INTEGER 4 #define SQL_SMALLINT 5 #define SQL_FLOAT 6 #define SQL_REAL 7 #define SQL_DOUBLE 8 #if (ODBCVER >= 0x0300) #define SQL_DATETIME 9 #endif /* ODBCVER >= 0x0300 */ #define SQL_VARCHAR 12 /* * SQLGetTypeInfo request for all data types */ #define SQL_ALL_TYPES 0 /* * Statement attribute values for date/time data types */ #if (ODBCVER >= 0x0300) #define SQL_TYPE_DATE 91 #define SQL_TYPE_TIME 92 #define SQL_TYPE_TIMESTAMP 93 #endif /* ODBCVER >= 0x0300 */ /* * Date/Time length constants */ #if (ODBCVER >= 0x0300) #define SQL_DATE_LEN 10 #define SQL_TIME_LEN 8 /* add P+1 if prec >0 */ #define SQL_TIMESTAMP_LEN 19 /* add P+1 if prec >0 */ #endif /* ODBCVER >= 0x0300 */ /* * NULL status constants */ #define SQL_NO_NULLS 0 #define SQL_NULLABLE 1 #define SQL_NULLABLE_UNKNOWN 2 /* * NULL Handles */ #define SQL_NULL_HENV 0 #define SQL_NULL_HDBC 0 #define SQL_NULL_HSTMT 0 #if (ODBCVER >= 0x0300) #define SQL_NULL_HDESC 0 #endif /* ODBCVER >= 0x0300 */ /* * NULL handle for parent argument to SQLAllocHandle when allocating * a SQLHENV */ #if (ODBCVER >= 0x0300) #define SQL_NULL_HANDLE 0L #endif /* ODBCVER >= 0x0300 */ /* * CLI option values */ #if (ODBCVER >= 0x0300) #define SQL_FALSE 0 #define SQL_TRUE 1 #endif /* ODBCVER >= 0x0300 */ /* * Default conversion code for SQLBindCol(), SQLBindParam() and SQLGetData() */ #if (ODBCVER >= 0x0300) #define SQL_DEFAULT 99 #endif /* ODBCVER >= 0x0300 */ /* * SQLDataSources/SQLFetchScroll - FetchOrientation */ #define SQL_FETCH_NEXT 1 #define SQL_FETCH_FIRST 2 /* * SQLFetchScroll - FetchOrientation */ #define SQL_FETCH_LAST 3 #define SQL_FETCH_PRIOR 4 #define SQL_FETCH_ABSOLUTE 5 #define SQL_FETCH_RELATIVE 6 /* * SQLFreeStmt */ #define SQL_CLOSE 0 #define SQL_DROP 1 #define SQL_UNBIND 2 #define SQL_RESET_PARAMS 3 /* * SQLGetConnectAttr - connection attributes */ #if (ODBCVER >= 0x0300) #define SQL_ATTR_AUTO_IPD 10001 #define SQL_ATTR_METADATA_ID 10014 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetData() code indicating that the application row descriptor * specifies the data type */ #if (ODBCVER >= 0x0300) #define SQL_ARD_TYPE (-99) #endif /* ODBCVER >= 0x0300 */ /* * SQLGetDescField - identifiers of fields in the SQL descriptor */ #if (ODBCVER >= 0x0300) #define SQL_DESC_COUNT 1001 #define SQL_DESC_TYPE 1002 #define SQL_DESC_LENGTH 1003 #define SQL_DESC_OCTET_LENGTH_PTR 1004 #define SQL_DESC_PRECISION 1005 #define SQL_DESC_SCALE 1006 #define SQL_DESC_DATETIME_INTERVAL_CODE 1007 #define SQL_DESC_NULLABLE 1008 #define SQL_DESC_INDICATOR_PTR 1009 #define SQL_DESC_DATA_PTR 1010 #define SQL_DESC_NAME 1011 #define SQL_DESC_UNNAMED 1012 #define SQL_DESC_OCTET_LENGTH 1013 #define SQL_DESC_ALLOC_TYPE 1099 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetDescField - SQL_DESC_ALLOC_TYPE */ #if (ODBCVER >= 0x0300) #define SQL_DESC_ALLOC_AUTO 1 #define SQL_DESC_ALLOC_USER 2 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetDescField - SQL_DESC_DATETIME_INTERVAL_CODE */ #if (ODBCVER >= 0x0300) #define SQL_CODE_DATE 1 #define SQL_CODE_TIME 2 #define SQL_CODE_TIMESTAMP 3 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetDescField - SQL_DESC_UNNAMED */ #if (ODBCVER >= 0x0300) #define SQL_NAMED 0 #define SQL_UNNAMED 1 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetDiagField - identifiers of fields in the diagnostics area */ #if (ODBCVER >= 0x0300) #define SQL_DIAG_RETURNCODE 1 #define SQL_DIAG_NUMBER 2 #define SQL_DIAG_ROW_COUNT 3 #define SQL_DIAG_SQLSTATE 4 #define SQL_DIAG_NATIVE 5 #define SQL_DIAG_MESSAGE_TEXT 6 #define SQL_DIAG_DYNAMIC_FUNCTION 7 #define SQL_DIAG_CLASS_ORIGIN 8 #define SQL_DIAG_SUBCLASS_ORIGIN 9 #define SQL_DIAG_CONNECTION_NAME 10 #define SQL_DIAG_SERVER_NAME 11 #define SQL_DIAG_DYNAMIC_FUNCTION_CODE 12 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetDiagField - SQL_DIAG_DYNAMIC_FUNCTION_CODE */ #if (ODBCVER >= 0x0300) #define SQL_DIAG_ALTER_DOMAIN 3 #define SQL_DIAG_ALTER_TABLE 4 #define SQL_DIAG_CALL 7 #define SQL_DIAG_CREATE_ASSERTION 6 #define SQL_DIAG_CREATE_CHARACTER_SET 8 #define SQL_DIAG_CREATE_COLLATION 10 #define SQL_DIAG_CREATE_DOMAIN 23 #define SQL_DIAG_CREATE_INDEX (-1) #define SQL_DIAG_CREATE_SCHEMA 64 #define SQL_DIAG_CREATE_TABLE 77 #define SQL_DIAG_CREATE_TRANSLATION 79 #define SQL_DIAG_CREATE_VIEW 84 #define SQL_DIAG_DELETE_WHERE 19 #define SQL_DIAG_DROP_ASSERTION 24 #define SQL_DIAG_DROP_CHARACTER_SET 25 #define SQL_DIAG_DROP_COLLATION 26 #define SQL_DIAG_DROP_DOMAIN 27 #define SQL_DIAG_DROP_INDEX (-2) #define SQL_DIAG_DROP_SCHEMA 31 #define SQL_DIAG_DROP_TABLE 32 #define SQL_DIAG_DROP_TRANSLATION 33 #define SQL_DIAG_DROP_VIEW 36 #define SQL_DIAG_DYNAMIC_DELETE_CURSOR 38 #define SQL_DIAG_DYNAMIC_UPDATE_CURSOR 81 #define SQL_DIAG_GRANT 48 #define SQL_DIAG_INSERT 50 #define SQL_DIAG_REVOKE 59 #define SQL_DIAG_SELECT_CURSOR 85 #define SQL_DIAG_UNKNOWN_STATEMENT 0 #define SQL_DIAG_UPDATE_WHERE 82 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetEnvAttr - environment attribute */ #if (ODBCVER >= 0x0300) #define SQL_ATTR_OUTPUT_NTS 10001 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetFunctions */ #define SQL_API_SQLALLOCCONNECT 1 #define SQL_API_SQLALLOCENV 2 #if (ODBCVER >= 0x0300) #define SQL_API_SQLALLOCHANDLE 1001 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLALLOCSTMT 3 #define SQL_API_SQLBINDCOL 4 #if (ODBCVER >= 0x0300) #define SQL_API_SQLBINDPARAM 1002 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLCANCEL 5 #if (ODBCVER >= 0x0300) #define SQL_API_SQLCLOSECURSOR 1003 #define SQL_API_SQLCOLATTRIBUTE 6 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLCOLUMNS 40 #define SQL_API_SQLCONNECT 7 #if (ODBCVER >= 0x0300) #define SQL_API_SQLCOPYDESC 1004 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLDATASOURCES 57 #define SQL_API_SQLDESCRIBECOL 8 #define SQL_API_SQLDISCONNECT 9 #if (ODBCVER >= 0x0300) #define SQL_API_SQLENDTRAN 1005 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLERROR 10 #define SQL_API_SQLEXECDIRECT 11 #define SQL_API_SQLEXECUTE 12 #define SQL_API_SQLFETCH 13 #if (ODBCVER >= 0x0300) #define SQL_API_SQLFETCHSCROLL 1021 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLFREECONNECT 14 #define SQL_API_SQLFREEENV 15 #if (ODBCVER >= 0x0300) #define SQL_API_SQLFREEHANDLE 1006 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLFREESTMT 16 #if (ODBCVER >= 0x0300) #define SQL_API_SQLGETCONNECTATTR 1007 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLGETCONNECTOPTION 42 #define SQL_API_SQLGETCURSORNAME 17 #define SQL_API_SQLGETDATA 43 #if (ODBCVER >= 0x0300) #define SQL_API_SQLGETDESCFIELD 1008 #define SQL_API_SQLGETDESCREC 1009 #define SQL_API_SQLGETDIAGFIELD 1010 #define SQL_API_SQLGETDIAGREC 1011 #define SQL_API_SQLGETENVATTR 1012 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLGETFUNCTIONS 44 #define SQL_API_SQLGETINFO 45 #if (ODBCVER >= 0x0300) #define SQL_API_SQLGETSTMTATTR 1014 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLGETSTMTOPTION 46 #define SQL_API_SQLGETTYPEINFO 47 #define SQL_API_SQLNUMRESULTCOLS 18 #define SQL_API_SQLPARAMDATA 48 #define SQL_API_SQLPREPARE 19 #define SQL_API_SQLPUTDATA 49 #define SQL_API_SQLROWCOUNT 20 #if (ODBCVER >= 0x0300) #define SQL_API_SQLSETCONNECTATTR 1016 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLSETCONNECTOPTION 50 #define SQL_API_SQLSETCURSORNAME 21 #if (ODBCVER >= 0x0300) #define SQL_API_SQLSETDESCFIELD 1017 #define SQL_API_SQLSETDESCREC 1018 #define SQL_API_SQLSETENVATTR 1019 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLSETPARAM 22 #if (ODBCVER >= 0x0300) #define SQL_API_SQLSETSTMTATTR 1020 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLSETSTMTOPTION 51 #define SQL_API_SQLSPECIALCOLUMNS 52 #define SQL_API_SQLSTATISTICS 53 #define SQL_API_SQLTABLES 54 #define SQL_API_SQLTRANSACT 23 /* * SQLGetInfo */ #if (ODBCVER >= 0x0300) #define SQL_MAX_DRIVER_CONNECTIONS 0 #define SQL_MAXIMUM_DRIVER_CONNECTIONS SQL_MAX_DRIVER_CONNECTIONS #define SQL_MAX_CONCURRENT_ACTIVITIES 1 #define SQL_MAXIMUM_CONCURRENT_ACTIVITIES SQL_MAX_CONCURRENT_ACTIVITIES #endif /* ODBCVER >= 0x0300 */ #define SQL_DATA_SOURCE_NAME 2 #define SQL_FETCH_DIRECTION 8 #define SQL_SERVER_NAME 13 #define SQL_SEARCH_PATTERN_ESCAPE 14 #define SQL_DBMS_NAME 17 #define SQL_DBMS_VER 18 #define SQL_ACCESSIBLE_TABLES 19 #define SQL_ACCESSIBLE_PROCEDURES 20 #define SQL_CURSOR_COMMIT_BEHAVIOR 23 #define SQL_DATA_SOURCE_READ_ONLY 25 #define SQL_DEFAULT_TXN_ISOLATION 26 #define SQL_IDENTIFIER_CASE 28 #define SQL_IDENTIFIER_QUOTE_CHAR 29 #define SQL_MAX_COLUMN_NAME_LEN 30 #define SQL_MAXIMUM_COLUMN_NAME_LENGTH SQL_MAX_COLUMN_NAME_LEN #define SQL_MAX_CURSOR_NAME_LEN 31 #define SQL_MAXIMUM_CURSOR_NAME_LENGTH SQL_MAX_CURSOR_NAME_LEN #define SQL_MAX_SCHEMA_NAME_LEN 32 #define SQL_MAXIMUM_SCHEMA_NAME_LENGTH SQL_MAX_SCHEMA_NAME_LEN #define SQL_MAX_CATALOG_NAME_LEN 34 #define SQL_MAXIMUM_CATALOG_NAME_LENGTH SQL_MAX_CATALOG_NAME_LEN #define SQL_MAX_TABLE_NAME_LEN 35 #define SQL_SCROLL_CONCURRENCY 43 #define SQL_TXN_CAPABLE 46 #define SQL_TRANSACTION_CAPABLE SQL_TXN_CAPABLE #define SQL_USER_NAME 47 #define SQL_TXN_ISOLATION_OPTION 72 #define SQL_TRANSACTION_ISOLATION_OPTION SQL_TXN_ISOLATION_OPTION #define SQL_INTEGRITY 73 #define SQL_GETDATA_EXTENSIONS 81 #define SQL_NULL_COLLATION 85 #define SQL_ALTER_TABLE 86 #define SQL_ORDER_BY_COLUMNS_IN_SELECT 90 #define SQL_SPECIAL_CHARACTERS 94 #define SQL_MAX_COLUMNS_IN_GROUP_BY 97 #define SQL_MAXIMUM_COLUMNS_IN_GROUP_BY SQL_MAX_COLUMNS_IN_GROUP_BY #define SQL_MAX_COLUMNS_IN_INDEX 98 #define SQL_MAXIMUM_COLUMNS_IN_INDEX SQL_MAX_COLUMNS_IN_INDEX #define SQL_MAX_COLUMNS_IN_ORDER_BY 99 #define SQL_MAXIMUM_COLUMNS_IN_ORDER_BY SQL_MAX_COLUMNS_IN_ORDER_BY #define SQL_MAX_COLUMNS_IN_SELECT 100 #define SQL_MAXIMUM_COLUMNS_IN_SELECT SQL_MAX_COLUMNS_IN_SELECT #define SQL_MAX_COLUMNS_IN_TABLE 101 #define SQL_MAX_INDEX_SIZE 102 #define SQL_MAXIMUM_INDEX_SIZE SQL_MAX_INDEX_SIZE #define SQL_MAX_ROW_SIZE 104 #define SQL_MAXIMUM_ROW_SIZE SQL_MAX_ROW_SIZE #define SQL_MAX_STATEMENT_LEN 105 #define SQL_MAXIMUM_STATEMENT_LENGTH SQL_MAX_STATEMENT_LEN #define SQL_MAX_TABLES_IN_SELECT 106 #define SQL_MAXIMUM_TABLES_IN_SELECT SQL_MAX_TABLES_IN_SELECT #define SQL_MAX_USER_NAME_LEN 107 #define SQL_MAXIMUM_USER_NAME_LENGTH SQL_MAX_USER_NAME_LEN #if (ODBCVER >= 0x0300) #define SQL_OJ_CAPABILITIES 115 #define SQL_OUTER_JOIN_CAPABILITIES SQL_OJ_CAPABILITIES #endif /* ODBCVER >= 0x0300 */ #if (ODBCVER >= 0x0300) #define SQL_XOPEN_CLI_YEAR 10000 #define SQL_CURSOR_SENSITIVITY 10001 #define SQL_DESCRIBE_PARAMETER 10002 #define SQL_CATALOG_NAME 10003 #define SQL_COLLATION_SEQ 10004 #define SQL_MAX_IDENTIFIER_LEN 10005 #define SQL_MAXIMUM_IDENTIFIER_LENGTH SQL_MAX_IDENTIFIER_LEN #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_ALTER_TABLE */ #if (ODBCVER >= 0x0200) #define SQL_AT_ADD_COLUMN 0x00000001L #define SQL_AT_DROP_COLUMN 0x00000002L #endif /* ODBCVER >= 0x0300 */ #if (ODBCVER >= 0x0300) #define SQL_AT_ADD_CONSTRAINT 0x00000008L /* * The following bitmasks are ODBC extensions and defined in sqlext.h: * * #define SQL_AT_COLUMN_SINGLE 0x00000020L * #define SQL_AT_ADD_COLUMN_DEFAULT 0x00000040L * #define SQL_AT_ADD_COLUMN_COLLATION 0x00000080L * #define SQL_AT_SET_COLUMN_DEFAULT 0x00000100L * #define SQL_AT_DROP_COLUMN_DEFAULT 0x00000200L * #define SQL_AT_DROP_COLUMN_CASCADE 0x00000400L * #define SQL_AT_DROP_COLUMN_RESTRICT 0x00000800L * #define SQL_AT_ADD_TABLE_CONSTRAINT 0x00001000L * #define SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE 0x00002000L * #define SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT 0x00004000L * #define SQL_AT_CONSTRAINT_NAME_DEFINITION 0x00008000L * #define SQL_AT_CONSTRAINT_INITIALLY_DEFERRED 0x00010000L * #define SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE 0x00020000L * #define SQL_AT_CONSTRAINT_DEFERRABLE 0x00040000L * #define SQL_AT_CONSTRAINT_NON_DEFERRABLE 0x00080000L */ #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_ASYNC_MODE */ #if (ODBCVER >= 0x0300) #define SQL_AM_NONE 0 #define SQL_AM_CONNECTION 1 #define SQL_AM_STATEMENT 2 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_CURSOR_COMMIT_BEHAVIOR */ #define SQL_CB_DELETE 0 #define SQL_CB_CLOSE 1 #define SQL_CB_PRESERVE 2 /* * SQLGetInfo - SQL_FETCH_DIRECTION */ #define SQL_FD_FETCH_NEXT 0x00000001L #define SQL_FD_FETCH_FIRST 0x00000002L #define SQL_FD_FETCH_LAST 0x00000004L #define SQL_FD_FETCH_PRIOR 0x00000008L #define SQL_FD_FETCH_ABSOLUTE 0x00000010L #define SQL_FD_FETCH_RELATIVE 0x00000020L /* * SQLGetInfo - SQL_GETDATA_EXTENSIONS */ #define SQL_GD_ANY_COLUMN 0x00000001L #define SQL_GD_ANY_ORDER 0x00000002L /* * SQLGetInfo - SQL_IDENTIFIER_CASE */ #define SQL_IC_UPPER 1 #define SQL_IC_LOWER 2 #define SQL_IC_SENSITIVE 3 #define SQL_IC_MIXED 4 /* * SQLGetInfo - SQL_NULL_COLLATION */ #define SQL_NC_HIGH 0 #define SQL_NC_LOW 1 /* * SQLGetInfo - SQL_OJ_CAPABILITIES */ #if (ODBCVER >= 0x0201) #define SQL_OJ_LEFT 0x00000001L #define SQL_OJ_RIGHT 0x00000002L #define SQL_OJ_FULL 0x00000004L #define SQL_OJ_NESTED 0x00000008L #define SQL_OJ_NOT_ORDERED 0x00000010L #define SQL_OJ_INNER 0x00000020L #define SQL_OJ_ALL_COMPARISON_OPS 0x00000040L #endif /* * SQLGetInfo - SQL_SCROLL_CONCURRENCY */ #define SQL_SCCO_READ_ONLY 0x00000001L #define SQL_SCCO_LOCK 0x00000002L #define SQL_SCCO_OPT_ROWVER 0x00000004L #define SQL_SCCO_OPT_VALUES 0x00000008L /* * SQLGetInfo - SQL_TXN_CAPABLE */ #define SQL_TC_NONE 0 #define SQL_TC_DML 1 #define SQL_TC_ALL 2 #define SQL_TC_DDL_COMMIT 3 #define SQL_TC_DDL_IGNORE 4 /* * SQLGetInfo - SQL_TXN_ISOLATION_OPTION */ #define SQL_TXN_READ_UNCOMMITTED 0x00000001L #define SQL_TRANSACTION_READ_UNCOMMITTED SQL_TXN_READ_UNCOMMITTED #define SQL_TXN_READ_COMMITTED 0x00000002L #define SQL_TRANSACTION_READ_COMMITTED SQL_TXN_READ_COMMITTED #define SQL_TXN_REPEATABLE_READ 0x00000004L #define SQL_TRANSACTION_REPEATABLE_READ SQL_TXN_REPEATABLE_READ #define SQL_TXN_SERIALIZABLE 0x00000008L #define SQL_TRANSACTION_SERIALIZABLE SQL_TXN_SERIALIZABLE /* * SQLGetStmtAttr - statement attributes */ #if (ODBCVER >= 0x0300) #define SQL_ATTR_APP_ROW_DESC 10010 #define SQL_ATTR_APP_PARAM_DESC 10011 #define SQL_ATTR_IMP_ROW_DESC 10012 #define SQL_ATTR_IMP_PARAM_DESC 10013 #define SQL_ATTR_CURSOR_SCROLLABLE (-1) #define SQL_ATTR_CURSOR_SENSITIVITY (-2) #endif /* ODBCVER >= 0x0300 */ /* * SQLGetStmtAttr - SQL_ATTR_CURSOR_SCROLLABLE */ #if (ODBCVER >= 0x0300) #define SQL_NONSCROLLABLE 0 #define SQL_SCROLLABLE 1 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetStmtAttr - SQL_ATTR_CURSOR_SENSITIVITY */ #if (ODBCVER >= 0x0300) #define SQL_UNSPECIFIED 0 #define SQL_INSENSITIVE 1 #define SQL_SENSITIVE 2 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetTypeInfo - SEARCHABLE */ #if (ODBCVER >= 0x0300) #define SQL_PRED_NONE 0 #define SQL_PRED_CHAR 1 #define SQL_PRED_BASIC 2 #endif /* ODBCVER >= 0x0300 */ /* * SQLSpecialColumns - Column scopes */ #define SQL_SCOPE_CURROW 0 #define SQL_SCOPE_TRANSACTION 1 #define SQL_SCOPE_SESSION 2 /* * SQLSpecialColumns - PSEUDO_COLUMN */ #define SQL_PC_UNKNOWN 0 #if (ODBCVER >= 0x0300) #define SQL_PC_NON_PSEUDO 1 #endif /* ODBCVER >= 0x0300 */ #define SQL_PC_PSEUDO 2 /* * SQLSpecialColumns - IdentifierType */ #if (ODBCVER >= 0x0300) #define SQL_ROW_IDENTIFIER 1 #endif /* ODBCVER >= 0x0300 */ /* * SQLStatistics - fUnique */ #define SQL_INDEX_UNIQUE 0 #define SQL_INDEX_ALL 1 /* * SQLStatistics - TYPE */ #define SQL_INDEX_CLUSTERED 1 #define SQL_INDEX_HASHED 2 #define SQL_INDEX_OTHER 3 /* * SQLTransact/SQLEndTran */ #define SQL_COMMIT 0 #define SQL_ROLLBACK 1 /* * Function Prototypes */ SQLRETURN SQL_API SQLAllocConnect ( SQLHENV EnvironmentHandle, SQLHDBC * ConnectionHandle); SQLRETURN SQL_API SQLAllocEnv ( SQLHENV * EnvironmentHandle); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLAllocHandle ( SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE * OutputHandle); #endif /* ODBCVER >= 0x0300 */ SQLRETURN SQL_API SQLAllocStmt ( SQLHDBC ConnectionHandle, SQLHSTMT * StatementHandle); SQLRETURN SQL_API SQLBindCol ( SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLLEN BufferLength, SQLLEN * StrLen_or_Ind); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLBindParam ( SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLULEN LengthPrecision, SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue, SQLLEN * StrLen_or_Ind); #endif SQLRETURN SQL_API SQLCancel ( SQLHSTMT StatementHandle); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLCloseCursor ( SQLHSTMT StatementHandle); /* * Using SQLLEN * instead of SQLPOINTER for NumericAttribute, * makes the prototype the same as SQLColAttributes (deprecated) * and clearer for 64bit ports */ SQLRETURN SQL_API SQLColAttribute ( SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength, SQLLEN * NumericAttribute); #endif SQLRETURN SQL_API SQLColumns ( SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLCHAR * ColumnName, SQLSMALLINT NameLength4); SQLRETURN SQL_API SQLConnect ( SQLHDBC ConnectionHandle, SQLCHAR * ServerName, SQLSMALLINT NameLength1, SQLCHAR * UserName, SQLSMALLINT NameLength2, SQLCHAR * Authentication, SQLSMALLINT NameLength3); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLCopyDesc ( SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle); #endif SQLRETURN SQL_API SQLDataSources ( SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLCHAR * ServerName, SQLSMALLINT BufferLength1, SQLSMALLINT * NameLength1, SQLCHAR * Description, SQLSMALLINT BufferLength2, SQLSMALLINT * NameLength2); SQLRETURN SQL_API SQLDescribeCol ( SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLCHAR * ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLength, SQLSMALLINT * DataType, SQLULEN * ColumnSize, SQLSMALLINT * DecimalDigits, SQLSMALLINT * Nullable); SQLRETURN SQL_API SQLDisconnect ( SQLHDBC ConnectionHandle); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLEndTran ( SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType); #endif SQLRETURN SQL_API SQLError ( SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle, SQLCHAR * Sqlstate, SQLINTEGER * NativeError, SQLCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLength); SQLRETURN SQL_API SQLExecDirect ( SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength); SQLRETURN SQL_API SQLExecute ( SQLHSTMT StatementHandle); SQLRETURN SQL_API SQLFetch ( SQLHSTMT StatementHandle); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLFetchScroll ( SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLLEN FetchOffset); #endif SQLRETURN SQL_API SQLFreeConnect ( SQLHDBC ConnectionHandle); SQLRETURN SQL_API SQLFreeEnv ( SQLHENV EnvironmentHandle); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLFreeHandle ( SQLSMALLINT HandleType, SQLHANDLE Handle); #endif SQLRETURN SQL_API SQLFreeStmt ( SQLHSTMT StatementHandle, SQLUSMALLINT Option); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLGetConnectAttr ( SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength); #endif SQLRETURN SQL_API SQLGetConnectOption ( SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value); SQLRETURN SQL_API SQLGetCursorName ( SQLHSTMT StatementHandle, SQLCHAR * CursorName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLength); SQLRETURN SQL_API SQLGetData ( SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLLEN BufferLength, SQLLEN * StrLen_or_Ind); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLGetDescField ( SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength); SQLRETURN SQL_API SQLGetDescRec ( SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLCHAR * Name, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength, SQLSMALLINT * Type, SQLSMALLINT * SubType, SQLLEN * Length, SQLSMALLINT * Precision, SQLSMALLINT * Scale, SQLSMALLINT * Nullable); SQLRETURN SQL_API SQLGetDiagField ( SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER DiagInfo, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength); SQLRETURN SQL_API SQLGetDiagRec ( SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLCHAR * Sqlstate, SQLINTEGER * NativeError, SQLCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLength); SQLRETURN SQL_API SQLGetEnvAttr ( SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength); #endif /* ODBCVER >= 0x0300 */ SQLRETURN SQL_API SQLGetFunctions ( SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId, SQLUSMALLINT * Supported); SQLRETURN SQL_API SQLGetInfo ( SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQLPOINTER InfoValue, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLGetStmtAttr ( SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength); #endif /* ODBCVER >= 0x0300 */ SQLRETURN SQL_API SQLGetStmtOption ( SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLPOINTER Value); SQLRETURN SQL_API SQLGetTypeInfo ( SQLHSTMT StatementHandle, SQLSMALLINT DataType); SQLRETURN SQL_API SQLNumResultCols ( SQLHSTMT StatementHandle, SQLSMALLINT * ColumnCount); SQLRETURN SQL_API SQLParamData ( SQLHSTMT StatementHandle, SQLPOINTER * Value); SQLRETURN SQL_API SQLPrepare ( SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength); SQLRETURN SQL_API SQLPutData ( SQLHSTMT StatementHandle, SQLPOINTER Data, SQLLEN StrLen_or_Ind); SQLRETURN SQL_API SQLRowCount ( SQLHSTMT StatementHandle, SQLLEN * RowCount); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLSetConnectAttr ( SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength); #endif /* ODBCVER >= 0x0300 */ SQLRETURN SQL_API SQLSetConnectOption ( SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLULEN Value); SQLRETURN SQL_API SQLSetCursorName ( SQLHSTMT StatementHandle, SQLCHAR * CursorName, SQLSMALLINT NameLength); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLSetDescField ( SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength); SQLRETURN SQL_API SQLSetDescRec ( SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT Type, SQLSMALLINT SubType, SQLLEN Length, SQLSMALLINT Precision, SQLSMALLINT Scale, SQLPOINTER Data, SQLLEN * StringLength, SQLLEN * Indicator); SQLRETURN SQL_API SQLSetEnvAttr ( SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength); #endif /* ODBCVER >= 0x0300 */ #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLSetStmtAttr ( SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength); #endif SQLRETURN SQL_API SQLSetStmtOption ( SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLULEN Value); SQLRETURN SQL_API SQLSpecialColumns ( SQLHSTMT StatementHandle, SQLUSMALLINT IdentifierType, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLUSMALLINT Scope, SQLUSMALLINT Nullable); SQLRETURN SQL_API SQLStatistics ( SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLUSMALLINT Unique, SQLUSMALLINT Reserved); SQLRETURN SQL_API SQLTables ( SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLCHAR * TableType, SQLSMALLINT NameLength4); SQLRETURN SQL_API SQLTransact ( SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLUSMALLINT CompletionType); /* * Depreciated ODBC 1.0 function - Use SQLBindParameter */ SQLRETURN SQL_API SQLSetParam ( SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLULEN LengthPrecision, SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue, SQLLEN * StrLen_or_Ind); #ifdef __cplusplus } #endif #endif /* _SQL_H */ libiodbc-3.52.9/include/iodbcinst.h0000644000076400007640000000671212323210535014066 00000000000000/* * iodbcinst.h * * $Id$ * * iODBC Installer defines * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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 is deprecated in favor of odbcinst.h and will be removed * sometime in the future. Please recode your applications to use * the standard names sql.h, sqlext.h, sqltypes.h and odbcinst.h. */ #include libiodbc-3.52.9/include/isql.h0000644000076400007640000000673212323210535013062 00000000000000/* * isql.h * * $Id$ * * iODBC defines * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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 is deprecated in favor of sql.h and will be removed * sometime in the future. Please recode your applications to use * the standard names sql.h, sqlext.h and sqltypes.h. */ #include libiodbc-3.52.9/include/iodbcext.h0000644000076400007640000003621312323210535013710 00000000000000/* * iodbcext.h * * $Id$ * * iODBC extensions and changes to the SAG specifications * for third party drivers * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. * */ #ifndef _IODBCEXT_H #define _IODBCEXT_H /* * OpenLink API Extensions */ #define SQL_GETLASTROWID 1048L #define SQL_GETLASTSERIAL 1049L #define SQL_CONCUR_VAL_EXTENT 1050L #define SQL_APPLICATION_NAME 1051L /* connect option */ #define SQL_PARSE_FWD_ONLY_REQ 1052L #define SQL_DESC_KEY 1053L #define SQL_APPEND_KEYS 1054L #define SQL_DESC_EXPR 1055L #define SQL_ATTR_WCHAR_SIZE 1056L #define SQL_COLUMN_ROWVER SQL_DESC_ROWVER #define SQL_COLUMN_KEY SQL_DESC_KEY #define SQL_COLUMN_EXPR SQL_DESC_EXPR #define SQL_ATTR_PARSE_FWD_ONLY_REQ SQL_PARSE_FWD_ONLY_REQ #define SQL_ATTR_APPEND_KEYS SQL_APPEND_KEYS /* * Microsoft extensions for SQLServer */ /* * SQLSetConnectOption/SQLSetStmtOption driver specific defines. * Microsoft has 1200 thru 1249 reserved for Microsoft SQL Server * driver usage. */ #define SQL_ATTR_ENLIST_IN_DTC 1207 #define SQL_ATTR_ENLIST_IN_XA 1208 #define SQL_ATTR_CONNECTION_DEAD 1209 /* GetConnectAttr only */ #define SQL_COPT_SS_BASE 1200 #define SQL_COPT_SS_REMOTE_PWD (SQL_COPT_SS_BASE+1) /* dbrpwset SQLSetConnectOption only */ #define SQL_COPT_SS_USE_PROC_FOR_PREP (SQL_COPT_SS_BASE+2) /* Use create proc for SQLPrepare */ #define SQL_COPT_SS_INTEGRATED_SECURITY (SQL_COPT_SS_BASE+3) /* Force integrated security on login */ #define SQL_COPT_SS_PRESERVE_CURSORS (SQL_COPT_SS_BASE+4) /* Preserve server cursors after SQLTransact */ #define SQL_COPT_SS_USER_DATA (SQL_COPT_SS_BASE+5) /* dbgetuserdata/dbsetuserdata */ #define SQL_COPT_SS_ANSI_OEM (SQL_COPT_SS_BASE+6) /* dbsetopt/DBANSItoOEM/DBOEMtoANSI */ #define SQL_COPT_SS_ENLIST_IN_DTC SQL_ATTR_ENLIST_IN_DTC /* Enlist in a DTC transaction */ #define SQL_COPT_SS_ENLIST_IN_XA SQL_ATTR_ENLIST_IN_XA /* Enlist in a XA transaction */ #define SQL_COPT_SS_CONNECTION_DEAD SQL_ATTR_CONNECTION_DEAD /* dbdead SQLGetConnectOption only */ #define SQL_COPT_SS_FALLBACK_CONNECT (SQL_COPT_SS_BASE+10) /* Enables FallBack connections */ #define SQL_COPT_SS_PERF_DATA (SQL_COPT_SS_BASE+11) /* Used to access SQL Server ODBC driver performance data */ #define SQL_COPT_SS_PERF_DATA_LOG (SQL_COPT_SS_BASE+12) /* Used to set the logfile name for the Performance data */ #define SQL_COPT_SS_PERF_QUERY_INTERVAL (SQL_COPT_SS_BASE+13) /* Used to set the query logging threshold in milliseconds. */ #define SQL_COPT_SS_PERF_QUERY_LOG (SQL_COPT_SS_BASE+14) /* Used to set the logfile name for saving queries. */ #define SQL_COPT_SS_PERF_QUERY (SQL_COPT_SS_BASE+15) /* Used to start and stop query logging. */ #define SQL_COPT_SS_PERF_DATA_LOG_NOW (SQL_COPT_SS_BASE+16) /* Used to make a statistics log entry to disk. */ #define SQL_COPT_SS_QUOTED_IDENT (SQL_COPT_SS_BASE+17) /* Enable/Disable Quoted Identifiers */ #define SQL_COPT_SS_ANSI_NPW (SQL_COPT_SS_BASE+18) /* Enable/Disable ANSI NULL, Padding and Warnings */ #define SQL_COPT_SS_BCP (SQL_COPT_SS_BASE+19) /* Allow BCP usage on connection */ #define SQL_COPT_SS_MAX_USED SQL_COPT_SS_BCP #define SQL_SOPT_SS_BASE 1225 #define SQL_SOPT_SS_TEXTPTR_LOGGING (SQL_SOPT_SS_BASE+0) /* Text pointer logging */ #define SQL_SOPT_SS_CURRENT_COMMAND (SQL_SOPT_SS_BASE+1) /* dbcurcmd SQLGetStmtOption only */ #define SQL_SOPT_SS_HIDDEN_COLUMNS (SQL_SOPT_SS_BASE+2) /* Expose FOR BROWSE hidden columns */ #define SQL_SOPT_SS_NOBROWSETABLE (SQL_SOPT_SS_BASE+3) /* Set NOBROWSETABLE option */ #define SQL_SOPT_SS_REGIONALIZE (SQL_SOPT_SS_BASE+4) /* Regionalize output character conversions */ #define SQL_SOPT_SS_MAX_USED SQL_SOPT_SS_REGIONALIZE /* Defines for use with SQL_COPT_SS_USE_PROC_FOR_PREP */ #define SQL_UP_OFF 0L /*Procedures won't be used for prepare*/ #define SQL_UP_ON 1L /*Procedures will be used for prepare*/ #define SQL_UP_ON_DROP 2L /*Temp procedures will be explicitly dropped*/ #define SQL_UP_DEFAULT SQL_UP_ON /* Defines for use with SQL_COPT_SS_INTEGRATED_SECURITY - Pre-Connect Option only */ #define SQL_IS_OFF 0L /* Integrated security isn't used */ #define SQL_IS_ON 1L /* Integrated security is used */ #define SQL_IS_DEFAULT SQL_IS_OFF /* Defines for use with SQL_COPT_SS_PRESERVE_CURSORS */ #define SQL_PC_OFF 0L /* Cursors are closed on SQLTransact */ #define SQL_PC_ON 1L /* Cursors remain open on SQLTransact */ #define SQL_PC_DEFAULT SQL_PC_OFF /* Defines for use with SQL_COPT_SS_USER_DATA */ #define SQL_UD_NOTSET NULL /* No user data pointer set */ /* Defines for use with SQL_COPT_SS_ANSI_OEM */ #define SQL_AO_OFF 0L /* ANSI/OEM translation is not performed */ #define SQL_AO_ON 1L /* ANSI/OEM translation is performed */ #define SQL_AO_DEFAULT SQL_AO_OFF /* Default unless DSN OEM/ANSI checkbox is checked */ /* Defines for use with SQL_COPT_SS_FALLBACK_CONNECT */ #define SQL_FB_OFF 0L /* FallBack connections are disabled */ #define SQL_FB_ON 1L /* FallBack connections are enabled */ #define SQL_FB_DEFAULT SQL_FB_OFF /* Defines for use with SQL_COPT_SS_BCP */ #define SQL_BCP_OFF 0L /* BCP is not allowed on connection */ #define SQL_BCP_ON 1L /* BCP is allowed on connection */ #define SQL_BCP_DEFAULT SQL_BCP_OFF /* Defines for use with SQL_COPT_SS_QUOTED_IDENT - Pre-Connect Option only */ #define SQL_QI_OFF 0L /* Quoted identifiers are not supported */ #define SQL_QI_ON 1L /* Quoted identifiers are supported */ #define SQL_QI_DEFAULT SQL_QI_ON /* Defines for use with SQL_COPT_SS_ANSI_NPW - Pre-Connect Option only */ #define SQL_AD_OFF 0L /* ANSI NULLs, Padding and Warnings are not supported */ #define SQL_AD_ON 1L /* ANSI NULLs, Padding and Warnings are supported */ #define SQL_AD_DEFAULT SQL_AD_ON /* Defines for use with SQL_SOPT_SS_TEXTPTR_LOGGING */ #define SQL_TL_OFF 0L /* No logging on text pointer ops */ #define SQL_TL_ON 1L /* Logging occurs on text pointer ops */ #define SQL_TL_DEFAULT SQL_TL_ON /* Defines for use with SQL_SOPT_SS_HIDDEN_COLUMNS */ #define SQL_HC_OFF 0L /* FOR BROWSE columns are hidden */ #define SQL_HC_ON 1L /* FOR BROWSE columns are exposed */ #define SQL_HC_DEFAULT SQL_HC_OFF /* Defines for use with SQL_SOPT_SS_NOBROWSETABLE */ #define SQL_NB_OFF 0L /* NO_BROWSETABLE is off */ #define SQL_NB_ON 1L /* NO_BROWSETABLE is on */ #define SQL_NB_DEFAULT SQL_NB_OFF /* Defines for use with SQL_SOPT_SS_REGIONALIZE */ #define SQL_RE_OFF 0L /* No regionalization occurs on output character conversions */ #define SQL_RE_ON 1L /* Regionalization occurs on output character conversions */ #define SQL_RE_DEFAULT SQL_RE_OFF /* * IBM extensions for DB2 */ /* Options for SQLGetStmtOption/SQLSetStmtOption extensions */ #define SQL_CURSOR_HOLD 1250 #define SQL_ATTR_CURSOR_HOLD 1250 #define SQL_NODESCRIBE_OUTPUT 1251 #define SQL_ATTR_NODESCRIBE_OUTPUT 1251 #define SQL_NODESCRIBE_INPUT 1264 #define SQL_ATTR_NODESCRIBE_INPUT 1264 #define SQL_NODESCRIBE SQL_NODESCRIBE_OUTPUT #define SQL_ATTR_NODESCRIBE SQL_NODESCRIBE_OUTPUT #define SQL_CLOSE_BEHAVIOR 1257 #define SQL_ATTR_CLOSE_BEHAVIOR 1257 #define SQL_ATTR_CLOSEOPEN 1265 #define SQL_ATTR_CURRENT_PACKAGE_SET 1276 #define SQL_ATTR_DEFERRED_PREPARE 1277 #define SQL_ATTR_EARLYCLOSE 1268 #define SQL_ATTR_PROCESSCTL 1278 /* SQL_CLOSE_BEHAVIOR values. */ #define SQL_CC_NO_RELEASE 0 #define SQL_CC_RELEASE 1 #define SQL_CC_DEFAULT SQL_CC_NO_RELEASE /* SQL_ATTR_DEFERRED_PREPARE values */ #define SQL_DEFERRED_PREPARE_ON 1 #define SQL_DEFERRED_PREPARE_OFF 0 #define SQL_DEFERRED_PREPARE_DEFAULT SQL_DEFERRED_PREPARE_ON /* SQL_ATTR_EARLYCLOSE values */ #define SQL_EARLYCLOSE_ON 1 #define SQL_EARLYCLOSE_OFF 0 #define SQL_EARLYCLOSE_DEFAULT SQL_EARLYCLOSE_ON /* SQL_ATTR_PROCESSCTL masks */ #define SQL_PROCESSCTL_NOTHREAD 0x00000001L #define SQL_PROCESSCTL_NOFORK 0x00000002L /* Options for SQL_CURSOR_HOLD */ #define SQL_CURSOR_HOLD_ON 1 #define SQL_CURSOR_HOLD_OFF 0 #define SQL_CURSOR_HOLD_DEFAULT SQL_CURSOR_HOLD_ON /* Options for SQL_NODESCRIBE_INPUT/SQL_NODESCRIBE_OUTPUT */ #define SQL_NODESCRIBE_ON 1 #define SQL_NODESCRIBE_OFF 0 #define SQL_NODESCRIBE_DEFAULT SQL_NODESCRIBE_OFF /* Options for SQLGetConnectOption/SQLSetConnectOption extensions */ #define SQL_WCHARTYPE 1252 #define SQL_LONGDATA_COMPAT 1253 #define SQL_CURRENT_SCHEMA 1254 #define SQL_DB2EXPLAIN 1258 #define SQL_DB2ESTIMATE 1259 #define SQL_PARAMOPT_ATOMIC 1260 #define SQL_STMTTXN_ISOLATION 1261 #define SQL_MAXCONN 1262 #define SQL_ATTR_WCHARTYPE SQL_WCHARTYPE #define SQL_ATTR_LONGDATA_COMPAT SQL_LONGDATA_COMPAT #define SQL_ATTR_CURRENT_SCHEMA SQL_CURRENT_SCHEMA #define SQL_ATTR_DB2EXPLAIN SQL_DB2EXPLAIN #define SQL_ATTR_DB2ESTIMATE SQL_DB2ESTIMATE #define SQL_ATTR_PARAMOPT_ATOMIC SQL_PARAMOPT_ATOMIC #define SQL_ATTR_STMTTXN_ISOLATION SQL_STMTTXN_ISOLATION #define SQL_ATTR_MAXCONN SQL_MAXCONN /* Options for SQLSetConnectOption, SQLSetEnvAttr */ #define SQL_CONNECTTYPE 1255 #define SQL_SYNC_POINT 1256 #define SQL_MINMEMORY_USAGE 1263 #define SQL_CONN_CONTEXT 1269 #define SQL_ATTR_INHERIT_NULL_CONNECT 1270 #define SQL_ATTR_FORCE_CONVERSION_ON_CLIENT 1275 #define SQL_ATTR_CONNECTTYPE SQL_CONNECTTYPE #define SQL_ATTR_SYNC_POINT SQL_SYNC_POINT #define SQL_ATTR_MINMEMORY_USAGE SQL_MINMEMORY_USAGE #define SQL_ATTR_CONN_CONTEXT SQL_CONN_CONTEXT /* Options for SQL_LONGDATA_COMPAT */ #define SQL_LD_COMPAT_YES 1 #define SQL_LD_COMPAT_NO 0 #define SQL_LD_COMPAT_DEFAULT SQL_LD_COMPAT_NO /* Options for SQL_PARAMOPT_ATOMIC */ #define SQL_ATOMIC_YES 1 #define SQL_ATOMIC_NO 0 #define SQL_ATOMIC_DEFAULT SQL_ATOMIC_YES /* Options for SQL_CONNECT_TYPE */ #define SQL_CONCURRENT_TRANS 1 #define SQL_COORDINATED_TRANS 2 #define SQL_CONNECTTYPE_DEFAULT SQL_CONCURRENT_TRANS /* Options for SQL_SYNCPOINT */ #define SQL_ONEPHASE 1 #define SQL_TWOPHASE 2 #define SQL_SYNCPOINT_DEFAULT SQL_ONEPHASE /* Options for SQL_DB2ESTIMATE */ #define SQL_DB2ESTIMATE_ON 1 #define SQL_DB2ESTIMATE_OFF 0 #define SQL_DB2ESTIMATE_DEFAULT SQL_DB2ESTIMATE_OFF /* Options for SQL_DB2EXPLAIN */ #define SQL_DB2EXPLAIN_OFF 0x00000000L #define SQL_DB2EXPLAIN_SNAPSHOT_ON 0x00000001L #define SQL_DB2EXPLAIN_MODE_ON 0x00000002L #define SQL_DB2EXPLAIN_SNAPSHOT_MODE_ON SQL_DB2EXPLAIN_SNAPSHOT_ON+SQL_DB2EXPLAIN_MODE_ON #define SQL_DB2EXPLAIN_ON SQL_DB2EXPLAIN_SNAPSHOT_ON #define SQL_DB2EXPLAIN_DEFAULT SQL_DB2EXPLAIN_OFF /* Options for SQL_WCHARTYPE * Note that you can only specify SQL_WCHARTYPE_CONVERT if you have an * external compile flag SQL_WCHART_CONVERT defined */ #ifdef SQL_WCHART_CONVERT #define SQL_WCHARTYPE_CONVERT 1 #endif #define SQL_WCHARTYPE_NOCONVERT 0 #define SQL_WCHARTYPE_DEFAULT SQL_WCHARTYPE_NOCONVERT /******************* Virtuoso ODBC Extensions *******************/ /* * ODBC extensions for SQLGetDescField */ #define SQL_DESC_COL_DV_TYPE 1057L #define SQL_DESC_COL_DT_DT_TYPE 1058L #define SQL_DESC_COL_LITERAL_ATTR 1059L #define SQL_DESC_COL_BOX_FLAGS 1060L #define SQL_DESC_COL_LITERAL_LANG 1061L #define SQL_DESC_COL_LITERAL_TYPE 1062L /* * Virtuoso - ODBC SQL_DESC_COL_DV_TYPE */ #define VIRTUOSO_DV_DATE 129 #define VIRTUOSO_DV_DATETIME 211 #define VIRTUOSO_DV_DOUBLE_FLOAT 191 #define VIRTUOSO_DV_IRI_ID 243 #define VIRTUOSO_DV_LONG_INT 189 #define VIRTUOSO_DV_NUMERIC 219 #define VIRTUOSO_DV_RDF 246 #define VIRTUOSO_DV_SINGLE_FLOAT 190 #define VIRTUOSO_DV_STRING 182 #define VIRTUOSO_DV_TIME 210 #define VIRTUOSO_DV_TIMESTAMP 128 #define VIRTUOSO_DV_TIMESTAMP_OBJ 208 /* * Virtuoso - ODBC SQL_DESC_COL_DT_DT_TYPE */ #define VIRTUOSO_DT_TYPE_DATETIME 1 #define VIRTUOSO_DT_TYPE_DATE 2 #define VIRTUOSO_DT_TYPE_TIME 3 #endif /* _IODBCEXT_H */ libiodbc-3.52.9/include/Makefile.am0000644000076400007640000000646212323210535013775 00000000000000# # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # include_HEADERS = \ isql.h \ isqlext.h \ isqltypes.h \ sql.h \ sqlext.h \ sqlucode.h \ sqltypes.h \ odbcinst.h \ iodbcunix.h \ iodbcinst.h \ iodbcext.h noinst_HEADERS = \ iodbc.h libiodbc-3.52.9/include/sqlext.h0000644000076400007640000021200512323210535013422 00000000000000/* * sqlext.h * * $Id$ * * ODBC defines (ext) * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _SQLEXT_H #define _SQLEXT_H #ifndef _SQL_H #include #endif #ifdef __cplusplus extern "C" { #endif /* * Useful Constants */ #define SQL_SPEC_MAJOR 3 #define SQL_SPEC_MINOR 52 #define SQL_SPEC_STRING "03.52" #define SQL_SQLSTATE_SIZE 5 #define SQL_MAX_DSN_LENGTH 32 #define SQL_MAX_OPTION_STRING_LENGTH 256 /* * Handle types */ #if (ODBCVER >= 0x0300) #define SQL_HANDLE_SENV 5 #endif /* ODBCVER >= 0x0300 */ /* * Function return codes */ #if (ODBCVER < 0x0300) #define SQL_NO_DATA_FOUND 100 #else #define SQL_NO_DATA_FOUND SQL_NO_DATA #endif /* ODBCVER < 0x0300 */ /* * Special length values for attributes */ #if (ODBCVER >= 0x0300) #define SQL_IS_POINTER (-4) #define SQL_IS_UINTEGER (-5) #define SQL_IS_INTEGER (-6) #define SQL_IS_USMALLINT (-7) #define SQL_IS_SMALLINT (-8) #endif /* ODBCVER >= 0x0300 */ /* * SQL extended datatypes */ #define SQL_DATE 9 #if (ODBCVER >= 0x0300) #define SQL_INTERVAL 10 #endif /* ODBCVER >= 0x0300 */ #define SQL_TIME 10 #define SQL_TIMESTAMP 11 #define SQL_LONGVARCHAR (-1) #define SQL_BINARY (-2) #define SQL_VARBINARY (-3) #define SQL_LONGVARBINARY (-4) #define SQL_BIGINT (-5) #define SQL_TINYINT (-6) #define SQL_BIT (-7) #if (ODBCVER >= 0x0350) #define SQL_GUID (-11) #endif /* ODBCVER >= 0x0350 */ /* * SQL Interval datatypes */ #if (ODBCVER >= 0x0300) #define SQL_CODE_YEAR 1 #define SQL_CODE_MONTH 2 #define SQL_CODE_DAY 3 #define SQL_CODE_HOUR 4 #define SQL_CODE_MINUTE 5 #define SQL_CODE_SECOND 6 #define SQL_CODE_YEAR_TO_MONTH 7 #define SQL_CODE_DAY_TO_HOUR 8 #define SQL_CODE_DAY_TO_MINUTE 9 #define SQL_CODE_DAY_TO_SECOND 10 #define SQL_CODE_HOUR_TO_MINUTE 11 #define SQL_CODE_HOUR_TO_SECOND 12 #define SQL_CODE_MINUTE_TO_SECOND 13 #define SQL_INTERVAL_YEAR (100 + SQL_CODE_YEAR) #define SQL_INTERVAL_MONTH (100 + SQL_CODE_MONTH) #define SQL_INTERVAL_DAY (100 + SQL_CODE_DAY) #define SQL_INTERVAL_HOUR (100 + SQL_CODE_HOUR) #define SQL_INTERVAL_MINUTE (100 + SQL_CODE_MINUTE) #define SQL_INTERVAL_SECOND (100 + SQL_CODE_SECOND) #define SQL_INTERVAL_YEAR_TO_MONTH (100 + SQL_CODE_YEAR_TO_MONTH) #define SQL_INTERVAL_DAY_TO_HOUR (100 + SQL_CODE_DAY_TO_HOUR) #define SQL_INTERVAL_DAY_TO_MINUTE (100 + SQL_CODE_DAY_TO_MINUTE) #define SQL_INTERVAL_DAY_TO_SECOND (100 + SQL_CODE_DAY_TO_SECOND) #define SQL_INTERVAL_HOUR_TO_MINUTE (100 + SQL_CODE_HOUR_TO_MINUTE) #define SQL_INTERVAL_HOUR_TO_SECOND (100 + SQL_CODE_HOUR_TO_SECOND) #define SQL_INTERVAL_MINUTE_TO_SECOND (100 + SQL_CODE_MINUTE_TO_SECOND) #else #define SQL_INTERVAL_YEAR (-80) #define SQL_INTERVAL_MONTH (-81) #define SQL_INTERVAL_YEAR_TO_MONTH (-82) #define SQL_INTERVAL_DAY (-83) #define SQL_INTERVAL_HOUR (-84) #define SQL_INTERVAL_MINUTE (-85) #define SQL_INTERVAL_SECOND (-86) #define SQL_INTERVAL_DAY_TO_HOUR (-87) #define SQL_INTERVAL_DAY_TO_MINUTE (-88) #define SQL_INTERVAL_DAY_TO_SECOND (-89) #define SQL_INTERVAL_HOUR_TO_MINUTE (-90) #define SQL_INTERVAL_HOUR_TO_SECOND (-91) #define SQL_INTERVAL_MINUTE_TO_SECOND (-92) #endif /* ODBCVER >= 0x0300 */ /* * SQL unicode data types */ #if (ODBCVER <= 0x0300) /* These definitions are historical and obsolete */ #define SQL_UNICODE (-95) #define SQL_UNICODE_VARCHAR (-96) #define SQL_UNICODE_LONGVARCHAR (-97) #define SQL_UNICODE_CHAR SQL_UNICODE #else #define SQL_UNICODE SQL_WCHAR #define SQL_UNICODE_VARCHAR SQL_WVARCHAR #define SQL_UNICODE_LONGVARCHAR SQL_WLONGVARCHAR #define SQL_UNICODE_CHAR SQL_WCHAR #endif /* ODBCVER >= 0x0300 */ #if (ODBCVER < 0x0300) #define SQL_TYPE_DRIVER_START SQL_INTERVAL_YEAR #define SQL_TYPE_DRIVER_END SQL_UNICODE_LONGVARCHAR #endif /* ODBCVER < 0x0300 */ #define SQL_SIGNED_OFFSET (-20) #define SQL_UNSIGNED_OFFSET (-22) /* * C datatype to SQL datatype mapping */ #define SQL_C_CHAR SQL_CHAR #define SQL_C_LONG SQL_INTEGER #define SQL_C_SHORT SQL_SMALLINT #define SQL_C_FLOAT SQL_REAL #define SQL_C_DOUBLE SQL_DOUBLE #if (ODBCVER >= 0x0300) #define SQL_C_NUMERIC SQL_NUMERIC #endif /* ODBCVER >= 0x0300 */ #define SQL_C_DEFAULT 99 #define SQL_C_DATE SQL_DATE #define SQL_C_TIME SQL_TIME #define SQL_C_TIMESTAMP SQL_TIMESTAMP #define SQL_C_BINARY SQL_BINARY #define SQL_C_BIT SQL_BIT #define SQL_C_TINYINT SQL_TINYINT #define SQL_C_SLONG (SQL_C_LONG+SQL_SIGNED_OFFSET) #define SQL_C_SSHORT (SQL_C_SHORT+SQL_SIGNED_OFFSET) #define SQL_C_STINYINT (SQL_TINYINT+SQL_SIGNED_OFFSET) #define SQL_C_ULONG (SQL_C_LONG+SQL_UNSIGNED_OFFSET) #define SQL_C_USHORT (SQL_C_SHORT+SQL_UNSIGNED_OFFSET) #define SQL_C_UTINYINT (SQL_TINYINT+SQL_UNSIGNED_OFFSET) #if defined(_WIN64) #define SQL_C_BOOKMARK SQL_C_UBIGINT #else #define SQL_C_BOOKMARK SQL_C_ULONG #endif #if (ODBCVER >= 0x0300) #define SQL_C_TYPE_DATE SQL_TYPE_DATE #define SQL_C_TYPE_TIME SQL_TYPE_TIME #define SQL_C_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP #define SQL_C_INTERVAL_YEAR SQL_INTERVAL_YEAR #define SQL_C_INTERVAL_MONTH SQL_INTERVAL_MONTH #define SQL_C_INTERVAL_DAY SQL_INTERVAL_DAY #define SQL_C_INTERVAL_HOUR SQL_INTERVAL_HOUR #define SQL_C_INTERVAL_MINUTE SQL_INTERVAL_MINUTE #define SQL_C_INTERVAL_SECOND SQL_INTERVAL_SECOND #define SQL_C_INTERVAL_YEAR_TO_MONTH SQL_INTERVAL_YEAR_TO_MONTH #define SQL_C_INTERVAL_DAY_TO_HOUR SQL_INTERVAL_DAY_TO_HOUR #define SQL_C_INTERVAL_DAY_TO_MINUTE SQL_INTERVAL_DAY_TO_MINUTE #define SQL_C_INTERVAL_DAY_TO_SECOND SQL_INTERVAL_DAY_TO_SECOND #define SQL_C_INTERVAL_HOUR_TO_MINUTE SQL_INTERVAL_HOUR_TO_MINUTE #define SQL_C_INTERVAL_HOUR_TO_SECOND SQL_INTERVAL_HOUR_TO_SECOND #define SQL_C_INTERVAL_MINUTE_TO_SECOND SQL_INTERVAL_MINUTE_TO_SECOND #define SQL_C_SBIGINT (SQL_BIGINT+SQL_SIGNED_OFFSET) #define SQL_C_UBIGINT (SQL_BIGINT+SQL_UNSIGNED_OFFSET) #define SQL_C_VARBOOKMARK SQL_C_BINARY #endif /* ODBCVER >= 0x0300 */ #if (ODBCVER >= 0x0350) #define SQL_C_GUID SQL_GUID #endif #define SQL_TYPE_NULL 0 #if (ODBCVER < 0x0300) #define SQL_TYPE_MIN SQL_BIT #define SQL_TYPE_MAX SQL_VARCHAR #endif /* ODBCVER < 0x0300 */ /* * ---------------------------------------------------------------------- * Level 1 Functions * ---------------------------------------------------------------------- */ /* * SQLBindParameter */ #define SQL_DEFAULT_PARAM (-5) #define SQL_IGNORE (-6) #if (ODBCVER >= 0x0300) #define SQL_COLUMN_IGNORE SQL_IGNORE #endif /* ODBCVER >= 0x0300 */ #define SQL_LEN_DATA_AT_EXEC_OFFSET (-100) #define SQL_LEN_DATA_AT_EXEC(length) (-(length)+SQL_LEN_DATA_AT_EXEC_OFFSET) /* * binary length for driver specific attributes */ #define SQL_LEN_BINARY_ATTR_OFFSET (-100) #define SQL_LEN_BINARY_ATTR(length) (-(length)+SQL_LEN_BINARY_ATTR_OFFSET) /* * SQLColAttributes - ODBC 2.x defines */ #define SQL_COLUMN_COUNT 0 #define SQL_COLUMN_NAME 1 #define SQL_COLUMN_TYPE 2 #define SQL_COLUMN_LENGTH 3 #define SQL_COLUMN_PRECISION 4 #define SQL_COLUMN_SCALE 5 #define SQL_COLUMN_DISPLAY_SIZE 6 #define SQL_COLUMN_NULLABLE 7 #define SQL_COLUMN_UNSIGNED 8 #define SQL_COLUMN_MONEY 9 #define SQL_COLUMN_UPDATABLE 10 #define SQL_COLUMN_AUTO_INCREMENT 11 #define SQL_COLUMN_CASE_SENSITIVE 12 #define SQL_COLUMN_SEARCHABLE 13 #define SQL_COLUMN_TYPE_NAME 14 #define SQL_COLUMN_TABLE_NAME 15 #define SQL_COLUMN_OWNER_NAME 16 #define SQL_COLUMN_QUALIFIER_NAME 17 #define SQL_COLUMN_LABEL 18 #define SQL_COLATT_OPT_MAX SQL_COLUMN_LABEL #if (ODBCVER < 0x0300) #define SQL_COLUMN_DRIVER_START 1000 #endif /* ODBCVER < 0x0300 */ #define SQL_COLATT_OPT_MIN SQL_COLUMN_COUNT /* * SQLColAttributes - SQL_COLUMN_UPDATABLE */ #define SQL_ATTR_READONLY 0 #define SQL_ATTR_WRITE 1 #define SQL_ATTR_READWRITE_UNKNOWN 2 /* * SQLColAttributes - SQL_COLUMN_SEARCHABLE */ #define SQL_UNSEARCHABLE 0 #define SQL_LIKE_ONLY 1 #define SQL_ALL_EXCEPT_LIKE 2 #define SQL_SEARCHABLE 3 #define SQL_PRED_SEARCHABLE SQL_SEARCHABLE /* * SQLDataSources - additional fetch directions */ #if (ODBCVER >= 0x0300) #define SQL_FETCH_FIRST_USER 31 #define SQL_FETCH_FIRST_SYSTEM 32 #endif /* ODBCVER >= 0x0300 */ /* * SQLDriverConnect */ #define SQL_DRIVER_NOPROMPT 0 #define SQL_DRIVER_COMPLETE 1 #define SQL_DRIVER_PROMPT 2 #define SQL_DRIVER_COMPLETE_REQUIRED 3 /* * SQLGetConnectAttr - ODBC 2.x attributes */ #define SQL_ACCESS_MODE 101 #define SQL_AUTOCOMMIT 102 #define SQL_LOGIN_TIMEOUT 103 #define SQL_OPT_TRACE 104 #define SQL_OPT_TRACEFILE 105 #define SQL_TRANSLATE_DLL 106 #define SQL_TRANSLATE_OPTION 107 #define SQL_TXN_ISOLATION 108 #define SQL_CURRENT_QUALIFIER 109 #define SQL_ODBC_CURSORS 110 #define SQL_QUIET_MODE 111 #define SQL_PACKET_SIZE 112 /* * SQLGetConnectAttr - ODBC 3.0 attributes */ #if (ODBCVER >= 0x0300) #define SQL_ATTR_ACCESS_MODE SQL_ACCESS_MODE #define SQL_ATTR_AUTOCOMMIT SQL_AUTOCOMMIT #define SQL_ATTR_CONNECTION_TIMEOUT 113 #define SQL_ATTR_CURRENT_CATALOG SQL_CURRENT_QUALIFIER #define SQL_ATTR_DISCONNECT_BEHAVIOR 114 #define SQL_ATTR_ENLIST_IN_DTC 1207 #define SQL_ATTR_ENLIST_IN_XA 1208 #define SQL_ATTR_LOGIN_TIMEOUT SQL_LOGIN_TIMEOUT #define SQL_ATTR_ODBC_CURSORS SQL_ODBC_CURSORS #define SQL_ATTR_PACKET_SIZE SQL_PACKET_SIZE #define SQL_ATTR_QUIET_MODE SQL_QUIET_MODE #define SQL_ATTR_TRACE SQL_OPT_TRACE #define SQL_ATTR_TRACEFILE SQL_OPT_TRACEFILE #define SQL_ATTR_TRANSLATE_LIB SQL_TRANSLATE_DLL #define SQL_ATTR_TRANSLATE_OPTION SQL_TRANSLATE_OPTION #define SQL_ATTR_TXN_ISOLATION SQL_TXN_ISOLATION #endif /* ODBCVER >= 0x0300 */ #define SQL_ATTR_CONNECTION_DEAD 1209 /* GetConnectAttr only */ /* * These options have no meaning for a 3.0 driver */ #if (ODBCVER < 0x0300) #define SQL_CONN_OPT_MIN SQL_ACCESS_MODE #define SQL_CONN_OPT_MAX SQL_PACKET_SIZE #define SQL_CONNECT_OPT_DRVR_START 1000 #endif /* ODBCVER < 0x0300 */ /* * SQLGetConnectAttr - SQL_ACCESS_MODE */ #define SQL_MODE_READ_WRITE 0UL #define SQL_MODE_READ_ONLY 1UL #define SQL_MODE_DEFAULT SQL_MODE_READ_WRITE /* * SQLGetConnectAttr - SQL_AUTOCOMMIT */ #define SQL_AUTOCOMMIT_OFF 0UL #define SQL_AUTOCOMMIT_ON 1UL #define SQL_AUTOCOMMIT_DEFAULT SQL_AUTOCOMMIT_ON /* * SQLGetConnectAttr - SQL_LOGIN_TIMEOUT */ #define SQL_LOGIN_TIMEOUT_DEFAULT 15UL /* * SQLGetConnectAttr - SQL_ODBC_CURSORS */ #define SQL_CUR_USE_IF_NEEDED 0UL #define SQL_CUR_USE_ODBC 1UL #define SQL_CUR_USE_DRIVER 2UL #define SQL_CUR_DEFAULT SQL_CUR_USE_DRIVER /* * SQLGetConnectAttr - SQL_OPT_TRACE */ #define SQL_OPT_TRACE_OFF 0UL #define SQL_OPT_TRACE_ON 1UL #define SQL_OPT_TRACE_DEFAULT SQL_OPT_TRACE_OFF #if defined (WIN32) #define SQL_OPT_TRACE_FILE_DEFAULT "\\SQL.LOG" #define SQL_OPT_TRACE_FILE_DEFAULTW L"\\SQL.LOG" #else #define SQL_OPT_TRACE_FILE_DEFAULT "/tmp/odbc.log" #define SQL_OPT_TRACE_FILE_DEFAULTW L"/tmp/odbc.log" #endif /* * SQLGetConnectAttr - SQL_ATTR_ANSI_APP */ #if (ODBCVER >= 0x0351) #define SQL_AA_TRUE 1L /* ANSI app */ #define SQL_AA_FALSE 0L /* Unicode app */ #endif /* * SQLGetConnectAttr - SQL_ATTR_CONNECTION_DEAD */ #define SQL_CD_TRUE 1L /* closed/dead */ #define SQL_CD_FALSE 0L /* open/available */ /* * SQLGetConnectAttr - SQL_ATTR_DISCONNECT_BEHAVIOR */ #if (ODBCVER >= 0x0300) #define SQL_DB_RETURN_TO_POOL 0UL #define SQL_DB_DISCONNECT 1UL #define SQL_DB_DEFAULT SQL_DB_RETURN_TO_POOL #endif /* ODBCVER >= 0x0300 */ /* * SQLGetConnectAttr - SQL_ATTR_ENLIST_IN_DTC */ #if (ODBCVER >= 0x0300) #define SQL_DTC_DONE 0L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetConnectAttr - Unicode drivers */ #if (ODBCVER >= 0x0351) #define SQL_ATTR_ANSI_APP 115 #endif /* * SQLGetData */ #define SQL_NO_TOTAL (-4) /* * SQLGetDescField - extended descriptor field */ #if (ODBCVER >= 0x0300) #define SQL_DESC_ARRAY_SIZE 20 #define SQL_DESC_ARRAY_STATUS_PTR 21 #define SQL_DESC_AUTO_UNIQUE_VALUE SQL_COLUMN_AUTO_INCREMENT #define SQL_DESC_BASE_COLUMN_NAME 22 #define SQL_DESC_BASE_TABLE_NAME 23 #define SQL_DESC_BIND_OFFSET_PTR 24 #define SQL_DESC_BIND_TYPE 25 #define SQL_DESC_CASE_SENSITIVE SQL_COLUMN_CASE_SENSITIVE #define SQL_DESC_CATALOG_NAME SQL_COLUMN_QUALIFIER_NAME #define SQL_DESC_CONCISE_TYPE SQL_COLUMN_TYPE #define SQL_DESC_DATETIME_INTERVAL_PRECISION 26 #define SQL_DESC_DISPLAY_SIZE SQL_COLUMN_DISPLAY_SIZE #define SQL_DESC_FIXED_PREC_SCALE SQL_COLUMN_MONEY #define SQL_DESC_LABEL SQL_COLUMN_LABEL #define SQL_DESC_LITERAL_PREFIX 27 #define SQL_DESC_LITERAL_SUFFIX 28 #define SQL_DESC_LOCAL_TYPE_NAME 29 #define SQL_DESC_MAXIMUM_SCALE 30 #define SQL_DESC_MINIMUM_SCALE 31 #define SQL_DESC_NUM_PREC_RADIX 32 #define SQL_DESC_PARAMETER_TYPE 33 #define SQL_DESC_ROWS_PROCESSED_PTR 34 #if (ODBCVER >= 0x0350) #define SQL_DESC_ROWVER 35 #endif /* ODBCVER >= 0x0350 */ #define SQL_DESC_SCHEMA_NAME SQL_COLUMN_OWNER_NAME #define SQL_DESC_SEARCHABLE SQL_COLUMN_SEARCHABLE #define SQL_DESC_TYPE_NAME SQL_COLUMN_TYPE_NAME #define SQL_DESC_TABLE_NAME SQL_COLUMN_TABLE_NAME #define SQL_DESC_UNSIGNED SQL_COLUMN_UNSIGNED #define SQL_DESC_UPDATABLE SQL_COLUMN_UPDATABLE #endif /* ODBCVER >= 0x0300 */ /* * SQLGetDiagField - defines for diagnostics fields */ #if (ODBCVER >= 0x0300) #define SQL_DIAG_CURSOR_ROW_COUNT (-1249) #define SQL_DIAG_ROW_NUMBER (-1248) #define SQL_DIAG_COLUMN_NUMBER (-1247) #endif /* ODBCVER >= 0x0300 */ /* * SQLGetDiagField - SQL_DIAG_ROW_NUMBER and SQL_DIAG_COLUMN_NUMBER */ #if (ODBCVER >= 0x0300) #define SQL_NO_ROW_NUMBER (-1) #define SQL_NO_COLUMN_NUMBER (-1) #define SQL_ROW_NUMBER_UNKNOWN (-2) #define SQL_COLUMN_NUMBER_UNKNOWN (-2) #endif #if (ODBCVER >= 0x0300) /* * SQLGetEnvAttr - Attributes */ #define SQL_ATTR_ODBC_VERSION 200 #define SQL_ATTR_CONNECTION_POOLING 201 #define SQL_ATTR_CP_MATCH 202 /* * SQLGetEnvAttr - SQL_ATTR_ODBC_VERSION */ #define SQL_OV_ODBC2 2UL #define SQL_OV_ODBC3 3UL /* * SQLGetEnvAttr - SQL_ATTR_CONNECTION_POOLING */ #define SQL_CP_OFF 0UL #define SQL_CP_ONE_PER_DRIVER 1UL #define SQL_CP_ONE_PER_HENV 2UL #define SQL_CP_DEFAULT SQL_CP_OFF /* * SQLGetEnvAttr - SQL_ATTR_CP_MATCH */ #define SQL_CP_STRICT_MATCH 0UL #define SQL_CP_RELAXED_MATCH 1UL #define SQL_CP_MATCH_DEFAULT SQL_CP_STRICT_MATCH #endif /* ODBCVER >= 0x0300 */ /* * SQLGetFunctions - extensions to the X/Open specification */ #if (ODBCVER >= 0x0300) #define SQL_API_SQLALLOCHANDLESTD 73 #define SQL_API_SQLBULKOPERATIONS 24 #endif /* ODBCVER >= 0x0300 */ #define SQL_API_SQLBINDPARAMETER 72 #define SQL_API_SQLBROWSECONNECT 55 #define SQL_API_SQLCOLATTRIBUTES 6 #define SQL_API_SQLCOLUMNPRIVILEGES 56 #define SQL_API_SQLDESCRIBEPARAM 58 #define SQL_API_SQLDRIVERCONNECT 41 #define SQL_API_SQLDRIVERS 71 #define SQL_API_SQLEXTENDEDFETCH 59 #define SQL_API_SQLFOREIGNKEYS 60 #define SQL_API_SQLMORERESULTS 61 #define SQL_API_SQLNATIVESQL 62 #define SQL_API_SQLNUMPARAMS 63 #define SQL_API_SQLPARAMOPTIONS 64 #define SQL_API_SQLPRIMARYKEYS 65 #define SQL_API_SQLPROCEDURECOLUMNS 66 #define SQL_API_SQLPROCEDURES 67 #define SQL_API_SQLSETPOS 68 #define SQL_API_SQLSETSCROLLOPTIONS 69 #define SQL_API_SQLTABLEPRIVILEGES 70 /* * These are not useful anymore as the X/Open specification defines * functions in the 10000 range */ #if (ODBCVER < 0x0300) #define SQL_EXT_API_LAST SQL_API_SQLBINDPARAMETER #define SQL_NUM_FUNCTIONS 23 #define SQL_EXT_API_START 40 #define SQL_NUM_EXTENSIONS (SQL_EXT_API_LAST-SQL_EXT_API_START+1) #endif /* ODBCVER < 0x0300 */ /* * SQLGetFunctions - ODBC version 2.x and earlier */ #define SQL_API_ALL_FUNCTIONS 0 /* * Loading by ordinal is not supported for 3.0 and above drivers */ #define SQL_API_LOADBYORDINAL 199 /* * SQLGetFunctions - SQL_API_ODBC3_ALL_FUNCTIONS */ #if (ODBCVER >= 0x0300) #define SQL_API_ODBC3_ALL_FUNCTIONS 999 #define SQL_API_ODBC3_ALL_FUNCTIONS_SIZE 250 #define SQL_FUNC_EXISTS(pfExists, uwAPI) \ ((*(((UWORD*) (pfExists)) + ((uwAPI) >> 4)) & (1 << ((uwAPI) & 0x000F))) \ ? SQL_TRUE : SQL_FALSE) #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - ODBC 2.x extensions to the X/Open standard */ #define SQL_INFO_FIRST 0 #define SQL_ACTIVE_CONNECTIONS 0 /* MAX_DRIVER_CONNECTIONS */ #define SQL_ACTIVE_STATEMENTS 1 /* MAX_CONCURRENT_ACTIVITIES */ #define SQL_DRIVER_HDBC 3 #define SQL_DRIVER_HENV 4 #define SQL_DRIVER_HSTMT 5 #define SQL_DRIVER_NAME 6 #define SQL_DRIVER_VER 7 #define SQL_ODBC_API_CONFORMANCE 9 #define SQL_ODBC_VER 10 #define SQL_ROW_UPDATES 11 #define SQL_ODBC_SAG_CLI_CONFORMANCE 12 #define SQL_ODBC_SQL_CONFORMANCE 15 #define SQL_PROCEDURES 21 #define SQL_CONCAT_NULL_BEHAVIOR 22 #define SQL_CURSOR_ROLLBACK_BEHAVIOR 24 #define SQL_EXPRESSIONS_IN_ORDERBY 27 #define SQL_MAX_OWNER_NAME_LEN 32 /* MAX_SCHEMA_NAME_LEN */ #define SQL_MAX_PROCEDURE_NAME_LEN 33 #define SQL_MAX_QUALIFIER_NAME_LEN 34 /* MAX_CATALOG_NAME_LEN */ #define SQL_MULT_RESULT_SETS 36 #define SQL_MULTIPLE_ACTIVE_TXN 37 #define SQL_OUTER_JOINS 38 #define SQL_OWNER_TERM 39 #define SQL_PROCEDURE_TERM 40 #define SQL_QUALIFIER_NAME_SEPARATOR 41 #define SQL_QUALIFIER_TERM 42 #define SQL_SCROLL_OPTIONS 44 #define SQL_TABLE_TERM 45 #define SQL_CONVERT_FUNCTIONS 48 #define SQL_NUMERIC_FUNCTIONS 49 #define SQL_STRING_FUNCTIONS 50 #define SQL_SYSTEM_FUNCTIONS 51 #define SQL_TIMEDATE_FUNCTIONS 52 #define SQL_CONVERT_BIGINT 53 #define SQL_CONVERT_BINARY 54 #define SQL_CONVERT_BIT 55 #define SQL_CONVERT_CHAR 56 #define SQL_CONVERT_DATE 57 #define SQL_CONVERT_DECIMAL 58 #define SQL_CONVERT_DOUBLE 59 #define SQL_CONVERT_FLOAT 60 #define SQL_CONVERT_INTEGER 61 #define SQL_CONVERT_LONGVARCHAR 62 #define SQL_CONVERT_NUMERIC 63 #define SQL_CONVERT_REAL 64 #define SQL_CONVERT_SMALLINT 65 #define SQL_CONVERT_TIME 66 #define SQL_CONVERT_TIMESTAMP 67 #define SQL_CONVERT_TINYINT 68 #define SQL_CONVERT_VARBINARY 69 #define SQL_CONVERT_VARCHAR 70 #define SQL_CONVERT_LONGVARBINARY 71 #define SQL_ODBC_SQL_OPT_IEF 73 /* SQL_INTEGRITY */ #define SQL_CORRELATION_NAME 74 #define SQL_NON_NULLABLE_COLUMNS 75 #define SQL_DRIVER_HLIB 76 #define SQL_DRIVER_ODBC_VER 77 #define SQL_LOCK_TYPES 78 #define SQL_POS_OPERATIONS 79 #define SQL_POSITIONED_STATEMENTS 80 #define SQL_BOOKMARK_PERSISTENCE 82 #define SQL_STATIC_SENSITIVITY 83 #define SQL_FILE_USAGE 84 #define SQL_COLUMN_ALIAS 87 #define SQL_GROUP_BY 88 #define SQL_KEYWORDS 89 #define SQL_OWNER_USAGE 91 #define SQL_QUALIFIER_USAGE 92 #define SQL_QUOTED_IDENTIFIER_CASE 93 #define SQL_SUBQUERIES 95 #define SQL_UNION 96 #define SQL_MAX_ROW_SIZE_INCLUDES_LONG 103 #define SQL_MAX_CHAR_LITERAL_LEN 108 #define SQL_TIMEDATE_ADD_INTERVALS 109 #define SQL_TIMEDATE_DIFF_INTERVALS 110 #define SQL_NEED_LONG_DATA_LEN 111 #define SQL_MAX_BINARY_LITERAL_LEN 112 #define SQL_LIKE_ESCAPE_CLAUSE 113 #define SQL_QUALIFIER_LOCATION 114 #if (ODBCVER >= 0x0201 && ODBCVER < 0x0300) #define SQL_OJ_CAPABILITIES 65003 /* Temp value until ODBC 3.0 */ #endif /* ODBCVER >= 0x0201 && ODBCVER < 0x0300 */ /* * These values are not useful anymore as X/Open defines values in the * 10000 range */ #if (ODBCVER < 0x0300) #define SQL_INFO_LAST SQL_QUALIFIER_LOCATION #define SQL_INFO_DRIVER_START 1000 #endif /* ODBCVER < 0x0300 */ /* * SQLGetInfo - ODBC 3.x extensions to the X/Open standard */ #if (ODBCVER >= 0x0300) #define SQL_ACTIVE_ENVIRONMENTS 116 #define SQL_ALTER_DOMAIN 117 #define SQL_SQL_CONFORMANCE 118 #define SQL_DATETIME_LITERALS 119 #define SQL_ASYNC_MODE 10021 /* new X/Open spec */ #define SQL_BATCH_ROW_COUNT 120 #define SQL_BATCH_SUPPORT 121 #define SQL_CATALOG_LOCATION SQL_QUALIFIER_LOCATION #define SQL_CATALOG_NAME_SEPARATOR SQL_QUALIFIER_NAME_SEPARATOR #define SQL_CATALOG_TERM SQL_QUALIFIER_TERM #define SQL_CATALOG_USAGE SQL_QUALIFIER_USAGE #define SQL_CONVERT_WCHAR 122 #define SQL_CONVERT_INTERVAL_DAY_TIME 123 #define SQL_CONVERT_INTERVAL_YEAR_MONTH 124 #define SQL_CONVERT_WLONGVARCHAR 125 #define SQL_CONVERT_WVARCHAR 126 #define SQL_CREATE_ASSERTION 127 #define SQL_CREATE_CHARACTER_SET 128 #define SQL_CREATE_COLLATION 129 #define SQL_CREATE_DOMAIN 130 #define SQL_CREATE_SCHEMA 131 #define SQL_CREATE_TABLE 132 #define SQL_CREATE_TRANSLATION 133 #define SQL_CREATE_VIEW 134 #define SQL_DRIVER_HDESC 135 #define SQL_DROP_ASSERTION 136 #define SQL_DROP_CHARACTER_SET 137 #define SQL_DROP_COLLATION 138 #define SQL_DROP_DOMAIN 139 #define SQL_DROP_SCHEMA 140 #define SQL_DROP_TABLE 141 #define SQL_DROP_TRANSLATION 142 #define SQL_DROP_VIEW 143 #define SQL_DYNAMIC_CURSOR_ATTRIBUTES1 144 #define SQL_DYNAMIC_CURSOR_ATTRIBUTES2 145 #define SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 146 #define SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 147 #define SQL_INDEX_KEYWORDS 148 #define SQL_INFO_SCHEMA_VIEWS 149 #define SQL_KEYSET_CURSOR_ATTRIBUTES1 150 #define SQL_KEYSET_CURSOR_ATTRIBUTES2 151 #define SQL_MAX_ASYNC_CONCURRENT_STATEMENTS 10022 /* new X/Open spec */ #define SQL_ODBC_INTERFACE_CONFORMANCE 152 #define SQL_PARAM_ARRAY_ROW_COUNTS 153 #define SQL_PARAM_ARRAY_SELECTS 154 #define SQL_SCHEMA_TERM SQL_OWNER_TERM #define SQL_SCHEMA_USAGE SQL_OWNER_USAGE #define SQL_SQL92_DATETIME_FUNCTIONS 155 #define SQL_SQL92_FOREIGN_KEY_DELETE_RULE 156 #define SQL_SQL92_FOREIGN_KEY_UPDATE_RULE 157 #define SQL_SQL92_GRANT 158 #define SQL_SQL92_NUMERIC_VALUE_FUNCTIONS 159 #define SQL_SQL92_PREDICATES 160 #define SQL_SQL92_RELATIONAL_JOIN_OPERATORS 161 #define SQL_SQL92_REVOKE 162 #define SQL_SQL92_ROW_VALUE_CONSTRUCTOR 163 #define SQL_SQL92_STRING_FUNCTIONS 164 #define SQL_SQL92_VALUE_EXPRESSIONS 165 #define SQL_STANDARD_CLI_CONFORMANCE 166 #define SQL_STATIC_CURSOR_ATTRIBUTES1 167 #define SQL_STATIC_CURSOR_ATTRIBUTES2 168 #define SQL_AGGREGATE_FUNCTIONS 169 #define SQL_DDL_INDEX 170 #define SQL_DM_VER 171 #define SQL_INSERT_STATEMENT 172 #define SQL_UNION_STATEMENT SQL_UNION #endif /* ODBCVER >= 0x0300 */ #define SQL_DTC_TRANSITION_COST 1750 /* * SQLGetInfo - SQL_AGGREGATE_FUNCTIONS */ #if (ODBCVER >= 0x0300) #define SQL_AF_AVG 0x00000001L #define SQL_AF_COUNT 0x00000002L #define SQL_AF_MAX 0x00000004L #define SQL_AF_MIN 0x00000008L #define SQL_AF_SUM 0x00000010L #define SQL_AF_DISTINCT 0x00000020L #define SQL_AF_ALL 0x00000040L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_ALTER_DOMAIN */ #if (ODBCVER >= 0x0300) #define SQL_AD_CONSTRAINT_NAME_DEFINITION 0x00000001L #define SQL_AD_ADD_DOMAIN_CONSTRAINT 0x00000002L #define SQL_AD_DROP_DOMAIN_CONSTRAINT 0x00000004L #define SQL_AD_ADD_DOMAIN_DEFAULT 0x00000008L #define SQL_AD_DROP_DOMAIN_DEFAULT 0x00000010L #define SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED 0x00000020L #define SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE 0x00000040L #define SQL_AD_ADD_CONSTRAINT_DEFERRABLE 0x00000080L #define SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE 0x00000100L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_ALTER_TABLE */ #if (ODBCVER >= 0x0300) /* * The following 5 bitmasks are defined in sql.h * * #define SQL_AT_ADD_COLUMN 0x00000001L * #define SQL_AT_DROP_COLUMN 0x00000002L * #define SQL_AT_ADD_CONSTRAINT 0x00000008L */ #define SQL_AT_ADD_COLUMN_SINGLE 0x00000020L #define SQL_AT_ADD_COLUMN_DEFAULT 0x00000040L #define SQL_AT_ADD_COLUMN_COLLATION 0x00000080L #define SQL_AT_SET_COLUMN_DEFAULT 0x00000100L #define SQL_AT_DROP_COLUMN_DEFAULT 0x00000200L #define SQL_AT_DROP_COLUMN_CASCADE 0x00000400L #define SQL_AT_DROP_COLUMN_RESTRICT 0x00000800L #define SQL_AT_ADD_TABLE_CONSTRAINT 0x00001000L #define SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE 0x00002000L #define SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT 0x00004000L #define SQL_AT_CONSTRAINT_NAME_DEFINITION 0x00008000L #define SQL_AT_CONSTRAINT_INITIALLY_DEFERRED 0x00010000L #define SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE 0x00020000L #define SQL_AT_CONSTRAINT_DEFERRABLE 0x00040000L #define SQL_AT_CONSTRAINT_NON_DEFERRABLE 0x00080000L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_ASYNC_MODE */ #if (ODBCVER >= 0x0300) #define SQL_AM_NONE 0 #define SQL_AM_CONNECTION 1 #define SQL_AM_STATEMENT 2 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_BATCH_ROW_COUNT */ #if (ODBCVER >= 0x0300) #define SQL_BRC_PROCEDURES 0x0000001 #define SQL_BRC_EXPLICIT 0x0000002 #define SQL_BRC_ROLLED_UP 0x0000004 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_BATCH_SUPPORT */ #if (ODBCVER >= 0x0300) #define SQL_BS_SELECT_EXPLICIT 0x00000001L #define SQL_BS_ROW_COUNT_EXPLICIT 0x00000002L #define SQL_BS_SELECT_PROC 0x00000004L #define SQL_BS_ROW_COUNT_PROC 0x00000008L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_BOOKMARK_PERSISTENCE */ #define SQL_BP_CLOSE 0x00000001L #define SQL_BP_DELETE 0x00000002L #define SQL_BP_DROP 0x00000004L #define SQL_BP_TRANSACTION 0x00000008L #define SQL_BP_UPDATE 0x00000010L #define SQL_BP_OTHER_HSTMT 0x00000020L #define SQL_BP_SCROLL 0x00000040L /* * SQLGetInfo - SQL_CATALOG_LOCATION */ #if (ODBCVER >= 0x0300) #define SQL_CL_START SQL_QL_START #define SQL_CL_END SQL_QL_END #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_CATALOG_USAGE */ #if (ODBCVER >= 0x0300) #define SQL_CU_DML_STATEMENTS SQL_QU_DML_STATEMENTS #define SQL_CU_PROCEDURE_INVOCATION SQL_QU_PROCEDURE_INVOCATION #define SQL_CU_TABLE_DEFINITION SQL_QU_TABLE_DEFINITION #define SQL_CU_INDEX_DEFINITION SQL_QU_INDEX_DEFINITION #define SQL_CU_PRIVILEGE_DEFINITION SQL_QU_PRIVILEGE_DEFINITION #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_CONCAT_NULL_BEHAVIOR */ #define SQL_CB_NULL 0x0000 #define SQL_CB_NON_NULL 0x0001 /* * SQLGetInfo - SQL_CONVERT_* bitmask values */ #define SQL_CVT_CHAR 0x00000001L #define SQL_CVT_NUMERIC 0x00000002L #define SQL_CVT_DECIMAL 0x00000004L #define SQL_CVT_INTEGER 0x00000008L #define SQL_CVT_SMALLINT 0x00000010L #define SQL_CVT_FLOAT 0x00000020L #define SQL_CVT_REAL 0x00000040L #define SQL_CVT_DOUBLE 0x00000080L #define SQL_CVT_VARCHAR 0x00000100L #define SQL_CVT_LONGVARCHAR 0x00000200L #define SQL_CVT_BINARY 0x00000400L #define SQL_CVT_VARBINARY 0x00000800L #define SQL_CVT_BIT 0x00001000L #define SQL_CVT_TINYINT 0x00002000L #define SQL_CVT_BIGINT 0x00004000L #define SQL_CVT_DATE 0x00008000L #define SQL_CVT_TIME 0x00010000L #define SQL_CVT_TIMESTAMP 0x00020000L #define SQL_CVT_LONGVARBINARY 0x00040000L #if (ODBCVER >= 0x0300) #define SQL_CVT_INTERVAL_YEAR_MONTH 0x00080000L #define SQL_CVT_INTERVAL_DAY_TIME 0x00100000L #define SQL_CVT_WCHAR 0x00200000L #define SQL_CVT_WLONGVARCHAR 0x00400000L #define SQL_CVT_WVARCHAR 0x00800000L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_CONVERT_FUNCTIONS */ #define SQL_FN_CVT_CONVERT 0x00000001L #if (ODBCVER >= 0x0300) #define SQL_FN_CVT_CAST 0x00000002L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_CORRELATION_NAME */ #define SQL_CN_NONE 0x0000 #define SQL_CN_DIFFERENT 0x0001 #define SQL_CN_ANY 0x0002 /* * SQLGetInfo - SQL_CREATE_ASSERTION */ #if (ODBCVER >= 0x0300) #define SQL_CA_CREATE_ASSERTION 0x00000001L #define SQL_CA_CONSTRAINT_INITIALLY_DEFERRED 0x00000010L #define SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE 0x00000020L #define SQL_CA_CONSTRAINT_DEFERRABLE 0x00000040L #define SQL_CA_CONSTRAINT_NON_DEFERRABLE 0x00000080L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_CREATE_CHARACTER_SET */ #if (ODBCVER >= 0x0300) #define SQL_CCS_CREATE_CHARACTER_SET 0x00000001L #define SQL_CCS_COLLATE_CLAUSE 0x00000002L #define SQL_CCS_LIMITED_COLLATION 0x00000004L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_CREATE_COLLATION */ #if (ODBCVER >= 0x0300) #define SQL_CCOL_CREATE_COLLATION 0x00000001L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_CREATE_DOMAIN */ #if (ODBCVER >= 0x0300) #define SQL_CDO_CREATE_DOMAIN 0x00000001L #define SQL_CDO_DEFAULT 0x00000002L #define SQL_CDO_CONSTRAINT 0x00000004L #define SQL_CDO_COLLATION 0x00000008L #define SQL_CDO_CONSTRAINT_NAME_DEFINITION 0x00000010L #define SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED 0x00000020L #define SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE 0x00000040L #define SQL_CDO_CONSTRAINT_DEFERRABLE 0x00000080L #define SQL_CDO_CONSTRAINT_NON_DEFERRABLE 0x00000100L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_CREATE_SCHEMA */ #if (ODBCVER >= 0x0300) #define SQL_CS_CREATE_SCHEMA 0x00000001L #define SQL_CS_AUTHORIZATION 0x00000002L #define SQL_CS_DEFAULT_CHARACTER_SET 0x00000004L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_CREATE_TABLE */ #if (ODBCVER >= 0x0300) #define SQL_CT_CREATE_TABLE 0x00000001L #define SQL_CT_COMMIT_PRESERVE 0x00000002L #define SQL_CT_COMMIT_DELETE 0x00000004L #define SQL_CT_GLOBAL_TEMPORARY 0x00000008L #define SQL_CT_LOCAL_TEMPORARY 0x00000010L #define SQL_CT_CONSTRAINT_INITIALLY_DEFERRED 0x00000020L #define SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE 0x00000040L #define SQL_CT_CONSTRAINT_DEFERRABLE 0x00000080L #define SQL_CT_CONSTRAINT_NON_DEFERRABLE 0x00000100L #define SQL_CT_COLUMN_CONSTRAINT 0x00000200L #define SQL_CT_COLUMN_DEFAULT 0x00000400L #define SQL_CT_COLUMN_COLLATION 0x00000800L #define SQL_CT_TABLE_CONSTRAINT 0x00001000L #define SQL_CT_CONSTRAINT_NAME_DEFINITION 0x00002000L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_CREATE_TRANSLATION */ #if (ODBCVER >= 0x0300) #define SQL_CTR_CREATE_TRANSLATION 0x00000001L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_CREATE_VIEW */ #define SQL_CV_CREATE_VIEW 0x00000001L #define SQL_CV_CHECK_OPTION 0x00000002L #define SQL_CV_CASCADED 0x00000004L #define SQL_CV_LOCAL 0x00000008L /* * SQLGetInfo - SQL_DATETIME_LITERALS */ #if (ODBCVER >= 0x0300) #define SQL_DL_SQL92_DATE 0x00000001L #define SQL_DL_SQL92_TIME 0x00000002L #define SQL_DL_SQL92_TIMESTAMP 0x00000004L #define SQL_DL_SQL92_INTERVAL_YEAR 0x00000008L #define SQL_DL_SQL92_INTERVAL_MONTH 0x00000010L #define SQL_DL_SQL92_INTERVAL_DAY 0x00000020L #define SQL_DL_SQL92_INTERVAL_HOUR 0x00000040L #define SQL_DL_SQL92_INTERVAL_MINUTE 0x00000080L #define SQL_DL_SQL92_INTERVAL_SECOND 0x00000100L #define SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH 0x00000200L #define SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR 0x00000400L #define SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE 0x00000800L #define SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND 0x00001000L #define SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE 0x00002000L #define SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND 0x00004000L #define SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND 0x00008000L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_DDL_INDEX */ #if (ODBCVER >= 0x0300) #define SQL_DI_CREATE_INDEX 0x00000001L #define SQL_DI_DROP_INDEX 0x00000002L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_DROP_ASSERTION */ #if (ODBCVER >= 0x0300) #define SQL_DA_DROP_ASSERTION 0x00000001L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_DROP_CHARACTER_SET */ #if (ODBCVER >= 0x0300) #define SQL_DCS_DROP_CHARACTER_SET 0x00000001L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_DROP_COLLATION */ #if (ODBCVER >= 0x0300) #define SQL_DC_DROP_COLLATION 0x00000001L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_DROP_DOMAIN */ #if (ODBCVER >= 0x0300) #define SQL_DD_DROP_DOMAIN 0x00000001L #define SQL_DD_RESTRICT 0x00000002L #define SQL_DD_CASCADE 0x00000004L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_DROP_SCHEMA */ #if (ODBCVER >= 0x0300) #define SQL_DS_DROP_SCHEMA 0x00000001L #define SQL_DS_RESTRICT 0x00000002L #define SQL_DS_CASCADE 0x00000004L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_DROP_TABLE */ #if (ODBCVER >= 0x0300) #define SQL_DT_DROP_TABLE 0x00000001L #define SQL_DT_RESTRICT 0x00000002L #define SQL_DT_CASCADE 0x00000004L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_DROP_TRANSLATION */ #if (ODBCVER >= 0x0300) #define SQL_DTR_DROP_TRANSLATION 0x00000001L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_DROP_VIEW */ #if (ODBCVER >= 0x0300) #define SQL_DV_DROP_VIEW 0x00000001L #define SQL_DV_RESTRICT 0x00000002L #define SQL_DV_CASCADE 0x00000004L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_DTC_TRANSITION_COST */ #define SQL_DTC_ENLIST_EXPENSIVE 0x00000001L #define SQL_DTC_UNENLIST_EXPENSIVE 0x00000002L /* * SQLGetInfo - SQL_DYNAMIC_CURSOR_ATTRIBUTES1 * SQLGetInfo - SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 * SQLGetInfo - SQL_KEYSET_CURSOR_ATTRIBUTES1 * SQLGetInfo - SQL_STATIC_CURSOR_ATTRIBUTES1 */ /* * SQLFetchScroll - FetchOrientation */ #if (ODBCVER >= 0x0300) #define SQL_CA1_NEXT 0x00000001L #define SQL_CA1_ABSOLUTE 0x00000002L #define SQL_CA1_RELATIVE 0x00000004L #define SQL_CA1_BOOKMARK 0x00000008L #endif /* ODBCVER >= 0x0300 */ /* * SQLSetPos - LockType */ #if (ODBCVER >= 0x0300) #define SQL_CA1_LOCK_NO_CHANGE 0x00000040L #define SQL_CA1_LOCK_EXCLUSIVE 0x00000080L #define SQL_CA1_LOCK_UNLOCK 0x00000100L #endif /* ODBCVER >= 0x0300 */ /* * SQLSetPos Operations */ #if (ODBCVER >= 0x0300) #define SQL_CA1_POS_POSITION 0x00000200L #define SQL_CA1_POS_UPDATE 0x00000400L #define SQL_CA1_POS_DELETE 0x00000800L #define SQL_CA1_POS_REFRESH 0x00001000L #endif /* ODBCVER >= 0x0300 */ /* * positioned updates and deletes */ #if (ODBCVER >= 0x0300) #define SQL_CA1_POSITIONED_UPDATE 0x00002000L #define SQL_CA1_POSITIONED_DELETE 0x00004000L #define SQL_CA1_SELECT_FOR_UPDATE 0x00008000L #endif /* ODBCVER >= 0x0300 */ /* * SQLBulkOperations operations */ #if (ODBCVER >= 0x0300) #define SQL_CA1_BULK_ADD 0x00010000L #define SQL_CA1_BULK_UPDATE_BY_BOOKMARK 0x00020000L #define SQL_CA1_BULK_DELETE_BY_BOOKMARK 0x00040000L #define SQL_CA1_BULK_FETCH_BY_BOOKMARK 0x00080000L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_DYNAMIC_CURSOR_ATTRIBUTES2 * SQLGetInfo - SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 * SQLGetInfo - SQL_KEYSET_CURSOR_ATTRIBUTES2 * SQLGetInfo - SQL_STATIC_CURSOR_ATTRIBUTES2 */ /* * SQL_ATTR_SCROLL_CONCURRENCY */ #if (ODBCVER >= 0x0300) #define SQL_CA2_READ_ONLY_CONCURRENCY 0x00000001L #define SQL_CA2_LOCK_CONCURRENCY 0x00000002L #define SQL_CA2_OPT_ROWVER_CONCURRENCY 0x00000004L #define SQL_CA2_OPT_VALUES_CONCURRENCY 0x00000008L #endif /* ODBCVER >= 0x0300 */ /* * sensitivity of the cursor to its own inserts, deletes, and updates */ #if (ODBCVER >= 0x0300) #define SQL_CA2_SENSITIVITY_ADDITIONS 0x00000010L #define SQL_CA2_SENSITIVITY_DELETIONS 0x00000020L #define SQL_CA2_SENSITIVITY_UPDATES 0x00000040L #endif /* ODBCVER >= 0x0300 */ /* * SQL_ATTR_MAX_ROWS */ #if (ODBCVER >= 0x0300) #define SQL_CA2_MAX_ROWS_SELECT 0x00000080L #define SQL_CA2_MAX_ROWS_INSERT 0x00000100L #define SQL_CA2_MAX_ROWS_DELETE 0x00000200L #define SQL_CA2_MAX_ROWS_UPDATE 0x00000400L #define SQL_CA2_MAX_ROWS_CATALOG 0x00000800L #define SQL_CA2_MAX_ROWS_AFFECTS_ALL (SQL_CA2_MAX_ROWS_SELECT | \ SQL_CA2_MAX_ROWS_INSERT | \ SQL_CA2_MAX_ROWS_DELETE | \ SQL_CA2_MAX_ROWS_UPDATE | \ SQL_CA2_MAX_ROWS_CATALOG) #endif /* ODBCVER >= 0x0300 */ /* * SQL_DIAG_CURSOR_ROW_COUNT */ #if (ODBCVER >= 0x0300) #define SQL_CA2_CRC_EXACT 0x00001000L #define SQL_CA2_CRC_APPROXIMATE 0x00002000L #endif /* ODBCVER >= 0x0300 */ /* * the kinds of positioned statements that can be simulated */ #if (ODBCVER >= 0x0300) #define SQL_CA2_SIMULATE_NON_UNIQUE 0x00004000L #define SQL_CA2_SIMULATE_TRY_UNIQUE 0x00008000L #define SQL_CA2_SIMULATE_UNIQUE 0x00010000L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_FETCH_DIRECTION */ #if (ODBCVER < 0x0300) #define SQL_FD_FETCH_RESUME 0x00000040L #endif /* ODBCVER < 0x0300 */ #define SQL_FD_FETCH_BOOKMARK 0x00000080L /* * SQLGetInfo - SQL_FILE_USAGE */ #define SQL_FILE_NOT_SUPPORTED 0x0000 #define SQL_FILE_TABLE 0x0001 #define SQL_FILE_QUALIFIER 0x0002 #define SQL_FILE_CATALOG SQL_FILE_QUALIFIER /* * SQLGetInfo - SQL_GETDATA_EXTENSIONS */ #define SQL_GD_BLOCK 0x00000004L #define SQL_GD_BOUND 0x00000008L /* * SQLGetInfo - SQL_GROUP_BY */ #define SQL_GB_NOT_SUPPORTED 0x0000 #define SQL_GB_GROUP_BY_EQUALS_SELECT 0x0001 #define SQL_GB_GROUP_BY_CONTAINS_SELECT 0x0002 #define SQL_GB_NO_RELATION 0x0003 #if (ODBCVER >= 0x0300) #define SQL_GB_COLLATE 0x0004 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_INDEX_KEYWORDS */ #if (ODBCVER >= 0x0300) #define SQL_IK_NONE 0x00000000L #define SQL_IK_ASC 0x00000001L #define SQL_IK_DESC 0x00000002L #define SQL_IK_ALL (SQL_IK_ASC | SQL_IK_DESC) #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_INFO_SCHEMA_VIEWS */ #if (ODBCVER >= 0x0300) #define SQL_ISV_ASSERTIONS 0x00000001L #define SQL_ISV_CHARACTER_SETS 0x00000002L #define SQL_ISV_CHECK_CONSTRAINTS 0x00000004L #define SQL_ISV_COLLATIONS 0x00000008L #define SQL_ISV_COLUMN_DOMAIN_USAGE 0x00000010L #define SQL_ISV_COLUMN_PRIVILEGES 0x00000020L #define SQL_ISV_COLUMNS 0x00000040L #define SQL_ISV_CONSTRAINT_COLUMN_USAGE 0x00000080L #define SQL_ISV_CONSTRAINT_TABLE_USAGE 0x00000100L #define SQL_ISV_DOMAIN_CONSTRAINTS 0x00000200L #define SQL_ISV_DOMAINS 0x00000400L #define SQL_ISV_KEY_COLUMN_USAGE 0x00000800L #define SQL_ISV_REFERENTIAL_CONSTRAINTS 0x00001000L #define SQL_ISV_SCHEMATA 0x00002000L #define SQL_ISV_SQL_LANGUAGES 0x00004000L #define SQL_ISV_TABLE_CONSTRAINTS 0x00008000L #define SQL_ISV_TABLE_PRIVILEGES 0x00010000L #define SQL_ISV_TABLES 0x00020000L #define SQL_ISV_TRANSLATIONS 0x00040000L #define SQL_ISV_USAGE_PRIVILEGES 0x00080000L #define SQL_ISV_VIEW_COLUMN_USAGE 0x00100000L #define SQL_ISV_VIEW_TABLE_USAGE 0x00200000L #define SQL_ISV_VIEWS 0x00400000L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_INSERT_STATEMENT */ #if (ODBCVER >= 0x0300) #define SQL_IS_INSERT_LITERALS 0x00000001L #define SQL_IS_INSERT_SEARCHED 0x00000002L #define SQL_IS_SELECT_INTO 0x00000004L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_LOCK_TYPES */ #define SQL_LCK_NO_CHANGE 0x00000001L #define SQL_LCK_EXCLUSIVE 0x00000002L #define SQL_LCK_UNLOCK 0x00000004L /* * SQLGetInfo - SQL_POS_OPERATIONS */ #define SQL_POS_POSITION 0x00000001L #define SQL_POS_REFRESH 0x00000002L #define SQL_POS_UPDATE 0x00000004L #define SQL_POS_DELETE 0x00000008L #define SQL_POS_ADD 0x00000010L /* * SQLGetInfo - SQL_NON_NULLABLE_COLUMNS */ #define SQL_NNC_NULL 0x0000 #define SQL_NNC_NON_NULL 0x0001 /* * SQLGetInfo - SQL_NULL_COLLATION */ #define SQL_NC_START 0x0002 #define SQL_NC_END 0x0004 /* * SQLGetInfo - SQL_NUMERIC_FUNCTIONS */ #define SQL_FN_NUM_ABS 0x00000001L #define SQL_FN_NUM_ACOS 0x00000002L #define SQL_FN_NUM_ASIN 0x00000004L #define SQL_FN_NUM_ATAN 0x00000008L #define SQL_FN_NUM_ATAN2 0x00000010L #define SQL_FN_NUM_CEILING 0x00000020L #define SQL_FN_NUM_COS 0x00000040L #define SQL_FN_NUM_COT 0x00000080L #define SQL_FN_NUM_EXP 0x00000100L #define SQL_FN_NUM_FLOOR 0x00000200L #define SQL_FN_NUM_LOG 0x00000400L #define SQL_FN_NUM_MOD 0x00000800L #define SQL_FN_NUM_SIGN 0x00001000L #define SQL_FN_NUM_SIN 0x00002000L #define SQL_FN_NUM_SQRT 0x00004000L #define SQL_FN_NUM_TAN 0x00008000L #define SQL_FN_NUM_PI 0x00010000L #define SQL_FN_NUM_RAND 0x00020000L #define SQL_FN_NUM_DEGREES 0x00040000L #define SQL_FN_NUM_LOG10 0x00080000L #define SQL_FN_NUM_POWER 0x00100000L #define SQL_FN_NUM_RADIANS 0x00200000L #define SQL_FN_NUM_ROUND 0x00400000L #define SQL_FN_NUM_TRUNCATE 0x00800000L /* * SQLGetInfo - SQL_ODBC_API_CONFORMANCE */ #define SQL_OAC_NONE 0x0000 #define SQL_OAC_LEVEL1 0x0001 #define SQL_OAC_LEVEL2 0x0002 /* * SQLGetInfo - SQL_ODBC_INTERFACE_CONFORMANCE */ #if (ODBCVER >= 0x0300) #define SQL_OIC_CORE 1UL #define SQL_OIC_LEVEL1 2UL #define SQL_OIC_LEVEL2 3UL #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_ODBC_SAG_CLI_CONFORMANCE */ #define SQL_OSCC_NOT_COMPLIANT 0x0000 #define SQL_OSCC_COMPLIANT 0x0001 /* * SQLGetInfo - SQL_ODBC_SQL_CONFORMANCE */ #define SQL_OSC_MINIMUM 0x0000 #define SQL_OSC_CORE 0x0001 #define SQL_OSC_EXTENDED 0x0002 /* * SQLGetInfo - SQL_OWNER_USAGE */ #define SQL_OU_DML_STATEMENTS 0x00000001L #define SQL_OU_PROCEDURE_INVOCATION 0x00000002L #define SQL_OU_TABLE_DEFINITION 0x00000004L #define SQL_OU_INDEX_DEFINITION 0x00000008L #define SQL_OU_PRIVILEGE_DEFINITION 0x00000010L /* * SQLGetInfo - SQL_PARAM_ARRAY_ROW_COUNTS */ #if (ODBCVER >= 0x0300) #define SQL_PARC_BATCH 1 #define SQL_PARC_NO_BATCH 2 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_PARAM_ARRAY_SELECTS */ #if (ODBCVER >= 0x0300) #define SQL_PAS_BATCH 1 #define SQL_PAS_NO_BATCH 2 #define SQL_PAS_NO_SELECT 3 #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_POSITIONED_STATEMENTS */ #define SQL_PS_POSITIONED_DELETE 0x00000001L #define SQL_PS_POSITIONED_UPDATE 0x00000002L #define SQL_PS_SELECT_FOR_UPDATE 0x00000004L /* * SQLGetInfo - SQL_QUALIFIER_LOCATION */ #define SQL_QL_START 0x0001 #define SQL_QL_END 0x0002 /* * SQLGetInfo - SQL_QUALIFIER_USAGE */ #define SQL_QU_DML_STATEMENTS 0x00000001L #define SQL_QU_PROCEDURE_INVOCATION 0x00000002L #define SQL_QU_TABLE_DEFINITION 0x00000004L #define SQL_QU_INDEX_DEFINITION 0x00000008L #define SQL_QU_PRIVILEGE_DEFINITION 0x00000010L /* * SQLGetInfo - SQL_SCHEMA_USAGE */ #if (ODBCVER >= 0x0300) #define SQL_SU_DML_STATEMENTS SQL_OU_DML_STATEMENTS #define SQL_SU_PROCEDURE_INVOCATION SQL_OU_PROCEDURE_INVOCATION #define SQL_SU_TABLE_DEFINITION SQL_OU_TABLE_DEFINITION #define SQL_SU_INDEX_DEFINITION SQL_OU_INDEX_DEFINITION #define SQL_SU_PRIVILEGE_DEFINITION SQL_OU_PRIVILEGE_DEFINITION #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_SCROLL_OPTIONS */ #define SQL_SO_FORWARD_ONLY 0x00000001L #define SQL_SO_KEYSET_DRIVEN 0x00000002L #define SQL_SO_DYNAMIC 0x00000004L #define SQL_SO_MIXED 0x00000008L #define SQL_SO_STATIC 0x00000010L /* * SQLGetInfo - SQL_SQL_CONFORMANCE */ #if (ODBCVER >= 0x0300) #define SQL_SC_SQL92_ENTRY 0x00000001L #define SQL_SC_FIPS127_2_TRANSITIONAL 0x00000002L #define SQL_SC_SQL92_INTERMEDIATE 0x00000004L #define SQL_SC_SQL92_FULL 0x00000008L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_SQL92_DATETIME_FUNCTIONS */ #if (ODBCVER >= 0x0300) #define SQL_SDF_CURRENT_DATE 0x00000001L #define SQL_SDF_CURRENT_TIME 0x00000002L #define SQL_SDF_CURRENT_TIMESTAMP 0x00000004L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_SQL92_FOREIGN_KEY_DELETE_RULE */ #if (ODBCVER >= 0x0300) #define SQL_SFKD_CASCADE 0x00000001L #define SQL_SFKD_NO_ACTION 0x00000002L #define SQL_SFKD_SET_DEFAULT 0x00000004L #define SQL_SFKD_SET_NULL 0x00000008L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_SQL92_FOREIGN_KEY_UPDATE_RULE */ #if (ODBCVER >= 0x0300) #define SQL_SFKU_CASCADE 0x00000001L #define SQL_SFKU_NO_ACTION 0x00000002L #define SQL_SFKU_SET_DEFAULT 0x00000004L #define SQL_SFKU_SET_NULL 0x00000008L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_SQL92_GRANT */ #if (ODBCVER >= 0x0300) #define SQL_SG_USAGE_ON_DOMAIN 0x00000001L #define SQL_SG_USAGE_ON_CHARACTER_SET 0x00000002L #define SQL_SG_USAGE_ON_COLLATION 0x00000004L #define SQL_SG_USAGE_ON_TRANSLATION 0x00000008L #define SQL_SG_WITH_GRANT_OPTION 0x00000010L #define SQL_SG_DELETE_TABLE 0x00000020L #define SQL_SG_INSERT_TABLE 0x00000040L #define SQL_SG_INSERT_COLUMN 0x00000080L #define SQL_SG_REFERENCES_TABLE 0x00000100L #define SQL_SG_REFERENCES_COLUMN 0x00000200L #define SQL_SG_SELECT_TABLE 0x00000400L #define SQL_SG_UPDATE_TABLE 0x00000800L #define SQL_SG_UPDATE_COLUMN 0x00001000L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_SQL92_NUMERIC_VALUE_FUNCTIONS */ #if (ODBCVER >= 0x0300) #define SQL_SNVF_BIT_LENGTH 0x00000001L #define SQL_SNVF_CHAR_LENGTH 0x00000002L #define SQL_SNVF_CHARACTER_LENGTH 0x00000004L #define SQL_SNVF_EXTRACT 0x00000008L #define SQL_SNVF_OCTET_LENGTH 0x00000010L #define SQL_SNVF_POSITION 0x00000020L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_SQL92_PREDICATES */ #if (ODBCVER >= 0x0300) #define SQL_SP_EXISTS 0x00000001L #define SQL_SP_ISNOTNULL 0x00000002L #define SQL_SP_ISNULL 0x00000004L #define SQL_SP_MATCH_FULL 0x00000008L #define SQL_SP_MATCH_PARTIAL 0x00000010L #define SQL_SP_MATCH_UNIQUE_FULL 0x00000020L #define SQL_SP_MATCH_UNIQUE_PARTIAL 0x00000040L #define SQL_SP_OVERLAPS 0x00000080L #define SQL_SP_UNIQUE 0x00000100L #define SQL_SP_LIKE 0x00000200L #define SQL_SP_IN 0x00000400L #define SQL_SP_BETWEEN 0x00000800L #define SQL_SP_COMPARISON 0x00001000L #define SQL_SP_QUANTIFIED_COMPARISON 0x00002000L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_SQL92_RELATIONAL_JOIN_OPERATORS */ #if (ODBCVER >= 0x0300) #define SQL_SRJO_CORRESPONDING_CLAUSE 0x00000001L #define SQL_SRJO_CROSS_JOIN 0x00000002L #define SQL_SRJO_EXCEPT_JOIN 0x00000004L #define SQL_SRJO_FULL_OUTER_JOIN 0x00000008L #define SQL_SRJO_INNER_JOIN 0x00000010L #define SQL_SRJO_INTERSECT_JOIN 0x00000020L #define SQL_SRJO_LEFT_OUTER_JOIN 0x00000040L #define SQL_SRJO_NATURAL_JOIN 0x00000080L #define SQL_SRJO_RIGHT_OUTER_JOIN 0x00000100L #define SQL_SRJO_UNION_JOIN 0x00000200L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_SQL92_REVOKE */ #if (ODBCVER >= 0x0300) #define SQL_SR_USAGE_ON_DOMAIN 0x00000001L #define SQL_SR_USAGE_ON_CHARACTER_SET 0x00000002L #define SQL_SR_USAGE_ON_COLLATION 0x00000004L #define SQL_SR_USAGE_ON_TRANSLATION 0x00000008L #define SQL_SR_GRANT_OPTION_FOR 0x00000010L #define SQL_SR_CASCADE 0x00000020L #define SQL_SR_RESTRICT 0x00000040L #define SQL_SR_DELETE_TABLE 0x00000080L #define SQL_SR_INSERT_TABLE 0x00000100L #define SQL_SR_INSERT_COLUMN 0x00000200L #define SQL_SR_REFERENCES_TABLE 0x00000400L #define SQL_SR_REFERENCES_COLUMN 0x00000800L #define SQL_SR_SELECT_TABLE 0x00001000L #define SQL_SR_UPDATE_TABLE 0x00002000L #define SQL_SR_UPDATE_COLUMN 0x00004000L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_SQL92_ROW_VALUE_CONSTRUCTOR */ #if (ODBCVER >= 0x0300) #define SQL_SRVC_VALUE_EXPRESSION 0x00000001L #define SQL_SRVC_NULL 0x00000002L #define SQL_SRVC_DEFAULT 0x00000004L #define SQL_SRVC_ROW_SUBQUERY 0x00000008L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_SQL92_STRING_FUNCTIONS */ #if (ODBCVER >= 0x0300) #define SQL_SSF_CONVERT 0x00000001L #define SQL_SSF_LOWER 0x00000002L #define SQL_SSF_UPPER 0x00000004L #define SQL_SSF_SUBSTRING 0x00000008L #define SQL_SSF_TRANSLATE 0x00000010L #define SQL_SSF_TRIM_BOTH 0x00000020L #define SQL_SSF_TRIM_LEADING 0x00000040L #define SQL_SSF_TRIM_TRAILING 0x00000080L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_SQL92_VALUE_EXPRESSIONS */ #if (ODBCVER >= 0x0300) #define SQL_SVE_CASE 0x00000001L #define SQL_SVE_CAST 0x00000002L #define SQL_SVE_COALESCE 0x00000004L #define SQL_SVE_NULLIF 0x00000008L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_STANDARD_CLI_CONFORMANCE */ #if (ODBCVER >= 0x0300) #define SQL_SCC_XOPEN_CLI_VERSION1 0x00000001L #define SQL_SCC_ISO92_CLI 0x00000002L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_STATIC_SENSITIVITY */ #define SQL_SS_ADDITIONS 0x00000001L #define SQL_SS_DELETIONS 0x00000002L #define SQL_SS_UPDATES 0x00000004L /* * SQLGetInfo - SQL_SUBQUERIES */ #define SQL_SQ_COMPARISON 0x00000001L #define SQL_SQ_EXISTS 0x00000002L #define SQL_SQ_IN 0x00000004L #define SQL_SQ_QUANTIFIED 0x00000008L #define SQL_SQ_CORRELATED_SUBQUERIES 0x00000010L /* * SQLGetInfo - SQL_SYSTEM_FUNCTIONS */ #define SQL_FN_SYS_USERNAME 0x00000001L #define SQL_FN_SYS_DBNAME 0x00000002L #define SQL_FN_SYS_IFNULL 0x00000004L /* * SQLGetInfo - SQL_STRING_FUNCTIONS */ #define SQL_FN_STR_CONCAT 0x00000001L #define SQL_FN_STR_INSERT 0x00000002L #define SQL_FN_STR_LEFT 0x00000004L #define SQL_FN_STR_LTRIM 0x00000008L #define SQL_FN_STR_LENGTH 0x00000010L #define SQL_FN_STR_LOCATE 0x00000020L #define SQL_FN_STR_LCASE 0x00000040L #define SQL_FN_STR_REPEAT 0x00000080L #define SQL_FN_STR_REPLACE 0x00000100L #define SQL_FN_STR_RIGHT 0x00000200L #define SQL_FN_STR_RTRIM 0x00000400L #define SQL_FN_STR_SUBSTRING 0x00000800L #define SQL_FN_STR_UCASE 0x00001000L #define SQL_FN_STR_ASCII 0x00002000L #define SQL_FN_STR_CHAR 0x00004000L #define SQL_FN_STR_DIFFERENCE 0x00008000L #define SQL_FN_STR_LOCATE_2 0x00010000L #define SQL_FN_STR_SOUNDEX 0x00020000L #define SQL_FN_STR_SPACE 0x00040000L #if (ODBCVER >= 0x0300) #define SQL_FN_STR_BIT_LENGTH 0x00080000L #define SQL_FN_STR_CHAR_LENGTH 0x00100000L #define SQL_FN_STR_CHARACTER_LENGTH 0x00200000L #define SQL_FN_STR_OCTET_LENGTH 0x00400000L #define SQL_FN_STR_POSITION 0x00800000L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_TIMEDATE_ADD_INTERVALS * SQLGetInfo - SQL_TIMEDATE_DIFF_INTERVALS */ #define SQL_FN_TSI_FRAC_SECOND 0x00000001L #define SQL_FN_TSI_SECOND 0x00000002L #define SQL_FN_TSI_MINUTE 0x00000004L #define SQL_FN_TSI_HOUR 0x00000008L #define SQL_FN_TSI_DAY 0x00000010L #define SQL_FN_TSI_WEEK 0x00000020L #define SQL_FN_TSI_MONTH 0x00000040L #define SQL_FN_TSI_QUARTER 0x00000080L #define SQL_FN_TSI_YEAR 0x00000100L /* * SQLGetInfo - SQL_TIMEDATE_FUNCTIONS */ #define SQL_FN_TD_NOW 0x00000001L #define SQL_FN_TD_CURDATE 0x00000002L #define SQL_FN_TD_DAYOFMONTH 0x00000004L #define SQL_FN_TD_DAYOFWEEK 0x00000008L #define SQL_FN_TD_DAYOFYEAR 0x00000010L #define SQL_FN_TD_MONTH 0x00000020L #define SQL_FN_TD_QUARTER 0x00000040L #define SQL_FN_TD_WEEK 0x00000080L #define SQL_FN_TD_YEAR 0x00000100L #define SQL_FN_TD_CURTIME 0x00000200L #define SQL_FN_TD_HOUR 0x00000400L #define SQL_FN_TD_MINUTE 0x00000800L #define SQL_FN_TD_SECOND 0x00001000L #define SQL_FN_TD_TIMESTAMPADD 0x00002000L #define SQL_FN_TD_TIMESTAMPDIFF 0x00004000L #define SQL_FN_TD_DAYNAME 0x00008000L #define SQL_FN_TD_MONTHNAME 0x00010000L #if (ODBCVER >= 0x0300) #define SQL_FN_TD_CURRENT_DATE 0x00020000L #define SQL_FN_TD_CURRENT_TIME 0x00040000L #define SQL_FN_TD_CURRENT_TIMESTAMP 0x00080000L #define SQL_FN_TD_EXTRACT 0x00100000L #endif /* ODBCVER >= 0x0300 */ /* * SQLGetInfo - SQL_TXN_ISOLATION_OPTION */ #if (ODBCVER < 0x0300) #define SQL_TXN_VERSIONING 0x00000010L #endif /* ODBCVER < 0x0300 */ /* * SQLGetInfo - SQL_UNION */ #define SQL_U_UNION 0x00000001L #define SQL_U_UNION_ALL 0x00000002L /* * SQLGetInfo - SQL_UNION_STATEMENT */ #if (ODBCVER >= 0x0300) #define SQL_US_UNION SQL_U_UNION #define SQL_US_UNION_ALL SQL_U_UNION_ALL #endif /* ODBCVER >= 0x0300 */ /* * SQLGetStmtAttr - ODBC 2.x attributes */ #define SQL_QUERY_TIMEOUT 0 #define SQL_MAX_ROWS 1 #define SQL_NOSCAN 2 #define SQL_MAX_LENGTH 3 #define SQL_ASYNC_ENABLE 4 #define SQL_BIND_TYPE 5 #define SQL_CURSOR_TYPE 6 #define SQL_CONCURRENCY 7 #define SQL_KEYSET_SIZE 8 #define SQL_ROWSET_SIZE 9 #define SQL_SIMULATE_CURSOR 10 #define SQL_RETRIEVE_DATA 11 #define SQL_USE_BOOKMARKS 12 #define SQL_GET_BOOKMARK 13 #define SQL_ROW_NUMBER 14 /* * SQLGetStmtAttr - ODBC 3.x attributes */ #if (ODBCVER >= 0x0300) #define SQL_ATTR_ASYNC_ENABLE 4 #define SQL_ATTR_CONCURRENCY SQL_CONCURRENCY #define SQL_ATTR_CURSOR_TYPE SQL_CURSOR_TYPE #define SQL_ATTR_ENABLE_AUTO_IPD 15 #define SQL_ATTR_FETCH_BOOKMARK_PTR 16 #define SQL_ATTR_KEYSET_SIZE SQL_KEYSET_SIZE #define SQL_ATTR_MAX_LENGTH SQL_MAX_LENGTH #define SQL_ATTR_MAX_ROWS SQL_MAX_ROWS #define SQL_ATTR_NOSCAN SQL_NOSCAN #define SQL_ATTR_PARAM_BIND_OFFSET_PTR 17 #define SQL_ATTR_PARAM_BIND_TYPE 18 #define SQL_ATTR_PARAM_OPERATION_PTR 19 #define SQL_ATTR_PARAM_STATUS_PTR 20 #define SQL_ATTR_PARAMS_PROCESSED_PTR 21 #define SQL_ATTR_PARAMSET_SIZE 22 #define SQL_ATTR_QUERY_TIMEOUT SQL_QUERY_TIMEOUT #define SQL_ATTR_RETRIEVE_DATA SQL_RETRIEVE_DATA #define SQL_ATTR_ROW_BIND_OFFSET_PTR 23 #define SQL_ATTR_ROW_BIND_TYPE SQL_BIND_TYPE #define SQL_ATTR_ROW_NUMBER SQL_ROW_NUMBER /*GetStmtAttr*/ #define SQL_ATTR_ROW_OPERATION_PTR 24 #define SQL_ATTR_ROW_STATUS_PTR 25 #define SQL_ATTR_ROWS_FETCHED_PTR 26 #define SQL_ATTR_ROW_ARRAY_SIZE 27 #define SQL_ATTR_SIMULATE_CURSOR SQL_SIMULATE_CURSOR #define SQL_ATTR_USE_BOOKMARKS SQL_USE_BOOKMARKS #endif /* ODBCVER >= 0x0300 */ #if (ODBCVER < 0x0300) #define SQL_STMT_OPT_MAX SQL_ROW_NUMBER #define SQL_STMT_OPT_MIN SQL_QUERY_TIMEOUT #endif /* ODBCVER < 0x0300 */ /* * SQLGetStmtAttr - SQL_ATTR_ASYNC_ENABLE */ #define SQL_ASYNC_ENABLE_OFF 0UL #define SQL_ASYNC_ENABLE_ON 1UL #define SQL_ASYNC_ENABLE_DEFAULT SQL_ASYNC_ENABLE_OFF /* * SQLGetStmtAttr - SQL_ATTR_PARAM_BIND_TYPE */ #if (ODBCVER >= 0x0300) #define SQL_PARAM_BIND_BY_COLUMN 0UL #define SQL_PARAM_BIND_TYPE_DEFAULT SQL_PARAM_BIND_BY_COLUMN #endif /* ODBCVER >= 0x0300 */ /* * SQLGetStmtAttr - SQL_BIND_TYPE */ #define SQL_BIND_BY_COLUMN 0UL #define SQL_BIND_TYPE_DEFAULT SQL_BIND_BY_COLUMN /* * SQLGetStmtAttr - SQL_CONCURRENCY */ #define SQL_CONCUR_READ_ONLY 1 #define SQL_CONCUR_LOCK 2 #define SQL_CONCUR_ROWVER 3 #define SQL_CONCUR_VALUES 4 #define SQL_CONCUR_DEFAULT SQL_CONCUR_READ_ONLY /* * SQLGetStmtAttr - SQL_CURSOR_TYPE */ #define SQL_CURSOR_FORWARD_ONLY 0UL #define SQL_CURSOR_KEYSET_DRIVEN 1UL #define SQL_CURSOR_DYNAMIC 2UL #define SQL_CURSOR_STATIC 3UL #define SQL_CURSOR_TYPE_DEFAULT SQL_CURSOR_FORWARD_ONLY /* * SQLGetStmtAttr - SQL_KEYSET_SIZE */ #define SQL_KEYSET_SIZE_DEFAULT 0UL /* * SQLGetStmtAttr - SQL_MAX_LENGTH */ #define SQL_MAX_LENGTH_DEFAULT 0UL /* * SQLGetStmtAttr - SQL_MAX_ROWS */ #define SQL_MAX_ROWS_DEFAULT 0UL /* * SQLGetStmtAttr - SQL_NOSCAN */ #define SQL_NOSCAN_OFF 0UL /* 1.0 FALSE */ #define SQL_NOSCAN_ON 1UL /* 1.0 TRUE */ #define SQL_NOSCAN_DEFAULT SQL_NOSCAN_OFF /* * SQLGetStmtAttr - SQL_QUERY_TIMEOUT */ #define SQL_QUERY_TIMEOUT_DEFAULT 0UL /* * SQLGetStmtAttr - SQL_RETRIEVE_DATA */ #define SQL_RD_OFF 0UL #define SQL_RD_ON 1UL #define SQL_RD_DEFAULT SQL_RD_ON /* * SQLGetStmtAttr - SQL_ROWSET_SIZE */ #define SQL_ROWSET_SIZE_DEFAULT 1UL /* * SQLGetStmtAttr - SQL_SIMULATE_CURSOR */ #define SQL_SC_NON_UNIQUE 0UL #define SQL_SC_TRY_UNIQUE 1UL #define SQL_SC_UNIQUE 2UL /* * SQLGetStmtAttr - SQL_USE_BOOKMARKS */ #define SQL_UB_OFF 0UL #define SQL_UB_ON 1UL #define SQL_UB_DEFAULT SQL_UB_OFF #if (ODBCVER >= 0x0300) #define SQL_UB_FIXED SQL_UB_ON #define SQL_UB_VARIABLE 2UL #endif /* ODBCVER >= 0x0300 */ /* * SQLGetTypeInfo - SEARCHABLE */ #if (ODBCVER >= 0x0300) #define SQL_COL_PRED_CHAR SQL_LIKE_ONLY #define SQL_COL_PRED_BASIC SQL_ALL_EXCEPT_LIKE #endif /* ODBCVER >= 0x0300 */ /* * SQLSetPos */ #define SQL_ENTIRE_ROWSET 0 /* * SQLSetPos - Operation */ #define SQL_POSITION 0 #define SQL_REFRESH 1 #define SQL_UPDATE 2 #define SQL_DELETE 3 /* * SQLBulkOperations - Operation */ #define SQL_ADD 4 #define SQL_SETPOS_MAX_OPTION_VALUE SQL_ADD #if (ODBCVER >= 0x0300) #define SQL_UPDATE_BY_BOOKMARK 5 #define SQL_DELETE_BY_BOOKMARK 6 #define SQL_FETCH_BY_BOOKMARK 7 #endif /* ODBCVER >= 0x0300 */ /* * SQLSetPos - LockType */ #define SQL_LOCK_NO_CHANGE 0 #define SQL_LOCK_EXCLUSIVE 1 #define SQL_LOCK_UNLOCK 2 #define SQL_SETPOS_MAX_LOCK_VALUE SQL_LOCK_UNLOCK /* * SQLSetPos macros */ #define SQL_POSITION_TO(hstmt,irow) \ SQLSetPos(hstmt,irow,SQL_POSITION,SQL_LOCK_NO_CHANGE) #define SQL_LOCK_RECORD(hstmt,irow,fLock) \ SQLSetPos(hstmt,irow,SQL_POSITION,fLock) #define SQL_REFRESH_RECORD(hstmt,irow,fLock) \ SQLSetPos(hstmt,irow,SQL_REFRESH,fLock) #define SQL_UPDATE_RECORD(hstmt,irow) \ SQLSetPos(hstmt,irow,SQL_UPDATE,SQL_LOCK_NO_CHANGE) #define SQL_DELETE_RECORD(hstmt,irow) \ SQLSetPos(hstmt,irow,SQL_DELETE,SQL_LOCK_NO_CHANGE) #define SQL_ADD_RECORD(hstmt,irow) \ SQLSetPos(hstmt,irow,SQL_ADD,SQL_LOCK_NO_CHANGE) /* * SQLSpecialColumns - Column types and scopes */ #define SQL_BEST_ROWID 1 #define SQL_ROWVER 2 /* * All the ODBC keywords */ #define SQL_ODBC_KEYWORDS \ "ABSOLUTE,ACTION,ADA,ADD,ALL,ALLOCATE,ALTER,AND,ANY,ARE,AS,"\ "ASC,ASSERTION,AT,AUTHORIZATION,AVG,"\ "BEGIN,BETWEEN,BIT,BIT_LENGTH,BOTH,BY,CASCADE,CASCADED,CASE,CAST,CATALOG,"\ "CHAR,CHAR_LENGTH,CHARACTER,CHARACTER_LENGTH,CHECK,CLOSE,COALESCE,"\ "COLLATE,COLLATION,COLUMN,COMMIT,CONNECT,CONNECTION,CONSTRAINT,"\ "CONSTRAINTS,CONTINUE,CONVERT,CORRESPONDING,COUNT,CREATE,CROSS,CURRENT,"\ "CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,"\ "DATE,DAY,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFERRABLE,"\ "DEFERRED,DELETE,DESC,DESCRIBE,DESCRIPTOR,DIAGNOSTICS,DISCONNECT,"\ "DISTINCT,DOMAIN,DOUBLE,DROP,"\ "ELSE,END,END-EXEC,ESCAPE,EXCEPT,EXCEPTION,EXEC,EXECUTE,"\ "EXISTS,EXTERNAL,EXTRACT,"\ "FALSE,FETCH,FIRST,FLOAT,FOR,FOREIGN,FORTRAN,FOUND,FROM,FULL,"\ "GET,GLOBAL,GO,GOTO,GRANT,GROUP,HAVING,HOUR,"\ "IDENTITY,IMMEDIATE,IN,INCLUDE,INDEX,INDICATOR,INITIALLY,INNER,"\ "INPUT,INSENSITIVE,INSERT,INT,INTEGER,INTERSECT,INTERVAL,INTO,IS,ISOLATION,"\ "JOIN,KEY,LANGUAGE,LAST,LEADING,LEFT,LEVEL,LIKE,LOCAL,LOWER,"\ "MATCH,MAX,MIN,MINUTE,MODULE,MONTH,"\ "NAMES,NATIONAL,NATURAL,NCHAR,NEXT,NO,NONE,NOT,NULL,NULLIF,NUMERIC,"\ "OCTET_LENGTH,OF,ON,ONLY,OPEN,OPTION,OR,ORDER,OUTER,OUTPUT,OVERLAPS,"\ "PAD,PARTIAL,PASCAL,PLI,POSITION,PRECISION,PREPARE,PRESERVE,"\ "PRIMARY,PRIOR,PRIVILEGES,PROCEDURE,PUBLIC,"\ "READ,REAL,REFERENCES,RELATIVE,RESTRICT,REVOKE,RIGHT,ROLLBACK,ROWS"\ "SCHEMA,SCROLL,SECOND,SECTION,SELECT,SESSION,SESSION_USER,SET,SIZE,"\ "SMALLINT,SOME,SPACE,SQL,SQLCA,SQLCODE,SQLERROR,SQLSTATE,SQLWARNING,"\ "SUBSTRING,SUM,SYSTEM_USER,"\ "TABLE,TEMPORARY,THEN,TIME,TIMESTAMP,TIMEZONE_HOUR,TIMEZONE_MINUTE,"\ "TO,TRAILING,TRANSACTION,TRANSLATE,TRANSLATION,TRIM,TRUE,"\ "UNION,UNIQUE,UNKNOWN,UPDATE,UPPER,USAGE,USER,USING,"\ "VALUE,VALUES,VARCHAR,VARYING,VIEW,WHEN,WHENEVER,WHERE,WITH,WORK,WRITE,"\ "YEAR,ZONE" /* * ---------------------------------------------------------------------- * Level 2 Functions * ---------------------------------------------------------------------- */ /* * SQLExtendedFetch - fFetchType */ #define SQL_FETCH_BOOKMARK 8 /* * SQLExtendedFetch - rgfRowStatus */ #define SQL_ROW_SUCCESS 0 #define SQL_ROW_DELETED 1 #define SQL_ROW_UPDATED 2 #define SQL_ROW_NOROW 3 #define SQL_ROW_ADDED 4 #define SQL_ROW_ERROR 5 #if (ODBCVER >= 0x0300) #define SQL_ROW_SUCCESS_WITH_INFO 6 #define SQL_ROW_PROCEED 0 #define SQL_ROW_IGNORE 1 #endif /* * SQL_DESC_ARRAY_STATUS_PTR */ #if (ODBCVER >= 0x0300) #define SQL_PARAM_SUCCESS 0 #define SQL_PARAM_SUCCESS_WITH_INFO 6 #define SQL_PARAM_ERROR 5 #define SQL_PARAM_UNUSED 7 #define SQL_PARAM_DIAG_UNAVAILABLE 1 #define SQL_PARAM_PROCEED 0 #define SQL_PARAM_IGNORE 1 #endif /* ODBCVER >= 0x0300 */ /* * SQLForeignKeys - UPDATE_RULE/DELETE_RULE */ #define SQL_CASCADE 0 #define SQL_RESTRICT 1 #define SQL_SET_NULL 2 #if (ODBCVER >= 0x0250) #define SQL_NO_ACTION 3 #define SQL_SET_DEFAULT 4 #endif /* ODBCVER >= 0x0250 */ /* * SQLForeignKeys - DEFERABILITY */ #if (ODBCVER >= 0x0300) #define SQL_INITIALLY_DEFERRED 5 #define SQL_INITIALLY_IMMEDIATE 6 #define SQL_NOT_DEFERRABLE 7 #endif /* ODBCVER >= 0x0300 */ /* * SQLBindParameter - fParamType * SQLProcedureColumns - COLUMN_TYPE */ #define SQL_PARAM_TYPE_UNKNOWN 0 #define SQL_PARAM_INPUT 1 #define SQL_PARAM_INPUT_OUTPUT 2 #define SQL_RESULT_COL 3 #define SQL_PARAM_OUTPUT 4 #define SQL_RETURN_VALUE 5 /* * SQLProcedures - PROCEDURE_TYPE */ #define SQL_PT_UNKNOWN 0 #define SQL_PT_PROCEDURE 1 #define SQL_PT_FUNCTION 2 /* * SQLSetParam to SQLBindParameter conversion */ #define SQL_PARAM_TYPE_DEFAULT SQL_PARAM_INPUT_OUTPUT #define SQL_SETPARAM_VALUE_MAX (-1L) /* * SQLStatistics - fAccuracy */ #define SQL_QUICK 0 #define SQL_ENSURE 1 /* * SQLStatistics - TYPE */ #define SQL_TABLE_STAT 0 /* * SQLTables */ #if (ODBCVER >= 0x0300) #define SQL_ALL_CATALOGS "%" #define SQL_ALL_SCHEMAS "%" #define SQL_ALL_TABLE_TYPES "%" #endif /* ODBCVER >= 0x0300 */ /* * SQLSpecialColumns - PSEUDO_COLUMN */ #define SQL_PC_NOT_PSEUDO 1 /* * Deprecated defines from prior versions of ODBC */ #define SQL_DATABASE_NAME 16 #define SQL_FD_FETCH_PREV SQL_FD_FETCH_PRIOR #define SQL_FETCH_PREV SQL_FETCH_PRIOR #define SQL_CONCUR_TIMESTAMP SQL_CONCUR_ROWVER #define SQL_SCCO_OPT_TIMESTAMP SQL_SCCO_OPT_ROWVER #define SQL_CC_DELETE SQL_CB_DELETE #define SQL_CR_DELETE SQL_CB_DELETE #define SQL_CC_CLOSE SQL_CB_CLOSE #define SQL_CR_CLOSE SQL_CB_CLOSE #define SQL_CC_PRESERVE SQL_CB_PRESERVE #define SQL_CR_PRESERVE SQL_CB_PRESERVE #if (ODBCVER < 0x0200) #define SQL_FETCH_RESUME 7 #endif #define SQL_SCROLL_FORWARD_ONLY 0L #define SQL_SCROLL_KEYSET_DRIVEN (-1L) #define SQL_SCROLL_DYNAMIC (-2L) #define SQL_SCROLL_STATIC (-3L) /* * Level 1 function prototypes */ SQLRETURN SQL_API SQLDriverConnect ( SQLHDBC hdbc, SQLHWND hwnd, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion); /* * Level 2 function prototypes */ SQLRETURN SQL_API SQLBrowseConnect ( SQLHDBC hdbc, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut); #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLBulkOperations ( SQLHSTMT StatementHandle, SQLSMALLINT Operation); #endif /* ODBCVER >= 0x0300 */ SQLRETURN SQL_API SQLColAttributes ( SQLHSTMT hstmt, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLLEN * pfDesc); SQLRETURN SQL_API SQLColumnPrivileges ( SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName); SQLRETURN SQL_API SQLDescribeParam ( SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT * pfSqlType, SQLULEN * pcbParamDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable); SQLRETURN SQL_API SQLExtendedFetch ( SQLHSTMT hstmt, SQLUSMALLINT fFetchType, SQLLEN irow, SQLULEN * pcrow, SQLUSMALLINT * rgfRowStatus); SQLRETURN SQL_API SQLForeignKeys ( SQLHSTMT hstmt, SQLCHAR * szPkCatalogName, SQLSMALLINT cbPkCatalogName, SQLCHAR * szPkSchemaName, SQLSMALLINT cbPkSchemaName, SQLCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLCHAR * szFkCatalogName, SQLSMALLINT cbFkCatalogName, SQLCHAR * szFkSchemaName, SQLSMALLINT cbFkSchemaName, SQLCHAR * szFkTableName, SQLSMALLINT cbFkTableName); SQLRETURN SQL_API SQLMoreResults ( SQLHSTMT hstmt); SQLRETURN SQL_API SQLNativeSql ( SQLHDBC hdbc, SQLCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER * pcbSqlStr); SQLRETURN SQL_API SQLNumParams ( SQLHSTMT hstmt, SQLSMALLINT * pcpar); SQLRETURN SQL_API SQLParamOptions ( SQLHSTMT hstmt, SQLULEN crow, SQLULEN * pirow); SQLRETURN SQL_API SQLPrimaryKeys ( SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName); SQLRETURN SQL_API SQLProcedureColumns ( SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szProcName, SQLSMALLINT cbProcName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName); SQLRETURN SQL_API SQLProcedures ( SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szProcName, SQLSMALLINT cbProcName); SQLRETURN SQL_API SQLSetPos ( SQLHSTMT hstmt, SQLSETPOSIROW irow, SQLUSMALLINT fOption, SQLUSMALLINT fLock); SQLRETURN SQL_API SQLTablePrivileges ( SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName); SQLRETURN SQL_API SQLDrivers ( SQLHENV henv, SQLUSMALLINT fDirection, SQLCHAR * szDriverDesc, SQLSMALLINT cbDriverDescMax, SQLSMALLINT * pcbDriverDesc, SQLCHAR * szDriverAttributes, SQLSMALLINT cbDrvrAttrMax, SQLSMALLINT * pcbDrvrAttr); SQLRETURN SQL_API SQLBindParameter ( SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT fParamType, SQLSMALLINT fCType, SQLSMALLINT fSqlType, SQLULEN cbColDef, SQLSMALLINT ibScale, SQLPOINTER rgbValue, SQLLEN cbValueMax, SQLLEN * pcbValue); /* * Depreciated - use SQLSetStmtOptions */ SQLRETURN SQL_API SQLSetScrollOptions ( /* Use SQLSetStmtOptions */ SQLHSTMT hstmt, SQLUSMALLINT fConcurrency, SQLLEN crowKeyset, SQLUSMALLINT crowRowset); /* * SQLAllocHandleStd - make SQLAllocHandle compatible with X/Open standard * * NOTE: An application should not call SQLAllocHandleStd directly */ #ifdef ODBC_STD #define SQLAllocHandle SQLAllocHandleStd #define SQLAllocEnv(phenv) \ SQLAllocHandleStd(SQL_HANDLE_ENV, SQL_NULL_HANDLE, phenv) #if (ODBCVER >= 0x0300) SQLRETURN SQL_API SQLAllocHandleStd ( SQLSMALLINT fHandleType, SQLHANDLE hInput, SQLHANDLE * phOutput); #endif /* Internal type subcodes */ #define SQL_YEAR SQL_CODE_YEAR #define SQL_MONTH SQL_CODE_MONTH #define SQL_DAY SQL_CODE_DAY #define SQL_HOUR SQL_CODE_HOUR #define SQL_MINUTE SQL_CODE_MINUTE #define SQL_SECOND SQL_CODE_SECOND #define SQL_YEAR_TO_MONTH SQL_CODE_YEAR_TO_MONTH #define SQL_DAY_TO_HOUR SQL_CODE_DAY_TO_HOUR #define SQL_DAY_TO_MINUTE SQL_CODE_DAY_TO_MINUTE #define SQL_DAY_TO_SECOND SQL_CODE_DAY_TO_SECOND #define SQL_HOUR_TO_MINUTE SQL_CODE_HOUR_TO_MINUTE #define SQL_HOUR_TO_SECOND SQL_CODE_HOUR_TO_SECOND #define SQL_MINUTE_TO_SECOND SQL_CODE_MINUTE_TO_SECOND #endif /* ODBC_STD */ #ifdef __cplusplus } #endif #include #endif /* _SQLEXT_H */ libiodbc-3.52.9/include/config.h.in0000644000076400007640000000771712323210653013771 00000000000000/* include/config.h.in. Generated from configure.in by autoheader. */ /* Default location for FILEDSN data sources */ #undef DEFAULT_FILEDSNPATH /* Define if we detected a GUI library we can use */ #undef GUI /* Define to 1 if you have the `asprintf' function. */ #undef HAVE_ASPRINTF /* Define to 1 if you have the `dladdr' function */ #undef HAVE_DLADDR /* Define if you have the -ldld library */ #undef HAVE_DLD /* Define to 1 if you have the header file. */ #undef HAVE_DLD_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `dlopen' function. */ #undef HAVE_DLOPEN /* Define to 1 if you have the header file. */ #undef HAVE_DL_H /* Define to 1 if you have the Dl_info structure */ #undef HAVE_DL_INFO /* Define if you have the DYLD library */ #undef HAVE_DYLD /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if you have the -ldl library */ #undef HAVE_LIBDL /* Define to 1 if you have the `localtime_r' function. */ #undef HAVE_LOCALTIME_R /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define if you have the shl_load function */ #undef HAVE_SHL_LOAD /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the `towlower' function. */ #undef HAVE_TOWLOWER /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_WCHAR_H /* Define to 1 if you have the `wcscat' function. */ #undef HAVE_WCSCAT /* Define to 1 if you have the `wcschr' function. */ #undef HAVE_WCSCHR /* Define to 1 if you have the `wcscmp' function. */ #undef HAVE_WCSCMP /* Define to 1 if you have the `wcscpy' function. */ #undef HAVE_WCSCPY /* Define to 1 if you have the `wcslen' function. */ #undef HAVE_WCSLEN /* Define to 1 if you have the `wcsncasecmp' function. */ #undef HAVE_WCSNCASECMP /* Define to 1 if you have the `wcsncpy' function. */ #undef HAVE_WCSNCPY /* Define to 1 if you have the `_dlopen' function. */ #undef HAVE__DLOPEN /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define if dlsym() requires a leading underscore in symbol names. */ #undef NEED_USCORE /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define path to systemwide odbcinst.ini file */ #undef SYS_ODBCINST_INI /* Define path to systemwide odbc.ini file */ #undef SYS_ODBC_INI /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Version number of package */ #undef VERSION /* Define to empty if `const' does not conform to ANSI C. */ #undef const libiodbc-3.52.9/mac/0000755000076400007640000000000012323210720011122 500000000000000libiodbc-3.52.9/mac/iODBCdrvproxy/0000755000076400007640000000000012323210721013621 500000000000000libiodbc-3.52.9/mac/iODBCdrvproxy/iODBCdrvproxy.xcodeproj/0000755000076400007640000000000012323210721020313 500000000000000libiodbc-3.52.9/mac/iODBCdrvproxy/iODBCdrvproxy.xcodeproj/project.pbxproj0000644000076400007640000006266012323204667023335 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ CDAE3BA40987D6B4003250F8 /* gui.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C124206005FB6B37F000001 /* gui.h */; }; CDAE3BA50987D6B4003250F8 /* gui.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C12420C005FB6B37F000001 /* gui.h */; }; CDAE3BA60987D6B4003250F8 /* iodbc_error.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C12421E005FB79A7F000001 /* iodbc_error.h */; }; CDAE3BA70987D6B4003250F8 /* iodbc.h in Headers */ = {isa = PBXBuildFile; fileRef = F53EDAEC029B957C01A801DE /* iodbc.h */; }; CDAE3BA80987D6B4003250F8 /* herr.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C2E5AE05161F4601A801EC /* herr.h */; }; CDAE3BA90987D6B4003250F8 /* unicode.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C2EB330518B08A01A801EC /* unicode.h */; }; CDAE3BAA0987D6B4003250F8 /* odbcinst.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C2EB360518B22E01A801EC /* odbcinst.h */; }; CDAE3BAB0987D6B4003250F8 /* iodbcadm.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C2EB380518B26C01A801EC /* iodbcadm.h */; }; CDAE3BAC0987D6B4003250F8 /* sqlucode.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C2EB3A0518B2C501A801EC /* sqlucode.h */; }; CDAE3BAD0987D6B4003250F8 /* sqlext.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C2EB3C0518B36001A801EC /* sqlext.h */; }; CDAE3BAE0987D6B4003250F8 /* sqltypes.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C2EB3D0518B36001A801EC /* sqltypes.h */; }; CDAE3BAF0987D6B4003250F8 /* iodbcinst.h in Headers */ = {isa = PBXBuildFile; fileRef = 716C452B05B6EF4D0045FADB /* iodbcinst.h */; }; CDAE3BB00987D6B4003250F8 /* sql.h in Headers */ = {isa = PBXBuildFile; fileRef = 716C452F05B6EF8B0045FADB /* sql.h */; }; CDAE3BB10987D6B4003250F8 /* iodbcext.h in Headers */ = {isa = PBXBuildFile; fileRef = 71A26EE1069D5691005AC343 /* iodbcext.h */; }; CDAE3BB20987D6B4003250F8 /* iodbcunix.h in Headers */ = {isa = PBXBuildFile; fileRef = 71A26EE2069D5691005AC343 /* iodbcunix.h */; }; CDAE3BB40987D6B4003250F8 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; }; CDAE3BB50987D6B4003250F8 /* gensetup in Resources */ = {isa = PBXBuildFile; fileRef = 0145C11DFFD6607A7F000001 /* gensetup.xib */; }; CDAE3BB60987D6B4003250F8 /* login in Resources */ = {isa = PBXBuildFile; fileRef = 10DCE822FFD6A5D57F000001 /* login.xib */; }; CDAE3BB70987D6B4003250F8 /* confirmation in Resources */ = {isa = PBXBuildFile; fileRef = 859843D707D356DA0022E958 /* confirmation.xib */; }; CDAE3BB90987D6B4003250F8 /* ConfigDriver.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C1241FC005FB6B37F000001 /* ConfigDriver.c */; }; CDAE3BBA0987D6B4003250F8 /* ConfigDSN.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C1241FD005FB6B37F000001 /* ConfigDSN.c */; }; CDAE3BBB0987D6B4003250F8 /* drvconn.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C1241FE005FB6B37F000001 /* drvconn.c */; }; CDAE3BBC0987D6B4003250F8 /* drvproxy.exp in Sources */ = {isa = PBXBuildFile; fileRef = 1C1241FF005FB6B37F000001 /* drvproxy.exp */; }; CDAE3BBD0987D6B4003250F8 /* Info.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C124207005FB6B37F000001 /* Info.c */; }; CDAE3BBE0987D6B4003250F8 /* gensetup.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C12420B005FB6B37F000001 /* gensetup.c */; }; CDAE3BBF0987D6B4003250F8 /* loginbox.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C12420D005FB6B37F000001 /* loginbox.c */; }; CDAE3BC00987D6B4003250F8 /* unicode.c in Sources */ = {isa = PBXBuildFile; fileRef = F5C2EB320518B08A01A801EC /* unicode.c */; }; CDAE3BC10987D6B4003250F8 /* confirm.c in Sources */ = {isa = PBXBuildFile; fileRef = 859838AB07CF6D6D0022E958 /* confirm.c */; }; CDAE3BC30987D6B4003250F8 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A7B5B2F005FB5307F000001 /* CoreFoundation.framework */; }; CDAE3BC40987D6B4003250F8 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A7B5B30005FB5307F000001 /* Carbon.framework */; }; CDAE3BC50987D6B4003250F8 /* iODBCinst.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85D1BB9807E7D55A0070A59E /* iODBCinst.framework */; }; /* End PBXBuildFile section */ /* Begin PBXBuildStyle section */ 0A7B5B2D005FB5097F000001 /* Development */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 3.52.8; "Current project version" = 3.52.8; DEPLOYMENT_POSTPROCESSING = YES; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../macosx/drvproxy.exp; FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; LIBRARY_STYLE = Bundle; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = ( "-DODBCVER=0x351", "-D_MACX", ); RESMERGER_SOURCES_FORK = data; SKIP_INSTALL = YES; "Zero link" = NO; }; name = Development; }; 0A7B5B2E005FB5097F000001 /* Deployment */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; ZERO_LINK = NO; }; name = Deployment; }; /* End PBXBuildStyle section */ /* Begin PBXFileReference section */ 0145C11EFFD6607A7F000001 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = English; path = English.lproj/gensetup.xib; sourceTree = ""; }; 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 0A7B5B2F005FB5307F000001 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 0A7B5B30005FB5307F000001 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 10DCE823FFD6A5D57F000001 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = English; path = English.lproj/login.xib; sourceTree = ""; }; 1C1241FC005FB6B37F000001 /* ConfigDriver.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ConfigDriver.c; sourceTree = ""; }; 1C1241FD005FB6B37F000001 /* ConfigDSN.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ConfigDSN.c; sourceTree = ""; }; 1C1241FE005FB6B37F000001 /* drvconn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = drvconn.c; sourceTree = ""; }; 1C1241FF005FB6B37F000001 /* drvproxy.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = drvproxy.exp; sourceTree = ""; }; 1C124202005FB6B37F000001 /* gensetup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gensetup.c; sourceTree = ""; }; 1C124203005FB6B37F000001 /* gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gui.h; sourceTree = ""; }; 1C124204005FB6B37F000001 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; 1C124206005FB6B37F000001 /* gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gui.h; sourceTree = ""; }; 1C124207005FB6B37F000001 /* Info.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Info.c; sourceTree = ""; }; 1C12420B005FB6B37F000001 /* gensetup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gensetup.c; sourceTree = ""; }; 1C12420C005FB6B37F000001 /* gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gui.h; sourceTree = ""; }; 1C12420D005FB6B37F000001 /* loginbox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = loginbox.c; sourceTree = ""; }; 1C12421E005FB79A7F000001 /* iodbc_error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iodbc_error.h; path = ../../iodbcinst/iodbc_error.h; sourceTree = SOURCE_ROOT; }; 716C452B05B6EF4D0045FADB /* iodbcinst.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbcinst.h; path = ../../include/iodbcinst.h; sourceTree = SOURCE_ROOT; }; 716C452F05B6EF8B0045FADB /* sql.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sql.h; path = ../../include/sql.h; sourceTree = SOURCE_ROOT; }; 71A26EE1069D5691005AC343 /* iodbcext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbcext.h; path = ../../include/iodbcext.h; sourceTree = SOURCE_ROOT; }; 71A26EE2069D5691005AC343 /* iodbcunix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbcunix.h; path = ../../include/iodbcunix.h; sourceTree = SOURCE_ROOT; }; 859838AB07CF6D6D0022E958 /* confirm.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = confirm.c; sourceTree = ""; }; 859843D807D356DA0022E958 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = English; path = English.lproj/confirmation.xib; sourceTree = ""; }; 85D1BB9807E7D55A0070A59E /* iODBCinst.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBCinst.framework; path = ../../mac/iODBCinst/build/iODBCinst.framework; sourceTree = SOURCE_ROOT; }; CDAE3BCB0987D6B4003250F8 /* Info-iODBCdrvproxy.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "Info-iODBCdrvproxy.plist"; sourceTree = ""; }; CDAE3BCC0987D6B4003250F8 /* iODBCdrvproxy.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iODBCdrvproxy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; F53EDAEC029B957C01A801DE /* iodbc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iodbc.h; path = ../../include/iodbc.h; sourceTree = SOURCE_ROOT; }; F5C2E5AE05161F4601A801EC /* herr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = herr.h; path = ../../iodbc/herr.h; sourceTree = SOURCE_ROOT; }; F5C2EB320518B08A01A801EC /* unicode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unicode.c; path = ../../iodbcinst/unicode.c; sourceTree = SOURCE_ROOT; }; F5C2EB330518B08A01A801EC /* unicode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = unicode.h; path = ../../iodbcinst/unicode.h; sourceTree = SOURCE_ROOT; }; F5C2EB360518B22E01A801EC /* odbcinst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = odbcinst.h; path = ../../include/odbcinst.h; sourceTree = SOURCE_ROOT; }; F5C2EB380518B26C01A801EC /* iodbcadm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iodbcadm.h; path = ../../iodbcadm/iodbcadm.h; sourceTree = SOURCE_ROOT; }; F5C2EB3A0518B2C501A801EC /* sqlucode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sqlucode.h; path = ../../include/sqlucode.h; sourceTree = SOURCE_ROOT; }; F5C2EB3C0518B36001A801EC /* sqlext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sqlext.h; path = ../../include/sqlext.h; sourceTree = SOURCE_ROOT; }; F5C2EB3D0518B36001A801EC /* sqltypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sqltypes.h; path = ../../include/sqltypes.h; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ CDAE3BC20987D6B4003250F8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CDAE3BC30987D6B4003250F8 /* CoreFoundation.framework in Frameworks */, CDAE3BC40987D6B4003250F8 /* Carbon.framework in Frameworks */, CDAE3BC50987D6B4003250F8 /* iODBCinst.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 089C166AFE841209C02AAC07 /* iODBCdrvproxy */ = { isa = PBXGroup; children = ( 08FB77AFFE84173DC02AAC07 /* Source */, 089C167CFE841241C02AAC07 /* Resources */, 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */, 19C28FB6FE9D52B211CA2CBB /* Products */, CDAE3BCB0987D6B4003250F8 /* Info-iODBCdrvproxy.plist */, ); name = iODBCdrvproxy; sourceTree = ""; }; 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( 85D1BB9807E7D55A0070A59E /* iODBCinst.framework */, 0A7B5B2F005FB5307F000001 /* CoreFoundation.framework */, 0A7B5B30005FB5307F000001 /* Carbon.framework */, ); name = "External Frameworks and Libraries"; sourceTree = ""; }; 089C167CFE841241C02AAC07 /* Resources */ = { isa = PBXGroup; children = ( 859843D707D356DA0022E958 /* confirmation */, 089C167DFE841241C02AAC07 /* InfoPlist.strings */, 0145C11DFFD6607A7F000001 /* gensetup */, 10DCE822FFD6A5D57F000001 /* login */, ); name = Resources; sourceTree = ""; }; 08FB77AFFE84173DC02AAC07 /* Source */ = { isa = PBXGroup; children = ( 1C1241FB005FB6B37F000001 /* drvproxy */, 1C12421B005FB6F07F000001 /* iODBC */, F52E33EB01A578E601A801D2 /* Mac basic functions */, ); name = Source; sourceTree = ""; }; 19C28FB6FE9D52B211CA2CBB /* Products */ = { isa = PBXGroup; children = ( CDAE3BCC0987D6B4003250F8 /* iODBCdrvproxy.bundle */, ); name = Products; sourceTree = ""; }; 1C1241FB005FB6B37F000001 /* drvproxy */ = { isa = PBXGroup; children = ( 1C1241FC005FB6B37F000001 /* ConfigDriver.c */, 1C1241FD005FB6B37F000001 /* ConfigDSN.c */, 1C1241FE005FB6B37F000001 /* drvconn.c */, 1C1241FF005FB6B37F000001 /* drvproxy.exp */, 1C124200005FB6B37F000001 /* gtk */, 1C124206005FB6B37F000001 /* gui.h */, 1C124207005FB6B37F000001 /* Info.c */, 1C124209005FB6B37F000001 /* macosx */, ); name = drvproxy; path = ../../drvproxy; sourceTree = SOURCE_ROOT; }; 1C124200005FB6B37F000001 /* gtk */ = { isa = PBXGroup; children = ( 1C124202005FB6B37F000001 /* gensetup.c */, 1C124203005FB6B37F000001 /* gui.h */, 1C124204005FB6B37F000001 /* Makefile.am */, ); path = gtk; sourceTree = ""; }; 1C124209005FB6B37F000001 /* macosx */ = { isa = PBXGroup; children = ( 859838AB07CF6D6D0022E958 /* confirm.c */, 1C12420B005FB6B37F000001 /* gensetup.c */, 1C12420C005FB6B37F000001 /* gui.h */, 1C12420D005FB6B37F000001 /* loginbox.c */, ); path = macosx; sourceTree = ""; }; 1C12421B005FB6F07F000001 /* iODBC */ = { isa = PBXGroup; children = ( 71A26EE1069D5691005AC343 /* iodbcext.h */, 71A26EE2069D5691005AC343 /* iodbcunix.h */, 716C452F05B6EF8B0045FADB /* sql.h */, 716C452B05B6EF4D0045FADB /* iodbcinst.h */, 1C12421E005FB79A7F000001 /* iodbc_error.h */, F53EDAEC029B957C01A801DE /* iodbc.h */, F5C2E5AE05161F4601A801EC /* herr.h */, F5C2EB320518B08A01A801EC /* unicode.c */, F5C2EB330518B08A01A801EC /* unicode.h */, F5C2EB360518B22E01A801EC /* odbcinst.h */, F5C2EB380518B26C01A801EC /* iodbcadm.h */, F5C2EB3A0518B2C501A801EC /* sqlucode.h */, F5C2EB3C0518B36001A801EC /* sqlext.h */, F5C2EB3D0518B36001A801EC /* sqltypes.h */, ); name = iODBC; sourceTree = ""; }; F52E33EB01A578E601A801D2 /* Mac basic functions */ = { isa = PBXGroup; children = ( ); name = "Mac basic functions"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ CDAE3BA30987D6B4003250F8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( CDAE3BA40987D6B4003250F8 /* gui.h in Headers */, CDAE3BA50987D6B4003250F8 /* gui.h in Headers */, CDAE3BA60987D6B4003250F8 /* iodbc_error.h in Headers */, CDAE3BA70987D6B4003250F8 /* iodbc.h in Headers */, CDAE3BA80987D6B4003250F8 /* herr.h in Headers */, CDAE3BA90987D6B4003250F8 /* unicode.h in Headers */, CDAE3BAA0987D6B4003250F8 /* odbcinst.h in Headers */, CDAE3BAB0987D6B4003250F8 /* iodbcadm.h in Headers */, CDAE3BAC0987D6B4003250F8 /* sqlucode.h in Headers */, CDAE3BAD0987D6B4003250F8 /* sqlext.h in Headers */, CDAE3BAE0987D6B4003250F8 /* sqltypes.h in Headers */, CDAE3BAF0987D6B4003250F8 /* iodbcinst.h in Headers */, CDAE3BB00987D6B4003250F8 /* sql.h in Headers */, CDAE3BB10987D6B4003250F8 /* iodbcext.h in Headers */, CDAE3BB20987D6B4003250F8 /* iodbcunix.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ CDAE3BA20987D6B4003250F8 /* iODBCdrvproxy */ = { isa = PBXNativeTarget; buildConfigurationList = CDAE3BC70987D6B4003250F8 /* Build configuration list for PBXNativeTarget "iODBCdrvproxy" */; buildPhases = ( CDAE3BA30987D6B4003250F8 /* Headers */, CDAE3BB30987D6B4003250F8 /* Resources */, CDAE3BB80987D6B4003250F8 /* Sources */, CDAE3BC20987D6B4003250F8 /* Frameworks */, CDAE3BC60987D6B4003250F8 /* Rez */, ); buildRules = ( ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); HEADER_SEARCH_PATHS = ( ../../include, ../../iodbc, ); INSTALL_PATH = /; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = ( "-DODBCVER=0x351", "-D_MACX", ); OTHER_LDFLAGS = ( "-multiply_defined", suppress, ); OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iODBCdrvproxy; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = bundle; }; dependencies = ( ); name = iODBCdrvproxy; productInstallPath = .; productName = iODBCdrvproxy; productReference = CDAE3BCC0987D6B4003250F8 /* iODBCdrvproxy.bundle */; productType = "com.apple.product-type.bundle"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 089C1669FE841209C02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = CDAE3BCD0987D6B5003250F8 /* Build configuration list for PBXProject "iODBCdrvproxy" */; buildSettings = { }; buildStyles = ( 0A7B5B2D005FB5097F000001 /* Development */, 0A7B5B2E005FB5097F000001 /* Deployment */, ); hasScannedForEncodings = 1; mainGroup = 089C166AFE841209C02AAC07 /* iODBCdrvproxy */; projectDirPath = ""; targets = ( CDAE3BA20987D6B4003250F8 /* iODBCdrvproxy */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ CDAE3BB30987D6B4003250F8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( CDAE3BB40987D6B4003250F8 /* InfoPlist.strings in Resources */, CDAE3BB50987D6B4003250F8 /* gensetup in Resources */, CDAE3BB60987D6B4003250F8 /* login in Resources */, CDAE3BB70987D6B4003250F8 /* confirmation in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXRezBuildPhase section */ CDAE3BC60987D6B4003250F8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ CDAE3BB80987D6B4003250F8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CDAE3BB90987D6B4003250F8 /* ConfigDriver.c in Sources */, CDAE3BBA0987D6B4003250F8 /* ConfigDSN.c in Sources */, CDAE3BBB0987D6B4003250F8 /* drvconn.c in Sources */, CDAE3BBC0987D6B4003250F8 /* drvproxy.exp in Sources */, CDAE3BBD0987D6B4003250F8 /* Info.c in Sources */, CDAE3BBE0987D6B4003250F8 /* gensetup.c in Sources */, CDAE3BBF0987D6B4003250F8 /* loginbox.c in Sources */, CDAE3BC00987D6B4003250F8 /* unicode.c in Sources */, CDAE3BC10987D6B4003250F8 /* confirm.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 0145C11DFFD6607A7F000001 /* gensetup */ = { isa = PBXVariantGroup; children = ( 0145C11EFFD6607A7F000001 /* English */, ); name = gensetup; sourceTree = ""; }; 089C167DFE841241C02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 089C167EFE841241C02AAC07 /* English */, ); name = InfoPlist.strings; sourceTree = ""; }; 10DCE822FFD6A5D57F000001 /* login */ = { isa = PBXVariantGroup; children = ( 10DCE823FFD6A5D57F000001 /* English */, ); name = login; sourceTree = ""; }; 859843D707D356DA0022E958 /* confirmation */ = { isa = PBXVariantGroup; children = ( 859843D807D356DA0022E958 /* English */, ); name = confirmation; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ CDAE3BC80987D6B4003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; "Current project version" = 3.52.8; DEPLOYMENT_POSTPROCESSING = YES; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../macosx/drvproxy.exp; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; GCC_PREPROCESSOR_DEFINITIONS = ( "ODBCVER=0x351", _MACX, ); HEADER_SEARCH_PATHS = ( ../../include, ../../iodbc, ); INFOPLIST_FILE = "Info-iODBCdrvproxy.plist"; INSTALL_PATH = /; LIBRARY_SEARCH_PATHS = ""; LIBRARY_STYLE = Bundle; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ( "-multiply_defined", suppress, ); OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iODBCdrvproxy; RESMERGER_SOURCES_FORK = data; SECTORDER_FLAGS = ""; SKIP_INSTALL = YES; STRIPFLAGS = "-u -r -s ../../macosx/drvproxy.exp"; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = bundle; "Zero link" = NO; }; name = Development; }; CDAE3BC90987D6B4003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; GCC_PREPROCESSOR_DEFINITIONS = ( "ODBCVER=0x351", _MACX, ); HEADER_SEARCH_PATHS = ( ../../include, ../../iodbc, ); INFOPLIST_FILE = "Info-iODBCdrvproxy.plist"; INSTALL_PATH = /; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ( "-multiply_defined", suppress, ); OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iODBCdrvproxy; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = bundle; ZERO_LINK = NO; }; name = Deployment; }; CDAE3BCE0987D6B5003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); COPY_PHASE_STRIP = NO; GCC_OPTIMIZATION_LEVEL = 0; MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; STRIP_INSTALLED_PRODUCT = NO; }; name = Development; }; CDAE3BCF0987D6B5003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; }; name = Deployment; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ CDAE3BC70987D6B4003250F8 /* Build configuration list for PBXNativeTarget "iODBCdrvproxy" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3BC80987D6B4003250F8 /* Development */, CDAE3BC90987D6B4003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; CDAE3BCD0987D6B5003250F8 /* Build configuration list for PBXProject "iODBCdrvproxy" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3BCE0987D6B5003250F8 /* Development */, CDAE3BCF0987D6B5003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; /* End XCConfigurationList section */ }; rootObject = 089C1669FE841209C02AAC07 /* Project object */; } libiodbc-3.52.9/mac/iODBCdrvproxy/English.lproj/0000755000076400007640000000000012323210721016337 500000000000000libiodbc-3.52.9/mac/iODBCdrvproxy/English.lproj/confirmation.xib0000644000076400007640000004411412323204667021473 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES Confirmation ... 256 YES 256 {{192, 63}, {84, 32}} YES Yes 256 {{276, 63}, {84, 32}} No 256 {{56, 9}, {310, 46}} 256 {{12, 9}, {32, 32}} {378, 103} {{173, 140}, {378, 103}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Dialog 167 YES 180 IBCarbonButton 181 IBCarbonButton1 182 IBCarbonStaticText 183 IBCarbonIcon YES YES YES YES YES YES YES YES YES 184 0 3 libiodbc-3.52.9/mac/iODBCdrvproxy/English.lproj/InfoPlist.strings0000644000076400007640000000046212323204667021617 00000000000000/* Localized versions of Info.plist keys */ CFBundleName = "iODBCdrvproxy"; CFBundleShortVersionString = "iODBCdrvproxy version 3.52.8"; CFBundleGetInfoString = "iODBCdrvproxy version 3.52.8, Copyright 1995-2012, OpenLink Software"; NSHumanReadableCopyright = "Copyright © 1995-2012, OpenLink Software"; libiodbc-3.52.9/mac/iODBCdrvproxy/English.lproj/gensetup.xib0000644000076400007640000013450012323204667020634 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES Generic ODBC Driver Setup 256 YES 256 {{17, 14}, {178, 16}} YES Data Source Name (DSN) 256 {{17, 47}, {178, 16}} Comment 256 {{203, 7}, {211, 29}} 256 {{203, 40}, {211, 29}} 256 {{12, 77}, {400, 219}} YES Keyword Value 256 {{12, 311}, {70, 16}} Keyword 256 {{12, 344}, {70, 16}} Value 256 {{90, 304}, {199, 29}} 256 {{90, 337}, {199, 29}} 256 {{303, 304}, {84, 32}} Add 256 {{303, 336}, {84, 32}} Update 256 {{12, 379}, {391, 1}} 256 {{313, 395}, {84, 32}} Ok 256 {{229, 395}, {84, 32}} Cancel {421, 440} {{98, 44}, {421, 440}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Dialog 167 YES 180 IBCarbonStaticText 182 IBCarbonStaticText2 183 IBCarbonEditText 184 IBCarbonEditText1 185 YES NSCustomView 186 IBCarbonStaticText1 187 IBCarbonStaticText11 188 IBCarbonEditText2 190 IBCarbonEditText21 191 IBCarbonButton 192 IBCarbonButton1 193 IBCarbonSeparator 194 IBCarbonButton2 195 IBCarbonButton3 199 200 YES YES YES YES YES YES YES YES YES 200 0 3 libiodbc-3.52.9/mac/iODBCdrvproxy/English.lproj/login.xib0000644000076400007640000006352012323204667020115 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES Login ... 256 YES 256 {{30, 16}, {76, 16}} YES Username 256 {{30, 49}, {76, 16}} Password 256 {{114, 9}, {163, 29}} 256 {{114, 42}, {163, 29}} 256 {{213, 98}, {84, 32}} Ok 256 {{129, 98}, {84, 32}} Cancel 256 {{6, 82}, {295, 1}} {308, 141} {{222, 106}, {308, 141}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Dialog 167 YES 180 IBCarbonStaticText 181 IBCarbonStaticText1 182 IBCarbonEditText 183 IBCarbonEditText1 184 IBCarbonButton 185 IBCarbonButton1 186 IBCarbonSeparator YES YES YES YES YES YES YES YES YES 187 0 3 libiodbc-3.52.9/mac/iODBCdrvproxy/iODBCdrvproxy.pbproj/0000755000076400007640000000000012323210721017612 500000000000000libiodbc-3.52.9/mac/iODBCdrvproxy/iODBCdrvproxy.pbproj/project.pbxproj0000644000076400007640000005030012323204667022620 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 39; objects = { 0145C11DFFD6607A7F000001 = { children = ( 0145C11EFFD6607A7F000001, ); isa = PBXVariantGroup; name = gensetup.nib; path = ""; refType = 4; sourceTree = ""; }; 0145C11EFFD6607A7F000001 = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/gensetup.nib; refType = 4; sourceTree = ""; }; 0145C11FFFD6607A7F000001 = { fileRef = 0145C11DFFD6607A7F000001; isa = PBXBuildFile; settings = { }; }; //010 //011 //012 //013 //014 //080 //081 //082 //083 //084 089C1669FE841209C02AAC07 = { buildSettings = { }; buildStyles = ( 0A7B5B2D005FB5097F000001, 0A7B5B2E005FB5097F000001, ); hasScannedForEncodings = 1; isa = PBXProject; mainGroup = 089C166AFE841209C02AAC07; projectDirPath = ""; targets = ( 089C1673FE841209C02AAC07, ); }; 089C166AFE841209C02AAC07 = { children = ( 08FB77AFFE84173DC02AAC07, 089C167CFE841241C02AAC07, 089C1671FE841209C02AAC07, 19C28FB6FE9D52B211CA2CBB, ); isa = PBXGroup; name = iODBCdrvproxy; refType = 4; sourceTree = ""; }; 089C1671FE841209C02AAC07 = { children = ( 85D1BB9807E7D55A0070A59E, 0A7B5B2F005FB5307F000001, 0A7B5B30005FB5307F000001, ); isa = PBXGroup; name = "External Frameworks and Libraries"; refType = 4; sourceTree = ""; }; 089C1673FE841209C02AAC07 = { buildPhases = ( 089C1674FE841209C02AAC07, 089C1675FE841209C02AAC07, 089C1676FE841209C02AAC07, 089C1677FE841209C02AAC07, 089C1679FE841209C02AAC07, ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = "../../mac/iODBCinst/build/Deployment ../../mac/iODBCinst/build"; HEADER_SEARCH_PATHS = "../../include ../../iodbc"; INSTALL_PATH = "/"; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-DODBCVER=0x351 -D_MACX -DMACOSX=103"; OTHER_LDFLAGS = "-multiply_defined suppress"; OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iODBCdrvproxy; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = bundle; }; dependencies = ( ); isa = PBXBundleTarget; name = iODBCdrvproxy; productInstallPath = "."; productName = iODBCdrvproxy; productReference = 0A7B5B2C005FB5097F000001; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable iODBCdrvproxy CFBundleGetInfoString iODBC Driver Proxy Library CFBundleIconFile CFBundleIdentifier org.iodbc.drvproxy CFBundleInfoDictionaryVersion 6.0 CFBundleName iODBC Driver Proxy CFBundlePackageType BNDL CFBundleShortVersionString 3.52.8 CFBundleSignature odbc CFBundleVersion 3.52.8 CFPlugInDynamicRegisterFunction CFPlugInDynamicRegistration NO CFPlugInFactories 00000000-0000-0000-0000-000000000000 MyFactoryFunction CFPlugInTypes 00000000-0000-0000-0000-000000000000 00000000-0000-0000-0000-000000000000 CFPlugInUnloadFunction "; }; 089C1674FE841209C02AAC07 = { buildActionMask = 2147483647; files = ( 1C12420F005FB6B37F000001, 1C124210005FB6B37F000001, 1C12421F005FB79A7F000001, F53EDAED029B957C01A801DE, F5C2E5AF05161F4601A801EC, F5C2EB350518B08A01A801EC, F5C2EB370518B22E01A801EC, F5C2EB390518B26C01A801EC, F5C2EB3B0518B2C501A801EC, F5C2EB3E0518B36001A801EC, F5C2EB3F0518B36001A801EC, 716C452C05B6EF4D0045FADB, 716C453005B6EF8B0045FADB, 71A26EE3069D5691005AC343, 71A26EE4069D5691005AC343, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 089C1675FE841209C02AAC07 = { buildActionMask = 2147483647; files = ( 089C1680FE841241C02AAC07, 0145C11FFFD6607A7F000001, 10DCE824FFD6A5D57F000001, 859843D907D356DA0022E958, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 089C1676FE841209C02AAC07 = { buildActionMask = 2147483647; files = ( 1C124212005FB6B37F000001, 1C124213005FB6B37F000001, 1C124214005FB6B37F000001, 1C124215005FB6B37F000001, 1C124216005FB6B37F000001, 1C124219005FB6B37F000001, 1C12421A005FB6B37F000001, F5C2EB340518B08A01A801EC, 859838AC07CF6D6D0022E958, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 089C1677FE841209C02AAC07 = { buildActionMask = 2147483647; files = ( 0A7B5B31005FB5307F000001, 0A7B5B32005FB5307F000001, 85D1BB9907E7D55A0070A59E, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 089C1679FE841209C02AAC07 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 089C167CFE841241C02AAC07 = { children = ( 859843D707D356DA0022E958, 089C167DFE841241C02AAC07, 0145C11DFFD6607A7F000001, 10DCE822FFD6A5D57F000001, ); isa = PBXGroup; name = Resources; refType = 4; sourceTree = ""; }; 089C167DFE841241C02AAC07 = { children = ( 089C167EFE841241C02AAC07, ); isa = PBXVariantGroup; name = InfoPlist.strings; refType = 4; sourceTree = ""; }; 089C167EFE841241C02AAC07 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; refType = 4; sourceTree = ""; }; 089C1680FE841241C02AAC07 = { fileRef = 089C167DFE841241C02AAC07; isa = PBXBuildFile; settings = { }; }; 08FB77AFFE84173DC02AAC07 = { children = ( 1C1241FB005FB6B37F000001, 1C12421B005FB6F07F000001, F52E33EB01A578E601A801D2, ); isa = PBXGroup; name = Source; refType = 4; sourceTree = ""; }; //080 //081 //082 //083 //084 //0A0 //0A1 //0A2 //0A3 //0A4 0A7B5B2C005FB5097F000001 = { explicitFileType = wrapper.cfbundle; isa = PBXFileReference; path = iODBCdrvproxy.bundle; refType = 3; sourceTree = BUILT_PRODUCTS_DIR; }; 0A7B5B2D005FB5097F000001 = { buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; "Current project version" = 3.52.8; DEPLOYMENT_POSTPROCESSING = YES; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../macosx/drvproxy.exp; FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; LIBRARY_STYLE = Bundle; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-DODBCVER=0x351 -D_MACX -DMACOSX=103"; RESMERGER_SOURCES_FORK = data; SKIP_INSTALL = YES; STRIPFLAGS = "-u -r -s ../../macosx/drvproxy.exp"; "Zero link" = NO; }; isa = PBXBuildStyle; name = Development; }; 0A7B5B2E005FB5097F000001 = { buildSettings = { COPY_PHASE_STRIP = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Deployment; }; 0A7B5B2F005FB5307F000001 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; refType = 0; sourceTree = ""; }; 0A7B5B30005FB5307F000001 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; refType = 0; sourceTree = ""; }; 0A7B5B31005FB5307F000001 = { fileRef = 0A7B5B2F005FB5307F000001; isa = PBXBuildFile; settings = { }; }; 0A7B5B32005FB5307F000001 = { fileRef = 0A7B5B30005FB5307F000001; isa = PBXBuildFile; settings = { }; }; //0A0 //0A1 //0A2 //0A3 //0A4 //100 //101 //102 //103 //104 10DCE822FFD6A5D57F000001 = { children = ( 10DCE823FFD6A5D57F000001, ); isa = PBXVariantGroup; name = login.nib; path = ""; refType = 4; sourceTree = ""; }; 10DCE823FFD6A5D57F000001 = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/login.nib; refType = 4; sourceTree = ""; }; 10DCE824FFD6A5D57F000001 = { fileRef = 10DCE822FFD6A5D57F000001; isa = PBXBuildFile; settings = { }; }; //100 //101 //102 //103 //104 //190 //191 //192 //193 //194 19C28FB6FE9D52B211CA2CBB = { children = ( 0A7B5B2C005FB5097F000001, ); isa = PBXGroup; name = Products; refType = 4; sourceTree = ""; }; //190 //191 //192 //193 //194 //1C0 //1C1 //1C2 //1C3 //1C4 1C1241FB005FB6B37F000001 = { children = ( 1C1241FC005FB6B37F000001, 1C1241FD005FB6B37F000001, 1C1241FE005FB6B37F000001, 1C1241FF005FB6B37F000001, 1C124200005FB6B37F000001, 1C124206005FB6B37F000001, 1C124207005FB6B37F000001, 1C124209005FB6B37F000001, ); isa = PBXGroup; name = drvproxy; path = ../../drvproxy; refType = 2; sourceTree = SOURCE_ROOT; }; 1C1241FC005FB6B37F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ConfigDriver.c; refType = 4; sourceTree = ""; }; 1C1241FD005FB6B37F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ConfigDSN.c; refType = 4; sourceTree = ""; }; 1C1241FE005FB6B37F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = drvconn.c; refType = 4; sourceTree = ""; }; 1C1241FF005FB6B37F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.exports; path = drvproxy.exp; refType = 4; sourceTree = ""; }; 1C124200005FB6B37F000001 = { children = ( 1C124202005FB6B37F000001, 1C124203005FB6B37F000001, 1C124204005FB6B37F000001, ); isa = PBXGroup; path = gtk; refType = 4; sourceTree = ""; }; 1C124202005FB6B37F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gensetup.c; refType = 4; sourceTree = ""; }; 1C124203005FB6B37F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gui.h; refType = 4; sourceTree = ""; }; 1C124204005FB6B37F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = text; path = Makefile.am; refType = 4; sourceTree = ""; }; 1C124206005FB6B37F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gui.h; refType = 4; sourceTree = ""; }; 1C124207005FB6B37F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Info.c; refType = 4; sourceTree = ""; }; 1C124209005FB6B37F000001 = { children = ( 859838AB07CF6D6D0022E958, 1C12420B005FB6B37F000001, 1C12420C005FB6B37F000001, 1C12420D005FB6B37F000001, ); isa = PBXGroup; path = macosx; refType = 4; sourceTree = ""; }; 1C12420B005FB6B37F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gensetup.c; refType = 4; sourceTree = ""; }; 1C12420C005FB6B37F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gui.h; refType = 4; sourceTree = ""; }; 1C12420D005FB6B37F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = loginbox.c; refType = 4; sourceTree = ""; }; 1C12420F005FB6B37F000001 = { fileRef = 1C124206005FB6B37F000001; isa = PBXBuildFile; settings = { }; }; 1C124210005FB6B37F000001 = { fileRef = 1C12420C005FB6B37F000001; isa = PBXBuildFile; settings = { }; }; 1C124212005FB6B37F000001 = { fileRef = 1C1241FC005FB6B37F000001; isa = PBXBuildFile; settings = { }; }; 1C124213005FB6B37F000001 = { fileRef = 1C1241FD005FB6B37F000001; isa = PBXBuildFile; settings = { }; }; 1C124214005FB6B37F000001 = { fileRef = 1C1241FE005FB6B37F000001; isa = PBXBuildFile; settings = { }; }; 1C124215005FB6B37F000001 = { fileRef = 1C1241FF005FB6B37F000001; isa = PBXBuildFile; settings = { }; }; 1C124216005FB6B37F000001 = { fileRef = 1C124207005FB6B37F000001; isa = PBXBuildFile; settings = { }; }; 1C124219005FB6B37F000001 = { fileRef = 1C12420B005FB6B37F000001; isa = PBXBuildFile; settings = { }; }; 1C12421A005FB6B37F000001 = { fileRef = 1C12420D005FB6B37F000001; isa = PBXBuildFile; settings = { }; }; 1C12421B005FB6F07F000001 = { children = ( 71A26EE1069D5691005AC343, 71A26EE2069D5691005AC343, 716C452F05B6EF8B0045FADB, 716C452B05B6EF4D0045FADB, 1C12421E005FB79A7F000001, F53EDAEC029B957C01A801DE, F5C2E5AE05161F4601A801EC, F5C2EB320518B08A01A801EC, F5C2EB330518B08A01A801EC, F5C2EB360518B22E01A801EC, F5C2EB380518B26C01A801EC, F5C2EB3A0518B2C501A801EC, F5C2EB3C0518B36001A801EC, F5C2EB3D0518B36001A801EC, ); isa = PBXGroup; name = iODBC; refType = 4; sourceTree = ""; }; 1C12421E005FB79A7F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbc_error.h; path = ../../iodbcinst/iodbc_error.h; refType = 2; sourceTree = SOURCE_ROOT; }; 1C12421F005FB79A7F000001 = { fileRef = 1C12421E005FB79A7F000001; isa = PBXBuildFile; settings = { }; }; //1C0 //1C1 //1C2 //1C3 //1C4 //710 //711 //712 //713 //714 716C452B05B6EF4D0045FADB = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcinst.h; path = ../../include/iodbcinst.h; refType = 2; sourceTree = SOURCE_ROOT; }; 716C452C05B6EF4D0045FADB = { fileRef = 716C452B05B6EF4D0045FADB; isa = PBXBuildFile; settings = { }; }; 716C452F05B6EF8B0045FADB = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sql.h; path = ../../include/sql.h; refType = 2; sourceTree = SOURCE_ROOT; }; 716C453005B6EF8B0045FADB = { fileRef = 716C452F05B6EF8B0045FADB; isa = PBXBuildFile; settings = { }; }; 71A26EE1069D5691005AC343 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcext.h; path = ../../include/iodbcext.h; refType = 2; sourceTree = SOURCE_ROOT; }; 71A26EE2069D5691005AC343 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcunix.h; path = ../../include/iodbcunix.h; refType = 2; sourceTree = SOURCE_ROOT; }; 71A26EE3069D5691005AC343 = { fileRef = 71A26EE1069D5691005AC343; isa = PBXBuildFile; settings = { }; }; 71A26EE4069D5691005AC343 = { fileRef = 71A26EE2069D5691005AC343; isa = PBXBuildFile; settings = { }; }; //710 //711 //712 //713 //714 //850 //851 //852 //853 //854 859838AB07CF6D6D0022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = confirm.c; refType = 4; sourceTree = ""; }; 859838AC07CF6D6D0022E958 = { fileRef = 859838AB07CF6D6D0022E958; isa = PBXBuildFile; settings = { }; }; 859843D707D356DA0022E958 = { children = ( 859843D807D356DA0022E958, ); isa = PBXVariantGroup; name = confirmation.nib; path = ""; refType = 4; sourceTree = ""; }; 859843D807D356DA0022E958 = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/confirmation.nib; refType = 4; sourceTree = ""; }; 859843D907D356DA0022E958 = { fileRef = 859843D707D356DA0022E958; isa = PBXBuildFile; settings = { }; }; 85D1BB9807E7D55A0070A59E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBCinst.framework; path = ../../mac/iODBCinst/build/iODBCinst.framework; refType = 2; sourceTree = SOURCE_ROOT; }; 85D1BB9907E7D55A0070A59E = { fileRef = 85D1BB9807E7D55A0070A59E; isa = PBXBuildFile; settings = { }; }; //850 //851 //852 //853 //854 //F50 //F51 //F52 //F53 //F54 F52E33EB01A578E601A801D2 = { children = ( ); isa = PBXGroup; name = "Mac basic functions"; refType = 4; sourceTree = ""; }; F53EDAEC029B957C01A801DE = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbc.h; path = ../../include/iodbc.h; refType = 2; sourceTree = SOURCE_ROOT; }; F53EDAED029B957C01A801DE = { fileRef = F53EDAEC029B957C01A801DE; isa = PBXBuildFile; settings = { }; }; F5C2E5AE05161F4601A801EC = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = herr.h; path = ../../iodbc/herr.h; refType = 2; sourceTree = SOURCE_ROOT; }; F5C2E5AF05161F4601A801EC = { fileRef = F5C2E5AE05161F4601A801EC; isa = PBXBuildFile; settings = { }; }; F5C2EB320518B08A01A801EC = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = unicode.c; path = ../../iodbcinst/unicode.c; refType = 2; sourceTree = SOURCE_ROOT; }; F5C2EB330518B08A01A801EC = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = unicode.h; path = ../../iodbcinst/unicode.h; refType = 2; sourceTree = SOURCE_ROOT; }; F5C2EB340518B08A01A801EC = { fileRef = F5C2EB320518B08A01A801EC; isa = PBXBuildFile; settings = { }; }; F5C2EB350518B08A01A801EC = { fileRef = F5C2EB330518B08A01A801EC; isa = PBXBuildFile; settings = { }; }; F5C2EB360518B22E01A801EC = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = odbcinst.h; path = ../../include/odbcinst.h; refType = 2; sourceTree = SOURCE_ROOT; }; F5C2EB370518B22E01A801EC = { fileRef = F5C2EB360518B22E01A801EC; isa = PBXBuildFile; settings = { }; }; F5C2EB380518B26C01A801EC = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcadm.h; path = ../../iodbcadm/iodbcadm.h; refType = 2; sourceTree = SOURCE_ROOT; }; F5C2EB390518B26C01A801EC = { fileRef = F5C2EB380518B26C01A801EC; isa = PBXBuildFile; settings = { }; }; F5C2EB3A0518B2C501A801EC = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sqlucode.h; path = ../../include/sqlucode.h; refType = 2; sourceTree = SOURCE_ROOT; }; F5C2EB3B0518B2C501A801EC = { fileRef = F5C2EB3A0518B2C501A801EC; isa = PBXBuildFile; settings = { }; }; F5C2EB3C0518B36001A801EC = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sqlext.h; path = ../../include/sqlext.h; refType = 2; sourceTree = SOURCE_ROOT; }; F5C2EB3D0518B36001A801EC = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sqltypes.h; path = ../../include/sqltypes.h; refType = 2; sourceTree = SOURCE_ROOT; }; F5C2EB3E0518B36001A801EC = { fileRef = F5C2EB3C0518B36001A801EC; isa = PBXBuildFile; settings = { }; }; F5C2EB3F0518B36001A801EC = { fileRef = F5C2EB3D0518B36001A801EC; isa = PBXBuildFile; settings = { }; }; }; rootObject = 089C1669FE841209C02AAC07; } libiodbc-3.52.9/mac/iODBCdrvproxy/Info-iODBCdrvproxy.plist0000644000076400007640000000251112323204667020220 00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable iODBCdrvproxy CFBundleGetInfoString iODBC Driver Proxy Library CFBundleIconFile CFBundleIdentifier org.iodbc.drvproxy CFBundleInfoDictionaryVersion 6.0 CFBundleName iODBC Driver Proxy CFBundlePackageType BNDL CFBundleShortVersionString 3.52.8 CFBundleSignature odbc CFBundleVersion 3.52.8 CFPlugInDynamicRegisterFunction CFPlugInDynamicRegistration NO CFPlugInFactories 00000000-0000-0000-0000-000000000000 MyFactoryFunction CFPlugInTypes 00000000-0000-0000-0000-000000000000 00000000-0000-0000-0000-000000000000 CFPlugInUnloadFunction libiodbc-3.52.9/mac/iodbc-config.macosx0000755000076400007640000001373712323210535014623 00000000000000#!/bin/sh # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # version=@IODBC_VERSION@ prefix=/usr/local/iODBC exec_prefix=${prefix} exec_prefix_set=no data_dir=${prefix}/share # # Framework location of system ini files # SYSODBCINI=/Library/ODBC/odbc.ini SYSODBCINSTINI=/Library/ODBC/odbcinst.ini usage() { cat < Usage: iodbc-config [OPTIONS] [LIBRARIES] Options: [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--libs] [--static-libs] [--libtool-libs] [--cflags] [--odbcversion] [--odbcini] [--odbcinstini] Libraries: iodbc EOF exit $1 } if test $# -eq 0; then usage 1 1>&2 fi lib_iodbc=yes while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --prefix=*) prefix=$optarg if test $exec_prefix_set = no ; then exec_prefix=$optarg fi ;; --prefix) echo_prefix=yes ;; --exec-prefix=*) exec_prefix=$optarg exec_prefix_set=yes ;; --exec-prefix) echo_exec_prefix=yes ;; --version) echo $version exit 0 ;; --cflags) if test "${prefix}/include" != /usr/include ; then includes="-I${prefix}/include" fi echo_cflags=yes ;; --libs) echo_libs=yes ;; --static-libs) echo "** Warning: Mac OS X framework build does not support static libraries" >&2 echo_libs=yes #echo_staticlibs=yes ;; --libtool-libs) echo "** Warning: Mac OS X framework build does not support libtool libraries" >&2 echo_libs=yes #echo_libtoollibs=yes ;; --data-dir) echo_data_dir=yes ;; --odbcversion) echo 3 exit 0 ;; --odbcini) echo_odbcini=yes ;; --odbcinstini) echo_odbcinstini=yes ;; iodbc) lib_iodbc=yes ;; *) usage 1 1>&2 ;; esac shift done if test "$echo_prefix" = "yes"; then echo $prefix fi if test "$echo_exec_prefix" = "yes"; then echo $exec_prefix fi if test "$echo_data_dir" = "yes"; then echo $data_dir fi if test "$echo_odbcini" = "yes"; then echo "$SYSODBCINI" fi if test "$echo_odbcinstini" = "yes"; then echo "$SYSODBCINSTINI" fi if test "$echo_cflags" = "yes"; then echo "$includes" fi if test "$echo_libs" = "yes"; then libs="" if test "$lib_iodbc" = "yes"; then libs="$libs -liodbc -liodbcinst" fi echo "-L${exec_prefix}/lib $libs" fi if test "$echo_staticlibs" = "yes"; then libs="" if test "$lib_iodbc" = "yes"; then libs="${exec_prefix}/lib/libiodbc.a ${exec_prefix}/lib/libiodbcinst.a -ldl" fi echo "$libs" fi if test "$echo_libtoollibs" = "yes"; then libs="" if test "$lib_iodbc" = "yes"; then libs="${exec_prefix}/lib/libiodbc.la ${exec_prefix}/lib/libiodbcinst.la" fi echo "$libs" fi libiodbc-3.52.9/mac/iODBCtestw/0000755000076400007640000000000012323210720013071 500000000000000libiodbc-3.52.9/mac/iODBCtestw/iODBCtestw.pbproj/0000755000076400007640000000000012323210721016334 500000000000000libiodbc-3.52.9/mac/iODBCtestw/iODBCtestw.pbproj/project.pbxproj0000644000076400007640000001343512323204667021352 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 39; objects = { 014CEA520018CE5811CA2923 = { buildSettings = { COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_SEARCH_PATHS = "../../mac/iODBC/build/Development ../../mac/iODBC/build ../../mac/iODBCinst/build/Development ../../mac/iODBCinst/build"; FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ""; HEADER_SEARCH_PATHS = "../../include"; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = "-DUNICODE"; RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Development; }; 014CEA530018CE5811CA2923 = { buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_SEARCH_PATHS = "../../mac/iODBC/build/Deployment ../../mac/iODBC/build ../../mac/iODBCinst/build/Deployment ../../mac/iODBCinst/build"; FRAMEWORK_VERSION = 3.52; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; HEADER_SEARCH_PATHS = "../../include"; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; OPTIMIZATION_CFLAGS = "-DUNICODE -O2"; RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Deployment; }; //010 //011 //012 //013 //014 //030 //031 //032 //033 //034 034768E8FF38A79811DB9C8B = { explicitFileType = "compiled.mach-o.executable"; isa = PBXFileReference; path = iodbctestw; refType = 3; sourceTree = BUILT_PRODUCTS_DIR; }; //030 //031 //032 //033 //034 //080 //081 //082 //083 //084 08FB7793FE84155DC02AAC07 = { buildSettings = { }; buildStyles = ( 014CEA520018CE5811CA2923, 014CEA530018CE5811CA2923, ); hasScannedForEncodings = 1; isa = PBXProject; mainGroup = 08FB7794FE84155DC02AAC07; projectDirPath = ""; targets = ( 08FB779FFE84155DC02AAC07, ); }; 08FB7794FE84155DC02AAC07 = { children = ( 08FB7795FE84155DC02AAC07, F535B3B802780F5F01A801DE, 1AB674ADFE9D54B511CA2CBB, ); isa = PBXGroup; name = iodbctestw; refType = 4; sourceTree = ""; }; 08FB7795FE84155DC02AAC07 = { children = ( F535B3B702780F5F01A801DE, ); isa = PBXGroup; name = Source; refType = 4; sourceTree = ""; }; 08FB779FFE84155DC02AAC07 = { buildPhases = ( 08FB77A0FE84155DC02AAC07, 08FB77A1FE84155DC02AAC07, 08FB77A3FE84155DC02AAC07, 08FB77A5FE84155DC02AAC07, ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = "../../mac/iODBC/build/Deployment ../../mac/iODBC/build ../../mac/iODBCinst/build/Deployment ../../mac/iODBCinst/build"; HEADER_SEARCH_PATHS = "../../include"; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = ""; OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iodbctestw; REZ_EXECUTABLE = YES; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; }; dependencies = ( ); isa = PBXToolTarget; name = iodbctestw; productInstallPath = "/Library/Application Support/iODBC/bin"; productName = iodbctestw; productReference = 034768E8FF38A79811DB9C8B; }; 08FB77A0FE84155DC02AAC07 = { buildActionMask = 2147483647; files = ( ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 08FB77A1FE84155DC02AAC07 = { buildActionMask = 2147483647; files = ( F535B3B902780F5F01A801DE, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 08FB77A3FE84155DC02AAC07 = { buildActionMask = 2147483647; files = ( F5CD650D0497672D01A801EC, F5CD65130497673F01A801EC, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 08FB77A5FE84155DC02AAC07 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; //080 //081 //082 //083 //084 //1A0 //1A1 //1A2 //1A3 //1A4 1AB674ADFE9D54B511CA2CBB = { children = ( 034768E8FF38A79811DB9C8B, ); isa = PBXGroup; name = Products; refType = 4; sourceTree = ""; }; //1A0 //1A1 //1A2 //1A3 //1A4 //F50 //F51 //F52 //F53 //F54 F535B3B702780F5F01A801DE = { explicitFileType = sourcecode.c.c; fileEncoding = 30; isa = PBXFileReference; name = iodbctest.c; path = ../../samples/iodbctest.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3B802780F5F01A801DE = { children = ( F5CD65030497672D01A801EC, F5CD650E0497673F01A801EC, ); isa = PBXGroup; name = Frameworks; path = ..; refType = 3; sourceTree = BUILT_PRODUCTS_DIR; }; F535B3B902780F5F01A801DE = { fileRef = F535B3B702780F5F01A801DE; isa = PBXBuildFile; settings = { }; }; F5CD65030497672D01A801EC = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBC.framework; path = ../iODBC/build/iODBC.framework; refType = 2; sourceTree = SOURCE_ROOT; }; F5CD650D0497672D01A801EC = { fileRef = F5CD65030497672D01A801EC; isa = PBXBuildFile; settings = { }; }; F5CD650E0497673F01A801EC = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBCinst.framework; path = ../iODBCinst/build/iODBCinst.framework; refType = 2; sourceTree = SOURCE_ROOT; }; F5CD65130497673F01A801EC = { fileRef = F5CD650E0497673F01A801EC; isa = PBXBuildFile; settings = { }; }; }; rootObject = 08FB7793FE84155DC02AAC07; } libiodbc-3.52.9/mac/iODBCtestw/iODBCtestw.xcodeproj/0000755000076400007640000000000012323210721017035 500000000000000libiodbc-3.52.9/mac/iODBCtestw/iODBCtestw.xcodeproj/project.pbxproj0000644000076400007640000002504412323204667022052 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ CDAE3B510987CF60003250F8 /* iodbctest.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3B702780F5F01A801DE /* iodbctest.c */; }; CDAE3B530987CF60003250F8 /* iODBC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5CD65030497672D01A801EC /* iODBC.framework */; }; CDAE3B540987CF60003250F8 /* iODBCinst.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5CD650E0497673F01A801EC /* iODBCinst.framework */; }; /* End PBXBuildFile section */ /* Begin PBXBuildStyle section */ 014CEA520018CE5811CA2923 /* Development */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Development, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Development, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ""; HEADER_SEARCH_PATHS = ../../include; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = "-DUNICODE"; RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; name = Development; }; 014CEA530018CE5811CA2923 /* Deployment */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; HEADER_SEARCH_PATHS = ../../include; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; OPTIMIZATION_CFLAGS = "-DUNICODE -O2"; RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; name = Deployment; }; /* End PBXBuildStyle section */ /* Begin PBXFileReference section */ CDAE3B5A0987CF60003250F8 /* iodbctestw */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = iodbctestw; sourceTree = BUILT_PRODUCTS_DIR; }; F535B3B702780F5F01A801DE /* iodbctest.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; fileEncoding = 30; name = iodbctest.c; path = ../../samples/iodbctest.c; sourceTree = SOURCE_ROOT; }; F5CD65030497672D01A801EC /* iODBC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBC.framework; path = ../iODBC/build/iODBC.framework; sourceTree = SOURCE_ROOT; }; F5CD650E0497673F01A801EC /* iODBCinst.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBCinst.framework; path = ../iODBCinst/build/iODBCinst.framework; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ CDAE3B520987CF60003250F8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CDAE3B530987CF60003250F8 /* iODBC.framework in Frameworks */, CDAE3B540987CF60003250F8 /* iODBCinst.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 08FB7794FE84155DC02AAC07 /* iodbctestw */ = { isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, F535B3B802780F5F01A801DE /* Frameworks */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = iodbctestw; sourceTree = ""; }; 08FB7795FE84155DC02AAC07 /* Source */ = { isa = PBXGroup; children = ( F535B3B702780F5F01A801DE /* iodbctest.c */, ); name = Source; sourceTree = ""; }; 1AB674ADFE9D54B511CA2CBB /* Products */ = { isa = PBXGroup; children = ( CDAE3B5A0987CF60003250F8 /* iodbctestw */, ); name = Products; sourceTree = ""; }; F535B3B802780F5F01A801DE /* Frameworks */ = { isa = PBXGroup; children = ( F5CD65030497672D01A801EC /* iODBC.framework */, F5CD650E0497673F01A801EC /* iODBCinst.framework */, ); name = Frameworks; path = ..; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ CDAE3B4F0987CF60003250F8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ CDAE3B4E0987CF60003250F8 /* iodbctestw */ = { isa = PBXNativeTarget; buildConfigurationList = CDAE3B560987CF60003250F8 /* Build configuration list for PBXNativeTarget "iodbctestw" */; buildPhases = ( CDAE3B4F0987CF60003250F8 /* Headers */, CDAE3B500987CF60003250F8 /* Sources */, CDAE3B520987CF60003250F8 /* Frameworks */, CDAE3B550987CF60003250F8 /* Rez */, ); buildRules = ( ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); HEADER_SEARCH_PATHS = ../../include; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = ""; OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iodbctestw; REZ_EXECUTABLE = YES; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); }; dependencies = ( ); name = iodbctestw; productInstallPath = "/Library/Application Support/iODBC/bin"; productName = iodbctestw; productReference = CDAE3B5A0987CF60003250F8 /* iodbctestw */; productType = "com.apple.product-type.tool"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = CDAE3B5C0987CF6F003250F8 /* Build configuration list for PBXProject "iODBCtestw" */; buildSettings = { }; buildStyles = ( 014CEA520018CE5811CA2923 /* Development */, 014CEA530018CE5811CA2923 /* Deployment */, ); hasScannedForEncodings = 1; mainGroup = 08FB7794FE84155DC02AAC07 /* iodbctestw */; projectDirPath = ""; targets = ( CDAE3B4E0987CF60003250F8 /* iodbctestw */, ); }; /* End PBXProject section */ /* Begin PBXRezBuildPhase section */ CDAE3B550987CF60003250F8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ CDAE3B500987CF60003250F8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CDAE3B510987CF60003250F8 /* iodbctest.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ CDAE3B570987CF60003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Development, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Development, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = UNICODE; HEADER_SEARCH_PATHS = ../../include; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ""; OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iodbctestw; RESMERGER_SOURCES_FORK = data; REZ_EXECUTABLE = YES; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); ZERO_LINK = NO; }; name = Development; }; CDAE3B580987CF60003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; HEADER_SEARCH_PATHS = ../../include; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ""; OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iodbctestw; RESMERGER_SOURCES_FORK = data; REZ_EXECUTABLE = YES; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); ZERO_LINK = NO; }; name = Deployment; }; CDAE3B5D0987CF6F003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; }; name = Development; }; CDAE3B5E0987CF6F003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; }; name = Deployment; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ CDAE3B560987CF60003250F8 /* Build configuration list for PBXNativeTarget "iodbctestw" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3B570987CF60003250F8 /* Development */, CDAE3B580987CF60003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; CDAE3B5C0987CF6F003250F8 /* Build configuration list for PBXProject "iODBCtestw" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3B5D0987CF6F003250F8 /* Development */, CDAE3B5E0987CF6F003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; /* End XCConfigurationList section */ }; rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; } libiodbc-3.52.9/mac/iODBCinst/0000755000076400007640000000000012323210721012701 500000000000000libiodbc-3.52.9/mac/iODBCinst/iODBCinst.pbproj/0000755000076400007640000000000012323210721015752 500000000000000libiodbc-3.52.9/mac/iODBCinst/iODBCinst.pbproj/project.pbxproj0000644000076400007640000007076512323204667021001 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 39; objects = { 034768DDFF38A45A11DB9C8B = { children = ( 034768DEFF38A45A11DB9C8B, ); isa = PBXGroup; name = Products; refType = 4; sourceTree = ""; }; 034768DEFF38A45A11DB9C8B = { explicitFileType = wrapper.framework; isa = PBXFileReference; path = iODBCinst.framework; refType = 3; sourceTree = BUILT_PRODUCTS_DIR; }; //030 //031 //032 //033 //034 //080 //081 //082 //083 //084 0867D690FE84028FC02AAC07 = { buildSettings = { }; buildStyles = ( 4F0BB7EC011F40E904CA0E50, 4F0BB7ED011F40E904CA0E50, ); hasScannedForEncodings = 1; isa = PBXProject; mainGroup = 0867D691FE84028FC02AAC07; productRefGroup = 034768DDFF38A45A11DB9C8B; projectDirPath = ""; targets = ( 0867D69CFE84028FC02AAC07, ); }; 0867D691FE84028FC02AAC07 = { children = ( 08FB77ACFE841707C02AAC07, 089C1665FE841158C02AAC07, 0867D69AFE84028FC02AAC07, 034768DDFF38A45A11DB9C8B, ); isa = PBXGroup; name = iODBCinst; refType = 4; sourceTree = ""; }; 0867D69AFE84028FC02AAC07 = { children = ( F54DA8D902795B3501A801DE, ); isa = PBXGroup; name = "External Frameworks and Libraries"; refType = 4; sourceTree = ""; }; 0867D69CFE84028FC02AAC07 = { buildPhases = ( 0867D69DFE84028FC02AAC07, 0867D69EFE84028FC02AAC07, 0867D69FFE84028FC02AAC07, 0867D6A0FE84028FC02AAC07, 0867D6A2FE84028FC02AAC07, ); buildSettings = { DEBUGGING_SYMBOLS = NO; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; EXPORTED_SYMBOLS_FILE = ../../mac/iodbcinst.exp; FRAMEWORK_SEARCH_PATHS = "../../mac/iODBC/build/Deployment ../../mac/iODBC/build"; FRAMEWORK_VERSION = 3.52; HEADER_SEARCH_PATHS = "../../include ../../iodbcinst ../../iodbc"; INSTALL_PATH = /Library/Frameworks; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-DODBCVER=0x351 -D_MACX -DDLDAPI_MACX"; PREBINDING = NO; PRODUCT_NAME = iODBCinst; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = framework; }; dependencies = ( ); isa = PBXFrameworkTarget; name = iODBCinst; productInstallPath = /Library/Frameworks; productName = iODBCinst; productReference = 034768DEFF38A45A11DB9C8B; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable iODBCinst CFBundleGetInfoString iODBC Configuration Manager Library CFBundleIconFile CFBundleIdentifier org.iodbc.inst CFBundleInfoDictionaryVersion 6.0 CFBundleName iODBC Configuration CFBundlePackageType FMWK CFBundleShortVersionString 3.52.8 CFBundleSignature odbc CFBundleVersion 3.52.8 CSResourcesFileMapped "; }; 0867D69DFE84028FC02AAC07 = { buildActionMask = 2147483647; files = ( F535B35D0278023701A801DE, F535B3820278027E01A801DE, F535B3830278027E01A801DE, F535B3840278027E01A801DE, F535B3AD02780BB701A801DE, F535B3AE02780BB701A801DE, F535B3AF02780BB701A801DE, F535B3B002780BB701A801DE, F535B3B102780BB701A801DE, F535B3B202780BB701A801DE, F535B3B402780BD401A801DE, F535B3B602780C9E01A801DE, F535B3C5027827A201A801DE, F59CCFDB0504F64401000DFE, 71DF013706A3E372007AF56B, 7C530B6107F075D3000BBF8D, CD2616E208B138FD00D9BE06, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 0867D69EFE84028FC02AAC07 = { buildActionMask = 2147483647; files = ( 089C1668FE841158C02AAC07, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 0867D69FFE84028FC02AAC07 = { buildActionMask = 2147483647; files = ( F535B3850278027E01A801DE, F535B3860278027E01A801DE, F535B3870278027E01A801DE, F535B3880278027E01A801DE, F535B38A0278027E01A801DE, F535B38B0278027E01A801DE, F535B38C0278027E01A801DE, F535B38D0278027E01A801DE, F535B38E0278027E01A801DE, F535B38F0278027E01A801DE, F535B3900278027E01A801DE, F535B3910278027E01A801DE, F535B3920278027E01A801DE, F535B3930278027E01A801DE, F535B3940278027E01A801DE, F535B3950278027E01A801DE, F535B3960278027E01A801DE, F535B3970278027E01A801DE, F535B3980278027E01A801DE, F535B3990278027E01A801DE, F535B39A0278027E01A801DE, F535B39B0278027E01A801DE, F535B39C0278027E01A801DE, F535B39D0278027E01A801DE, F535B39E0278027E01A801DE, F535B39F0278027E01A801DE, F535B3A00278027E01A801DE, F535B3A10278027E01A801DE, F535B3A20278027E01A801DE, F535B3A30278027E01A801DE, F535B3A40278027E01A801DE, F535B3A50278027E01A801DE, F535B3C6027827A201A801DE, F54DA8D60279584A01A801DE, 7C530B5F07F075A7000BBF8D, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 0867D6A0FE84028FC02AAC07 = { buildActionMask = 2147483647; files = ( F54DA8DA02795B3501A801DE, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 0867D6A2FE84028FC02AAC07 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 089C1665FE841158C02AAC07 = { children = ( 089C1666FE841158C02AAC07, ); isa = PBXGroup; name = Resources; refType = 4; sourceTree = ""; }; 089C1666FE841158C02AAC07 = { children = ( 089C1667FE841158C02AAC07, ); isa = PBXVariantGroup; name = InfoPlist.strings; refType = 4; sourceTree = ""; }; 089C1667FE841158C02AAC07 = { fileEncoding = 10; isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; refType = 4; sourceTree = ""; }; 089C1668FE841158C02AAC07 = { fileRef = 089C1666FE841158C02AAC07; isa = PBXBuildFile; settings = { }; }; 08FB77ACFE841707C02AAC07 = { children = ( F535B35B0278021D01A801DE, F535B3A602780B9C01A801DE, ); isa = PBXGroup; name = Source; refType = 4; sourceTree = ""; }; //080 //081 //082 //083 //084 //4F0 //4F1 //4F2 //4F3 //4F4 4F0BB7EC011F40E904CA0E50 = { buildSettings = { COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../mac/iodbcinst.exp; FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = "-DODBCVER=0x351 -D_MACX -DDLDAPI_MACX"; RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Development; }; 4F0BB7ED011F40E904CA0E50 = { buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../mac/iodbcinst.exp; FRAMEWORK_VERSION = 3.52; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; OTHER_CFLAGS = "-DODBCVER=0x351 -D_MACX -DDLDAPI_MACX"; RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Deployment; }; //4F0 //4F1 //4F2 //4F3 //4F4 //710 //711 //712 //713 //714 71DF013606A3E372007AF56B = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcunix.h; path = ../../include/iodbcunix.h; refType = 2; sourceTree = SOURCE_ROOT; }; 71DF013706A3E372007AF56B = { fileRef = 71DF013606A3E372007AF56B; isa = PBXBuildFile; settings = { }; }; //710 //711 //712 //713 //714 //7C0 //7C1 //7C2 //7C3 //7C4 7C530B5E07F075A7000BBF8D = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = unicode.c; path = ../../iodbcinst/unicode.c; refType = 2; sourceTree = SOURCE_ROOT; }; 7C530B5F07F075A7000BBF8D = { fileRef = 7C530B5E07F075A7000BBF8D; isa = PBXBuildFile; settings = { }; }; 7C530B6007F075D3000BBF8D = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = unicode.h; path = ../../iodbcinst/unicode.h; refType = 2; sourceTree = SOURCE_ROOT; }; 7C530B6107F075D3000BBF8D = { fileRef = 7C530B6007F075D3000BBF8D; isa = PBXBuildFile; settings = { }; }; //7C0 //7C1 //7C2 //7C3 //7C4 //CD0 //CD1 //CD2 //CD3 //CD4 CD2616E108B138FD00D9BE06 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcinst.h; path = ../include/iodbcinst.h; refType = 2; sourceTree = SOURCE_ROOT; }; CD2616E208B138FD00D9BE06 = { fileRef = CD2616E108B138FD00D9BE06; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; //CD0 //CD1 //CD2 //CD3 //CD4 //F50 //F51 //F52 //F53 //F54 F535B35B0278021D01A801DE = { children = ( CD2616E108B138FD00D9BE06, F535B35C0278023701A801DE, 7C530B5E07F075A7000BBF8D, F535B35E0278027E01A801DE, F535B35F0278027E01A801DE, F535B3600278027E01A801DE, F535B3610278027E01A801DE, F535B3620278027E01A801DE, F535B3640278027E01A801DE, F535B3650278027E01A801DE, F535B3660278027E01A801DE, F535B3670278027E01A801DE, F535B3680278027E01A801DE, F535B3690278027E01A801DE, F535B36A0278027E01A801DE, F535B36B0278027E01A801DE, F535B36C0278027E01A801DE, F535B36D0278027E01A801DE, F535B36E0278027E01A801DE, F535B36F0278027E01A801DE, F535B3700278027E01A801DE, F535B3710278027E01A801DE, F535B3720278027E01A801DE, F535B3730278027E01A801DE, F535B3740278027E01A801DE, F535B3750278027E01A801DE, F535B3760278027E01A801DE, F535B3770278027E01A801DE, F535B3780278027E01A801DE, F535B3790278027E01A801DE, F535B37A0278027E01A801DE, F535B37B0278027E01A801DE, F535B37C0278027E01A801DE, F535B37D0278027E01A801DE, F535B37E0278027E01A801DE, F535B37F0278027E01A801DE, F535B3800278027E01A801DE, F535B3810278027E01A801DE, F54DA8D50279584A01A801DE, ); isa = PBXGroup; name = iodbcinst; refType = 4; sourceTree = ""; }; F535B35C0278023701A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = odbcinst.h; path = ../include/odbcinst.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B35D0278023701A801DE = { fileRef = F535B35C0278023701A801DE; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F535B35E0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Info.c; path = ../../iodbcinst/Info.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B35F0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = inifile.c; path = ../../iodbcinst/inifile.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3600278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inifile.h; path = ../../iodbcinst/inifile.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3610278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = iodbc_error.c; path = ../../iodbcinst/iodbc_error.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3620278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbc_error.h; path = ../../iodbcinst/iodbc_error.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3640278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = misc.c; path = ../../iodbcinst/misc.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3650278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = misc.h; path = ../../iodbcinst/misc.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3660278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLConfigDataSource.c; path = ../../iodbcinst/SQLConfigDataSource.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3670278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLConfigDriver.c; path = ../../iodbcinst/SQLConfigDriver.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3680278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLCreateDataSource.c; path = ../../iodbcinst/SQLCreateDataSource.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3690278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLGetAvailableDrivers.c; path = ../../iodbcinst/SQLGetAvailableDrivers.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B36A0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLGetConfigMode.c; path = ../../iodbcinst/SQLGetConfigMode.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B36B0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLGetInstalledDrivers.c; path = ../../iodbcinst/SQLGetInstalledDrivers.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B36C0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLGetPrivateProfileString.c; path = ../../iodbcinst/SQLGetPrivateProfileString.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B36D0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLGetTranslator.c; path = ../../iodbcinst/SQLGetTranslator.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B36E0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLInstallDriver.c; path = ../../iodbcinst/SQLInstallDriver.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B36F0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLInstallDriverEx.c; path = ../../iodbcinst/SQLInstallDriverEx.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3700278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLInstallDriverManager.c; path = ../../iodbcinst/SQLInstallDriverManager.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3710278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLInstallerError.c; path = ../../iodbcinst/SQLInstallerError.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3720278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLInstallODBC.c; path = ../../iodbcinst/SQLInstallODBC.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3730278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLInstallTranslator.c; path = ../../iodbcinst/SQLInstallTranslator.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3740278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLInstallTranslatorEx.c; path = ../../iodbcinst/SQLInstallTranslatorEx.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3750278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLManageDataSource.c; path = ../../iodbcinst/SQLManageDataSource.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3760278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLPostInstallerError.c; path = ../../iodbcinst/SQLPostInstallerError.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3770278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLReadFileDSN.c; path = ../../iodbcinst/SQLReadFileDSN.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3780278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLRemoveDefaultDataSource.c; path = ../../iodbcinst/SQLRemoveDefaultDataSource.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3790278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLRemoveDriver.c; path = ../../iodbcinst/SQLRemoveDriver.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B37A0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLRemoveDriverManager.c; path = ../../iodbcinst/SQLRemoveDriverManager.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B37B0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLRemoveDSNFromIni.c; path = ../../iodbcinst/SQLRemoveDSNFromIni.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B37C0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLRemoveTranslator.c; path = ../../iodbcinst/SQLRemoveTranslator.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B37D0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLSetConfigMode.c; path = ../../iodbcinst/SQLSetConfigMode.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B37E0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLValidDSN.c; path = ../../iodbcinst/SQLValidDSN.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B37F0278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLWriteDSNToIni.c; path = ../../iodbcinst/SQLWriteDSNToIni.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3800278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLWriteFileDSN.c; path = ../../iodbcinst/SQLWriteFileDSN.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3810278027E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SQLWritePrivateProfileString.c; path = ../../iodbcinst/SQLWritePrivateProfileString.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3820278027E01A801DE = { fileRef = F535B3600278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3830278027E01A801DE = { fileRef = F535B3620278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3840278027E01A801DE = { fileRef = F535B3650278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3850278027E01A801DE = { fileRef = F535B37B0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3860278027E01A801DE = { fileRef = F535B35E0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3870278027E01A801DE = { fileRef = F535B35F0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3880278027E01A801DE = { fileRef = F535B3610278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B38A0278027E01A801DE = { fileRef = F535B3640278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B38B0278027E01A801DE = { fileRef = F535B3660278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B38C0278027E01A801DE = { fileRef = F535B3670278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B38D0278027E01A801DE = { fileRef = F535B3680278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B38E0278027E01A801DE = { fileRef = F535B3690278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B38F0278027E01A801DE = { fileRef = F535B36A0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3900278027E01A801DE = { fileRef = F535B36B0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3910278027E01A801DE = { fileRef = F535B36C0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3920278027E01A801DE = { fileRef = F535B36D0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3930278027E01A801DE = { fileRef = F535B36E0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3940278027E01A801DE = { fileRef = F535B36F0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3950278027E01A801DE = { fileRef = F535B3700278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3960278027E01A801DE = { fileRef = F535B3710278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3970278027E01A801DE = { fileRef = F535B3720278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3980278027E01A801DE = { fileRef = F535B3730278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3990278027E01A801DE = { fileRef = F535B3740278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B39A0278027E01A801DE = { fileRef = F535B3750278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B39B0278027E01A801DE = { fileRef = F535B3760278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B39C0278027E01A801DE = { fileRef = F535B3770278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B39D0278027E01A801DE = { fileRef = F535B3780278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B39E0278027E01A801DE = { fileRef = F535B3790278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B39F0278027E01A801DE = { fileRef = F535B37A0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3A00278027E01A801DE = { fileRef = F535B37C0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3A10278027E01A801DE = { fileRef = F535B37D0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3A20278027E01A801DE = { fileRef = F535B37E0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3A30278027E01A801DE = { fileRef = F535B37F0278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3A40278027E01A801DE = { fileRef = F535B3800278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3A50278027E01A801DE = { fileRef = F535B3810278027E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3A602780B9C01A801DE = { children = ( 71DF013606A3E372007AF56B, F535B3C3027827A201A801DE, F535B3C4027827A201A801DE, F535B3A702780BB701A801DE, F535B3A802780BB701A801DE, F535B3A902780BB701A801DE, 7C530B6007F075D3000BBF8D, F535B3AA02780BB701A801DE, F535B3AB02780BB701A801DE, F535B3AC02780BB701A801DE, F535B3B302780BD401A801DE, F535B3B502780C9E01A801DE, F59CCFDA0504F64401000DFE, ); isa = PBXGroup; name = iODBC; refType = 4; sourceTree = ""; }; F535B3A702780BB701A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = isqltypes.h; path = ../../include/isqltypes.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3A802780BB701A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = isql.h; path = ../../include/isql.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3A902780BB701A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = isqlext.h; path = ../../include/isqlext.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3AA02780BB701A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sql.h; path = ../../include/sql.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3AB02780BB701A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sqlext.h; path = ../../include/sqlext.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3AC02780BB701A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sqltypes.h; path = ../../include/sqltypes.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3AD02780BB701A801DE = { fileRef = F535B3A702780BB701A801DE; isa = PBXBuildFile; settings = { }; }; F535B3AE02780BB701A801DE = { fileRef = F535B3A802780BB701A801DE; isa = PBXBuildFile; settings = { }; }; F535B3AF02780BB701A801DE = { fileRef = F535B3A902780BB701A801DE; isa = PBXBuildFile; settings = { }; }; F535B3B002780BB701A801DE = { fileRef = F535B3AA02780BB701A801DE; isa = PBXBuildFile; settings = { }; }; F535B3B102780BB701A801DE = { fileRef = F535B3AB02780BB701A801DE; isa = PBXBuildFile; settings = { }; }; F535B3B202780BB701A801DE = { fileRef = F535B3AC02780BB701A801DE; isa = PBXBuildFile; settings = { }; }; F535B3B302780BD401A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbc.h; path = ../../include/iodbc.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3B402780BD401A801DE = { fileRef = F535B3B302780BD401A801DE; isa = PBXBuildFile; settings = { }; }; F535B3B502780C9E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dlf.h; path = ../../iodbc/dlf.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3B602780C9E01A801DE = { fileRef = F535B3B502780C9E01A801DE; isa = PBXBuildFile; settings = { }; }; F535B3C3027827A201A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = dlf.c; path = ../../iodbcinst/dlf.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3C4027827A201A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dlf.h; path = ../../iodbcinst/dlf.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3C5027827A201A801DE = { fileRef = F535B3C4027827A201A801DE; isa = PBXBuildFile; settings = { }; }; F535B3C6027827A201A801DE = { fileRef = F535B3C3027827A201A801DE; isa = PBXBuildFile; settings = { }; }; F54DA8D50279584A01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.exports; name = iodbcinst.exp; path = ../iodbcinst.exp; refType = 2; sourceTree = SOURCE_ROOT; }; F54DA8D60279584A01A801DE = { fileRef = F54DA8D50279584A01A801DE; isa = PBXBuildFile; settings = { }; }; F54DA8D902795B3501A801DE = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; refType = 0; sourceTree = ""; }; F54DA8DA02795B3501A801DE = { fileRef = F54DA8D902795B3501A801DE; isa = PBXBuildFile; settings = { }; }; F59CCFDA0504F64401000DFE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcadm.h; path = ../../iodbcadm/iodbcadm.h; refType = 2; sourceTree = SOURCE_ROOT; }; F59CCFDB0504F64401000DFE = { fileRef = F59CCFDA0504F64401000DFE; isa = PBXBuildFile; settings = { }; }; }; rootObject = 0867D690FE84028FC02AAC07; } libiodbc-3.52.9/mac/iODBCinst/English.lproj/0000755000076400007640000000000012323210721015417 500000000000000libiodbc-3.52.9/mac/iODBCinst/English.lproj/InfoPlist.strings0000644000076400007640000000111412323204667020672 00000000000000þÿ/* Localized versions of Info.plist keys */ CFBundleName = "iODBCinst"; CFBundleShortVersionString = "iODBCinst version 3.52.8"; CFBundleGetInfoString = "iODBCinst version 3.52.8, Copyright 1995-2012, OpenLink Software"; NSHumanReadableCopyright = "Copyright © 1995-2012, OpenLink Software"; libiodbc-3.52.9/mac/iODBCinst/Info-iODBCinst.plist0000644000076400007640000000162312323204667016363 00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable iODBCinst CFBundleGetInfoString iODBC Configuration Manager Library CFBundleIconFile CFBundleIdentifier org.iodbc.inst CFBundleInfoDictionaryVersion 6.0 CFBundleName iODBC Configuration CFBundlePackageType FMWK CFBundleShortVersionString 3.52.8 CFBundleSignature odbc CFBundleVersion 3.52.8 CSResourcesFileMapped libiodbc-3.52.9/mac/iODBCinst/iODBCinst.xcodeproj/0000755000076400007640000000000012323210721016453 500000000000000libiodbc-3.52.9/mac/iODBCinst/iODBCinst.xcodeproj/project.pbxproj0000644000076400007640000010775712323204667021504 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ CDAE3AD30987CDA2003250F8 /* odbcinst.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B35C0278023701A801DE /* odbcinst.h */; settings = {ATTRIBUTES = (Public, ); }; }; CDAE3AD40987CDA2003250F8 /* inifile.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3600278027E01A801DE /* inifile.h */; }; CDAE3AD50987CDA2003250F8 /* iodbc_error.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3620278027E01A801DE /* iodbc_error.h */; }; CDAE3AD60987CDA2003250F8 /* misc.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3650278027E01A801DE /* misc.h */; }; CDAE3AD70987CDA2003250F8 /* isqltypes.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3A702780BB701A801DE /* isqltypes.h */; }; CDAE3AD80987CDA2003250F8 /* isql.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3A802780BB701A801DE /* isql.h */; }; CDAE3AD90987CDA2003250F8 /* isqlext.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3A902780BB701A801DE /* isqlext.h */; }; CDAE3ADA0987CDA2003250F8 /* sql.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3AA02780BB701A801DE /* sql.h */; }; CDAE3ADB0987CDA2003250F8 /* sqlext.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3AB02780BB701A801DE /* sqlext.h */; }; CDAE3ADC0987CDA2003250F8 /* sqltypes.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3AC02780BB701A801DE /* sqltypes.h */; }; CDAE3ADD0987CDA2003250F8 /* iodbc.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3B302780BD401A801DE /* iodbc.h */; }; CDAE3ADE0987CDA2003250F8 /* dlf.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3C4027827A201A801DE /* dlf.h */; }; CDAE3ADF0987CDA2003250F8 /* iodbcadm.h in Headers */ = {isa = PBXBuildFile; fileRef = F59CCFDA0504F64401000DFE /* iodbcadm.h */; }; CDAE3AE00987CDA2003250F8 /* iodbcunix.h in Headers */ = {isa = PBXBuildFile; fileRef = 71DF013606A3E372007AF56B /* iodbcunix.h */; }; CDAE3AE10987CDA2003250F8 /* unicode.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C530B6007F075D3000BBF8D /* unicode.h */; }; CDAE3AE20987CDA2003250F8 /* iodbcinst.h in Headers */ = {isa = PBXBuildFile; fileRef = CD2616E108B138FD00D9BE06 /* iodbcinst.h */; settings = {ATTRIBUTES = (Public, ); }; }; CDAE3AE40987CDA2003250F8 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; CDAE3AE60987CDA2003250F8 /* SQLRemoveDSNFromIni.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B37B0278027E01A801DE /* SQLRemoveDSNFromIni.c */; }; CDAE3AE70987CDA2003250F8 /* Info.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B35E0278027E01A801DE /* Info.c */; }; CDAE3AE80987CDA2003250F8 /* inifile.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B35F0278027E01A801DE /* inifile.c */; }; CDAE3AE90987CDA2003250F8 /* iodbc_error.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3610278027E01A801DE /* iodbc_error.c */; }; CDAE3AEA0987CDA2003250F8 /* misc.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3640278027E01A801DE /* misc.c */; }; CDAE3AEB0987CDA2003250F8 /* SQLConfigDataSource.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3660278027E01A801DE /* SQLConfigDataSource.c */; }; CDAE3AEC0987CDA2003250F8 /* SQLConfigDriver.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3670278027E01A801DE /* SQLConfigDriver.c */; }; CDAE3AED0987CDA2003250F8 /* SQLCreateDataSource.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3680278027E01A801DE /* SQLCreateDataSource.c */; }; CDAE3AEE0987CDA2003250F8 /* SQLGetAvailableDrivers.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3690278027E01A801DE /* SQLGetAvailableDrivers.c */; }; CDAE3AEF0987CDA2003250F8 /* SQLGetConfigMode.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B36A0278027E01A801DE /* SQLGetConfigMode.c */; }; CDAE3AF00987CDA2003250F8 /* SQLGetInstalledDrivers.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B36B0278027E01A801DE /* SQLGetInstalledDrivers.c */; }; CDAE3AF10987CDA2003250F8 /* SQLGetPrivateProfileString.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B36C0278027E01A801DE /* SQLGetPrivateProfileString.c */; }; CDAE3AF20987CDA2003250F8 /* SQLGetTranslator.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B36D0278027E01A801DE /* SQLGetTranslator.c */; }; CDAE3AF30987CDA2003250F8 /* SQLInstallDriver.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B36E0278027E01A801DE /* SQLInstallDriver.c */; }; CDAE3AF40987CDA2003250F8 /* SQLInstallDriverEx.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B36F0278027E01A801DE /* SQLInstallDriverEx.c */; }; CDAE3AF50987CDA2003250F8 /* SQLInstallDriverManager.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3700278027E01A801DE /* SQLInstallDriverManager.c */; }; CDAE3AF60987CDA2003250F8 /* SQLInstallerError.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3710278027E01A801DE /* SQLInstallerError.c */; }; CDAE3AF70987CDA2003250F8 /* SQLInstallODBC.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3720278027E01A801DE /* SQLInstallODBC.c */; }; CDAE3AF80987CDA2003250F8 /* SQLInstallTranslator.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3730278027E01A801DE /* SQLInstallTranslator.c */; }; CDAE3AF90987CDA2003250F8 /* SQLInstallTranslatorEx.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3740278027E01A801DE /* SQLInstallTranslatorEx.c */; }; CDAE3AFA0987CDA2003250F8 /* SQLManageDataSource.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3750278027E01A801DE /* SQLManageDataSource.c */; }; CDAE3AFB0987CDA2003250F8 /* SQLPostInstallerError.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3760278027E01A801DE /* SQLPostInstallerError.c */; }; CDAE3AFC0987CDA2003250F8 /* SQLReadFileDSN.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3770278027E01A801DE /* SQLReadFileDSN.c */; }; CDAE3AFD0987CDA2003250F8 /* SQLRemoveDefaultDataSource.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3780278027E01A801DE /* SQLRemoveDefaultDataSource.c */; }; CDAE3AFE0987CDA2003250F8 /* SQLRemoveDriver.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3790278027E01A801DE /* SQLRemoveDriver.c */; }; CDAE3AFF0987CDA2003250F8 /* SQLRemoveDriverManager.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B37A0278027E01A801DE /* SQLRemoveDriverManager.c */; }; CDAE3B000987CDA2003250F8 /* SQLRemoveTranslator.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B37C0278027E01A801DE /* SQLRemoveTranslator.c */; }; CDAE3B010987CDA2003250F8 /* SQLSetConfigMode.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B37D0278027E01A801DE /* SQLSetConfigMode.c */; }; CDAE3B020987CDA2003250F8 /* SQLValidDSN.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B37E0278027E01A801DE /* SQLValidDSN.c */; }; CDAE3B030987CDA2003250F8 /* SQLWriteDSNToIni.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B37F0278027E01A801DE /* SQLWriteDSNToIni.c */; }; CDAE3B040987CDA2003250F8 /* SQLWriteFileDSN.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3800278027E01A801DE /* SQLWriteFileDSN.c */; }; CDAE3B050987CDA2003250F8 /* SQLWritePrivateProfileString.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3810278027E01A801DE /* SQLWritePrivateProfileString.c */; }; CDAE3B060987CDA2003250F8 /* dlf.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3C3027827A201A801DE /* dlf.c */; }; CDAE3B070987CDA2003250F8 /* iodbcinst.exp in Sources */ = {isa = PBXBuildFile; fileRef = F54DA8D50279584A01A801DE /* iodbcinst.exp */; }; CDAE3B080987CDA2003250F8 /* unicode.c in Sources */ = {isa = PBXBuildFile; fileRef = 7C530B5E07F075A7000BBF8D /* unicode.c */; }; CDAE3B0A0987CDA2003250F8 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F54DA8D902795B3501A801DE /* CoreFoundation.framework */; }; /* End PBXBuildFile section */ /* Begin PBXBuildStyle section */ 4F0BB7EC011F40E904CA0E50 /* Development */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../mac/iodbcinst.exp; FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = ( "-DODBCVER=0x351", "-D_MACX", "-DDLDAPI_MACX", ); RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; name = Development; }; 4F0BB7ED011F40E904CA0E50 /* Deployment */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../mac/iodbcinst.exp; FRAMEWORK_VERSION = 3.52; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; OTHER_CFLAGS = ( "-DODBCVER=0x351", "-D_MACX", "-DDLDAPI_MACX", ); RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; name = Deployment; }; /* End PBXBuildStyle section */ /* Begin PBXFileReference section */ 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 71DF013606A3E372007AF56B /* iodbcunix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbcunix.h; path = ../../include/iodbcunix.h; sourceTree = SOURCE_ROOT; }; 7C530B5E07F075A7000BBF8D /* unicode.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = unicode.c; path = ../../iodbcinst/unicode.c; sourceTree = SOURCE_ROOT; }; 7C530B6007F075D3000BBF8D /* unicode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = unicode.h; path = ../../iodbcinst/unicode.h; sourceTree = SOURCE_ROOT; }; CD2616E108B138FD00D9BE06 /* iodbcinst.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbcinst.h; path = ../include/iodbcinst.h; sourceTree = SOURCE_ROOT; }; CDAE3B100987CDA2003250F8 /* Info-iODBCinst.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "Info-iODBCinst.plist"; sourceTree = ""; }; CDAE3B110987CDA2003250F8 /* iODBCinst.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = iODBCinst.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F535B35C0278023701A801DE /* odbcinst.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = odbcinst.h; path = ../../include/odbcinst.h; sourceTree = SOURCE_ROOT; }; F535B35E0278027E01A801DE /* Info.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Info.c; path = ../../iodbcinst/Info.c; sourceTree = SOURCE_ROOT; }; F535B35F0278027E01A801DE /* inifile.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = inifile.c; path = ../../iodbcinst/inifile.c; sourceTree = SOURCE_ROOT; }; F535B3600278027E01A801DE /* inifile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = inifile.h; path = ../../iodbcinst/inifile.h; sourceTree = SOURCE_ROOT; }; F535B3610278027E01A801DE /* iodbc_error.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = iodbc_error.c; path = ../../iodbcinst/iodbc_error.c; sourceTree = SOURCE_ROOT; }; F535B3620278027E01A801DE /* iodbc_error.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbc_error.h; path = ../../iodbcinst/iodbc_error.h; sourceTree = SOURCE_ROOT; }; F535B3640278027E01A801DE /* misc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = misc.c; path = ../../iodbcinst/misc.c; sourceTree = SOURCE_ROOT; }; F535B3650278027E01A801DE /* misc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = misc.h; path = ../../iodbcinst/misc.h; sourceTree = SOURCE_ROOT; }; F535B3660278027E01A801DE /* SQLConfigDataSource.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLConfigDataSource.c; path = ../../iodbcinst/SQLConfigDataSource.c; sourceTree = SOURCE_ROOT; }; F535B3670278027E01A801DE /* SQLConfigDriver.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLConfigDriver.c; path = ../../iodbcinst/SQLConfigDriver.c; sourceTree = SOURCE_ROOT; }; F535B3680278027E01A801DE /* SQLCreateDataSource.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLCreateDataSource.c; path = ../../iodbcinst/SQLCreateDataSource.c; sourceTree = SOURCE_ROOT; }; F535B3690278027E01A801DE /* SQLGetAvailableDrivers.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLGetAvailableDrivers.c; path = ../../iodbcinst/SQLGetAvailableDrivers.c; sourceTree = SOURCE_ROOT; }; F535B36A0278027E01A801DE /* SQLGetConfigMode.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLGetConfigMode.c; path = ../../iodbcinst/SQLGetConfigMode.c; sourceTree = SOURCE_ROOT; }; F535B36B0278027E01A801DE /* SQLGetInstalledDrivers.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLGetInstalledDrivers.c; path = ../../iodbcinst/SQLGetInstalledDrivers.c; sourceTree = SOURCE_ROOT; }; F535B36C0278027E01A801DE /* SQLGetPrivateProfileString.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLGetPrivateProfileString.c; path = ../../iodbcinst/SQLGetPrivateProfileString.c; sourceTree = SOURCE_ROOT; }; F535B36D0278027E01A801DE /* SQLGetTranslator.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLGetTranslator.c; path = ../../iodbcinst/SQLGetTranslator.c; sourceTree = SOURCE_ROOT; }; F535B36E0278027E01A801DE /* SQLInstallDriver.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLInstallDriver.c; path = ../../iodbcinst/SQLInstallDriver.c; sourceTree = SOURCE_ROOT; }; F535B36F0278027E01A801DE /* SQLInstallDriverEx.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLInstallDriverEx.c; path = ../../iodbcinst/SQLInstallDriverEx.c; sourceTree = SOURCE_ROOT; }; F535B3700278027E01A801DE /* SQLInstallDriverManager.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLInstallDriverManager.c; path = ../../iodbcinst/SQLInstallDriverManager.c; sourceTree = SOURCE_ROOT; }; F535B3710278027E01A801DE /* SQLInstallerError.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLInstallerError.c; path = ../../iodbcinst/SQLInstallerError.c; sourceTree = SOURCE_ROOT; }; F535B3720278027E01A801DE /* SQLInstallODBC.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLInstallODBC.c; path = ../../iodbcinst/SQLInstallODBC.c; sourceTree = SOURCE_ROOT; }; F535B3730278027E01A801DE /* SQLInstallTranslator.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLInstallTranslator.c; path = ../../iodbcinst/SQLInstallTranslator.c; sourceTree = SOURCE_ROOT; }; F535B3740278027E01A801DE /* SQLInstallTranslatorEx.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLInstallTranslatorEx.c; path = ../../iodbcinst/SQLInstallTranslatorEx.c; sourceTree = SOURCE_ROOT; }; F535B3750278027E01A801DE /* SQLManageDataSource.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLManageDataSource.c; path = ../../iodbcinst/SQLManageDataSource.c; sourceTree = SOURCE_ROOT; }; F535B3760278027E01A801DE /* SQLPostInstallerError.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLPostInstallerError.c; path = ../../iodbcinst/SQLPostInstallerError.c; sourceTree = SOURCE_ROOT; }; F535B3770278027E01A801DE /* SQLReadFileDSN.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLReadFileDSN.c; path = ../../iodbcinst/SQLReadFileDSN.c; sourceTree = SOURCE_ROOT; }; F535B3780278027E01A801DE /* SQLRemoveDefaultDataSource.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLRemoveDefaultDataSource.c; path = ../../iodbcinst/SQLRemoveDefaultDataSource.c; sourceTree = SOURCE_ROOT; }; F535B3790278027E01A801DE /* SQLRemoveDriver.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLRemoveDriver.c; path = ../../iodbcinst/SQLRemoveDriver.c; sourceTree = SOURCE_ROOT; }; F535B37A0278027E01A801DE /* SQLRemoveDriverManager.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLRemoveDriverManager.c; path = ../../iodbcinst/SQLRemoveDriverManager.c; sourceTree = SOURCE_ROOT; }; F535B37B0278027E01A801DE /* SQLRemoveDSNFromIni.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLRemoveDSNFromIni.c; path = ../../iodbcinst/SQLRemoveDSNFromIni.c; sourceTree = SOURCE_ROOT; }; F535B37C0278027E01A801DE /* SQLRemoveTranslator.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLRemoveTranslator.c; path = ../../iodbcinst/SQLRemoveTranslator.c; sourceTree = SOURCE_ROOT; }; F535B37D0278027E01A801DE /* SQLSetConfigMode.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLSetConfigMode.c; path = ../../iodbcinst/SQLSetConfigMode.c; sourceTree = SOURCE_ROOT; }; F535B37E0278027E01A801DE /* SQLValidDSN.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLValidDSN.c; path = ../../iodbcinst/SQLValidDSN.c; sourceTree = SOURCE_ROOT; }; F535B37F0278027E01A801DE /* SQLWriteDSNToIni.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLWriteDSNToIni.c; path = ../../iodbcinst/SQLWriteDSNToIni.c; sourceTree = SOURCE_ROOT; }; F535B3800278027E01A801DE /* SQLWriteFileDSN.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLWriteFileDSN.c; path = ../../iodbcinst/SQLWriteFileDSN.c; sourceTree = SOURCE_ROOT; }; F535B3810278027E01A801DE /* SQLWritePrivateProfileString.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SQLWritePrivateProfileString.c; path = ../../iodbcinst/SQLWritePrivateProfileString.c; sourceTree = SOURCE_ROOT; }; F535B3A702780BB701A801DE /* isqltypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = isqltypes.h; path = ../../include/isqltypes.h; sourceTree = SOURCE_ROOT; }; F535B3A802780BB701A801DE /* isql.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = isql.h; path = ../../include/isql.h; sourceTree = SOURCE_ROOT; }; F535B3A902780BB701A801DE /* isqlext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = isqlext.h; path = ../../include/isqlext.h; sourceTree = SOURCE_ROOT; }; F535B3AA02780BB701A801DE /* sql.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sql.h; path = ../../include/sql.h; sourceTree = SOURCE_ROOT; }; F535B3AB02780BB701A801DE /* sqlext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sqlext.h; path = ../../include/sqlext.h; sourceTree = SOURCE_ROOT; }; F535B3AC02780BB701A801DE /* sqltypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sqltypes.h; path = ../../include/sqltypes.h; sourceTree = SOURCE_ROOT; }; F535B3B302780BD401A801DE /* iodbc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbc.h; path = ../../include/iodbc.h; sourceTree = SOURCE_ROOT; }; F535B3C3027827A201A801DE /* dlf.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dlf.c; path = ../../iodbcinst/dlf.c; sourceTree = SOURCE_ROOT; }; F535B3C4027827A201A801DE /* dlf.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = dlf.h; path = ../../iodbcinst/dlf.h; sourceTree = SOURCE_ROOT; }; F54DA8D50279584A01A801DE /* iodbcinst.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; name = iodbcinst.exp; path = ../iodbcinst.exp; sourceTree = SOURCE_ROOT; }; F54DA8D902795B3501A801DE /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; F59CCFDA0504F64401000DFE /* iodbcadm.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbcadm.h; path = ../../iodbcadm/iodbcadm.h; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ CDAE3B090987CDA2003250F8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CDAE3B0A0987CDA2003250F8 /* CoreFoundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 034768DDFF38A45A11DB9C8B /* Products */ = { isa = PBXGroup; children = ( CDAE3B110987CDA2003250F8 /* iODBCinst.framework */, ); name = Products; sourceTree = ""; }; 0867D691FE84028FC02AAC07 /* iODBCinst */ = { isa = PBXGroup; children = ( 08FB77ACFE841707C02AAC07 /* Source */, 089C1665FE841158C02AAC07 /* Resources */, 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, 034768DDFF38A45A11DB9C8B /* Products */, CDAE3B100987CDA2003250F8 /* Info-iODBCinst.plist */, ); name = iODBCinst; sourceTree = ""; }; 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( F54DA8D902795B3501A801DE /* CoreFoundation.framework */, ); name = "External Frameworks and Libraries"; sourceTree = ""; }; 089C1665FE841158C02AAC07 /* Resources */ = { isa = PBXGroup; children = ( 089C1666FE841158C02AAC07 /* InfoPlist.strings */, ); name = Resources; sourceTree = ""; }; 08FB77ACFE841707C02AAC07 /* Source */ = { isa = PBXGroup; children = ( F535B35B0278021D01A801DE /* iodbcinst */, F535B3A602780B9C01A801DE /* iODBC */, ); name = Source; sourceTree = ""; }; F535B35B0278021D01A801DE /* iodbcinst */ = { isa = PBXGroup; children = ( CD2616E108B138FD00D9BE06 /* iodbcinst.h */, F535B35C0278023701A801DE /* odbcinst.h */, 7C530B5E07F075A7000BBF8D /* unicode.c */, F535B35E0278027E01A801DE /* Info.c */, F535B35F0278027E01A801DE /* inifile.c */, F535B3600278027E01A801DE /* inifile.h */, F535B3610278027E01A801DE /* iodbc_error.c */, F535B3620278027E01A801DE /* iodbc_error.h */, F535B3640278027E01A801DE /* misc.c */, F535B3650278027E01A801DE /* misc.h */, F535B3660278027E01A801DE /* SQLConfigDataSource.c */, F535B3670278027E01A801DE /* SQLConfigDriver.c */, F535B3680278027E01A801DE /* SQLCreateDataSource.c */, F535B3690278027E01A801DE /* SQLGetAvailableDrivers.c */, F535B36A0278027E01A801DE /* SQLGetConfigMode.c */, F535B36B0278027E01A801DE /* SQLGetInstalledDrivers.c */, F535B36C0278027E01A801DE /* SQLGetPrivateProfileString.c */, F535B36D0278027E01A801DE /* SQLGetTranslator.c */, F535B36E0278027E01A801DE /* SQLInstallDriver.c */, F535B36F0278027E01A801DE /* SQLInstallDriverEx.c */, F535B3700278027E01A801DE /* SQLInstallDriverManager.c */, F535B3710278027E01A801DE /* SQLInstallerError.c */, F535B3720278027E01A801DE /* SQLInstallODBC.c */, F535B3730278027E01A801DE /* SQLInstallTranslator.c */, F535B3740278027E01A801DE /* SQLInstallTranslatorEx.c */, F535B3750278027E01A801DE /* SQLManageDataSource.c */, F535B3760278027E01A801DE /* SQLPostInstallerError.c */, F535B3770278027E01A801DE /* SQLReadFileDSN.c */, F535B3780278027E01A801DE /* SQLRemoveDefaultDataSource.c */, F535B3790278027E01A801DE /* SQLRemoveDriver.c */, F535B37A0278027E01A801DE /* SQLRemoveDriverManager.c */, F535B37B0278027E01A801DE /* SQLRemoveDSNFromIni.c */, F535B37C0278027E01A801DE /* SQLRemoveTranslator.c */, F535B37D0278027E01A801DE /* SQLSetConfigMode.c */, F535B37E0278027E01A801DE /* SQLValidDSN.c */, F535B37F0278027E01A801DE /* SQLWriteDSNToIni.c */, F535B3800278027E01A801DE /* SQLWriteFileDSN.c */, F535B3810278027E01A801DE /* SQLWritePrivateProfileString.c */, F54DA8D50279584A01A801DE /* iodbcinst.exp */, ); name = iodbcinst; sourceTree = ""; }; F535B3A602780B9C01A801DE /* iODBC */ = { isa = PBXGroup; children = ( 71DF013606A3E372007AF56B /* iodbcunix.h */, F535B3C3027827A201A801DE /* dlf.c */, F535B3C4027827A201A801DE /* dlf.h */, F535B3A702780BB701A801DE /* isqltypes.h */, F535B3A802780BB701A801DE /* isql.h */, F535B3A902780BB701A801DE /* isqlext.h */, 7C530B6007F075D3000BBF8D /* unicode.h */, F535B3AA02780BB701A801DE /* sql.h */, F535B3AB02780BB701A801DE /* sqlext.h */, F535B3AC02780BB701A801DE /* sqltypes.h */, F535B3B302780BD401A801DE /* iodbc.h */, F59CCFDA0504F64401000DFE /* iodbcadm.h */, ); name = iODBC; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ CDAE3AD20987CDA2003250F8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( CDAE3AD30987CDA2003250F8 /* odbcinst.h in Headers */, CDAE3AD40987CDA2003250F8 /* inifile.h in Headers */, CDAE3AD50987CDA2003250F8 /* iodbc_error.h in Headers */, CDAE3AD60987CDA2003250F8 /* misc.h in Headers */, CDAE3AD70987CDA2003250F8 /* isqltypes.h in Headers */, CDAE3AD80987CDA2003250F8 /* isql.h in Headers */, CDAE3AD90987CDA2003250F8 /* isqlext.h in Headers */, CDAE3ADA0987CDA2003250F8 /* sql.h in Headers */, CDAE3ADB0987CDA2003250F8 /* sqlext.h in Headers */, CDAE3ADC0987CDA2003250F8 /* sqltypes.h in Headers */, CDAE3ADD0987CDA2003250F8 /* iodbc.h in Headers */, CDAE3ADE0987CDA2003250F8 /* dlf.h in Headers */, CDAE3ADF0987CDA2003250F8 /* iodbcadm.h in Headers */, CDAE3AE00987CDA2003250F8 /* iodbcunix.h in Headers */, CDAE3AE10987CDA2003250F8 /* unicode.h in Headers */, CDAE3AE20987CDA2003250F8 /* iodbcinst.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ CDAE3AD10987CDA2003250F8 /* iODBCinst */ = { isa = PBXNativeTarget; buildConfigurationList = CDAE3B0C0987CDA2003250F8 /* Build configuration list for PBXNativeTarget "iODBCinst" */; buildPhases = ( CDAE3AD20987CDA2003250F8 /* Headers */, CDAE3AE30987CDA2003250F8 /* Resources */, CDAE3AE50987CDA2003250F8 /* Sources */, CDAE3B090987CDA2003250F8 /* Frameworks */, CDAE3B0B0987CDA2003250F8 /* Rez */, ); buildRules = ( ); buildSettings = { DEBUGGING_SYMBOLS = NO; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; EXPORTED_SYMBOLS_FILE = ../../mac/iodbcinst.exp; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ); FRAMEWORK_VERSION = 3.52; HEADER_SEARCH_PATHS = ( ../../include, ../../iodbcinst, ../../iodbc, ); INSTALL_PATH = /Library/Frameworks; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = ( "-DODBCVER=0x351", "-D_MACX", "-DDLDAPI_MACX", ); PREBINDING = NO; PRODUCT_NAME = iODBCinst; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = framework; }; dependencies = ( ); name = iODBCinst; productInstallPath = /Library/Frameworks; productName = iODBCinst; productReference = CDAE3B110987CDA2003250F8 /* iODBCinst.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = CDAE3ACB0987CD92003250F8 /* Build configuration list for PBXProject "iODBCinst" */; buildSettings = { }; buildStyles = ( 4F0BB7EC011F40E904CA0E50 /* Development */, 4F0BB7ED011F40E904CA0E50 /* Deployment */, ); hasScannedForEncodings = 1; mainGroup = 0867D691FE84028FC02AAC07 /* iODBCinst */; productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; projectDirPath = ""; targets = ( CDAE3AD10987CDA2003250F8 /* iODBCinst */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ CDAE3AE30987CDA2003250F8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( CDAE3AE40987CDA2003250F8 /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXRezBuildPhase section */ CDAE3B0B0987CDA2003250F8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ CDAE3AE50987CDA2003250F8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CDAE3AE60987CDA2003250F8 /* SQLRemoveDSNFromIni.c in Sources */, CDAE3AE70987CDA2003250F8 /* Info.c in Sources */, CDAE3AE80987CDA2003250F8 /* inifile.c in Sources */, CDAE3AE90987CDA2003250F8 /* iodbc_error.c in Sources */, CDAE3AEA0987CDA2003250F8 /* misc.c in Sources */, CDAE3AEB0987CDA2003250F8 /* SQLConfigDataSource.c in Sources */, CDAE3AEC0987CDA2003250F8 /* SQLConfigDriver.c in Sources */, CDAE3AED0987CDA2003250F8 /* SQLCreateDataSource.c in Sources */, CDAE3AEE0987CDA2003250F8 /* SQLGetAvailableDrivers.c in Sources */, CDAE3AEF0987CDA2003250F8 /* SQLGetConfigMode.c in Sources */, CDAE3AF00987CDA2003250F8 /* SQLGetInstalledDrivers.c in Sources */, CDAE3AF10987CDA2003250F8 /* SQLGetPrivateProfileString.c in Sources */, CDAE3AF20987CDA2003250F8 /* SQLGetTranslator.c in Sources */, CDAE3AF30987CDA2003250F8 /* SQLInstallDriver.c in Sources */, CDAE3AF40987CDA2003250F8 /* SQLInstallDriverEx.c in Sources */, CDAE3AF50987CDA2003250F8 /* SQLInstallDriverManager.c in Sources */, CDAE3AF60987CDA2003250F8 /* SQLInstallerError.c in Sources */, CDAE3AF70987CDA2003250F8 /* SQLInstallODBC.c in Sources */, CDAE3AF80987CDA2003250F8 /* SQLInstallTranslator.c in Sources */, CDAE3AF90987CDA2003250F8 /* SQLInstallTranslatorEx.c in Sources */, CDAE3AFA0987CDA2003250F8 /* SQLManageDataSource.c in Sources */, CDAE3AFB0987CDA2003250F8 /* SQLPostInstallerError.c in Sources */, CDAE3AFC0987CDA2003250F8 /* SQLReadFileDSN.c in Sources */, CDAE3AFD0987CDA2003250F8 /* SQLRemoveDefaultDataSource.c in Sources */, CDAE3AFE0987CDA2003250F8 /* SQLRemoveDriver.c in Sources */, CDAE3AFF0987CDA2003250F8 /* SQLRemoveDriverManager.c in Sources */, CDAE3B000987CDA2003250F8 /* SQLRemoveTranslator.c in Sources */, CDAE3B010987CDA2003250F8 /* SQLSetConfigMode.c in Sources */, CDAE3B020987CDA2003250F8 /* SQLValidDSN.c in Sources */, CDAE3B030987CDA2003250F8 /* SQLWriteDSNToIni.c in Sources */, CDAE3B040987CDA2003250F8 /* SQLWriteFileDSN.c in Sources */, CDAE3B050987CDA2003250F8 /* SQLWritePrivateProfileString.c in Sources */, CDAE3B060987CDA2003250F8 /* dlf.c in Sources */, CDAE3B070987CDA2003250F8 /* iodbcinst.exp in Sources */, CDAE3B080987CDA2003250F8 /* unicode.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 089C1666FE841158C02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 089C1667FE841158C02AAC07 /* English */, ); name = InfoPlist.strings; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ CDAE3ACC0987CD92003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, x86_64, ); MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; }; name = Development; }; CDAE3ACD0987CD92003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, x86_64, ); MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; }; name = Deployment; }; CDAE3B0D0987CDA2003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../mac/iodbcinst.exp; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ); FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "ODBCVER=0x351", _MACX, DLDAPI_MACX, ); HEADER_SEARCH_PATHS = ( ../../include, ../../iodbcinst, ../../iodbc, ); INFOPLIST_FILE = "Info-iODBCinst.plist"; INSTALL_PATH = /Library/Frameworks; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iODBCinst; RESMERGER_SOURCES_FORK = data; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = framework; ZERO_LINK = NO; }; name = Development; }; CDAE3B0E0987CDA2003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../mac/iodbcinst.exp; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ); FRAMEWORK_VERSION = 3.52; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; GCC_PREPROCESSOR_DEFINITIONS = ( "ODBCVER=0x351", _MACX, DLDAPI_MACX, ); HEADER_SEARCH_PATHS = ( ../../include, ../../iodbcinst, ../../iodbc, ); INFOPLIST_FILE = "Info-iODBCinst.plist"; INSTALL_PATH = /Library/Frameworks; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iODBCinst; RESMERGER_SOURCES_FORK = data; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = framework; ZERO_LINK = NO; }; name = Deployment; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ CDAE3ACB0987CD92003250F8 /* Build configuration list for PBXProject "iODBCinst" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3ACC0987CD92003250F8 /* Development */, CDAE3ACD0987CD92003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; CDAE3B0C0987CDA2003250F8 /* Build configuration list for PBXNativeTarget "iODBCinst" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3B0D0987CDA2003250F8 /* Development */, CDAE3B0E0987CDA2003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; /* End XCConfigurationList section */ }; rootObject = 0867D690FE84028FC02AAC07 /* Project object */; } libiodbc-3.52.9/mac/README.MYODBC0000644000076400007640000001370212323204667012716 00000000000000Objective: how to build MyODBC for Mac OS X and configure for use with iODBC Introduction ============ This readme file describes the steps required to build a MyODBC driver on Mac OS X. Before this driver can be built you need to install the current version of MySQL on your system. As building MySQL itself on Mac OS X falls outside the context of this readme, we suggest you download a Darwin binary from: http://www.mysql.com/downloads/mysql-4.0.htm As of writing the version of this package is: MySQL 4.0.14 MacOS X 10.2 (Darwin 6.x) (PowerPC) (7.4M) From the same site you can also download the latest MyODBC sources: http://www.mysql.com/downloads/api-myodbc-3.51.html As of writing the version of this package is: MyODBC 3.51.06 Source Files (tar.gz) (314K) Unpack this source code into a new directory. There are who ways to build the MyODBC driver which we will both describe in detail below: Method 1 : using the iODBC frameworks ===================================== 1. Install iODBC framework version Please read the file ../README.MACOSX for details on how to build and install the framework version of iODBC. 2. Setting up the MyODBC source tree. To setup the MyODBC tree execute the following commands: $ cd MyODBC-3.51.06 Then we can either use the supplied myodbc.configure.diff file from the iODBC project using the command: $ patch -p1 < myodbc.configure.diff or edit the file configure manually and replace every occurrence of String Replace with -liodbc -framework iODBC -liodbcinst -framework iODBCinst isql.h iODBC/isql.h isqlext.h iODBC/isqlext.h isqltypes.h iODBC/isqltypes.h sql.h iODBC/sql.h sqlext.h iODBC/sqlext.h sqltypes.h iODBC/sqltypes.h iodbcinst.h iODBCinst/iodbcinst.h After this we configure the source code using the following command: ./configure --with-mysql-libs=XXX --with-mysql-includes=YYY where XXX and YYY need to be replaced with the correct paths to the MySQL libraries and header files. Edit the file myodbc3.h and replace every occurrence of: String Replace with isql.h iODBC/isql.h isqlext.h iODBC/isqlext.h isqltypes.h iODBC/isqltypes.h sql.h iODBC/sql.h sqlext.h iODBC/sqlext.h sqltypes.h iODBC/sqltypes.h iodbcinst.h iODBCinst/iodbcinst.h Edit the file myconf.h and make sure the following options are defined: HAVE_IODBCINST_H HAVE_ISQL_H HAVE_ISQLEXT_H HAVE_SQLGETPRIVATEPROFILESTRING If any of these options are not defined, change the line from: /* #undef HAVE_ISQL_H */ into: #define HAVE_ISQL_H 1 Finally, you need to tell to the build process to link the MyODBC driver against the iODBCinst framework. To achieve this goal, just edit the driver/Makefile, make a search on libmyodbc3_la_LIBADD, and append -Wl,-framework,iODBCinst at the end of this line. 3. Building the MyODBC driver You can now execute the following command to build the driver: $ make As Mac OS X is only able to load at runtime only bundle libraries, you need to use the following command to build the actual MyODBC driver : $ cd driver $ cc -bundle -o libmyodbc.dylib *.lo -framework iODBCinst \ -L/usr/local/mysql/lib/mysql -lmysqlclient -lz Use this file libmyodbc.dylib as the driver. Method 2 : using the iODBC Unix libraries ========================================= 1. Install iODBC Unix version The iODBC package can also be build as a normal Unix type package using the following commands: $ ./configure --prefix=/usr $ make followed by installing the library as root using the command: # make install 2. Setting up the MyODBC source tree. To setup the MyODBC tree execute the following commands: $ cd MyODBC-3.51.06 After this we can configure the source code using the following command: ./configure --with-mysql-libs=XXX --with-mysql-includes=YYY where XXX and YYY need to be replaced with the correct paths to the MySQL libraries and header files. 3. Building the MyODBC driver You can now execute the following command to build the driver: $ make As Mac OS X is only able to load at runtime only bundle libraries, you need to use the following command to build the actual MyODBC driver : $ cc -bundle -o libmyodbc.dylib *.lo -framework iODBCinst \ -L/usr/local/mysql/lib/mysql -lmysqlclient -lz Use this file libmyodbc.dylib to configure the driver in the next section. Configuring MyODBC Driver for use with iODBC ============================================= To configure the MyODBC for use with iODBC the following actions should be performed: 1. From the MyODBC directory run the following command to install driver in '/usr/local/lib' as user root: $ cp libmyodbc.dylib /usr/local/lib 2. Configure the MyODBC Driver by adding the following lines to /etc/odbcinst.ini: [ODBC Drivers] MyODBC Driver = Installed [MyODBC Driver] Driver = /usr/local/lib/libmyodbc.dylib 3. Configure MyODBC Driver ODBC DSN by adding the following lines to either /etc/odbc.ini or $HOME/.odbc.ini: [ODBC Data Sources] MyODBCDSN = MyODBC Driver [MyODBCDSN] Driver = /usr/local/lib/libmyodbc.dylib Port = 3306 UID = mysql *** Please note that the DSN ie MyODBCDSN, must be the name of a valid MySQL Database for the Database Server the connection attempt is being made to. 4. A test connection can now be made to the MySQL Database using the following sample program bundled with the iODBC SDK: /usr/local/bin/odbctest OpenLink ODBC Demonstration program This program shows an interactive SQL processor Enter ODBC connect string (? shows list): ? DSN | Driver --------------------------------------------------------------- MyODBCDSN | MyODBC Driver Enter ODBC connect string (? shows list): Use the following string: DSN=MyODBCDSN;UID=mysql;PWD=xxxx Driver: 02.50.39 SQL> select * from libiodbc-3.52.9/mac/iODBCtest/0000755000076400007640000000000012323210720012702 500000000000000libiodbc-3.52.9/mac/iODBCtest/iODBCtest.pbproj/0000755000076400007640000000000012323210721015756 500000000000000libiodbc-3.52.9/mac/iODBCtest/iODBCtest.pbproj/project.pbxproj0000644000076400007640000001330712323204667020772 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 39; objects = { 014CEA520018CE5811CA2923 = { buildSettings = { COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_SEARCH_PATHS = "../../mac/iODBC/build/Development ../../mac/iODBC/build ../../mac/iODBCinst/build/Development ../../mac/iODBCinst/build"; FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ""; HEADER_SEARCH_PATHS = "../../include"; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = ""; RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Development; }; 014CEA530018CE5811CA2923 = { buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DEPLOYMENT_LOCATION = NO; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_SEARCH_PATHS = "../../mac/iODBC/build/Deployment ../../mac/iODBC/build ../../mac/iODBCinst/build/Deployment ../../mac/iODBCinst/build"; FRAMEWORK_VERSION = 3.52; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; HEADER_SEARCH_PATHS = "../../include"; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Deployment; }; //010 //011 //012 //013 //014 //030 //031 //032 //033 //034 034768E8FF38A79811DB9C8B = { explicitFileType = "compiled.mach-o.executable"; isa = PBXFileReference; path = iodbctest; refType = 3; sourceTree = BUILT_PRODUCTS_DIR; }; //030 //031 //032 //033 //034 //080 //081 //082 //083 //084 08FB7793FE84155DC02AAC07 = { buildSettings = { }; buildStyles = ( 014CEA520018CE5811CA2923, 014CEA530018CE5811CA2923, ); hasScannedForEncodings = 1; isa = PBXProject; mainGroup = 08FB7794FE84155DC02AAC07; projectDirPath = ""; targets = ( 08FB779FFE84155DC02AAC07, ); }; 08FB7794FE84155DC02AAC07 = { children = ( 08FB7795FE84155DC02AAC07, F535B3B802780F5F01A801DE, 1AB674ADFE9D54B511CA2CBB, ); isa = PBXGroup; name = iodbctest; refType = 4; sourceTree = ""; }; 08FB7795FE84155DC02AAC07 = { children = ( F535B3B702780F5F01A801DE, ); isa = PBXGroup; name = Source; refType = 4; sourceTree = ""; }; 08FB779FFE84155DC02AAC07 = { buildPhases = ( 08FB77A0FE84155DC02AAC07, 08FB77A1FE84155DC02AAC07, 08FB77A3FE84155DC02AAC07, 08FB77A5FE84155DC02AAC07, ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = "../../mac/iODBC/build/Development ../../mac/iODBC/build ../../mac/iODBCinst/build/Development ../../mac/iODBCinst/build"; HEADER_SEARCH_PATHS = "../../include"; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = ""; OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iodbctest; REZ_EXECUTABLE = YES; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; }; dependencies = ( ); isa = PBXToolTarget; name = iodbctest; productInstallPath = "/Library/Application Support/iODBC/bin"; productName = iodbctest; productReference = 034768E8FF38A79811DB9C8B; }; 08FB77A0FE84155DC02AAC07 = { buildActionMask = 2147483647; files = ( ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 08FB77A1FE84155DC02AAC07 = { buildActionMask = 2147483647; files = ( F535B3B902780F5F01A801DE, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 08FB77A3FE84155DC02AAC07 = { buildActionMask = 2147483647; files = ( F5CD650D0497672D01A801EC, F5CD65130497673F01A801EC, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 08FB77A5FE84155DC02AAC07 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; //080 //081 //082 //083 //084 //1A0 //1A1 //1A2 //1A3 //1A4 1AB674ADFE9D54B511CA2CBB = { children = ( 034768E8FF38A79811DB9C8B, ); isa = PBXGroup; name = Products; refType = 4; sourceTree = ""; }; //1A0 //1A1 //1A2 //1A3 //1A4 //F50 //F51 //F52 //F53 //F54 F535B3B702780F5F01A801DE = { explicitFileType = sourcecode.c.c; fileEncoding = 30; isa = PBXFileReference; name = iodbctest.c; path = ../../samples/iodbctest.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3B802780F5F01A801DE = { children = ( F5CD65030497672D01A801EC, F5CD650E0497673F01A801EC, ); isa = PBXGroup; name = Frameworks; path = ..; refType = 3; sourceTree = BUILT_PRODUCTS_DIR; }; F535B3B902780F5F01A801DE = { fileRef = F535B3B702780F5F01A801DE; isa = PBXBuildFile; settings = { }; }; F5CD65030497672D01A801EC = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBC.framework; path = ../iODBC/build/iODBC.framework; refType = 2; sourceTree = SOURCE_ROOT; }; F5CD650D0497672D01A801EC = { fileRef = F5CD65030497672D01A801EC; isa = PBXBuildFile; settings = { }; }; F5CD650E0497673F01A801EC = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBCinst.framework; path = ../iODBCinst/build/iODBCinst.framework; refType = 2; sourceTree = SOURCE_ROOT; }; F5CD65130497673F01A801EC = { fileRef = F5CD650E0497673F01A801EC; isa = PBXBuildFile; settings = { }; }; }; rootObject = 08FB7793FE84155DC02AAC07; } libiodbc-3.52.9/mac/iODBCtest/iODBCtest.xcodeproj/0000755000076400007640000000000012323210721016457 500000000000000libiodbc-3.52.9/mac/iODBCtest/iODBCtest.xcodeproj/project.pbxproj0000644000076400007640000002473212323204667021477 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ CDAE3B2F0987CEF4003250F8 /* iodbctest.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3B702780F5F01A801DE /* iodbctest.c */; }; CDAE3B310987CEF4003250F8 /* iODBC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5CD65030497672D01A801EC /* iODBC.framework */; }; CDAE3B320987CEF4003250F8 /* iODBCinst.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5CD650E0497673F01A801EC /* iODBCinst.framework */; }; /* End PBXBuildFile section */ /* Begin PBXBuildStyle section */ 014CEA520018CE5811CA2923 /* Development */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Development, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Development, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ""; HEADER_SEARCH_PATHS = ../../include; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = ""; RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; name = Development; }; 014CEA530018CE5811CA2923 /* Deployment */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DEPLOYMENT_LOCATION = NO; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; HEADER_SEARCH_PATHS = ../../include; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; name = Deployment; }; /* End PBXBuildStyle section */ /* Begin PBXFileReference section */ CDAE3B380987CEF4003250F8 /* iodbctest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = iodbctest; sourceTree = BUILT_PRODUCTS_DIR; }; F535B3B702780F5F01A801DE /* iodbctest.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; fileEncoding = 30; name = iodbctest.c; path = ../../samples/iodbctest.c; sourceTree = SOURCE_ROOT; }; F5CD65030497672D01A801EC /* iODBC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBC.framework; path = ../iODBC/build/iODBC.framework; sourceTree = SOURCE_ROOT; }; F5CD650E0497673F01A801EC /* iODBCinst.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBCinst.framework; path = ../iODBCinst/build/iODBCinst.framework; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ CDAE3B300987CEF4003250F8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CDAE3B310987CEF4003250F8 /* iODBC.framework in Frameworks */, CDAE3B320987CEF4003250F8 /* iODBCinst.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 08FB7794FE84155DC02AAC07 /* iodbctest */ = { isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, F535B3B802780F5F01A801DE /* Frameworks */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = iodbctest; sourceTree = ""; }; 08FB7795FE84155DC02AAC07 /* Source */ = { isa = PBXGroup; children = ( F535B3B702780F5F01A801DE /* iodbctest.c */, ); name = Source; sourceTree = ""; }; 1AB674ADFE9D54B511CA2CBB /* Products */ = { isa = PBXGroup; children = ( CDAE3B380987CEF4003250F8 /* iodbctest */, ); name = Products; sourceTree = ""; }; F535B3B802780F5F01A801DE /* Frameworks */ = { isa = PBXGroup; children = ( F5CD65030497672D01A801EC /* iODBC.framework */, F5CD650E0497673F01A801EC /* iODBCinst.framework */, ); name = Frameworks; path = ..; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ CDAE3B2D0987CEF4003250F8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ CDAE3B2C0987CEF4003250F8 /* iodbctest */ = { isa = PBXNativeTarget; buildConfigurationList = CDAE3B340987CEF4003250F8 /* Build configuration list for PBXNativeTarget "iodbctest" */; buildPhases = ( CDAE3B2D0987CEF4003250F8 /* Headers */, CDAE3B2E0987CEF4003250F8 /* Sources */, CDAE3B300987CEF4003250F8 /* Frameworks */, CDAE3B330987CEF4003250F8 /* Rez */, ); buildRules = ( ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Development, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Development, ../../mac/iODBCinst/build, ); HEADER_SEARCH_PATHS = ../../include; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = ""; OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iodbctest; REZ_EXECUTABLE = YES; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); }; dependencies = ( ); name = iodbctest; productInstallPath = "/Library/Application Support/iODBC/bin"; productName = iodbctest; productReference = CDAE3B380987CEF4003250F8 /* iodbctest */; productType = "com.apple.product-type.tool"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = CDAE3B3A0987CEFE003250F8 /* Build configuration list for PBXProject "iODBCtest" */; buildSettings = { }; buildStyles = ( 014CEA520018CE5811CA2923 /* Development */, 014CEA530018CE5811CA2923 /* Deployment */, ); hasScannedForEncodings = 1; mainGroup = 08FB7794FE84155DC02AAC07 /* iodbctest */; projectDirPath = ""; targets = ( CDAE3B2C0987CEF4003250F8 /* iodbctest */, ); }; /* End PBXProject section */ /* Begin PBXRezBuildPhase section */ CDAE3B330987CEF4003250F8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ CDAE3B2E0987CEF4003250F8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CDAE3B2F0987CEF4003250F8 /* iodbctest.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ CDAE3B350987CEF4003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Development, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Development, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ""; HEADER_SEARCH_PATHS = ../../include; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ""; OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iodbctest; RESMERGER_SOURCES_FORK = data; REZ_EXECUTABLE = YES; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); ZERO_LINK = NO; }; name = Development; }; CDAE3B360987CEF4003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DEPLOYMENT_LOCATION = NO; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; HEADER_SEARCH_PATHS = ../../include; INSTALL_PATH = "/Library/Application Support/iODBC/bin"; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ""; OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iodbctest; RESMERGER_SOURCES_FORK = data; REZ_EXECUTABLE = YES; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); ZERO_LINK = NO; }; name = Deployment; }; CDAE3B3B0987CEFE003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; }; name = Development; }; CDAE3B3C0987CEFE003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; }; name = Deployment; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ CDAE3B340987CEF4003250F8 /* Build configuration list for PBXNativeTarget "iodbctest" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3B350987CEF4003250F8 /* Development */, CDAE3B360987CEF4003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; CDAE3B3A0987CEFE003250F8 /* Build configuration list for PBXProject "iODBCtest" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3B3B0987CEFE003250F8 /* Development */, CDAE3B3C0987CEFE003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; /* End XCConfigurationList section */ }; rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; } libiodbc-3.52.9/mac/framework-include.sh0000755000076400007640000000722312323210535015027 00000000000000#!/bin/sh # # framework-include.sh # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # mkdir -p include for i in sql.h sqlext.h sqltypes.h sqlucode.h odbcinst.h iodbcinst.h isql.h isqlext.h isqltypes.h iodbcunix.h iodbcext.h iodbcinst.h do sed -e "s/ include/$i done libiodbc-3.52.9/mac/iODBCdemo/0000755000076400007640000000000012323210721012650 500000000000000libiodbc-3.52.9/mac/iODBCdemo/NSResWindow.m0000644000076400007640000000650212323210535015136 00000000000000/* * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #import "NSResWindow.h" @implementation NSResWindow - (void)close { NSApplication *test = myApp; [super close]; [test terminate:self]; } @end libiodbc-3.52.9/mac/iODBCdemo/InfoUnicode.plist0000644000076400007640000000154312323204667016066 00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable iODBC Demo Unicode CFBundleIconFile iODBCdemo.icns CFBundleIdentifier com.openlinksw.iodbcdemo-uni CFBundleInfoDictionaryVersion 6.0 CFBundleName iODBC Demo Unicode CFBundlePackageType APPL CFBundleSignature odbc CFBundleVersion 1.0 NSMainNibFile MainMenu NSPrincipalClass NSApplication libiodbc-3.52.9/mac/iODBCdemo/TestController.m0000644000076400007640000004103012323210535015732 00000000000000/* * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #import "TestController.h" #import "ExecController.h" #define OpenTag 56000 #define CloseTag 56001 #define ExecSQLTag 56002 #define NextRowsetTag 56003 @implementation TestController #ifdef UNICODE wchar_t * NStoTEXT (NSString * str) { wchar_t *prov; unsigned int len, i; if (str == nil) return NULL; len = [str length]; prov = malloc (sizeof (wchar_t) * (len + 1)); if (prov) { for (i = 0; i < len; i++) prov[i] = [str characterAtIndex:i]; prov[i] = L'\0'; } return prov; } CFStringRef TEXTtoNS (wchar_t * str) { CFMutableStringRef prov; CFIndex i; UniChar c; if (!str) return NULL; prov = CFStringCreateMutable (NULL, 0); if (prov) { for (i = 0; str[i] != L'\0'; i++) { c = (UniChar) str[i]; CFStringAppendCharacters (prov, &c, 1); } } return prov; } #define TEXT(x) (SQLWCHAR *) L##x #define TEXTLEN(x) wcslen ((wchar_t *) x) #define TEXTCMP(x,y) wcscmp((wchar_t *) x, (wchar_t *) y) #define TEXTCPY(x,y) wcscpy((wchar_t *) x, (wchar_t *) y) #else #define TEXT(x) (SQLCHAR *) x #define TEXTLEN(x) strlen ((char *) x) #define TEXTCMP(x,y) strcmp((char *) x, (char *) y) #define TEXTCPY(x,y) strcpy((char *) x, (char *) y) #define TEXTtoNS(x) [NSString stringWithUTF8String: x] #define NStoTEXT(x) [ x UTF8String ] #endif void _nativeerrorbox (SQLHENV _henv, SQLHDBC _hdbc, SQLHSTMT _hstmt) { SQLTCHAR buf[250]; SQLTCHAR sqlstate[15]; /* * Get statement errors */ if (SQLError (_henv, _hdbc, _hstmt, sqlstate, NULL, buf, sizeof (buf), NULL) == SQL_SUCCESS) NSRunAlertPanel(@"Native ODBC Error", [NSString stringWithFormat:@"%@ [%@]", TEXTtoNS(buf), TEXTtoNS(sqlstate)], NULL, NULL, NULL); /* * Get connection errors */ if (SQLError (_henv, _hdbc, SQL_NULL_HSTMT, sqlstate, NULL, buf, sizeof (buf), NULL) == SQL_SUCCESS) NSRunAlertPanel(@"Native ODBC Error", [NSString stringWithFormat:@"%@ [%@]", TEXTtoNS(buf), TEXTtoNS(sqlstate)], NULL, NULL, NULL); /* * Get environmental errors */ if (SQLError (_henv, SQL_NULL_HDBC, SQL_NULL_HSTMT, sqlstate, NULL, buf, sizeof (buf), NULL) == SQL_SUCCESS) NSRunAlertPanel(@"Native ODBC Error", [NSString stringWithFormat:@"%@ [%@]", TEXTtoNS(buf), TEXTtoNS(sqlstate)], NULL, NULL, NULL); } - (id)init { [super init]; mConnected = NO; mExistsResultset = NO; mNextResultset = NO; mBuffer = [NSMutableArray new]; mRows = 0; fQuery = @"select * from orders"; return self; } - (void)dealloc { [self disconnect]; [mBuffer release]; [super dealloc]; } - (void)awakeFromNib { [RSTable setDataSource:self]; [self clearGrid]; #ifdef UNICODE [mWindow setTitle:[NSString stringWithFormat:@"iODBC Demo Unicode - Disconnected"]]; #else [mWindow setTitle:[NSString stringWithFormat:@"iODBC Demo - Disconnected"]]; #endif } - (void)disconnect { if (hstmt != nil) { #if (ODBCVER < 0x0300) SQLFreeStmt (hstmt, SQL_DROP); #else SQLCloseCursor (hstmt); SQLFreeHandle (SQL_HANDLE_STMT, hstmt); #endif hstmt = nil; } if (hdbc != nil) { if (mConnected) SQLDisconnect (hdbc); #ifdef UNICODE [mWindow setTitle:[NSString stringWithFormat:@"iODBC Demo Unicode - Disconnected"]]; #else [mWindow setTitle:[NSString stringWithFormat:@"iODBC Demo - Disconnected"]]; #endif [self clearGrid]; mConnected = NO; #if (ODBCVER < 0x300) SQLFreeConnect (hdbc); #else SQLFreeHandle (SQL_HANDLE_DBC, hdbc); #endif hdbc = nil; } if (henv != nil) { #if (ODBCVER < 0x300) SQLFreeEnv (henv); #else SQLFreeHandle (SQL_HANDLE_ENV, henv); #endif henv = nil; } } - (void)clearGrid { NSArray *arr; unsigned i, count; NSTableColumn *aColumn; arr = [RSTable tableColumns]; count = [arr count]; for(i = 0; i < count; i++) { aColumn = [arr objectAtIndex:0]; [RSTable removeTableColumn:aColumn]; } } - (void)execSQL:(SQLTCHAR *)szSQL { SQLRETURN sts; [self clearGrid]; if (mExistsResultset == YES) { #if (ODBCVER < 0x0300) SQLFreeStmt (hstmt, SQL_CLOSE); #else SQLCloseCursor (hstmt); #endif } mExistsResultset = NO; mNextResultset = NO; if (!TEXTCMP(szSQL, TEXT("tables"))) { if (SQLTables (hstmt, NULL, 0, NULL, 0, NULL, 0, NULL, 0) != SQL_SUCCESS) goto error; } else if (!TEXTCMP(szSQL, TEXT("qualifiers"))) { if (SQLTables (hstmt, TEXT("%"), SQL_NTS, TEXT(""), 0, TEXT(""), 0, TEXT(""), 0) != SQL_SUCCESS) goto error; } else if (!TEXTCMP(szSQL, TEXT("owners"))) { if (SQLTables (hstmt, TEXT(""), SQL_NTS, TEXT("%"), 0, TEXT(""), 0, TEXT(""), 0) != SQL_SUCCESS) goto error; } else if (!TEXTCMP(szSQL, TEXT("types"))) { if (SQLTables (hstmt, TEXT(""), SQL_NTS, TEXT(""), 0, TEXT(""), 0, TEXT("%"), 0) != SQL_SUCCESS) goto error; } else if (!TEXTCMP(szSQL, TEXT("datatypes"))) { if (SQLGetTypeInfo (hstmt, 0) != SQL_SUCCESS) goto error; } else { if (SQLPrepare (hstmt, szSQL, SQL_NTS) != SQL_SUCCESS) goto error; if ((sts = SQLExecute (hstmt)) != SQL_SUCCESS) { _nativeerrorbox (henv, hdbc, hstmt); if (sts != SQL_SUCCESS_WITH_INFO) return; } } [self loadResult]; return; error: _nativeerrorbox (henv, hdbc, hstmt); return; } - (void)loadResult { SQLTCHAR fetchBuffer[1024]; size_t displayWidth; short numCols; unsigned colNum; SQLTCHAR colName[256]; SQLSMALLINT colType; SQLULEN colPrecision; SQLLEN colIndicator; SQLSMALLINT colScale; SQLSMALLINT colNullable; unsigned long totalRows; NSTableColumn *aColumn; NSMutableArray *row; NSFont *fnt = [RSTable font]; [self clearGrid]; if (SQLNumResultCols (hstmt, &numCols) != SQL_SUCCESS) { _nativeerrorbox (henv, hdbc, hstmt); goto endCursor; } if (numCols == 0) { SQLLEN nrows = 0; SQLRowCount (hstmt, &nrows); NSRunAlertPanel(@"This operation completed successfully without returning data:", [NSString stringWithFormat:@"%ld rows affected", (long)nrows], NULL, NULL, NULL); goto endCursor; } mExistsResultset = YES; /* * Get the names for the columns */ for (colNum = 1; colNum <= numCols; colNum++) { /* * Get the name and other type information */ if (SQLDescribeCol (hstmt, colNum, (SQLTCHAR *) colName, sizeof(colName), NULL, &colType, &colPrecision, &colScale, &colNullable) != SQL_SUCCESS) { _nativeerrorbox (henv, hdbc, hstmt); goto endCursor; } /* * Calculate the display width for the column */ switch (colType) { case SQL_VARCHAR: case SQL_CHAR: case SQL_WVARCHAR: case SQL_WCHAR: case SQL_GUID: displayWidth = colPrecision; break; case SQL_BINARY: displayWidth = colPrecision * 2; break; case SQL_LONGVARCHAR: case SQL_WLONGVARCHAR: case SQL_LONGVARBINARY: displayWidth = 256; /* show only first 256 */ break; case SQL_BIT: displayWidth = 1; break; case SQL_TINYINT: case SQL_SMALLINT: case SQL_INTEGER: case SQL_BIGINT: displayWidth = colPrecision + 1; /* sign */ break; case SQL_DOUBLE: case SQL_DECIMAL: case SQL_NUMERIC: case SQL_FLOAT: case SQL_REAL: displayWidth = colPrecision + 2; /* sign, comma */ break; #ifdef SQL_TYPE_DATE case SQL_TYPE_DATE: #endif case SQL_DATE: displayWidth = 10; break; #ifdef SQL_TYPE_TIME case SQL_TYPE_TIME: #endif case SQL_TIME: displayWidth = 8; break; #ifdef SQL_TYPE_TIMESTAMP case SQL_TYPE_TIMESTAMP: #endif case SQL_TIMESTAMP: displayWidth = 19; if (colScale > 0) displayWidth = displayWidth + colScale + 1; break; default: displayWidth = 0; /* skip other data types */ continue; } if (displayWidth < TEXTLEN(colName)) displayWidth = TEXTLEN(colName); if (displayWidth > sizeof(fetchBuffer) - 1) displayWidth = sizeof(fetchBuffer) - 1; if (displayWidth > 80) displayWidth = 80; /* Add new column */ aColumn = [NSTableColumn new]; /* Calculate size of font */ float fontWidth = [fnt widthOfString:@"W"]; if (fontWidth == 0.0) fontWidth = [fnt widthOfString:@" "]; if (fontWidth == 0.0) fontWidth = [fnt maximumAdvancement].width; if (fontWidth == 0.0) fontWidth = 10.0; // Default /* Make sure we always have room for column label */ float minWidth = fontWidth * TEXTLEN(colName); [aColumn setMinWidth:minWidth]; /* Calculate maximum size of column */ float strWidth = fontWidth * displayWidth; [aColumn setMaxWidth:strWidth]; /* Fill in column information */ [aColumn setIdentifier:[NSString stringWithFormat:@"%d", colNum-1]]; [aColumn setEditable:NO]; [aColumn setResizingMask:NSTableColumnAutoresizingMask|NSTableColumnUserResizingMask]; [[aColumn headerCell] setStringValue:TEXTtoNS(colName)]; /* Add to table */ [RSTable addTableColumn:aColumn]; } [mBuffer removeAllObjects]; /* * Print all the fields */ totalRows = 0; while (1) { int sts = SQLFetch (hstmt); if (sts == SQL_NO_DATA_FOUND) break; if (sts != SQL_SUCCESS) { _nativeerrorbox (henv, hdbc, hstmt); break; } row = [NSMutableArray arrayWithCapacity:numCols]; for (colNum = 1; colNum <= numCols; colNum++) { /* * Fetch this column as character */ sts = SQLGetData (hstmt, colNum, SQL_C_TCHAR, fetchBuffer, sizeof(fetchBuffer), &colIndicator); if (sts != SQL_SUCCESS_WITH_INFO && sts != SQL_SUCCESS) { _nativeerrorbox (henv, hdbc, hstmt); goto endCursor; } /* * Show NULL fields as **** */ if (colIndicator == SQL_NULL_DATA) TEXTCPY(fetchBuffer, TEXT("")); [row addObject:TEXTtoNS (fetchBuffer)]; } [mBuffer addObject:row]; totalRows++; } if (SQLMoreResults (hstmt) == SQL_SUCCESS) mNextResultset = YES; else mNextResultset = NO; mRows = totalRows; [RSTable reloadData]; return; endCursor: #if (ODBCVER < 0x0300) SQLFreeStmt (hstmt, SQL_CLOSE); #else SQLCloseCursor (hstmt); #endif return; error: _nativeerrorbox (henv, hdbc, hstmt); return; } - (IBAction)aCloseConnection:(id)sender { [self disconnect]; } - (IBAction)aExecSQL:(id)sender { ExecController *dlg; NSString *ret = nil; dlg = [[ExecController alloc] initWithString:fQuery]; [NSApp beginSheet: [dlg Panel] modalForWindow: mWindow modalDelegate: nil didEndSelector: nil contextInfo: nil]; if ([NSApp runModalForWindow:[dlg Panel]]) { [fQuery release]; fQuery = ret = [dlg execSQL]; } [NSApp endSheet:[dlg Panel]]; [[dlg Panel] orderOut:mWindow]; [dlg release]; if (ret != nil) { [self execSQL:NStoTEXT(ret)]; } } - (IBAction)aFetchNextRowset:(id)sender { if (mNextResultset) [self loadResult]; } - (IBAction)aOpenConnection:(id)sender { SQLTCHAR szDSN[1024]; SQLTCHAR dataSource[1024]; SQLSMALLINT dsLen; SQLRETURN status; #if (ODBCVER < 0x300) if (SQLAllocEnv (&henv) != SQL_SUCCESS) #else if (SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv) != SQL_SUCCESS) #endif { _nativeerrorbox (henv, SQL_NULL_HDBC, SQL_NULL_HSTMT); return; } #if (ODBCVER < 0x300) if (SQLAllocConnect (henv, &hdbc) != SQL_SUCCESS) #else SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER); if (SQLAllocHandle (SQL_HANDLE_DBC, henv, &hdbc) != SQL_SUCCESS) #endif { _nativeerrorbox (henv, hdbc, SQL_NULL_HSTMT); [self disconnect]; return; } status = SQLDriverConnect (hdbc, [mWindow windowRef], TEXT(""), SQL_NTS, dataSource, sizeof (dataSource), &dsLen, SQL_DRIVER_COMPLETE); if (status != SQL_SUCCESS) { _nativeerrorbox (henv, hdbc, SQL_NULL_HSTMT); if (status != SQL_SUCCESS_WITH_INFO) { [self disconnect]; return; } } mConnected = YES; SQLGetInfo (hdbc, SQL_DRIVER_NAME, szDSN, sizeof (szDSN), NULL); #ifdef UNICODE [mWindow setTitle:[NSString stringWithFormat:@"iODBC Demo Unicode - Connected to [%@]", TEXTtoNS(szDSN)]]; #else [mWindow setTitle:[NSString stringWithFormat:@"iODBC Demo - Connected to [%@]", TEXTtoNS(szDSN)]]; #endif #if (ODBCVER < 0x0300) if (SQLAllocStmt (hdbc, &hstmt) != SQL_SUCCESS) #else if (SQLAllocHandle (SQL_HANDLE_STMT, hdbc, &hstmt) != SQL_SUCCESS) #endif { _nativeerrorbox (henv, hdbc, hstmt); [self disconnect]; return; } [RSTable reloadData]; } // Show/hide menu items - (BOOL)validateMenuItem:(NSMenuItem *)item { int tag = [item tag]; if (tag == OpenTag) { return (hdbc == nil ? YES : NO); } else if (tag == CloseTag) { return (hdbc == nil ? NO : YES); } else if (tag == ExecSQLTag) { return (hstmt != nil ? YES : NO); } else if (tag == NextRowsetTag) { return mNextResultset; } else return YES; } - (id)tableView:(NSTableView *)aTable objectValueForTableColumn:(NSTableColumn *)aColumn row:(int)rowIndex { NSMutableArray *row; unsigned id; if (rowIndex < 0) return nil; id = [[aColumn identifier] intValue]; row = [mBuffer objectAtIndex:rowIndex]; return [row objectAtIndex:id]; } - (int)numberOfRowsInTableView:(NSTableView *)aTable { return mRows; } @end libiodbc-3.52.9/mac/iODBCdemo/English.lproj/0000755000076400007640000000000012323210720015365 500000000000000libiodbc-3.52.9/mac/iODBCdemo/English.lproj/MainMenu.xib0000644000076400007640000014140012323204667017537 00000000000000 1020 9L30 680 949.54 353.00 YES YES com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES NSApplication FirstResponder NSApplication 15 2 {{172, 407}, {799, 572}} 1886912512 Window NSResWindow View {3.40282e+38, 3.40282e+38} {213, 107} 256 YES 274 YES 2304 YES 256 {797, 554} YES 256 {797, 17} -2147483392 {{-26, 0}, {16, 17}} YES columns1 4.000000e+01 4.000000e+01 1.000000e+03 75628032 0 LucidaGrande 1.100000e+01 3100 3 MC4zMzMzMzI5OQA 6 System headerTextColor 3 MAA 337772096 2048 LucidaGrande 1.300000e+01 1044 6 System controlBackgroundColor 3 MC42NjY2NjY2OQA 6 System controlTextColor 3 YES YES 7.510000e+02 8.000000e+00 1.000000e+03 75628032 0 337772096 2048 3 YES YES 3.000000e+00 2.000000e+00 3 MQA 6 System gridColor 3 MC41AA 1.700000e+01 1388314624 1 0 15 0 YES {{1, 17}, {797, 554}} 4 -2147483392 {{-30, 17}, {15, 539}} _doScroller: 8.157895e-01 -2147483392 {{1, -30}, {865, 15}} 1 _doScroller: 9.904762e-01 2304 YES {{1, 0}, {797, 17}} 4 {799, 572} 562 QSAAAEEgAABBmAAAQZgAAA {{1, 9}, {799, 572}} {{0, 0}, {1280, 1002}} {213, 129} {3.40282e+38, 3.40282e+38} MainMenu YES iODBC Demo 1048576 2147483647 NSImage NSMenuCheckmark NSImage NSMenuMixedState submenuAction: iODBC Demo YES About iODBC Demo 2147483647 YES YES 1048576 2147483647 UHJlZmVyZW5jZXPigKY , 1048576 2147483647 YES YES 1048576 2147483647 Services 1048576 2147483647 submenuAction: Services YES _NSServicesMenu YES YES 1048576 2147483647 Hide iODBC Demo h 1048576 2147483647 Hide Others h 1572864 2147483647 Show All 1048576 2147483647 YES YES 1048576 2147483647 Quit iODBC Demo q 1048576 2147483647 _NSAppleMenu Environment 1048576 2147483647 submenuAction: Environment YES Open Connection... 1048576 2147483647 56000 Close Connection... 1048576 2147483647 56001 SQL 1048576 2147483647 submenuAction: SQL YES Execute SQL... 1048576 2147483647 56002 Fetch Next Rowset 1048576 2147483647 56003 Help 1048576 2147483647 submenuAction: Help YES iODBC Demo Help ? 1048576 2147483647 _NSMainMenu TestController YES showHelp: 122 terminate: 139 orderFrontStandardAboutPanel: 142 hideOtherApplications: 146 hide: 152 unhideAllApplications: 153 RSTable 211 mMenu 212 aOpenConnection: 221 aCloseConnection: 222 aExecSQL: 223 aFetchNextRowset: 224 mWindow 239 myApp 240 YES 0 YES -2 RmlsZSdzIE93bmVyA -1 First Responder 21 YES Window 2 YES 206 YES 207 YES 208 YES 209 YES 29 YES MainMenu 56 YES 57 YES 58 129 131 YES 130 134 136 143 144 145 149 150 196 103 YES 106 YES 111 213 YES 214 YES 215 219 216 YES 217 YES 218 220 210 TestController 242 243 244 245 246 -3 Application YES YES -1.IBPluginDependency -2.IBPluginDependency 103.IBPluginDependency 103.ImportedFromIB2 106.IBPluginDependency 106.ImportedFromIB2 111.IBPluginDependency 111.ImportedFromIB2 129.IBPluginDependency 129.ImportedFromIB2 130.IBPluginDependency 130.ImportedFromIB2 131.IBPluginDependency 131.ImportedFromIB2 134.IBPluginDependency 134.ImportedFromIB2 136.IBPluginDependency 136.ImportedFromIB2 143.IBPluginDependency 143.ImportedFromIB2 144.IBPluginDependency 144.ImportedFromIB2 145.IBPluginDependency 145.ImportedFromIB2 149.IBPluginDependency 149.ImportedFromIB2 150.IBPluginDependency 150.ImportedFromIB2 196.IBPluginDependency 196.ImportedFromIB2 2.IBPluginDependency 2.ImportedFromIB2 206.IBPluginDependency 206.ImportedFromIB2 207.IBPluginDependency 207.ImportedFromIB2 208.IBPluginDependency 208.ImportedFromIB2 209.IBPluginDependency 209.ImportedFromIB2 21.ImportedFromIB2 21.NSWindowTemplate.visibleAtLaunch 21.windowTemplate.hasMinSize 21.windowTemplate.minSize 210.IBPluginDependency 210.ImportedFromIB2 213.IBPluginDependency 213.ImportedFromIB2 214.IBPluginDependency 214.ImportedFromIB2 215.IBPluginDependency 215.ImportedFromIB2 216.IBPluginDependency 216.ImportedFromIB2 217.IBPluginDependency 217.ImportedFromIB2 218.IBPluginDependency 218.ImportedFromIB2 219.IBPluginDependency 219.ImportedFromIB2 220.IBPluginDependency 220.ImportedFromIB2 242.IBShouldRemoveOnLegacySave 243.IBShouldRemoveOnLegacySave 244.IBShouldRemoveOnLegacySave 245.IBShouldRemoveOnLegacySave 246.IBShouldRemoveOnLegacySave 29.IBPluginDependency 29.ImportedFromIB2 56.IBPluginDependency 56.ImportedFromIB2 57.IBPluginDependency 57.ImportedFromIB2 58.IBPluginDependency 58.ImportedFromIB2 YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {213, 107} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES YES YES 246 YES FirstResponder IBUserSource NSResWindow NSWindow myApp id IBUserSource TestController NSObject YES YES aCloseConnection: aExecSQL: aFetchNextRowset: aOpenConnection: YES id id id id YES YES RSTable mMenu mWindow YES NSTableView id id IBUserSource 0 3 libiodbc-3.52.9/mac/iODBCdemo/English.lproj/InfoPlist.strings0000644000076400007640000000106012323204667020641 00000000000000þÿ/* Localized versions of Info.plist keys */ CFBundleName = "iODBC Demo"; CFBundleShortVersionString = "Version 1.1"; CFBundleGetInfoString = "iODBC Demo version 1.1, Copyright 2006-2012, OpenLink Software"; NSHumanReadableCopyright = "Copyright © 2006-2012, OpenLink Software"; libiodbc-3.52.9/mac/iODBCdemo/English.lproj/Credits.rtf0000644000076400007640000000050612323204667017435 00000000000000{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 {\fonttbl\f0\fnil\fcharset77 LucidaGrande;} {\colortbl;\red255\green255\blue255;} \vieww12000\viewh15840\viewkind0 \deftab720 \pard\tx560\tx3080\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardeftab720\qc \f0\fs20 \cf0 An ODBC-based \ Interactive SQL Processor\ for Mac OS X} libiodbc-3.52.9/mac/iODBCdemo/English.lproj/iODBCdemo.icns0000644000076400007640000015240012323204667017727 00000000000000icnsÕics#HÀ€€ý€ÀÀAÏáÈ!ÐAàÀº#ñCàƒÿÿ?üþþþþÿÿÿÿÿÿÿÿþÿþþ?üics8ÿÿVVVVVVVVVVVVÿÿÿVöõö+÷øVùVø÷÷Vÿÿùõö+÷øVùVø÷+ùÿÿùùùúúûûûûûúùÿÿùõõöööööõùÿÿúõö+÷øVΤ¤ª¤ª¤ÿúõö+÷øV‡UNNNN†ÿúùùúªûûû¤UNNN¤ÿúªNyõöö¤yNNN¤ÿªNrrV£NNxyNªÿ«Nyxyy¤Nxx««UªÿÎN–œNyxÎú΀ÎNÁÁ£ÈÁœœÎööõûÿÎÇÁÎö+÷ÎÎVø÷+ûÿÿÎÎõö+÷øÎùVø÷øûÿÿÿüüüüüüüüüüüüÿÿis32̉ž€0˜åóâ͸£’†’£¸¿˜ÿóâ͸£’†’£¸ÍŒ†}sg]TNT]gsƒ€ÿ%úóìäÝØÝäìƒÿóâ͸£’#!''!zÿóâ͸£’W›¤WzŒ†}+g]TN€ ¢¤!pÿÿˆMìäÝ'n¢¡£jÿˆVWE’)¥Žs¢#eBš\[^`DšiiJ@H› E?9'šNigsPŸ 1ú*>ÝäìZ â͸ +’£¸ÍUóâ͸£†’£¸­P€‰L‰ž€0˜åóâ͸£’†’£¸¿˜ÿóâ͸£’†’£¸ÍŒ†}sg]TNT]gsƒ€ÿ%úóìäÝØÝäìƒÿóâ͸£’=RTLOLNzÿóâ͸£’9†Ñ>zŒ†}Lg]TNM«ÔÔÑRpÿÿKÍšìäÝM­ÕÎÓMjÿAÍ¿¸‘’`ÌÈ¢±ÒCe9Õ®±¥’NÕ°°13Œ,<Ë—³†ž Õª°7gs7i=ɇ†túM•’¥;ÝäìZ8sˆ9â͸7=’£¸ÍU88óâ͸£=†’£¸­P€‰L‰ž€0˜åóâ͸£’†’£¸¿˜ÿóâ͸£’†’£¸ÍŒ†}sg]TNT]gsƒ€ÿ%úóìäÝØÝäìƒÿóâ͸£’𠮍§¥©zÿóâ͸£’y¿ø€zŒ†}©g]TN¯àùïø±pÿÿ­üÛìäݰØÿ÷ÿŸjÿ±úöñØ’¶ÿøèäÿšez÷âçÞËŸ÷ððsx¾ƒ›ù×óÏæã÷Ýð¦gs’–ùÜÒÈú¤Ûçè›ÝäìZžÏåŸâ͸–äš’£¸ÍUžžóâ͸£š†’£¸­P€‰Ls8mkìÿÿÿÿÿÿÿÿÿÿãìÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãìÿÿÿÿÿÿÿÿÿÿãICN#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿøøøøÿøðøøüüˆüPü Ïü@ïü¾ÿý=ÿþxˆÿüðPÿýÿÿÿÿÀÿý€ÿüÿüÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿ€ÿÿ€ÿÿøÿÿøÿÿøÿÿøÿÿøÿÿøÿÿøÿÿøÿÿ¸ÿÿ˜ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€icl8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVVVVVVVVVVVVVVVVVÿÿÿÿÿÿÿÿÿÿÿÿÿVõõõö+÷÷øVVùùùVVøøVÿÿÿÿÿÿÿÿÿÿÿÿVõõö+÷÷øVVùùùVVø÷VÿÿÿÿÿÿÿÿÿÿÿÿVõõö+÷÷øVVùùùVVø÷Vÿÿÿÿÿÿÿÿÿÿÿÿùõõö+÷÷øVVùùV¤¤¤¤¤¤¤ª¤ÿÿÿÿÿÿÿÿùùùùùùúúûûûüû‡UNNNNNNN‡ÿÿÿÿÿÿÿÿùõõõöööööö¤TNNNNNNÈÿÿÿÿÿÿÿÿùõõö+÷÷¤VVùùùV¤TNNNNN¤ÿÿÿÿÿÿÿÿúõõö+÷ªN¤VùùùV¤*NNNNN£ÿÿÿÿÿÿÿÿúõõö+†xx‡ùùùªNNNNNNN«ÿÿÿÿÿÿÿÿúõõöªNsxÎùÎ*NNNxxNNªÿÿÿÿÿÿÿÿúùùùùªNxœœÎ*NNNyΪrNÎÿÿÿÿÿÿÿÿúªNxœxNNrrxÎúÿÎxÎÿÿÿÿÿÿÿÿªNÁÁÇǪœœœœrrr«÷ÿÿ‡€ÿÿÿÿÿÿÿÿªNÁÁÇÎøÎœœœxÎø÷ÿÿÿÿÿÿÿÿÿÿÿÿÎNÁÁÇÎ÷øVÎÎVø÷ÿÿÿÿÿÿÿÿÿÿÿÿÎNxÁÁÇÎ÷÷øVVΪVVø÷ÿÿÿÿÿÿÿÿÿÿÿÿ«yÇÇǪúúûûûü«ûûúúÿÿÿÿÿÿÿÿÿÿÿÿûªÇÇÎõõõöööööööööõõûÿÿÿÿÿÿÿÿÿÿÿÿûÎÎõö+÷÷øVVùùùVVø÷ûÿÿÿÿÿÿÿÿÿÿÿÿûõõö+÷÷øVVùùùVVø÷ûÿÿÿÿÿÿÿÿÿÿÿÿûõõö+÷÷øVVùùùVVø÷ûÿÿÿÿÿÿÿÿÿÿÿÿü+õõö+÷÷øVVùùùVVøVüÿÿÿÿÿÿÿÿÿÿÿÿüüüüüüüüüüüüüüüüüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿil32’ÿŽŸ ŠœæùðæÛÏöªŸ•Œ†Œ•Ÿª¯œ‰˜ÿùðæÛÏöªŸ•Œ†Œ•Ÿª¶˜‰’ÿùðæÛÏöªŸ•Œ†Œ•Ÿª¶’‰‹ÿùðæÛÏöªŸ•Œ†‰57132.+/$…‹€Œ ‡€xof]UNIN\œ„¬P…„€ÿüùôïêåàÛØÕØ*§ ¢¬£­…ÿùðæÛÏö#Ÿ•Œ†Œ•ˆ–ž¬Ÿ¥…~ÿùðæÛÏÃ#”•Œ†Œ•$´©§¦§¤%…{ÿùðæÛÏNSSLMŒ†ŒI„ E…wÿùðæÛ kESL†¸ˆ–yz£ …w€Œ‡™U5?4KB¶ˆ‚Šuœ…pÿÿü#•W$!':;P®ƒjtvp{… lÿùB•;:€=€t=¶lNx…hÿ“L ª *?=FPª¶h‰d™C ¶ªŸ /74Ÿª¶d‰žR öªŸ•'•Ÿª¶`‰CW;xof]UNI:U]foo`‰YôïêåàÛØÕØÛàåêêY‰VÿæÛÏöªŸ•Œ†Œ•Ÿª¶V‰RÿùðæÛÏöªŸ•Œ†Œ•Ÿª¶R‰OÿùðæÛÏöªŸ•Œ†Œ•Ÿª¶O‰LÑùðæÛÏöªŸ•Œ†Œ•Ÿª›L‰KIŽJKÿ‚ÿŽŸ ŠœæùðæÛÏöªŸ•Œ†Œ•Ÿª¯œ‰˜ÿùðæÛÏöªŸ•Œ†Œ•Ÿª¶˜‰’ÿùðæÛÏöªŸ•Œ†Œ•Ÿª¶’‰‹ÿùðæÛÏöªŸ•Œ†•W[UZWMMJS…‹€Œ ‡€xof]UNIN?†„ÏB…„€ÿüùôïêåàÛØÕØT§ÒÕÒÏÐÑP…ÿùðæÛÏöPŸ•Œ†Œ•Q±ÕÔÎÔÕM…~ÿùðæÛÏÃIÖM•Œ†Œ•OÔÔÑÏÌÌO…{ÿùðæÛÏ9¨¨‘9Œ†Œ:„Í9…wÿùðæÛFÓ³ž¨‘E†JÛÊÌ˯°ÑÍG…w€Œ‡?Ò®¡ž¤­–>ÙÇ¿¼©F>´ØB…pÿÿü7Ѥ”‘¡¥¦ßÀ¶¹ @ABDEFHJKLNOPQSTVWXY[\]3… ijklmnopqrOƒ@a‡¢¡  Ÿžœ››š™˜˜——––€• ”“’Y ¢ÇÇK‹.  #%(*,.0346m‘;;6=@ABDEFHJKLNOPQSTVWXY[\3‡ jklmnopqrOƒ-P–X7¢ÇÇKŒ-  #%(*,.034678623=@ABDEFHJKLNOPQSTVWXY[2‰ klmnopqrOƒ€"1aÈííëéçåãâàÞÝÜÚÙØÖÕÕÔÓÒÑÑÏ%»ÇÇK,  #%(*,.034:C>3239@ABDEFHJKLNOPQSTVWXY1‹!lmnopqrOƒ€TÈ€íëéçåãâàÞÝÜÚÙØÖÕÕÔÓÒÑÑ%»ÇÇKŽ+  #%(*,.06GTVJ;236@ABDEFHJKLNOPQSTVWX1!mnopqrOƒ)tíëéçåãâàÞÝÜÚÙØÖÕÕÔÓÒÑ‚%»Ç»>*  #%(*,1BPRTVU@234@ABDEFHJKLNOPQSTVW0!nopqrOƒ)}íëéçåãâàÞÝÜÚÙØÖÕÕÔÓÒ\%»Ç»%)  #%(1?KMPRTVXA234@ABDEFHJKLNOPQSTV0‘"opqrOƒ)}íëéçåãâàÞÝÜÚÙØÖÕÕÔÓO%»Ç»%‘(  #/=FHKMPRTVXA234@ABDEFHJKLNOPQST/“"pqrOƒ)}íëéçåãâàÞÝÜÚÙØÖÕÕÔO%»Ç»%’' +;BDFHKMPRTVXA234@ABDEFHJKLNOPQS.•"qrOƒ)}íëéçåãâàÞÝÜÚÙØÖÕÕP%»Ç»%“& *6<>BDFHKMPRTVXA234@ABDEFHJKLNOPQ-—"rOƒ)}íëéçåãâàÞÝÜÚÙØÖÕPK»Ç»%”% &058<>BDFHKMPRTVXA234@ABDEFHJKLNOP,™#Oƒ)}íëéçåãâàÞÝÜÚÙØÖPKÇÇ»%”%',058<>BDFHKMPRTVXA234@ABDEFHJKLNO,›ƒ)}íëéçåãâàÞÝÜÚÙØQKÇÇ»%“& #""',058<>BDFHKMPRTVXA234@ABDEFHJKLN+£)}íëéçåãâàÞÝÜÚËQKÇÇ¢ ‘(#%## ,058<>BDFHKMPRTVXA234@ABDEFHJKL*¤)}íëéçåãâàÞÝÜÌ)KÇÇ¢ * '&%%#058<>BDFHKMPRTVXA234@ABDEFHJK*¥)}íëéçåãâàÞÝÎ)KÇÇ¢ *)('&%%58<>BDFHKMPRTVXA234@ABDEFHJ)¦)}íëéçåãâàÞÏ)KÇÇ¢ ‹.,,**)('&%?!8<>BDFHKMPRTVUA234@ABDEFH(§XÚ€íëéçåãâàÐ*WÇÇ¢ ‰0!/.-,,**)('&^i#<>BDFHKMPRTVL<235@ABDEF'¨€9tÚííëéçåãâÒ*|ÇÇ¢ ‡2 )210/.-,,**)('h}k%>BDFHKMPRTO@5237@ABDE&©4023=@ABD&ª%D„XdÇlj ‚ G„XG(34689;<>70023=@AB%«€%T£Ñíëéçåã ¢|+938765443210/.-,,**p‡ƒ€}„‡Šr 7FHKMPROE=1237@A$¬€P¬€í ëéçåã⌠%/€:‚928765443210/.-,,*„Їƒ€}„‡ŠŒt 9HKMPRTVG9235@$­%kí ëéçåãâàŠ0:‚918765443210/.-,,‡Š‡ƒ€}„‡ŠŒw ;KMPRTVS?234#®)}í ëéçåãâàÞŠ/€:‚908765443210/.-,ŠŠ‡ƒ€}„‡ŠŒ’x =MPRTVXA23 ¯)}íëéçåãâàÞ݉/::‚9/8765443210/.-“Їƒ€}„‡ŠŒ’”{ ?PRTVXA2 °)}íëéçåãâàÞÝ܈/:‚9.8765443210/.;š–“Š‡ƒ€}„‡ŠŒ’”—} @RTVXA±)}íëéçåãâàÞÝÜÚ‡/‚908765443210, =š–“Š‡ƒ€}„‡ŠŒ’”—š CTVX)¯)}íëéçåãâàÞÝÜÚÙ‡/90876544321- >¡š–“Їƒ€}„‡ŠŒ’”—š DV7¯)}íëéçåãâàÞÝÜÚÙØ….€9087654432. ?¤¡š–“Їƒ€}„‡ŠŒ’”—šŸ„ +¯)}í>ëéçåãâàÞÝÜÚÙØÖ….998765443/ _§¤¡š–“Їƒ€}„‡ŠŒ’”—šŸ¢† €¯)}íBëéçåãâàÞÝÜÚÙØÖÕ….9876544) lª§¤¡š–“Їƒ€}„‡ŠŒ’”—šŸ¢¥ˆ G€¯)}íBëéçåãâàÞÝÜÚÙØÖÕÕ„.87654*n®ª§¤¡š–“Їƒ€}„‡ŠŒ’”—šŸ¢¥¨‹X€¯)}íBëéçåãâàÞÝÜÚÙØÖÕÕÔ„-765+q±®ª§¤¡š–“Їƒ€}„‡ŠŒ’”—šŸ¢¥¨«­±X€¯)}íBëéçåãâàÞÝÜÚÙØÖÕÕÔÓƒ-6+ ~µ±®ª§¤¡š–“Їƒ€}„‡ŠŒ’”—šŸ¢¥¨«­«X€¯!Xä€íBëéçåãâàÞÝÜÚÙØÖÕÕÔÓÒ‚" ˜¸µ±®ª§¤¡š–“Їƒ€}„‡ŠŒ’”—šŸ¢¥¨«­L€¯€D‡äííëéçåãâàÞÝÜÚÙØÖÕÕÔÓÒÑ‚) ›»¸µ±®ª§¤¡š–“Їƒ€}„‡ŠŒ’”—šŸ¢¥¨«]-€¯€Hk™¢¡  Ÿžœ››š™˜˜——––€•-”\ r‹Šˆ†…ƒ~|{ywvtrqonlklmnoqrsuvxyz|}~€wX9°)•9$.£95!²Ç´ÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÀs²pƒÁ~s±p‚Ã~spp‡ªÌµpps^¿Ydrppž©êÌpp€qb¶ííìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó<ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª§„\rppžêÕ¿ÀÀÁÂÂÃÃÄĀůÇÇÈÈÉÉÊÊËËÌÌÍÎÎÏÏÐÐÑÑÒÒÓÔÔÕ¼pp€[È€íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó^ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯€hsppžêDz³³´µ¶¶·¸¸¹¹º»»¼½¾¾¿ÀÀÁÂÃÃÄÅÆÆÇÈÈÉÊÊËÌÍηppvuíìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó^ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯§[~sppžêdz³´µ¶¶·¸¸¹¹º»»¼½¾¾¿ÀÀÁÂÃÃÄÅÆÆÇÈÈÉÊÊËÌÍδppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó^ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯³Y~sppžêdz´µ¶¶·¸¸¹¹º»»¼½¾¾¿ÀÀÁÂÃÃÄÅÆÆÇÈÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó0ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯³Y~€p*žêÈ´µ¶¶·¸¸¹¹º»»¼½¾¾¿ÀÀÁÂÃÃÄÅÆÆÇÈÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯³Y€p)žêȵ¶¶·¸¸¹¹º»»¼½¾¾¿ÀÀÁÂÃÃÄÅÆÆÇÈÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯³Y€p(žêɶ¶·¸¸¹¹º»»¼½¾¾¿ÀÀÁÂÃÃÄÅÆÆÇÈÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯³Y€p'žêɶ·¸¸¹¹º»»¼½¾¾¿ÀÀÁÂÃÃÄÅÆÆÇÈÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯³Y€€p&žêÊ·¸¸¹¹º»»¼½¾¾¿ÀÀÁÂÃÃÄÅÆÆÇÈÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯³Y€p%žêʸ¸¹¹º»»¼½¾¾¿ÀÀÁÂÃÃÄÅÆÆÇÈÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯³Y€‚p$žê˸¹¹º»»¼½¾¾¿ÀÀÁÂÃÃÄÅÆÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯³Y€ƒp#žê˹¹º»»¼½¾¾¿ÀÀÁÂÃÃÄÅÆÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚x‚†‰ŒŽ‘”–™œŸ¡¤§ª­¯³Y€„p"žê˹º»»¼½¾¾¿ÀÀÁÂÃÃÄÅÆÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…‚vpt…‰ŒŽ‘”–™œŸ¡¤§ª­¯­Y€…p!¥ê̺»»¼½¾¾¿ÀÀÁÂÃÃÄÅÅÆÇÇÈÉÊÊËÌÍαpp}YÛ€íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€ÓÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰…w€pt‡ŒŽ‘”–™œŸ¡¤§ª­¯…e€…p!¼êêû»¼½¾¾¿ÀÀÁÂÃÃÄÅÅÆÇÇÈÉÊÊËÌÍαpp€juÛííìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•’Œ‰xppppuŠŽ‘”–™œŸ¡¤§ª­”_v€„p"¼êêØº»»¼½¾¾¿ÀÀÁÂÃÃÄÅÅÆÇÇÈÉÊÊËÌÍαppjY€~}}||€{€z€yƒx-wwvuttsrqpponmlkkjihgfflppžê¼ppngghhijjklmmi[sƒp#¼êêØ¹º»»¼½¾¾¿ÀÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÍαppv`¨YZlppž€ê¼pplZ‡Ygz‚p$¼êê×¹¹º»»¼½¾¾¿ÀÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÍαpp€sb¬ííìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ œ™•vppžêêÜÁê¼ppv’–™œŸ¡¤§ª¢y[}€p%¼êê׸¹¹º»»¼½¾¾¿ÀÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÍαpp€[¿€íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ œ™“vppžêêܦ¢½ê¼ppw”™œŸ¡¤§ª­¯ug€€p&¼êê׸¸¹¹º»»¼½¾¾¿¿ÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÍαppvlíìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ œ–wppžêêÜ¥¡¢¢¾ê¼ppw–œŸ¡¤§ª­¯¡[€p'¼êê×·¸¸¹¹º»»¼½¾¾¿¿ÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£ ™xpp¼êêÜ¥ ¡¢¢£¾ê¼ppx™Ÿ¡¤§ª­¯³Y€p(¼êêÖ¶·¸¸¹¹º»»¼½½¾¿¿ÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó-ÐÎÊÇÄÁ½º·³°¬©¦£xpp¼êêܤ  ¡¢¢£¤¾ê¼ppxœ¡¤§ª­¯³Y€p)¼êêÖ¶¶·¸¸¹¹º»»¼¼½¾¿¿ÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó0ÐÎÊÇÄÁ½º·³°¬©¦ ypp¼êê×£Ÿ  ¡¢¢£¤¥¿ê¼ppyž¤§ª­¯³Y~€p*¼êêÖµ¶¶·¸¸¹¹º»»¼¼½¾¿¿ÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó^ÐÎÊÇÄÁ½º·³°¬©œvpp¼êêÍžŸŸ  ¡¢¢£¤¥¥¿ê¼ppy¡§ª­¯³Y~spp¼êêÕ´µ¶¶·¸¸¹¹º»»¼¼½¾¿¿ÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€ÓÐÎÊÇÄÁ½º·³°¬žspp¼êêÍžŸŸ  ¡¢¢£¤€¥<Àê¼ppz¤ª­¯³Y~spp¼êêÕ³´µ¶¶·¸¸¹¹º»»¼¼½¾¿¿ÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€ÓÐÎÊÇÄÁ½º·³°¡tpp¼êêÍžŸŸ  ¡¢¢£¤€¥<¦Àê¼ppz¦­¯³Zspp¼êêÕ³³´µ¶¶·¸¸¹¹º»»¼¼½¾¿¿ÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€ÓÐÎÊÇÄÁ½º·³¤tpp¼êêÍœžŸŸ  ¡¢¢£¤€¥<¦§Àê¼pp{©¯¯lpp¼êêÕ²³³´µ¶¶··¸¹¹º»»¼¼½¾¿¿ÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€ÓÐÎÊÇÄÁ½º·¦tpxÌêêÌœœžŸŸ  ¡¢¢£¤€¥<¦§§Áê¼pp{§}pp¼êêÕ±²³³´µµ¶··¸¹¹º»»¼¼½¾¿¿ÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€ÓÐÎÊÇÄÁ½ºªtpxÓêêÌ›œœžŸŸ  ¡¢¢£¤€¥¦§§¨Á꼂p0¼êêÔ±±²³³´´µ¶··¸¹¹º»»¼¼½¾¿¿ÀÁÂŽÄÅÅÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€ÓÐÎÊÇÄÁ½¬tpxÓêêÌš›œœžŸŸ  ¡¢¢£¤€¥¦§§¨©Âê¼€p¼êêÔ°±±²€³&´µ¶··¸¹¹º»»¼¼½¾¿¿ÀÁppŠÅÅÆÇÇÈÉÊÊËÌÍαppv~íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€ÓÐÎÊÇÄÁªupxÓêê·šš›œœžŸŸ  ¡¢¢£¤€¥(¦§§¨©ªÂê¼p¼êêÔ°°±±²²³³´µ¶··¸¹¹º»»¼¼½¾¿¿ÀœpŠÅÆÇÇÈÉÊÊËÌÍαpp}YÛ€íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€ÓÐÎÊÇÄ£ppxÓêê·™šš›œœžŸŸ  ¡¢¢£¤€¥¦§§¨©ªªÃêÛêêÔ¯°°€±²³³´µ¶··¸¹¹º»»¼¼½¾¿¿œƒpŠÆÇÇÈÉÊÊËÌÍαpp€juäííìéèæäãáàÞÝÜÚÙ××ÖÕÔ€ÓÐÎÊǤppxÓêê·™™šš›œœžŸŸ  ¡¢¢£¤€¥&¦§§¨©ªª«ÃêêÓ®¯¯°°±±²³³´µ¶··¸¹¹º»»¼¼½¾¿›…p ŠÇÇÈÉÊÊËÌÍαppgb‡£¢¡  Ÿžœœ›šš™˜˜——–”“’„ppxÓê궘™™šš›œœžŸŸ  ¡¢¢£¤€¥%¦§§¨©ªª««ÃÓ­¬¦­°°±±²³³´µ¶··¸¹¹º»»¼¼½¾›pp ŠÇÈÉÊÊËÌÍαpps^–YbppÓêê¶—˜™™šš›œœžŸŸ  ¡¢¢£¤€¥$¦§§¨©ªª««¬«§¡¢®°°±±²³³´µ¶··¸¹¹º»»¼¼½›pp ‹ÈÉÊÊËÌÍαpp€qbÈííìéèæäãáàÞÝÜÚÙ××ÖÕÔ€ÓЫpp‡âêê¶——˜™™šš›œœžŸŸ  ¡¢¢£¤€¥#¦§§¨©ªª««¦—Ÿ¡¡¨°°±±²³³´µ¶··¸¹¹º»»¼¼špƒp ‹ÉÊÊËÌÍαpp€[È€íìéèæäãáàÞÝÜÚÙ××ÖÕÔ€Ó¬pp‡âêêµ–——˜™™šš›œœžŸŸ  ¡¢¢£¤€¥¦§§¨©€ª¬¬ š¡¡¤°°±±²³³´µ¶··¸¹¹º»»¼šp…p ‹ÊÊËÌÍαppvuí3ìéèæäãáàÞÝÜÚÙ××ÖÕÔÓÓ®pp‡âê寖–——˜™™šš›œœžŸŸ  ¡¢¢£¤€¥!¦§§¨©¨©ª¬¬«—¡¡¢°°±±²³³´µ¶··¸¹¹º»»™p‡p‹ÊËÌÍαppv~í3ìéèæäãáàÞÝÜÚÙ××ÖÕÔÓ›pp‡âê夕––——˜™™šš›œœžŸŸ  ¡¢¢£¤€¥¦§€¦¨©ª¬¬®–¡¡¢°°±±²³³´µ¶··¸¹¹º»™p‰p‹ËÌÍαppv~í3ìéèæäãáàÞÝÜÚÙ××ÖÕÔ•pp‡âê夔•––——˜™™šš›œœžŸŸ  ¡¢¢£¤€¥¤£¤¥¦¨©ª¬¬®–¡¡¢°°±±²³³´µ¶··¸¹¹º™p‹pŒÌÍαppv~íUìéèæäãáàÞÝÜÚÙ××ÖÕ–pp‡âê壔”•––——˜™™šš›œœžŸŸ  ¡¢¢£¤¤£¡¡¢¤¥¦¨©ª¬¬®–¡¡¢°°±±²³³´µ¶··¸¹¹˜ppŒÍαppv~í/ìéèæäãáàÞÝÜÚÙ××Ö–pp‡âê壓””•––——˜™™šš›œœžŸŸ  ¡€¢!ŸžŸ ¡¢¤¥¦¨©ª¬¬®–¡¡¢°°±±²³³´µ¶··¸¹˜ppŒÎ±ppv~íSìéèæäãáàÞÝÜÚÙ××–ppžâê䢓“””•––——˜™™šš›œœžŸŸ  ¡ž››žŸ ¡¢¤¥¦¨©ª¬¬®–¡¡¢°°±±²³³´µ¶··¸˜p‘p±ppv~í*ìéèæäãáàÞÝÜÚÙ×—ppžêê䢒““””•––——˜™™šš›œœž€Ÿ$œ™™š›žŸ ¡¢¤¥¦¨©ª¬¬®–¡¡¢°°±±²³³´µ¶··˜p“p~ppv~íQìéèæäãáàÞÝÜÚÙ—ppžêê䢑’““””•––——˜™™šš›œœžœ™——˜™š›žŸ ¡¢¤¥¦¨©ª¬¬®–¡¡¢°°±±²³³´µ¶·—p•ƒpv~í%ìéèæäãáàÞÝÜÓ˜ppžêêÙ–‘‘’““””•––——˜™™šš›€œ'›™˜——•xŠš›žŸ ¡¢¤¥¦¨©ª¬¬®–¡¡¢°°±±²³³´µ¶—p—‚pv~íOìéèæäãáàÞÝÕ„ppžêêÙ•‘‘’““””•––——˜™™šš››š™™˜˜—tppŠ›žŸ ¡¢¤¥¦¨©ª¬¬®–¡¡¢°°±±²³³´µ–p™pv~í&ìéèæäãáàÞÖ„ppžêêÙ•‘‘’““””•––——˜™™šš›š€™˜˜rp‹žŸ ¡¢¤¥¦¨©ª¬¬®–¡¡¢°°±±²³³´–p›€pv~í&ìéèæäãáà×…ppžêêÙ”‘‘’““””•––——™›œœ››š€™#˜rppxqppŒžŸ ¡¢¤¥¦¨©ª¬¬«–¡¡¢°°±±²³³•ppp}YÛ€í ìéèæäãáÙ…pp¥êêÙ”‘‘’““””•–™›€œ››š€™"‘rpq{qppŒŸ ¡¢¤¥¦¨©ª¬¬¡š¡¡£°°±±²³•p¤€ luÛííìéèæäãÚ…pp¼êêÙ”Ž‘‘’““–™€ž€œ'››š™™Œrpqƒ‚rppŽ ¡¢¤¥¦¨©ª¬¥–ž¡¡§°°±±²”p¥jY€~}}||zrpp¼êêÙ”ŽŽ‘‘‹‹Š€‹Œ‹€Œ‚‚ppof€c ddgopp‰”•––—˜€™•€¡­°°±±”p¦xe„Ylpp­êêÍ”€Ž‹‰…‚‚€ƒ„„€…††‡ˆ€ppo]„Y]oprŠ‘’’““””•šŸ€¡­°°±”p§€x[£Ñíìéèæä¸ppxÓÈŽŽ“˜œ€¡¢¡¢€ ŸŸ€ž€œ$››Šppv‡‰…‚ƒ†‰Œˆrps™¤¥¦¨©ª¦š— ¡¡§°°”p¨€^¬€íìéèæäã¶ppxŽ›ž¢¢‚¡¢¡¢€ ŸŸ€ž€œ#›ˆppvŒ‰…‚ƒ†‰ŒŽ‹rpt𥦍©ª¬¬›¡¡£°“p©xlí ìéèæäãá¶pps™€¢‚¡¢¡¢€ ŸŸ€ž€œ"€ppwŒ‰…‚ƒ†‰ŒŽ‘rpt›¦¨©ª¬¬©˜¡¡¢“pªv~íìéèæäãáàµpps™¢¢‚¡¢¡¢€ ŸŸ€ž&œœ€ppx“’Œ‰…‚ƒ†‰ŒŽ‘”sptœ¨©ª¬¬®–¡¡p«v~íìéèæäãáàÞ´pps™¢‚¡¢¡¢€ ŸŸ€ž%œ€ppx–•’Œ‰…‚ƒ†‰ŒŽ‘”–‘spt©ª¬¬®–¡p¬v~íìéèæäãáàÞݳpps™‚¡¢¡¢€ ŸŸ€ž$pp‚œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™”sptžª¬¬®–p­v~íìéèæäãáàÞÝܲpps˜¡¢¡¢€ ŸŸ€ž'š{ppƒ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œ–sptŸ¬¬®ˆppqp®v~íìéèæäãáàÞÝÜÚ±pps˜€¡¢¡¢€ +ŸŸžž›xpp„£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ˜spt¡¬—ppq|¯v~íìéèæäãáàÞÝÜÚÙ°pps˜¡¡¢¡¢€ +ŸŸž›xpp…¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡šsptŽppq|¯v~íìéèæäãáàÞÝÜÚÙ×°pps˜¡¢¡¢€ $ŸŸ›xpp’©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤t€po|¯v~íìéèæäãáàÞÝÜÚÙ××°pps˜¢¡¢€ (Ÿ–ypp˜¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§Ÿtpt]€¯v~íìéèæäãáàÞÝÜÚÙ××Ö¯pps˜¡¢€ (—spp𰬩¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª¢x¦Y€¯v~íBìéèæäãáàÞÝÜÚÙ××ÖÕ®pps™¢  —sppœ³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯³Y€¯v~íBìéèæäãáàÞÝÜÚÙ××ÖÕÔ®pps˜ —spu£·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯­Y€¯zYä€íBìéèæäãáàÞÝÜÚÙ××ÖÕÔÓ®ppsŽspu¯º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­¯‘`€¯€e‡äííìéèæäãáàÞÝÜÚÙ××ÖÕÔÓÓ®p)u²½º·³°¬©¦£ œ™•’Œ‰…‚ƒ†‰ŒŽ‘”–™œŸ¡¤§ª­Ÿ_s€¯€}cl𣢡  Ÿžœœ›šš™˜˜——–,†pprˆ‹‰ˆ†…ƒ~|zywvtrqomlmnpqrtuvxyz|}€xYl°v•lnom£lnz²Ç´ÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÀ°®²­ƒÂ°®±­‚İ®­­¼ªèÙ­­°•f¿[t«­­Ê©ûè­­€°Ld·îîíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬ª†e«­­Êûóë€ì€íî€ï€ð‚ñ€ò€óô€õöö÷å­­€°`É€îHíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²‚~®­­Êûí€æçç€è€éêê€ë€ì€íîî€ï€ð€ñò€óôôõä­­°°›wîMíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²©`°®­­Êûîææçç€è€éêê€ë€ì€íîî€ï€ð€ñò€óôôõá­­°°›€îMíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²µ[°°®­­Êûîæçç€è€éêê€ë€ì€íîî€ï€ð€ñò€óôôõß­­°°›€îBíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²µ[€°€­Êûîçç€è€éêê€ë€ì€íîî€ï€ð€ñò€óôôõß­­°°›€îBíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²µ[€°­Êûïç€è€éêê€ë€ì€íîî€ï€ð€ñò€óôôõß­­°°›€îBíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²µ[€°­Êûï€è€éêê€ë€ì€íîî€ï€ð€ñò€óôôõß­­°°›€îBíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²µ[€°­Êûïèè€éêê€ë€ì€íîî€ï€ð€ñò€óôôõß­­°°›€îBíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²µ[€°€­Êûïè€éêê€ë€ì€íîî€ï€ð€ñ òòóóôôõß­­°°›€îBíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²µ[€°­Êûï€éêê€ë€ì€íîî€ï€ð€ñ òòóóôôõß­­°°›€îBíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²µ[€°‚­Êûðééêê€ë€ì€íîî€ï€ð€ñ òòóóôôõß­­°°›€îBíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²µ[€°ƒ­Êûðéêê€ë€ì€íîî€ï€ð€ñ òòóóôôõß­­°°›€îBíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚˜ˆ‰‹Ž‘”–™œž¡¤§ª¬¯²µ[€°„­Êûðêê€ë€ì€íîî€ï€ð€ñ òòóóôôõß­­°°›€îBíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„­¦‹‹Ž‘”–™œž¡¤§ª¬¯²¯[€°…­Ïûðê€ë€ì€íîî€ï€ð€ñ òòóóôôõß­­°°«[Ü€î-íêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆž€­¦Ž‘”–™œž¡¤§ª¬¯²ˆv€°…­Þûûí€ë€ì€íîî€ï€ð€ñ òòóóôôõß­­€°G€wÜîîíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹Ÿ­­Á­­§‘”–™œž¡¤§ª¬¯–a›€°„­Þûûõê€ë€ì€íîî€ï€ð€ñ òòóóôôõß­­°€[€€€~€}||{‚z€y+xwvvutsrrqponnmlkjjih“­­ÊûÞ­­ mijjklmmnook`•°ƒ­Þûûôêê€ë€ì€í€îïï€ð€ñ òòóóôôõß­­°›k¨[`ž­­Ê€ûÞ­­ž`‡[{¥°‚­Þûûôéêê€ë€ì€í€îïï€ð€ñ òòóóôôõß­­€°G•d®îîíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›˜—¨­­ÊûûõêûÞ­­¨—™œž¡¤§ª¬¥{`«€°­Þûûôééêê€ë€ì€í€îïï€ð€ñ òòóóôôõß­­€°`À€îBíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢ž›™¨­­ÊûûõÞÜèûÞ­­©šœž¡¤§ª¬¯²w{€°€­Þûûô€éêê€ë€ì€í€îïï€ð€ñ òòóóôôõß­­°°›mîBíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢žœ©­­ÊûûõÞÜÜÝèûÞ­­©ž¡¤§ª¬¯²¤`€°­Þûûôè€éêê€ë€ì€í€îïï€ð€ñ òòóóôôõß­­°°›€î-íêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥¢Ÿª­­ÞûûõÝ€ÜÝÝèûÞ­­ªŸ¡¤§ª¬¯²µ[€°­Þûûôèè€éêê€ë€ì€í€îïï€ð€ñ òòóóôôõß­­°°›€î-íêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¥£ª­­ÞûûõÝۀ܀ÝèûÞ­­ª¢¤§ª¬¯²µ[€°­Þûûô€è€éêêëìì€í€îïï€ð€ñ òòóóôôõß­­°°›€î-íêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬¨¦«­­ÞûûóÝÛۀ܀ÝÞéûÞ­­«¥§ª¬¯²µ[€°€­Þûûôç€è€é€ê€ëìì€í€îïï€ð€ñ òòóóôôõß­­°°›€î*íêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬©¬­­Þûûïڀۀ܀ÝÞÞéûÞ­­«§ª¬¯²µ[°°®­­Þûûóçç€è€é€ê€ëìì€í€îïï€ð€ñ òòóóôôõß­­°°›€î!íêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯¬€­ÞûûîÚڀۀ܀݀ÞêûÞ­­¬ª¬¯²µ[°®­­Þûûóæçç€è€é€ê€ëìì€í€îïï€ð€ñ òòóóôôõß­­°°›€î íêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶³¯€­ÞûûîÙÚڀۀ܀݀ÞßêûÞ­­¬¬¯²µ`®­­Þûûóææçç€è€é€ê€ëìì€í€îïï€ð€ñ òòóóôôõß­­°°›€îíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹¶²€­ÞûûîÙÙÚڀۀ܀݀ÞßßêûÞ€­ ¯²´ž­­Þûûó€æççèéé€ê€ëìì€í€îïï€ð€ñ òòóóôôõß­­°°›€î%íêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼¹´­­²èûûî€ÙÚڀۀ܀݀ހßêûÞ€­±¯­­Þûûó倿€ç€èéé€ê€ëìì€í€îïï€ð€ñ òòóóôôõß­­°°›€î%íêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¼·®­²ìûûîØ€ÙÚڀۀ܀݀ހßàêûÞ‚­Þûûóå倿€ç€èéé€ê€ëìì€íîîÑÅï€ð€ñ òòóóôôõß­­°°›€î%íêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃ¿¹®­²ìûûîØØ€ÙÚڀۀ܀݀ހßààëûÞ€­Þûûòäååæçç€èéé€ê€ëìì€íîÑ­­Á€ð€ñ òòóóôôõß­­°°›€î%íêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆÃº®­²ìûûå×ØØ€ÙÚڀۀ܀݀ހßààáëûÞ­Þûûòääååæçç€èéé€ê€ëìì€íÑ­Áðð€ñ òòóóôôõß­­°°«[Ü€î%íêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌÉÆ»­­²ìûûä××ØØ€ÙÚÚ€Û€Ü€Ý€Þ€ß ààááëûñûûò€ä€å€æçç€èéé€ê€ëììííЃ­Áð€ñ òòóóôôõß­­€°%€wåîîíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒÏÌɽ­­²ìûûä€×ØØ€ÙÚڀۀ܀݀ހßàà€áëûûòãäãä€å€æçç€èéé€ê€ëììíÐ…­Á€ñ òòóóôôõß­­°{d‰¤¤£¢¡ ŸŸžœ››š€™€˜ —–•”œ­­²ìûûäÖ€×ØØ€ÙÚڀۀ܀݀ހßàà€áâëòãáÚâä€å€æçç€èéé€ê€ëììЭ­ Âññòòóóôôõß­­°•f–[ z­­·ìûûäÖÖ€×ØØ€ÙÚڀۀ܀݀ހßàà€áââáÜÕÖãä€å€æçç€èéé€ê€ëìЭ­ Âñòòóóôôõß­­€°"dÉîîíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÒ­­¼öûûä€Ö€×ØØ€ÙÚڀۀ܀݀ހßàà€áàÔÁÒÕÕÜä€å€æçç€èéé€ê€ëЭƒ­ Âòòóóôôõß­­€°`É€îíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÔÄ­­¼öûûãÕ€Ö€×ØØ€ÙÚÚ€Û€Ü€Ý€Þ€ß ààáߨÓÕÈÇÕÕØä€å€æçç€èéé€êëëÏ­…­ Âòóóôôõß­­°°›wîíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÅ­­¼öûùáÕÕ€Ö€×ØØ€ÙÚÚ€Û€Ü€Ý€Þ€ß àÞÖÒÓÓÕÓÀÕÕÖä€å€æçç€èéé€êëÏ­‡­Âóóôôõß­­°°›€îíêéçåäâáßÞÝÛÛÙØ××ÖÕ¾­­¼öûùÛ€Õ€Ö€×ØØ€ÙÚڀۀ܀݀ÞßßÛÔÐÑÒÓÓÕÖ¾ÕÕÖä€å€æçç€èéé€êÏ­‰­Âóôôõß­­°°›€îíêéçåäâáßÞÝÛÛÙØ××Ö¼­­¼öûùÛÔ€Õ€Ö€×ØØ€ÙÚڀۀ܀݀ÞØÑÍÎÐÑÒÓÓÕÖ¾ÕÕÖä€å€æçç€èééêêέ‹­Âôôõß­­°°›€îíêéçåäâáßÞÝÛÛÙØ××¼­­¼öûùÛÔÔ€Õ€Ö€×ØØ€ÙÚڀۀ܀ÝÜÕÍËÍÍÎÐÑÒÓÓÕÖ¾ÕÕÖä€å€æçç€èééêέ­Ãôõß­­°°›€îíêéçåäâáßÞÝÛÛÙØ×½­­¼öûùÛÓÔÔ€Õ€Ö€×ØØ€ÙÚÚ€Û€ÜÝÚÐÊÉËËÍÍÎÐÑÒÓÓÕÖ¾ÕÕÖä€å€æçç€èééέ­Ãõß­­°°›€îíêéçåäâáßÞÝÛÛÙØ½­­ÊöûøÚÓÓÔÔ€Õ€Ö€×ØØ€ÙÚÚ€ÛÜÜÕËÇÈÈÉËËÍÍÎÐÑÒÓÓÕÖ¾ÕÕÖä€å€æçç€èéέ‘­Ãß­­°°›€îíêéçåäâáßÞÝÛÛÙ½­­ÊûûøÚ€ÓÔÔ€Õ€Ö€×ØØ€ÙÚÚÛÛØÏÇÅÆÇÈÈÉËËÍÍÎÐÑÒÓÓÕÖ¾ÕÕÖä€å€æçç€èέ“­·­­°°›€îíêéçåäâáßÞÝÛÛ¾­­ÊûûøÚÒ€ÓÔÔ€Õ€Ö€×ØØ€ÙÚÚÓËÃÃÄÅÆÇÈÈÉËËÍÍÎÐÑÒÓÓÕÖ¾ÕÕÖä€å€æççèèÍ­•ƒ­°°›€îíêéçåäâáßÞÝØ¾­­ÊûûóÕÒÒ€ÓÔÔ€Õ€Ö€×"ØØÙÙÖÏÇÅÄÃÁ²¼ÆÇÈÈÉËËÍÍÎÐÑÒÓÓÕÖ¾ÕÕÖä€å€æççèÍ­—‚­°°›€îíêéçåäâáßÞÚ¶­­ÊûûóÔ€Ò€ÓÔÔ€Õ€Ö€×"ØÖÑÊÇÆÅÅÄ¿¯­­½ÇÈÈÉËËÍÍÎÐÑÒÓÓÕÖ¾ÕÕÖä€å€æççÍ­™­°°›€îíêéçåäâáßÛ¶­­ÊûûóÔÒ€ÓÔÔ€Õ€Ö×ÖÒÍÈ€ÇÆÅÅ¿®­½ÈÈÉËËÍÍÎÐÑÒÓÓÕÖ¾ÕÕÖä€å€æçÍ­›€­°°›€îíêéçåäâáܶ­­ÊûûóÔÑÒ€ÓÔÔ€ÕÖÕÒÎÊÉÉÈ€ÇÆÅÀ®­­˜«­­½ÈÉËËÍÍÎÐÑÒÓÓÕÓ¾ÕÕÖä€å€æÍ­­­°°«[Ü€îíêéçåäâÞ¶­­ÏûûóÓÑÑÒ€Ó ÔÔÕÕÒÏÍËËÊÉÉÈ€ÇÆÁ®­ªƒ«­­¾ÉËËÍÍÎÐÑÒÓÓÕÊÆÕÕØä€åææÌ­¤€°†wÜîîíêéçåäß·­­ÞûûóÓÐÑÑÒÓÒÏ΀ÍËËÊÉÉȀǾ®­«Œ‚ƒ†«­­¿ËËÍÍÎÐÑÒÓÓͽÐÕÕÛä€åæÌ­¥°€[€€€~ €¤­­ÞûûóÓÐÐÑÑ€ÒÑËýƒº»€º »º»»º¶­­©s€efft©­­¹¿€ÀÁÁÂÂÁ¿Í€Õâä€åÌ­¦° v„[ž­­ÔûûîÓ€ÐÑÑɺ€²‚³´´ƒµ¶¶³­­¨j„[j¨­®¸€»¼¼€½ÉÓ€ÕâäååÌ­§€° `¥ÒîíêéçåÏ­­²ìë€Ð€Ñ€ÒÓÒÑÐÐÏÏÎ΀Í(ËËÊÉÉȾ­­¨”‹ˆ„‚ƒ†‰‹Ž–«­¯ÇÍÎÐÑÒÓÎÃÂÔÕÕÛäåÌ­¨€°f®€î íêéçåäέ­²Ê†ÒÓÒÑÐÐÏÏÎ΀Í'ËËÊÉɼ­­¨“Ž‹ˆ„‚ƒ†‰‹Ž‘™¬­¯ÇÎÐÑÒÓÓÕÅÊÕÕØäË­©°° mî íêéçåäâÍ­­°ÌÓ„ÒÓÒÑÐÐÏÏÎ΀Í&ËËÊɸ­­©—‘Ž‹ˆ„‚ƒ†‰‹Ž‘”𬭝ÈÐÑÒÓÓÕÑÁÕÕÖË­ª°°›€î íêéçåäâáÌ­­°Ì„ÒÓÒÑÐÐÏÏÎ΀Í%ËËʸ­­ª™•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–¬­¯ÉÑÒÓÓÕÖ¾ÕÕÆ­«°°›€î íêéçåäâáßÌ­­°ÌƒÒÓÒÑÐÐÏÏÎ΀Í$ËË·­­ªœ˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™Ÿ¬­¯ÊÒÓÓÕÖ¾ÕÆ­¬°°›€îíêéçåäâáßÞË­­°Ì‚ÒÓÒÑÐÐÏÏÎ΀Í#˸­­©ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œ¡¬­¯ËÓÓÕ־ƭ­°°›€îíêéçåäâáßÞÝÊ­­°ËÒ.ÓÒÑÐÐÏÏÎÎÍÍʵ­­ª¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž£¬­¯ÌÓÕÖ·­®°°›€îíêéçåäâáßÞÝÛÊ­­°Ë€Ò-ÓÒÑÐÐÏÏÎÎÍ˳­­«¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¦­­¯ÍÕÆ€­¯¯°°›€îíêéçåäâáßÞÝÛÛÈ­­°ËÒÒÓÒÑÐÐÏÏÎÎ̳€­¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤¨­­¯Á€­¯°¯°°›€î=íêéçåäâáßÞÝÛÛÙÈ­­°ËÒÓÒÑÐÐÏÏÎ̳­­®¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§«­¨¯°°¯°°›€îBíêéçåäâáßÞÝÛÛÙØÇ­­°ËÓÒÑÐÐÏÏȳ­­±¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬­­®j€°¯°°›€îBíêéçåäâáßÞÝÛÛÙØ×Ç­­°ËÒÑÐÐÏȯ­­³³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯®³[€°¯°°›€îBíêéçåäâáßÞÝÛÛÙØ××Ç­­°ËÑÐÐɯ­­´¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²µ[€°¯°°›€îBíêéçåäâáßÞÝÛÛÙØ××ÖÆ­­°ÊÐʯ­®·¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²¯[€°¯°°¥[å€îBíêéçåäâáßÞÝÛÛÙØ××ÖÕÅ­­°Ã¯­®¼¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯²“k€°¯€°v‰åîîíêéçåäâáßÞÝÛÛÙØ××ÖÕÔÅ­)¯¿¿¼¹¶³¯¬¨¥¢ž›˜•‘Ž‹ˆ„‚ƒ†‰‹Ž‘”–™œž¡¤§ª¬¯¡a•€°¯€°«pm›¤¤£¢¡ ŸŸžœ››š€™€˜-—Ÿ­­«•ŒŠˆ‡…ƒ‚€}{zxvusqpnoprsuvwyz{}~€‚„{[†°°°›•†•¨£†‹¥°²Ç°´Å°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿt8mk@€ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþìßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþçßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûçßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúâßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿößßßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîßßßßßßßßßßßêÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüçßßßßßßßßßßßßêÿÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúâßßßßßßßßßßßßßêÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóßßßßßßßßßßßßßßßêÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüêßßßßßßßßßßßßßßßßêÿÿpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøâßßßßßßßßßßßßßßßßßêÿÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþîßßßßßßßßßßßßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúåßßßßßßßßßßßßßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþðßßßßßßßßßßßßßßßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúåßßßßßßßßßßßßßßßßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþðßßßßßßßßßßßßßßßßßßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúåßßßßßßßßßßßßßßßßßßßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþìßßßßßßßßßßßßßßßßßßßßßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõâßßßßßßßßßßßßßßßßßßßßßßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúçßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüîßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóâßßßßßßßßßßßßßßßßßßîõßßßßßßßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöåßßßßßßßßßßßßßßßßßßßîÿÿößßßßßßßßßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúêßßßßßßßßßßßßßßßßßßßßîÿÿÿÿößßßßßßßßßßßßêÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüêßßßßßßßßßßßßßßßßßßßßßîÿÿúìÿÿößßßßßßßßßßßêÿÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþîßßßßßßßßßßßßßßßßßßßßßßîÿÿúMìÿÿößßßßßßßßßßêÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãßßßßßßßßßßßßßßßßßßßßßßîÿÿúMìÿÿößßßßßßßßßêÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýáßßßßßßßßßßßßßßßßßßßßßîÿÿúMìÿÿößßßßßßßßêÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïßßßßßßßßßßßßßßßßßßßßîÿÿúMìÿÿößßßßßßßêÿÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùßßßßßßßßßßßßßßßßßßßîÿÿúMìÿÿößßßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßßßßßßßßßßßßßßßßßîÿÿúMìÿÿößßßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßßßßßßßßßßßßßßßßîÿÿúMìÿÿößßßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßßßßßßßßßßßßßßßîÿÿúMìÿÿößßßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßßßßßßßßßßßßßßîÿÿúMìÿÿößßêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßßßßßßßßßßßßßîÿÿúMìÿÿößêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßßßßßßßßßßßßîÿÿúMìÿÿöêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßßßßßßßßßßßîÿÿúMìÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßßßßßßßßßßîÿÿúMìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßßßßßßßßßîÿÿúMìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßßßßßßßßîÿÿúMìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßßßßßßßîÿÿúMìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßßßßßßîÿÿúMìßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûßßßßßßîÿÿúMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóßßßßßîÿÿúM ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãßßßßîÿÿúM ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãßßßîÿÿúMŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóßßîÿÿúMßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûßîÿÿúMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿÿúMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPPïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïP€ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏ€libiodbc-3.52.9/mac/iODBCdemo/English.lproj/ExecSQL.xib0000644000076400007640000005204712323204667017302 00000000000000 1050 9L30 680 949.54 353.00 YES YES com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES ExecController FirstResponder NSApplication 1 2 {{189, 440}, {360, 272}} 1886912512 Window NSPanel View {3.40282e+38, 3.40282e+38} {213, 107} 256 YES 256 {{17, 238}, {167, 14}} YES 67239424 272629760 RW50ZXIgYSBTUUwgc3RhdGVtZW50IGJlbG93Ogo LucidaGrande 1.100000e+01 3100 6 System controlColor 3 MC42NjY2NjY2OQA 6 System controlTextColor 3 MAA 256 {{20, 118}, {320, 112}} YES -1804468671 272630784 LucidaGrande 1.300000e+01 1044 YES 6 System textBackgroundColor 3 MQA 6 System textColor 256 {{264, 12}, {82, 32}} YES -2080244224 134217728 OK -2038284033 1 DQ 200 25 256 {{172, 12}, {82, 32}} YES 67239424 134217728 Cancel -2038284033 1 200 25 256 YES 256 YES 256 {{2, 7}, {319, 48}} YES 67239424 272760832 You can also use the following ODBC metadata commands as SQL statements: tables, qualifiers, owners, types, datatypes {{2, 2}, {322, 56}} {{17, 56}, {326, 73}} {0, 0} 67239424 0 3 MCAwLjgwMDAwMDAxAA 3 0 2 NO {{1, 9}, {360, 272}} {{0, 0}, {1440, 878}} {213, 129} {3.40282e+38, 3.40282e+38} YES fSQLText 12 aOK: 13 aCancel: 14 panel 15 YES 0 YES -2 RmlsZSdzIE93bmVyA -1 First Responder 5 YES Window 6 YES 7 YES 8 YES 9 YES 10 YES 16 YES 20 21 22 23 -3 Application 18 YES 24 YES YES -1.IBPluginDependency -2.IBPluginDependency 10.IBPluginDependency 10.ImportedFromIB2 16.IBPluginDependency 16.ImportedFromIB2 18.IBPluginDependency 18.ImportedFromIB2 5.ImportedFromIB2 5.windowTemplate.hasMinSize 5.windowTemplate.minSize 6.IBPluginDependency 6.ImportedFromIB2 7.IBPluginDependency 7.ImportedFromIB2 8.IBPluginDependency 8.ImportedFromIB2 9.IBPluginDependency 9.ImportedFromIB2 YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {213, 107} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES YES YES 24 YES ExecController NSObject YES YES aCancel: aOK: YES id id YES YES fSQLText panel YES NSTextField id IBUserSource FirstResponder IBUserSource 0 3 libiodbc-3.52.9/mac/iODBCdemo/ExecController.h0000644000076400007640000000672112323210535015702 00000000000000/* * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #import @interface ExecController : NSObject { IBOutlet NSTextField *fSQLText; IBOutlet id panel; NSString *fSQL; } - (IBAction)aCancel:(id)sender; - (IBAction)aOK:(id)sender; - (NSWindow *)Panel; - (NSString *)execSQL; - (id)initWithString:(NSString *)str; @end libiodbc-3.52.9/mac/iODBCdemo/TestController.h0000644000076400007640000001005212323210535015725 00000000000000/* * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #import #import #import #import #import @interface TestController : NSObject { IBOutlet id mMenu; IBOutlet id mWindow; IBOutlet NSTableView *RSTable; SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt; BOOL mConnected; NSMutableArray *mBuffer; int mRows; NSString *fQuery; BOOL mExistsResultset; BOOL mNextResultset; } - (void)disconnect; - (void)execSQL:(SQLTCHAR *)szSQL; - (void)clearGrid; - (void)loadResult; - (id)tableView:(NSTableView *)aTable objectValueForTableColumn:(NSTableColumn *)aColumn row:(int)rowIndex; - (int)numberOfRowsInTableView:(NSTableView *)aTable; - (IBAction)aCloseConnection:(id)sender; - (IBAction)aExecSQL:(id)sender; - (IBAction)aFetchNextRowset:(id)sender; - (IBAction)aOpenConnection:(id)sender; @end libiodbc-3.52.9/mac/iODBCdemo/iodbcdemo_Prefix.pch0000644000076400007640000000022112323204667016535 00000000000000// // Prefix header for all source files of the 'cppdemo' target in the 'cppdemo' project // #ifdef __OBJC__ #import #endif libiodbc-3.52.9/mac/iODBCdemo/NSResWindow.h0000644000076400007640000000640612323210535015134 00000000000000/* * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #import @interface NSResWindow : NSWindow { IBOutlet id myApp; } @end libiodbc-3.52.9/mac/iODBCdemo/ExecController.m0000644000076400007640000000750612323210535015711 00000000000000/* * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #import "ExecController.h" @implementation ExecController - (id)init { [super init]; if (self) { // load up the nib if (!panel) [NSBundle loadNibNamed:@"ExecSQL" owner:self]; } return self; } - (id)initWithString:(NSString *)str { [self init]; [fSQLText setStringValue:str]; return self; } - (IBAction)aCancel:(id)sender { [panel close]; [NSApp stopModalWithCode:0]; } - (IBAction)aOK:(id)sender { fSQL = [fSQLText stringValue]; [panel close]; [NSApp stopModalWithCode:1]; } - (NSWindow *)Panel { return panel; } - (NSString *)execSQL { return [fSQLText stringValue]; } @end libiodbc-3.52.9/mac/iODBCdemo/Info.plist0000644000076400007640000000151712323204667014560 00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable iODBC Demo CFBundleIconFile iODBCdemo.icns CFBundleIdentifier com.openlinksw.iodbcdemo CFBundleInfoDictionaryVersion 6.0 CFBundleName iODBC Demo CFBundlePackageType APPL CFBundleSignature odbc CFBundleVersion 1.0 NSMainNibFile MainMenu NSPrincipalClass NSApplication libiodbc-3.52.9/mac/iODBCdemo/main.m0000644000076400007640000000644312323210535013704 00000000000000/* * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #import int main(int argc, char *argv[]) { return NSApplicationMain(argc, (const char **) argv); } libiodbc-3.52.9/mac/iODBCdemo/iodbcdemo.xcodeproj/0000755000076400007640000000000012323210721016571 500000000000000libiodbc-3.52.9/mac/iODBCdemo/iodbcdemo.xcodeproj/project.pbxproj0000644000076400007640000005167712323204667021621 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ 85349760105541030084FC17 /* NSResWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 8534975F105541030084FC17 /* NSResWindow.m */; }; 85349761105541030084FC17 /* NSResWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 8534975F105541030084FC17 /* NSResWindow.m */; }; 85F0775709F871F60007FC8F /* TestController.m in Sources */ = {isa = PBXBuildFile; fileRef = 85F0775609F871F60007FC8F /* TestController.m */; }; 85F0784609F88DFC0007FC8F /* iODBC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85F0784509F88DFC0007FC8F /* iODBC.framework */; }; 85F0799D09FDC35E0007FC8F /* ExecController.m in Sources */ = {isa = PBXBuildFile; fileRef = 85F0799C09FDC35E0007FC8F /* ExecController.m */; }; 85F079A809FDD9D70007FC8F /* ExecSQL.xib in Resources */ = {isa = PBXBuildFile; fileRef = 85F079A609FDD9D70007FC8F /* ExecSQL.xib */; }; 8D11072A0486CEB800E47090 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.xib */; }; 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; CD6EAFC40A12036B003E7EC1 /* iODBCdemo.icns in Resources */ = {isa = PBXBuildFile; fileRef = CD6EAFC20A12036B003E7EC1 /* iODBCdemo.icns */; }; CD6EAFC50A12036B003E7EC1 /* iODBCdemo.icns in Resources */ = {isa = PBXBuildFile; fileRef = CD6EAFC20A12036B003E7EC1 /* iODBCdemo.icns */; }; CD6EAFEF0A1213FA003E7EC1 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = CD6EAFED0A1213FA003E7EC1 /* Credits.rtf */; }; CD6EAFF00A1213FA003E7EC1 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = CD6EAFED0A1213FA003E7EC1 /* Credits.rtf */; }; CD7C36450A0109AA001A43B7 /* iODBCinst.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD7C36440A0109AA001A43B7 /* iODBCinst.framework */; }; CD7C37A90A063F40001A43B7 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.xib */; }; CD7C37AA0A063F40001A43B7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; CD7C37AB0A063F40001A43B7 /* ExecSQL.xib in Resources */ = {isa = PBXBuildFile; fileRef = 85F079A609FDD9D70007FC8F /* ExecSQL.xib */; }; CD7C37AD0A063F40001A43B7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; CD7C37AE0A063F40001A43B7 /* TestController.m in Sources */ = {isa = PBXBuildFile; fileRef = 85F0775609F871F60007FC8F /* TestController.m */; }; CD7C37AF0A063F40001A43B7 /* ExecController.m in Sources */ = {isa = PBXBuildFile; fileRef = 85F0799C09FDC35E0007FC8F /* ExecController.m */; }; CD7C37B10A063F40001A43B7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; CD7C37B20A063F40001A43B7 /* iODBC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85F0784509F88DFC0007FC8F /* iODBC.framework */; }; CD7C37B30A063F40001A43B7 /* iODBCinst.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD7C36440A0109AA001A43B7 /* iODBCinst.framework */; }; /* End PBXBuildFile section */ /* Begin PBXBuildStyle section */ 4A9504CCFFE6A4B311CA0CBA /* Debug */ = { isa = PBXBuildStyle; buildSettings = { }; name = Debug; }; 4A9504CDFFE6A4B311CA0CBA /* Release */ = { isa = PBXBuildStyle; buildSettings = { }; name = Release; }; /* End PBXBuildStyle section */ /* Begin PBXFileReference section */ 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* iodbcdemo_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iodbcdemo_Prefix.pch; sourceTree = ""; }; 8534975E105541030084FC17 /* NSResWindow.h */ = {isa = PBXFileReference; fileEncoding = "-2147483641"; lastKnownFileType = sourcecode.c.h; path = NSResWindow.h; sourceTree = ""; }; 8534975F105541030084FC17 /* NSResWindow.m */ = {isa = PBXFileReference; fileEncoding = "-2147483641"; lastKnownFileType = sourcecode.c.objc; path = NSResWindow.m; sourceTree = ""; }; 85F0775509F871F60007FC8F /* TestController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = TestController.h; sourceTree = ""; }; 85F0775609F871F60007FC8F /* TestController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = TestController.m; sourceTree = ""; }; 85F0784509F88DFC0007FC8F /* iODBC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBC.framework; path = /Library/Frameworks/iODBC.framework; sourceTree = ""; }; 85F0799B09FDC35E0007FC8F /* ExecController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ExecController.h; sourceTree = ""; }; 85F0799C09FDC35E0007FC8F /* ExecController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ExecController.m; sourceTree = ""; }; 85F079A709FDD9D70007FC8F /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/ExecSQL.xib; sourceTree = ""; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 8D1107320486CEB800E47090 /* iODBC Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iODBC Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; CD6EAFC30A12036B003E7EC1 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = English; path = English.lproj/iODBCdemo.icns; sourceTree = ""; }; CD6EAFEE0A1213FA003E7EC1 /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = ""; }; CD7C36440A0109AA001A43B7 /* iODBCinst.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBCinst.framework; path = /Library/Frameworks/iODBCinst.framework; sourceTree = ""; }; CD7C37B70A063F40001A43B7 /* iODBC Demo Unicode.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iODBC Demo Unicode.app"; sourceTree = BUILT_PRODUCTS_DIR; }; CD7C37B90A063F41001A43B7 /* InfoUnicode.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = InfoUnicode.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 8D11072E0486CEB800E47090 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, 85F0784609F88DFC0007FC8F /* iODBC.framework in Frameworks */, CD7C36450A0109AA001A43B7 /* iODBCinst.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; CD7C37B00A063F40001A43B7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CD7C37B10A063F40001A43B7 /* Cocoa.framework in Frameworks */, CD7C37B20A063F40001A43B7 /* iODBC.framework in Frameworks */, CD7C37B30A063F40001A43B7 /* iODBCinst.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( ); name = Classes; sourceTree = ""; }; 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { isa = PBXGroup; children = ( CD7C36440A0109AA001A43B7 /* iODBCinst.framework */, 85F0784509F88DFC0007FC8F /* iODBC.framework */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, ); name = "Linked Frameworks"; sourceTree = ""; }; 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { isa = PBXGroup; children = ( 29B97324FDCFA39411CA2CEA /* AppKit.framework */, 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, 29B97325FDCFA39411CA2CEA /* Foundation.framework */, ); name = "Other Frameworks"; sourceTree = ""; }; 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( 8D1107320486CEB800E47090 /* iODBC Demo.app */, CD7C37B70A063F40001A43B7 /* iODBC Demo Unicode.app */, ); name = Products; sourceTree = ""; }; 29B97314FDCFA39411CA2CEA /* iODBC Demo */ = { isa = PBXGroup; children = ( 080E96DDFE201D6D7F000001 /* Classes */, 29B97315FDCFA39411CA2CEA /* Other Sources */, 29B97317FDCFA39411CA2CEA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, ); name = "iODBC Demo"; sourceTree = ""; }; 29B97315FDCFA39411CA2CEA /* Other Sources */ = { isa = PBXGroup; children = ( 32CA4F630368D1EE00C91783 /* iodbcdemo_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, 85F0775509F871F60007FC8F /* TestController.h */, 85F0775609F871F60007FC8F /* TestController.m */, 85F0799B09FDC35E0007FC8F /* ExecController.h */, 85F0799C09FDC35E0007FC8F /* ExecController.m */, 8534975E105541030084FC17 /* NSResWindow.h */, 8534975F105541030084FC17 /* NSResWindow.m */, ); name = "Other Sources"; sourceTree = ""; }; 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( CD6EAFED0A1213FA003E7EC1 /* Credits.rtf */, CD6EAFC20A12036B003E7EC1 /* iODBCdemo.icns */, 85F079A609FDD9D70007FC8F /* ExecSQL.xib */, 8D1107310486CEB800E47090 /* Info.plist */, 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, 29B97318FDCFA39411CA2CEA /* MainMenu.xib */, CD7C37B90A063F41001A43B7 /* InfoUnicode.plist */, ); name = Resources; sourceTree = ""; }; 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, ); name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 8D1107260486CEB800E47090 /* iODBC Demo */ = { isa = PBXNativeTarget; buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "iODBC Demo" */; buildPhases = ( 8D1107290486CEB800E47090 /* Resources */, 8D11072C0486CEB800E47090 /* Sources */, 8D11072E0486CEB800E47090 /* Frameworks */, ); buildRules = ( ); buildSettings = { }; dependencies = ( ); name = "iODBC Demo"; productInstallPath = /Applications/iODBC; productName = "iODBC Demo"; productReference = 8D1107320486CEB800E47090 /* iODBC Demo.app */; productType = "com.apple.product-type.application"; }; CD7C37A70A063F40001A43B7 /* iODBC Demo Unicode */ = { isa = PBXNativeTarget; buildConfigurationList = CD7C37B40A063F40001A43B7 /* Build configuration list for PBXNativeTarget "iODBC Demo Unicode" */; buildPhases = ( CD7C37A80A063F40001A43B7 /* Resources */, CD7C37AC0A063F40001A43B7 /* Sources */, CD7C37B00A063F40001A43B7 /* Frameworks */, ); buildRules = ( ); buildSettings = { }; dependencies = ( ); name = "iODBC Demo Unicode"; productInstallPath = /Applications/iODBC; productName = "iODBC Demo"; productReference = CD7C37B70A063F40001A43B7 /* iODBC Demo Unicode.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iodbcdemo" */; buildSettings = { }; buildStyles = ( 4A9504CCFFE6A4B311CA0CBA /* Debug */, 4A9504CDFFE6A4B311CA0CBA /* Release */, ); hasScannedForEncodings = 1; mainGroup = 29B97314FDCFA39411CA2CEA /* iODBC Demo */; projectDirPath = ""; targets = ( 8D1107260486CEB800E47090 /* iODBC Demo */, CD7C37A70A063F40001A43B7 /* iODBC Demo Unicode */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 8D1107290486CEB800E47090 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 8D11072A0486CEB800E47090 /* MainMenu.xib in Resources */, 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, 85F079A809FDD9D70007FC8F /* ExecSQL.xib in Resources */, CD6EAFC40A12036B003E7EC1 /* iODBCdemo.icns in Resources */, CD6EAFEF0A1213FA003E7EC1 /* Credits.rtf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; CD7C37A80A063F40001A43B7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( CD7C37A90A063F40001A43B7 /* MainMenu.xib in Resources */, CD7C37AA0A063F40001A43B7 /* InfoPlist.strings in Resources */, CD7C37AB0A063F40001A43B7 /* ExecSQL.xib in Resources */, CD6EAFC50A12036B003E7EC1 /* iODBCdemo.icns in Resources */, CD6EAFF00A1213FA003E7EC1 /* Credits.rtf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 8D11072C0486CEB800E47090 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 8D11072D0486CEB800E47090 /* main.m in Sources */, 85F0775709F871F60007FC8F /* TestController.m in Sources */, 85F0799D09FDC35E0007FC8F /* ExecController.m in Sources */, 85349760105541030084FC17 /* NSResWindow.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; CD7C37AC0A063F40001A43B7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CD7C37AD0A063F40001A43B7 /* main.m in Sources */, CD7C37AE0A063F40001A43B7 /* TestController.m in Sources */, CD7C37AF0A063F40001A43B7 /* ExecController.m in Sources */, 85349761105541030084FC17 /* NSResWindow.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 089C165DFE840E0CC02AAC07 /* English */, ); name = InfoPlist.strings; sourceTree = ""; }; 29B97318FDCFA39411CA2CEA /* MainMenu.xib */ = { isa = PBXVariantGroup; children = ( 29B97319FDCFA39411CA2CEA /* English */, ); name = MainMenu.xib; sourceTree = ""; }; 85F079A609FDD9D70007FC8F /* ExecSQL.xib */ = { isa = PBXVariantGroup; children = ( 85F079A709FDD9D70007FC8F /* English */, ); name = ExecSQL.xib; sourceTree = ""; }; CD6EAFC20A12036B003E7EC1 /* iODBCdemo.icns */ = { isa = PBXVariantGroup; children = ( CD6EAFC30A12036B003E7EC1 /* English */, ); name = iODBCdemo.icns; sourceTree = ""; }; CD6EAFED0A1213FA003E7EC1 /* Credits.rtf */ = { isa = PBXVariantGroup; children = ( CD6EAFEE0A1213FA003E7EC1 /* English */, ); name = Credits.rtf; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; INFOPLIST_FILE = Info.plist; INSTALL_PATH = /Applications/iODBC; PRODUCT_NAME = "iODBC Demo"; WRAPPER_EXTENSION = app; ZERO_LINK = YES; }; name = Development; }; C01FCF4C08A954540054247B /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; HEADER_SEARCH_PATHS = ../../include; INFOPLIST_FILE = Info.plist; INSTALL_PATH = /Applications/iODBC; PRODUCT_NAME = "iODBC Demo"; WRAPPER_EXTENSION = app; }; name = Deployment; }; C01FCF4F08A954540054247B /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; PREBINDING = NO; SDKROOT = $IODBC_SDK; }; name = Development; }; C01FCF5008A954540054247B /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; PREBINDING = NO; SDKROOT = $IODBC_SDK; }; name = Deployment; }; CD7C37B50A063F40001A43B7 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; INFOPLIST_FILE = InfoUnicode.plist; INSTALL_PATH = /Applications/iODBC; OTHER_CFLAGS = "-DUNICODE"; PRODUCT_NAME = "iODBC Demo Unicode"; WRAPPER_EXTENSION = app; ZERO_LINK = YES; }; name = Development; }; CD7C37B60A063F40001A43B7 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; HEADER_SEARCH_PATHS = ../../include; INFOPLIST_FILE = InfoUnicode.plist; INSTALL_PATH = /Applications/iODBC; OTHER_CFLAGS = "-DUNICODE"; PRODUCT_NAME = "iODBC Demo Unicode"; WRAPPER_EXTENSION = app; }; name = Deployment; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "iODBC Demo" */ = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4B08A954540054247B /* Development */, C01FCF4C08A954540054247B /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iodbcdemo" */ = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4F08A954540054247B /* Development */, C01FCF5008A954540054247B /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; CD7C37B40A063F40001A43B7 /* Build configuration list for PBXNativeTarget "iODBC Demo Unicode" */ = { isa = XCConfigurationList; buildConfigurations = ( CD7C37B50A063F40001A43B7 /* Development */, CD7C37B60A063F40001A43B7 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; /* End XCConfigurationList section */ }; rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; } libiodbc-3.52.9/mac/iODBCadm/0000755000076400007640000000000012323210720012464 500000000000000libiodbc-3.52.9/mac/iODBCadm/iODBCadm.xcodeproj/0000755000076400007640000000000012323210720016022 500000000000000libiodbc-3.52.9/mac/iODBCadm/iODBCadm.xcodeproj/project.pbxproj0000644000076400007640000011305412323204667021037 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ 856FBD9A09EA17B600A6A93D /* filedsn.c in Sources */ = {isa = PBXBuildFile; fileRef = 856FBD9809EA17B600A6A93D /* filedsn.c */; }; 856FBD9B09EA17B600A6A93D /* gensetup.c in Sources */ = {isa = PBXBuildFile; fileRef = 856FBD9909EA17B600A6A93D /* gensetup.c */; }; 85E671EB09F06C7200E3A1BA /* gensetup.xib in Resources */ = {isa = PBXBuildFile; fileRef = 85E671E909F06C7200E3A1BA /* gensetup.xib */; }; 85F07C550A0A1CD80007FC8F /* keyval.xib in Resources */ = {isa = PBXBuildFile; fileRef = 85F07C530A0A1CD80007FC8F /* keyval.xib */; }; 85F07C580A0A24CF0007FC8F /* keyval.c in Sources */ = {isa = PBXBuildFile; fileRef = 85F07C570A0A24CF0007FC8F /* keyval.c */; }; 85F07CA20A0AD1D90007FC8F /* odbcdriverf.xib in Resources */ = {isa = PBXBuildFile; fileRef = 85F07CA00A0AD1D90007FC8F /* odbcdriverf.xib */; }; 85F07CAB0A0AFCF40007FC8F /* odbcdriverf.c in Sources */ = {isa = PBXBuildFile; fileRef = 85F07CAA0A0AFCF40007FC8F /* odbcdriverf.c */; }; CDAE3BEB0987D71D003250F8 /* gui.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983C5D07D2B7260022E958 /* gui.h */; }; CDAE3BEC0987D71D003250F8 /* iodbcadm.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983C6007D2B7260022E958 /* iodbcadm.h */; }; CDAE3BED0987D71D003250F8 /* gui.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983C8907D2B7780022E958 /* gui.h */; }; CDAE3BEE0987D71D003250F8 /* iodbc.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983C9D07D2B8290022E958 /* iodbc.h */; }; CDAE3BEF0987D71D003250F8 /* iodbcext.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983C9E07D2B8290022E958 /* iodbcext.h */; }; CDAE3BF00987D71D003250F8 /* iodbcunix.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983CA107D2B85F0022E958 /* iodbcunix.h */; }; CDAE3BF10987D71D003250F8 /* sql.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983CA307D2B8930022E958 /* sql.h */; }; CDAE3BF20987D71D003250F8 /* sqltypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983CA507D2B8930022E958 /* sqltypes.h */; }; CDAE3BF30987D71D003250F8 /* sqlucode.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983CA607D2B8930022E958 /* sqlucode.h */; }; CDAE3BF40987D71D003250F8 /* dlf.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983CAB07D2B8CD0022E958 /* dlf.h */; }; CDAE3BF50987D71D003250F8 /* dlproc.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983CAD07D2B8CD0022E958 /* dlproc.h */; }; CDAE3BF60987D71D003250F8 /* herr.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983CB507D2B9330022E958 /* herr.h */; }; CDAE3BF70987D71D003250F8 /* unicode.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983CB807D2B94F0022E958 /* unicode.h */; }; CDAE3BF80987D71D003250F8 /* iodbcinst.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983CBB07D2B98B0022E958 /* iodbcinst.h */; }; CDAE3BF90987D71D003250F8 /* odbcinst.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983CBD07D2B9B30022E958 /* odbcinst.h */; }; CDAE3BFA0987D71D003250F8 /* getfpn.h in Headers */ = {isa = PBXBuildFile; fileRef = 85983CC007D2B9DE0022E958 /* getfpn.h */; }; CDAE3BFC0987D71D003250F8 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167EFE841241C02AAC07 /* InfoPlist.strings */; }; CDAE3BFD0987D71D003250F8 /* confirmation.xib in Resources */ = {isa = PBXBuildFile; fileRef = 85983CCA07D2BCCD0022E958 /* confirmation.xib */; }; CDAE3BFE0987D71D003250F8 /* connectionpool.xib in Resources */ = {isa = PBXBuildFile; fileRef = 85983CCC07D2BCCD0022E958 /* connectionpool.xib */; }; CDAE3BFF0987D71D003250F8 /* driverremove.xib in Resources */ = {isa = PBXBuildFile; fileRef = 85983CCE07D2BCCD0022E958 /* driverremove.xib */; }; CDAE3C000987D71D003250F8 /* driversetup.xib in Resources */ = {isa = PBXBuildFile; fileRef = 85983CD007D2BCCD0022E958 /* driversetup.xib */; }; CDAE3C010987D71D003250F8 /* drvchoose.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 85983CD207D2BCCD0022E958 /* drvchoose.tiff */; }; CDAE3C020987D71D003250F8 /* dsnchooser.xib in Resources */ = {isa = PBXBuildFile; fileRef = 85983CD407D2BCCD0022E958 /* dsnchooser.xib */; }; CDAE3C030987D71D003250F8 /* odbcadmin.xib in Resources */ = {isa = PBXBuildFile; fileRef = 85983CD607D2BCCD0022E958 /* odbcadmin.xib */; }; CDAE3C040987D71D003250F8 /* odbcdriver.xib in Resources */ = {isa = PBXBuildFile; fileRef = 85983CD807D2BCCD0022E958 /* odbcdriver.xib */; }; CDAE3C060987D71D003250F8 /* drvconn.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983C5907D2B7000022E958 /* drvconn.c */; }; CDAE3C070987D71D003250F8 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983C5A07D2B7000022E958 /* error.c */; }; CDAE3C080987D71D003250F8 /* Info.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983C5E07D2B7260022E958 /* Info.c */; }; CDAE3C090987D71D003250F8 /* iodbcadm.exp in Sources */ = {isa = PBXBuildFile; fileRef = 85983C5F07D2B7260022E958 /* iodbcadm.exp */; }; CDAE3C0A0987D71D003250F8 /* administrator.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983C8207D2B7780022E958 /* administrator.c */; }; CDAE3C0B0987D71D003250F8 /* confirm.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983C8307D2B7780022E958 /* confirm.c */; }; CDAE3C0C0987D71D003250F8 /* driverchooser.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983C8407D2B7780022E958 /* driverchooser.c */; }; CDAE3C0D0987D71D003250F8 /* driversetup.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983C8507D2B7780022E958 /* driversetup.c */; }; CDAE3C0E0987D71D003250F8 /* dsnchooser.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983C8607D2B7780022E958 /* dsnchooser.c */; }; CDAE3C0F0987D71D003250F8 /* errorbox.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983C8707D2B7780022E958 /* errorbox.c */; }; CDAE3C100987D71D003250F8 /* fdriverchoose.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983C8807D2B7780022E958 /* fdriverchoose.c */; }; CDAE3C110987D71D003250F8 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983C8B07D2B7780022E958 /* main.c */; }; CDAE3C120987D71D003250F8 /* messagebox.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983C8C07D2B7780022E958 /* messagebox.c */; }; CDAE3C130987D71D003250F8 /* translatorchooser.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983C8D07D2B7780022E958 /* translatorchooser.c */; }; CDAE3C140987D71D003250F8 /* dlproc.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983CB107D2B8F10022E958 /* dlproc.c */; }; CDAE3C150987D71D003250F8 /* dlf.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983CB307D2B90F0022E958 /* dlf.c */; }; CDAE3C160987D71D003250F8 /* unicode.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983CB707D2B94F0022E958 /* unicode.c */; }; CDAE3C170987D71D003250F8 /* getfpn.c in Sources */ = {isa = PBXBuildFile; fileRef = 85983CBF07D2B9DE0022E958 /* getfpn.c */; }; CDAE3C190987D71D003250F8 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */; }; CDAE3C1A0987D71D003250F8 /* iODBC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85983D8507D2C1870022E958 /* iODBC.framework */; }; CDAE3C1B0987D71D003250F8 /* iODBCinst.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85983D8707D2C1A50022E958 /* iODBCinst.framework */; }; CDAE3C1C0987D71D003250F8 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85983E0E07D2C2080022E958 /* CoreServices.framework */; }; CDAE3C1E0987D71D003250F8 /* iodbcadm.r in Rez */ = {isa = PBXBuildFile; fileRef = 85983C8A07D2B7780022E958 /* iodbcadm.r */; }; /* End PBXBuildFile section */ /* Begin PBXBuildStyle section */ 4F9091AC011F3BD104CA0E50 /* Development */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DEBUGGING_SYMBOLS = NO; DEPLOYMENT_POSTPROCESSING = YES; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../macosx/iodbcadm.exp; FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; LIBRARY_STYLE = BUNDLE; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = ( "-DODBCVER=0x351", "-D_MACX", "-DDLDAPI_MACX", ); SKIP_INSTALL = YES; STRIPFLAGS = "-u -r -s ../../macosx/iodbcadm.exp"; ZERO_LINK = NO; }; name = Development; }; 4F9091AD011F3BD104CA0E50 /* Deployment */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; ZERO_LINK = NO; }; name = Deployment; }; /* End PBXBuildStyle section */ /* Begin PBXFileReference section */ 089C167EFE841241C02AAC07 /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = InfoPlist.strings; sourceTree = ""; }; 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 856FBD9809EA17B600A6A93D /* filedsn.c */ = {isa = PBXFileReference; fileEncoding = "-2147483641"; lastKnownFileType = sourcecode.c.c; name = filedsn.c; path = ../../iodbcadm/macosx/filedsn.c; sourceTree = SOURCE_ROOT; }; 856FBD9909EA17B600A6A93D /* gensetup.c */ = {isa = PBXFileReference; fileEncoding = "-2147483641"; lastKnownFileType = sourcecode.c.c; name = gensetup.c; path = ../../iodbcadm/macosx/gensetup.c; sourceTree = SOURCE_ROOT; }; 85983C5907D2B7000022E958 /* drvconn.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = drvconn.c; path = ../../iodbcadm/drvconn.c; sourceTree = SOURCE_ROOT; }; 85983C5A07D2B7000022E958 /* error.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = error.c; path = ../../iodbcadm/error.c; sourceTree = SOURCE_ROOT; }; 85983C5D07D2B7260022E958 /* gui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = gui.h; path = ../../iodbcadm/gui.h; sourceTree = SOURCE_ROOT; }; 85983C5E07D2B7260022E958 /* Info.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Info.c; path = ../../iodbcadm/Info.c; sourceTree = SOURCE_ROOT; }; 85983C5F07D2B7260022E958 /* iodbcadm.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; name = iodbcadm.exp; path = ../../macosx/iodbcadm.exp; sourceTree = SOURCE_ROOT; }; 85983C6007D2B7260022E958 /* iodbcadm.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbcadm.h; path = ../../iodbcadm/iodbcadm.h; sourceTree = SOURCE_ROOT; }; 85983C8207D2B7780022E958 /* administrator.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = administrator.c; path = ../../iodbcadm/macosx/administrator.c; sourceTree = SOURCE_ROOT; }; 85983C8307D2B7780022E958 /* confirm.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = confirm.c; path = ../../iodbcadm/macosx/confirm.c; sourceTree = SOURCE_ROOT; }; 85983C8407D2B7780022E958 /* driverchooser.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = driverchooser.c; path = ../../iodbcadm/macosx/driverchooser.c; sourceTree = SOURCE_ROOT; }; 85983C8507D2B7780022E958 /* driversetup.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = driversetup.c; path = ../../iodbcadm/macosx/driversetup.c; sourceTree = SOURCE_ROOT; }; 85983C8607D2B7780022E958 /* dsnchooser.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dsnchooser.c; path = ../../iodbcadm/macosx/dsnchooser.c; sourceTree = SOURCE_ROOT; }; 85983C8707D2B7780022E958 /* errorbox.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = errorbox.c; path = ../../iodbcadm/macosx/errorbox.c; sourceTree = SOURCE_ROOT; }; 85983C8807D2B7780022E958 /* fdriverchoose.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = fdriverchoose.c; path = ../../iodbcadm/macosx/fdriverchoose.c; sourceTree = SOURCE_ROOT; }; 85983C8907D2B7780022E958 /* gui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = gui.h; path = ../../iodbcadm/macosx/gui.h; sourceTree = SOURCE_ROOT; }; 85983C8A07D2B7780022E958 /* iodbcadm.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; name = iodbcadm.r; path = ../../iodbcadm/macosx/iodbcadm.r; sourceTree = SOURCE_ROOT; }; 85983C8B07D2B7780022E958 /* main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = main.c; path = ../../iodbcadm/macosx/main.c; sourceTree = SOURCE_ROOT; }; 85983C8C07D2B7780022E958 /* messagebox.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = messagebox.c; path = ../../iodbcadm/macosx/messagebox.c; sourceTree = SOURCE_ROOT; }; 85983C8D07D2B7780022E958 /* translatorchooser.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = translatorchooser.c; path = ../../iodbcadm/macosx/translatorchooser.c; sourceTree = SOURCE_ROOT; }; 85983C9D07D2B8290022E958 /* iodbc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbc.h; path = ../../include/iodbc.h; sourceTree = SOURCE_ROOT; }; 85983C9E07D2B8290022E958 /* iodbcext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbcext.h; path = ../../include/iodbcext.h; sourceTree = SOURCE_ROOT; }; 85983CA107D2B85F0022E958 /* iodbcunix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbcunix.h; path = ../../include/iodbcunix.h; sourceTree = SOURCE_ROOT; }; 85983CA307D2B8930022E958 /* sql.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sql.h; path = ../../include/sql.h; sourceTree = SOURCE_ROOT; }; 85983CA507D2B8930022E958 /* sqltypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sqltypes.h; path = ../../include/sqltypes.h; sourceTree = SOURCE_ROOT; }; 85983CA607D2B8930022E958 /* sqlucode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sqlucode.h; path = ../../include/sqlucode.h; sourceTree = SOURCE_ROOT; }; 85983CAB07D2B8CD0022E958 /* dlf.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = dlf.h; path = ../../iodbcinst/dlf.h; sourceTree = SOURCE_ROOT; }; 85983CAD07D2B8CD0022E958 /* dlproc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = dlproc.h; path = ../../iodbc/dlproc.h; sourceTree = SOURCE_ROOT; }; 85983CB107D2B8F10022E958 /* dlproc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dlproc.c; path = ../../iodbc/dlproc.c; sourceTree = SOURCE_ROOT; }; 85983CB307D2B90F0022E958 /* dlf.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dlf.c; path = ../../iodbcinst/dlf.c; sourceTree = SOURCE_ROOT; }; 85983CB507D2B9330022E958 /* herr.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = herr.h; path = ../../iodbc/herr.h; sourceTree = SOURCE_ROOT; }; 85983CB707D2B94F0022E958 /* unicode.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = unicode.c; path = ../../iodbcinst/unicode.c; sourceTree = SOURCE_ROOT; }; 85983CB807D2B94F0022E958 /* unicode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = unicode.h; path = ../../iodbcinst/unicode.h; sourceTree = SOURCE_ROOT; }; 85983CBB07D2B98B0022E958 /* iodbcinst.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbcinst.h; path = ../../include/iodbcinst.h; sourceTree = SOURCE_ROOT; }; 85983CBD07D2B9B30022E958 /* odbcinst.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = odbcinst.h; path = ../../include/odbcinst.h; sourceTree = SOURCE_ROOT; }; 85983CBF07D2B9DE0022E958 /* getfpn.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = getfpn.c; path = ../../iodbcadm/macosx/getfpn.c; sourceTree = SOURCE_ROOT; }; 85983CC007D2B9DE0022E958 /* getfpn.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = getfpn.h; path = ../../iodbcadm/macosx/getfpn.h; sourceTree = SOURCE_ROOT; }; 85983CCB07D2BCCD0022E958 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/confirmation.xib; sourceTree = ""; }; 85983CCD07D2BCCD0022E958 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/connectionpool.xib; sourceTree = ""; }; 85983CCF07D2BCCD0022E958 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/driverremove.xib; sourceTree = ""; }; 85983CD107D2BCCD0022E958 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/driversetup.xib; sourceTree = ""; }; 85983CD307D2BCCD0022E958 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/drvchoose.tiff; sourceTree = ""; }; 85983CD507D2BCCD0022E958 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/dsnchooser.xib; sourceTree = ""; }; 85983CD707D2BCCD0022E958 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/odbcadmin.xib; sourceTree = ""; }; 85983CD907D2BCCD0022E958 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/odbcdriver.xib; sourceTree = ""; }; 85983D8507D2C1870022E958 /* iODBC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBC.framework; path = "../../mac/iODBC/build/Deployment ../../mac/iODBC/build/iODBC.framework"; sourceTree = SOURCE_ROOT; }; 85983D8707D2C1A50022E958 /* iODBCinst.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBCinst.framework; path = ../../mac/iODBCinst/build/iODBCinst.framework; sourceTree = SOURCE_ROOT; }; 85983E0E07D2C2080022E958 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; 85E671EA09F06C7200E3A1BA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/gensetup.xib; sourceTree = ""; }; 85F07C540A0A1CD80007FC8F /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/keyval.xib; sourceTree = ""; }; 85F07C570A0A24CF0007FC8F /* keyval.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = keyval.c; path = ../../iodbcadm/macosx/keyval.c; sourceTree = SOURCE_ROOT; }; 85F07CA10A0AD1D90007FC8F /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/odbcdriverf.xib; sourceTree = ""; }; 85F07CAA0A0AFCF40007FC8F /* odbcdriverf.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = odbcdriverf.c; path = ../../iodbcadm/macosx/odbcdriverf.c; sourceTree = SOURCE_ROOT; }; CDAE3C230987D71D003250F8 /* Info-iODBCadm.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "Info-iODBCadm.plist"; sourceTree = ""; }; CDAE3C240987D71D003250F8 /* iODBCadm.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iODBCadm.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ CDAE3C180987D71D003250F8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CDAE3C190987D71D003250F8 /* Carbon.framework in Frameworks */, CDAE3C1A0987D71D003250F8 /* iODBC.framework in Frameworks */, CDAE3C1B0987D71D003250F8 /* iODBCinst.framework in Frameworks */, CDAE3C1C0987D71D003250F8 /* CoreServices.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 089C166AFE841209C02AAC07 /* iODBCadm */ = { isa = PBXGroup; children = ( 08FB77ADFE841716C02AAC07 /* Source */, 089C167CFE841241C02AAC07 /* Resources */, 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */, 19C28FB4FE9D528D11CA2CBB /* Products */, CDAE3C230987D71D003250F8 /* Info-iODBCadm.plist */, ); name = iODBCadm; sourceTree = ""; }; 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( 85983E0E07D2C2080022E958 /* CoreServices.framework */, 85983D8707D2C1A50022E958 /* iODBCinst.framework */, 85983D8507D2C1870022E958 /* iODBC.framework */, 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */, ); name = "External Frameworks and Libraries"; sourceTree = ""; }; 089C167CFE841241C02AAC07 /* Resources */ = { isa = PBXGroup; children = ( 85F07CA00A0AD1D90007FC8F /* odbcdriverf.xib */, 85F07C530A0A1CD80007FC8F /* keyval.xib */, 85E671E909F06C7200E3A1BA /* gensetup.xib */, 85983CCA07D2BCCD0022E958 /* confirmation.xib */, 85983CCC07D2BCCD0022E958 /* connectionpool.xib */, 85983CCE07D2BCCD0022E958 /* driverremove.xib */, 85983CD007D2BCCD0022E958 /* driversetup.xib */, 85983CD207D2BCCD0022E958 /* drvchoose.tiff */, 85983CD407D2BCCD0022E958 /* dsnchooser.xib */, 85983CD607D2BCCD0022E958 /* odbcadmin.xib */, 85983CD807D2BCCD0022E958 /* odbcdriver.xib */, 089C167EFE841241C02AAC07 /* InfoPlist.strings */, ); name = Resources; sourceTree = ""; }; 08FB77ADFE841716C02AAC07 /* Source */ = { isa = PBXGroup; children = ( 85983C9C07D2B7A20022E958 /* Mac basic functions */, 85983C9B07D2B7960022E958 /* iODBCinst */, 85983C9A07D2B78C0022E958 /* iODBC */, 85983C5807D2B6C60022E958 /* iodbcadm */, ); name = Source; sourceTree = ""; }; 19C28FB4FE9D528D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( CDAE3C240987D71D003250F8 /* iODBCadm.bundle */, ); name = Products; sourceTree = ""; }; 85983C5807D2B6C60022E958 /* iodbcadm */ = { isa = PBXGroup; children = ( 85983C8107D2B7400022E958 /* macosx */, 85983C5D07D2B7260022E958 /* gui.h */, 85983C5E07D2B7260022E958 /* Info.c */, 85983C5F07D2B7260022E958 /* iodbcadm.exp */, 85983C6007D2B7260022E958 /* iodbcadm.h */, 85983C5907D2B7000022E958 /* drvconn.c */, 85983C5A07D2B7000022E958 /* error.c */, ); name = iodbcadm; sourceTree = ""; }; 85983C8107D2B7400022E958 /* macosx */ = { isa = PBXGroup; children = ( 85F07CAA0A0AFCF40007FC8F /* odbcdriverf.c */, 85F07C570A0A24CF0007FC8F /* keyval.c */, 856FBD9809EA17B600A6A93D /* filedsn.c */, 856FBD9909EA17B600A6A93D /* gensetup.c */, 85983C8207D2B7780022E958 /* administrator.c */, 85983C8307D2B7780022E958 /* confirm.c */, 85983C8407D2B7780022E958 /* driverchooser.c */, 85983C8507D2B7780022E958 /* driversetup.c */, 85983C8607D2B7780022E958 /* dsnchooser.c */, 85983C8707D2B7780022E958 /* errorbox.c */, 85983C8807D2B7780022E958 /* fdriverchoose.c */, 85983C8907D2B7780022E958 /* gui.h */, 85983C8A07D2B7780022E958 /* iodbcadm.r */, 85983C8B07D2B7780022E958 /* main.c */, 85983C8C07D2B7780022E958 /* messagebox.c */, 85983C8D07D2B7780022E958 /* translatorchooser.c */, ); name = macosx; sourceTree = ""; }; 85983C9A07D2B78C0022E958 /* iODBC */ = { isa = PBXGroup; children = ( 85983CB707D2B94F0022E958 /* unicode.c */, 85983CB807D2B94F0022E958 /* unicode.h */, 85983CB507D2B9330022E958 /* herr.h */, 85983CB307D2B90F0022E958 /* dlf.c */, 85983CB107D2B8F10022E958 /* dlproc.c */, 85983CAB07D2B8CD0022E958 /* dlf.h */, 85983CAD07D2B8CD0022E958 /* dlproc.h */, 85983CA307D2B8930022E958 /* sql.h */, 85983CA507D2B8930022E958 /* sqltypes.h */, 85983CA607D2B8930022E958 /* sqlucode.h */, 85983CA107D2B85F0022E958 /* iodbcunix.h */, 85983C9D07D2B8290022E958 /* iodbc.h */, 85983C9E07D2B8290022E958 /* iodbcext.h */, ); name = iODBC; sourceTree = ""; }; 85983C9B07D2B7960022E958 /* iODBCinst */ = { isa = PBXGroup; children = ( 85983CBD07D2B9B30022E958 /* odbcinst.h */, 85983CBB07D2B98B0022E958 /* iodbcinst.h */, ); name = iODBCinst; sourceTree = ""; }; 85983C9C07D2B7A20022E958 /* Mac basic functions */ = { isa = PBXGroup; children = ( 85983CBF07D2B9DE0022E958 /* getfpn.c */, 85983CC007D2B9DE0022E958 /* getfpn.h */, ); name = "Mac basic functions"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ CDAE3BEA0987D71D003250F8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( CDAE3BEB0987D71D003250F8 /* gui.h in Headers */, CDAE3BEC0987D71D003250F8 /* iodbcadm.h in Headers */, CDAE3BED0987D71D003250F8 /* gui.h in Headers */, CDAE3BEE0987D71D003250F8 /* iodbc.h in Headers */, CDAE3BEF0987D71D003250F8 /* iodbcext.h in Headers */, CDAE3BF00987D71D003250F8 /* iodbcunix.h in Headers */, CDAE3BF10987D71D003250F8 /* sql.h in Headers */, CDAE3BF20987D71D003250F8 /* sqltypes.h in Headers */, CDAE3BF30987D71D003250F8 /* sqlucode.h in Headers */, CDAE3BF40987D71D003250F8 /* dlf.h in Headers */, CDAE3BF50987D71D003250F8 /* dlproc.h in Headers */, CDAE3BF60987D71D003250F8 /* herr.h in Headers */, CDAE3BF70987D71D003250F8 /* unicode.h in Headers */, CDAE3BF80987D71D003250F8 /* iodbcinst.h in Headers */, CDAE3BF90987D71D003250F8 /* odbcinst.h in Headers */, CDAE3BFA0987D71D003250F8 /* getfpn.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ CDAE3BE90987D71D003250F8 /* iODBCadm */ = { isa = PBXNativeTarget; buildConfigurationList = CDAE3C1F0987D71D003250F8 /* Build configuration list for PBXNativeTarget "iODBCadm" */; buildPhases = ( CDAE3BEA0987D71D003250F8 /* Headers */, CDAE3BFB0987D71D003250F8 /* Resources */, CDAE3C050987D71D003250F8 /* Sources */, CDAE3C180987D71D003250F8 /* Frameworks */, CDAE3C1D0987D71D003250F8 /* Rez */, ); buildRules = ( ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ); GCC_ENABLE_TRIGRAPHS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; HEADER_SEARCH_PATHS = ../../include; INSTALL_PATH = /; LIBRARY_SEARCH_PATHS = ""; LIBRARY_STYLE = Bundle; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = ( "-DODBCVER=0x351", "-D_MACX", "-DDLDAPI_MACX", ); OTHER_LDFLAGS = ( "-multiply_defined", suppress, ); OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iODBCadm; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = bundle; }; dependencies = ( ); name = iODBCadm; productInstallPath = .; productName = iODBCadm; productReference = CDAE3C240987D71D003250F8 /* iODBCadm.bundle */; productType = "com.apple.product-type.bundle"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 089C1669FE841209C02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = CDAE3C250987D71E003250F8 /* Build configuration list for PBXProject "iODBCadm" */; buildSettings = { }; buildStyles = ( 4F9091AC011F3BD104CA0E50 /* Development */, 4F9091AD011F3BD104CA0E50 /* Deployment */, ); hasScannedForEncodings = 1; mainGroup = 089C166AFE841209C02AAC07 /* iODBCadm */; projectDirPath = ""; targets = ( CDAE3BE90987D71D003250F8 /* iODBCadm */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ CDAE3BFB0987D71D003250F8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( CDAE3BFC0987D71D003250F8 /* InfoPlist.strings in Resources */, CDAE3BFD0987D71D003250F8 /* confirmation.xib in Resources */, CDAE3BFE0987D71D003250F8 /* connectionpool.xib in Resources */, CDAE3BFF0987D71D003250F8 /* driverremove.xib in Resources */, CDAE3C000987D71D003250F8 /* driversetup.xib in Resources */, CDAE3C010987D71D003250F8 /* drvchoose.tiff in Resources */, CDAE3C020987D71D003250F8 /* dsnchooser.xib in Resources */, CDAE3C030987D71D003250F8 /* odbcadmin.xib in Resources */, CDAE3C040987D71D003250F8 /* odbcdriver.xib in Resources */, 85E671EB09F06C7200E3A1BA /* gensetup.xib in Resources */, 85F07C550A0A1CD80007FC8F /* keyval.xib in Resources */, 85F07CA20A0AD1D90007FC8F /* odbcdriverf.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXRezBuildPhase section */ CDAE3C1D0987D71D003250F8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( CDAE3C1E0987D71D003250F8 /* iodbcadm.r in Rez */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ CDAE3C050987D71D003250F8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CDAE3C060987D71D003250F8 /* drvconn.c in Sources */, CDAE3C070987D71D003250F8 /* error.c in Sources */, CDAE3C080987D71D003250F8 /* Info.c in Sources */, CDAE3C090987D71D003250F8 /* iodbcadm.exp in Sources */, CDAE3C0A0987D71D003250F8 /* administrator.c in Sources */, CDAE3C0B0987D71D003250F8 /* confirm.c in Sources */, CDAE3C0C0987D71D003250F8 /* driverchooser.c in Sources */, CDAE3C0D0987D71D003250F8 /* driversetup.c in Sources */, CDAE3C0E0987D71D003250F8 /* dsnchooser.c in Sources */, CDAE3C0F0987D71D003250F8 /* errorbox.c in Sources */, CDAE3C100987D71D003250F8 /* fdriverchoose.c in Sources */, CDAE3C110987D71D003250F8 /* main.c in Sources */, CDAE3C120987D71D003250F8 /* messagebox.c in Sources */, CDAE3C130987D71D003250F8 /* translatorchooser.c in Sources */, CDAE3C140987D71D003250F8 /* dlproc.c in Sources */, CDAE3C150987D71D003250F8 /* dlf.c in Sources */, CDAE3C160987D71D003250F8 /* unicode.c in Sources */, CDAE3C170987D71D003250F8 /* getfpn.c in Sources */, 856FBD9A09EA17B600A6A93D /* filedsn.c in Sources */, 856FBD9B09EA17B600A6A93D /* gensetup.c in Sources */, 85F07C580A0A24CF0007FC8F /* keyval.c in Sources */, 85F07CAB0A0AFCF40007FC8F /* odbcdriverf.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 85983CCA07D2BCCD0022E958 /* confirmation.xib */ = { isa = PBXVariantGroup; children = ( 85983CCB07D2BCCD0022E958 /* English */, ); name = confirmation.xib; sourceTree = ""; }; 85983CCC07D2BCCD0022E958 /* connectionpool.xib */ = { isa = PBXVariantGroup; children = ( 85983CCD07D2BCCD0022E958 /* English */, ); name = connectionpool.xib; sourceTree = ""; }; 85983CCE07D2BCCD0022E958 /* driverremove.xib */ = { isa = PBXVariantGroup; children = ( 85983CCF07D2BCCD0022E958 /* English */, ); name = driverremove.xib; sourceTree = ""; }; 85983CD007D2BCCD0022E958 /* driversetup.xib */ = { isa = PBXVariantGroup; children = ( 85983CD107D2BCCD0022E958 /* English */, ); name = driversetup.xib; sourceTree = ""; }; 85983CD207D2BCCD0022E958 /* drvchoose.tiff */ = { isa = PBXVariantGroup; children = ( 85983CD307D2BCCD0022E958 /* English */, ); name = drvchoose.tiff; sourceTree = ""; }; 85983CD407D2BCCD0022E958 /* dsnchooser.xib */ = { isa = PBXVariantGroup; children = ( 85983CD507D2BCCD0022E958 /* English */, ); name = dsnchooser.xib; sourceTree = ""; }; 85983CD607D2BCCD0022E958 /* odbcadmin.xib */ = { isa = PBXVariantGroup; children = ( 85983CD707D2BCCD0022E958 /* English */, ); name = odbcadmin.xib; sourceTree = ""; }; 85983CD807D2BCCD0022E958 /* odbcdriver.xib */ = { isa = PBXVariantGroup; children = ( 85983CD907D2BCCD0022E958 /* English */, ); name = odbcdriver.xib; sourceTree = ""; }; 85E671E909F06C7200E3A1BA /* gensetup.xib */ = { isa = PBXVariantGroup; children = ( 85E671EA09F06C7200E3A1BA /* English */, ); name = gensetup.xib; sourceTree = ""; }; 85F07C530A0A1CD80007FC8F /* keyval.xib */ = { isa = PBXVariantGroup; children = ( 85F07C540A0A1CD80007FC8F /* English */, ); name = keyval.xib; sourceTree = ""; }; 85F07CA00A0AD1D90007FC8F /* odbcdriverf.xib */ = { isa = PBXVariantGroup; children = ( 85F07CA10A0AD1D90007FC8F /* English */, ); name = odbcdriverf.xib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ CDAE3C200987D71D003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DEPLOYMENT_POSTPROCESSING = YES; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../macosx/iodbcadm.exp; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ); FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_ENABLE_TRIGRAPHS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "ODBCVER=0x351", _MACX, DLDAPI_MACX, ); HEADER_SEARCH_PATHS = ../../include; INFOPLIST_FILE = "Info-iODBCadm.plist"; INSTALL_PATH = /; LIBRARY_SEARCH_PATHS = ""; LIBRARY_STYLE = BUNDLE; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ( "-multiply_defined", suppress, ); OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iODBCadm; SECTORDER_FLAGS = ""; SKIP_INSTALL = YES; STRIPFLAGS = "-u -r -s ../../macosx/iodbcadm.exp"; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = bundle; ZERO_LINK = NO; }; name = Development; }; CDAE3C210987D71D003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ); GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_ENABLE_TRIGRAPHS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "ODBCVER=0x351", _MACX, DLDAPI_MACX, ); HEADER_SEARCH_PATHS = ../../include; INFOPLIST_FILE = "Info-iODBCadm.plist"; INSTALL_PATH = /; LIBRARY_SEARCH_PATHS = ""; LIBRARY_STYLE = Bundle; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ( "-multiply_defined", suppress, ); OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iODBCadm; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = bundle; ZERO_LINK = NO; }; name = Deployment; }; CDAE3C260987D71E003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); COPY_PHASE_STRIP = NO; GCC_OPTIMIZATION_LEVEL = 0; MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; STRIP_INSTALLED_PRODUCT = NO; }; name = Development; }; CDAE3C270987D71E003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; }; name = Deployment; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ CDAE3C1F0987D71D003250F8 /* Build configuration list for PBXNativeTarget "iODBCadm" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3C200987D71D003250F8 /* Development */, CDAE3C210987D71D003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; CDAE3C250987D71E003250F8 /* Build configuration list for PBXProject "iODBCadm" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3C260987D71E003250F8 /* Development */, CDAE3C270987D71E003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; /* End XCConfigurationList section */ }; rootObject = 089C1669FE841209C02AAC07 /* Project object */; } libiodbc-3.52.9/mac/iODBCadm/Info-iODBCadm.plist0000644000076400007640000000250012323204667015726 00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable iODBCadm CFBundleGetInfoString iODBC Adminstrator Library CFBundleIconFile CFBundleIdentifier org.iodbc.adm CFBundleInfoDictionaryVersion 6.0 CFBundleName iODBC Administrator CFBundlePackageType BNDL CFBundleShortVersionString 3.52.8 CFBundleSignature odbc CFBundleVersion 3.52.8 CFPlugInDynamicRegisterFunction CFPlugInDynamicRegistration NO CFPlugInFactories 00000000-0000-0000-0000-000000000000 MyFactoryFunction CFPlugInTypes 00000000-0000-0000-0000-000000000000 00000000-0000-0000-0000-000000000000 CFPlugInUnloadFunction libiodbc-3.52.9/mac/iODBCadm/InfoPlist.strings0000644000076400007640000000044012323204667015741 00000000000000/* Localized versions of Info.plist keys */ CFBundleName = "iODBCadm"; CFBundleShortVersionString = "iODBCadm version 3.52.8"; CFBundleGetInfoString = "iODBCadm version 3.52.8, Copyright 1995-2012, OpenLink Software"; NSHumanReadableCopyright = "Copyright 1995-2012, OpenLink Software"; libiodbc-3.52.9/mac/iODBCadm/English.lproj/0000755000076400007640000000000012323210720015202 500000000000000libiodbc-3.52.9/mac/iODBCadm/English.lproj/connectionpool.xib0000644000076400007640000011430612323204667020701 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES Connection pooling attributes 256 YES 256 {{245, 201}, {84, 32}} YES Cancel 256 {{329, 201}, {84, 32}} Finish 256 {{19, 2}, {383, 13}} Small Static Text 256 YES 256 YES 256 {{9, 123}, {375, 40}} Enable connection pooling for this driver by specifying a timeout in seconds 256 {{70, 98}, {311, 29}} 256 {{1, 107}, {65, 16}} Timeout: 256 {{1, 21}, {65, 16}} Query: 256 {{70, 12}, {311, 29}} 256 {{7, 45}, {383, 37}} Set an optional probe query, used for additional verification of the connection state 256 {{12, 90}, {375, 1}} {393, 175} {{14, 20}, {393, 175}} {427, 245} {{163, 123}, {427, 245}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Dialog 167 YES 182 IBCarbonButton 183 IBCarbonButton1 198 200 YES 180 IBCarbonStaticText 181 IBCarbonEditText 185 186 187 IBCarbonEditText1 188 IBCarbonStaticText1 189 YES YES YES YES YES YES YES YES YES 201 0 3 libiodbc-3.52.9/mac/iODBCadm/English.lproj/confirmation.xib0000644000076400007640000004413312323204667020340 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES Confirmation ... 256 YES 256 {{276, 63}, {84, 32}} YES Yes 256 {{192, 63}, {84, 32}} No 256 {{56, 9}, {310, 46}} 256 {{12, 9}, {32, 32}} {378, 103} {{173, 92}, {378, 103}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Dialog 167 YES 180 IBCarbonButton 181 IBCarbonButton1 182 IBCarbonStaticText 183 IBCarbonIcon YES YES YES YES YES YES YES YES YES 184 0 3 libiodbc-3.52.9/mac/iODBCadm/English.lproj/odbcadmin.xib0000644000076400007640000102142512323204667017570 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES iODBC Data Source Administrator 256 YES 256 YES 256 YES 256 {{5, 0}, {119, 16}} YES User Data Sources 256 {{9, 19}, {466, 213}} YES Name Description Driver 256 {{480, 17}, {102, 32}} Add 256 {{480, 49}, {102, 32}} Remove 256 {{480, 81}, {102, 32}} Configure 256 {{480, 137}, {102, 32}} Test 256 {{6, 242}, {577, 1}} 256 {{84, 252}, {466, 52}} An ODBC User data source stores information about how to connect to the indicated data provider. A User data source is visible only to you. 256 {{24, 252}, {32, 32}} {{8, 29}, {593, 319}} {{5, 10}, {610, 356}} YES 0 YES User DSN 0 YES 256 YES 256 {{84, 252}, {466, 52}} An ODBC System data source stores information about how to connect to the indicated data provider. A System data source is visible to all users and processes on this machine. 256 {{480, 81}, {102, 32}} Configure 256 {{5, 0}, {143, 16}} System Data Sources 256 {{9, 19}, {466, 213}} YES Name Description Driver 256 {{480, 137}, {102, 32}} Test 256 {{480, 49}, {102, 32}} Remove 256 {{480, 17}, {102, 32}} Add 256 {{24, 252}, {32, 32}} 256 {{6, 242}, {577, 1}} {{8, 29}, {593, 319}} System DSN 0 YES 256 YES 256 {{84, 252}, {466, 52}} An ODBC File data source stores information about how to connect to the indicated data provider. You can use any data source that refers to an ODBC driver which is installed on your machine. 256 {{480, 107}, {102, 32}} Configure 256 {{6, 26}, {143, 16}} File Data Sources 256 {{9, 45}, {466, 187}} YES Name 256 {{480, 154}, {102, 32}} Test 256 {{480, 75}, {102, 32}} Remove 256 {{480, 43}, {102, 32}} Add 256 {{24, 252}, {32, 32}} 256 {{6, 242}, {577, 1}} 256 {{35, 2}, {59, 16}} Look in : 256 {{90, -2}, {380, 26}} Popup YES Item 1 1048576 2147483647 1 NSMenuCheckmark 1623195648 NSMenuMixedState 1623195648 Item 1 Item 2 1048576 2147483647 Item 2 Item 3 1048576 2147483647 Item 3 Popup 256 {{480, 205}, {102, 32}} Set Dir {{8, 29}, {593, 319}} File DSN 0 YES 256 YES 256 {{5, 0}, {329, 16}} ODBC Drivers that are installed on your system 256 {{84, 252}, {466, 52}} An ODBC driver allows ODBC-enabled programs to get information from ODBC data sources. To install new drivers, use the drivers setup program if available, or add it with the Add button. 256 {{24, 252}, {32, 32}} 256 {{6, 242}, {577, 1}} 256 {{9, 19}, {574, 186}} YES Name Version File Date Size 256 {{42, 208}, {162, 32}} Add a driver 256 {{204, 208}, {162, 32}} Remove the driver 256 {{366, 208}, {162, 32}} Configure the driver {{8, 29}, {593, 319}} ODBC Drivers 0 YES 256 YES 256 {{84, 252}, {466, 52}} Connection pooling allows your application to reuse open connection handles, which saves round-trips to the server. 256 {{6, 242}, {577, 1}} 256 {{24, 252}, {32, 32}} 256 YES 256 YES 256 {{4, 8}, {382, 200}} YES ODBC Driver Pool timeout (seconds) Probe query {{0, 14}, {391, 214}} {{6, 4}, {391, 228}} Connection Pooling Timeout 256 YES 256 YES 256 {{14, 14}, {84, 38}} YES Enable Disable {{0, 14}, {175, 64}} {{409, 4}, {175, 78}} PerfMon 256 YES 256 YES 256 {{27, 14}, {121, 29}} {{0, 14}, {175, 64}} {{409, 94}, {175, 78}} Retry Wait time {{8, 29}, {593, 319}} Connection Pooling 0 YES 256 YES 256 {{84, 252}, {466, 52}} ODBC tracing allows you to create logs of the calls to ODBC drivers for use by support personnel or to aid you in debugging your applications. Note : Log files can become quite large and will impair performance. 256 {{24, 252}, {32, 32}} 256 {{6, 242}, {577, 1}} 256 YES 256 YES 256 {{6, 48}, {299, 31}} 256 {{113, 8}, {84, 32}} Browse {{0, 14}, {312, 88}} {{272, 4}, {312, 102}} Log file path 256 YES 256 YES 256 {{6, 52}, {299, 31}} 256 {{111, 8}, {84, 32}} Browse {{0, 14}, {312, 88}} {{272, 112}, {312, 102}} Custom trace library 256 YES 256 YES 256 YES 256 YES 256 {{11, 7}, {114, 62}} YES RG9uJ3QgdHJhY2U All the time One-time only {{0, 14}, {151, 72}} {{11, 108}, {151, 86}} When to trace 256 YES 256 YES 256 {{11, 16}, {134, 40}} YES Current user only All users {{0, 14}, {151, 66}} {{11, 19}, {151, 80}} Trace wide 256 {{167, 152}, {81, 32}} Apply {258, 196} {{6, 18}, {258, 196}} {{8, 29}, {593, 319}} Tracing 0 YES 256 YES 256 {{84, 252}, {466, 52}} aU9EQkMgaXMgYW4gTEdQTCBEcml2ZXIgTWFuYWdlciBtYWludGFpbmVkIGJ5IE9wZW5MaW5rIFNvZnR3 YXJlLiAKQWRkaXRpb25hbCBPREJDIERyaXZlcnMgYXJlIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9w ZW5saW5rc3cuY29tCkFkZGl0aW9uYWwgaU9EQkMgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0 dHA6Ly93d3cuaW9kYmMub3JnA 256 {{24, 252}, {32, 32}} 256 {{6, 242}, {577, 1}} 256 {{5, 0}, {329, 16}} ODBC components installed on your system 256 {{6, 19}, {574, 213}} YES Name Version File Date Size {{8, 29}, {593, 319}} About 256 {{429, 371}, {84, 32}} Cancel 256 {{513, 371}, {84, 32}} OK {621, 410} {{15, 44}, {621, 410}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Window 167 YES 180 YES NSCustomView2 191 192 409 YES 181 YES IBCarbonUserPane 209 207 204 200 IBCarbonButton3 199 198 IBCarbonButton1 197 190 YES 189 IBCarbonStaticText 391 390 389 410 YES 182 YES IBCarbonUserPane1 245 244 243 242 241 240 YES 239 238 237 394 393 392 411 YES 183 YES IBCarbonUserPane2 367 362 YES 358 351 350 349 348 347 346 YES 345 344 343 395 363 YES 366 365 364 412 YES 184 YES IBCarbonUserPane3 342 IBCarbonButton2 341 340 IBCarbonButton 339 YES 338 337 IBCarbonIcon 336 335 400 399 398 397 396 413 YES 185 YES IBCarbonUserPane4 333 YES 331 YES IBCarbonGroupBox1 329 YES IBCarbonGroupBox 328 327 326 330 YES NSCustomView 408 407 406 332 334 414 YES 186 YES IBCarbonUserPane5 320 YES 317 YES IBCarbonGroupBox2 314 YES 313 IBCarbonSeparator 312 311 IBCarbonStaticText1 316 315 IBCarbonEditText 319 318 IBCarbonEditText1 324 YES 323 321 YES 322 IBCarbonRadioGroup 325 415 YES 305 YES 310 YES 309 308 307 306 405 404 403 402 401 YES YES YES YES YES YES YES YES YES 415 0 3 libiodbc-3.52.9/mac/iODBCadm/English.lproj/keyval.xib0000644000076400007640000012162412323204667017144 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES Generic ODBC Driver Setup 256 YES 256 {{12, 57}, {400, 196}} YES YES Keyword Value 256 {{12, 268}, {70, 16}} Keyword 256 {{12, 301}, {70, 16}} Value 256 {{90, 261}, {199, 29}} 256 {{90, 294}, {199, 29}} 256 {{303, 261}, {84, 32}} Add 256 {{303, 293}, {84, 32}} Update 256 {{12, 352}, {391, 1}} 256 {{313, 362}, {84, 32}} Ok 256 {{229, 362}, {84, 32}} Cancel 256 {{12, 327}, {257, 18}} Verify this connection(recommended) 256 {{17, 5}, {393, 44}} If you know the driver-specific keywords for this data source, you can type them and their values here. For more information on driver-specific keywords, please consult your ODBC driver documentation. {422, 406} {{57, 158}, {422, 406}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Dialog 167 YES 185 YES NSCustomView 186 IBCarbonStaticText1 187 IBCarbonStaticText11 188 IBCarbonEditText2 190 IBCarbonEditText21 191 IBCarbonButton 192 IBCarbonButton1 193 IBCarbonSeparator 194 IBCarbonButton2 195 IBCarbonButton3 196 197 201 202 YES YES YES YES YES YES YES YES YES 202 0 3 libiodbc-3.52.9/mac/iODBCadm/English.lproj/dsnchooser.xib0000644000076400007640000036600412323204667020023 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES iODBC Data Source Chooser 256 YES 256 YES 256 YES 256 {{5, 3}, {119, 16}} YES User Data Sources 256 {{6, 22}, {466, 213}} YES Name Description Driver 256 {{480, 20}, {102, 32}} Add 256 {{480, 52}, {102, 32}} Remove 256 {{480, 84}, {102, 32}} Configure 256 {{480, 140}, {102, 32}} Test 256 {{6, 245}, {577, 1}} 256 {{84, 255}, {466, 52}} An ODBC User data source stores information about how to connect to the indicated data provider. A User data source is visible only to you. 256 {{24, 255}, {32, 32}} {{8, 29}, {593, 319}} {{5, 10}, {610, 356}} YES 0 YES User DSN 0 YES 256 YES 256 {{84, 255}, {466, 52}} An ODBC System data source stores information about how to connect to the indicated data provider. A System data source is visible to all users and processes on this machine. 256 {{480, 84}, {102, 32}} Configure 256 {{5, 3}, {143, 16}} System Data Sources 256 {{6, 22}, {466, 213}} YES Name Description Driver 256 {{480, 140}, {102, 32}} Test 256 {{480, 52}, {102, 32}} Remove 256 {{480, 20}, {102, 32}} Add 256 {{24, 255}, {32, 32}} 256 {{6, 245}, {577, 1}} {{8, 29}, {593, 319}} System DSN 0 YES 256 YES 256 {{84, 255}, {466, 52}} An ODBC File data source stores information about how to connect to the indicated data provider. You can use any file data source that refers to an ODBC driver which is installed on your machine. 256 {{480, 108}, {102, 32}} Configure 256 {{6, 29}, {143, 16}} File Data Sources 256 {{6, 48}, {466, 187}} YES Name 256 {{480, 159}, {102, 32}} Test 256 {{480, 76}, {102, 32}} Remove 256 {{480, 44}, {102, 32}} Add 256 {{24, 255}, {32, 32}} 256 {{6, 245}, {577, 1}} 256 {{35, 5}, {59, 16}} Look in : 256 {{90, 1}, {380, 26}} Popup YES Item 1 1048576 2147483647 1 NSMenuCheckmark 1623195648 NSMenuMixedState 1623195648 Item 1 Item 2 1048576 2147483647 Item 2 Item 3 1048576 2147483647 Item 3 Popup 256 {{480, 209}, {102, 32}} Set Dir {{8, 29}, {593, 319}} File DSN 256 {{429, 371}, {84, 32}} Cancel 256 {{513, 371}, {84, 32}} OK {621, 410} {{15, 44}, {621, 410}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Window 167 YES 180 YES NSCustomView2 191 192 321 YES 181 YES IBCarbonUserPane 209 207 204 200 IBCarbonButton3 199 198 IBCarbonButton1 197 190 YES 189 IBCarbonStaticText 316 315 314 322 YES 182 YES IBCarbonUserPane1 245 244 243 242 241 240 YES 239 238 237 319 318 317 323 YES 288 YES 305 300 YES 299 298 297 296 295 294 293 YES 292 291 290 320 301 YES 304 303 302 YES YES YES YES YES YES YES YES YES 323 0 3 libiodbc-3.52.9/mac/iODBCadm/English.lproj/odbcdriver.xib0000644000076400007640000006667212323204667020007 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES Choose an ODBC Driver 256 YES 256 {{15, 14}, {125, 268}} YES 256 {{155, 18}, {376, 16}} Select a driver for which you want to setup a data source. 256 {{155, 42}, {380, 236}} YES Name Version File Date Size 256 {{12, 294}, {529, 1}} 256 {{369, 310}, {84, 32}} Cancel 256 {{453, 310}, {84, 32}} Finish {555, 355} {{130, 44}, {555, 355}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Dialog 167 YES 180 IBCarbonPicture 181 IBCarbonStaticText 182 YES NSCustomView 183 IBCarbonSeparator 184 IBCarbonButton 185 IBCarbonButton1 192 193 194 195 196 YES YES YES YES YES YES YES YES YES 196 0 3 libiodbc-3.52.9/mac/iODBCadm/English.lproj/driverremove.xib0000644000076400007640000006416412323204667020367 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES Remove driver ... 256 YES 256 {{20, 20}, {355, 16}} YES From which set do you want to remove it ? 256 {{43, 46}, {77, 18}} User 256 {{125, 46}, {265, 18}} System (you have to be an administrator) 256 {{20, 82}, {355, 16}} Do you want to remove all DSN associated to it ? 256 {{43, 109}, {164, 20}} YES No Yes 256 {{298, 137}, {82, 32}} Ok 256 {{216, 137}, {82, 32}} Cancel {408, 181} {{174, 44}, {408, 181}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Dialog 167 YES 180 IBCarbonStaticText 181 IBCarbonCheckBox 182 IBCarbonCheckBox1 183 IBCarbonStaticText1 184 IBCarbonRadioGroup 185 IBCarbonButton 186 IBCarbonButton1 YES YES YES YES YES YES YES YES YES 187 0 3 libiodbc-3.52.9/mac/iODBCadm/English.lproj/gensetup.xib0000644000076400007640000013425012323204667017502 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES File DSN Generic Setup 256 YES 256 {{17, 14}, {148, 16}} YES File Data Source Name 256 {{169, 7}, {245, 29}} 256 {{12, 100}, {400, 196}} YES Keyword Value 256 {{12, 311}, {70, 16}} Keyword 256 {{12, 344}, {70, 16}} Value 256 {{90, 304}, {199, 29}} 256 {{90, 337}, {199, 29}} 256 {{303, 304}, {84, 32}} Add 256 {{303, 336}, {84, 32}} Update 256 {{12, 395}, {391, 1}} 256 {{313, 405}, {84, 32}} Ok 256 {{229, 405}, {84, 32}} Cancel 256 {{12, 370}, {257, 18}} Verify this connection(recommended) 256 {{17, 48}, {393, 44}} If you know the driver-specific keywords for this data source, you can type them and their values here. For more information on driver-specific keywords, please consult your ODBC driver documentation. {421, 440} {{86, 142}, {421, 440}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Dialog 167 YES 180 IBCarbonStaticText 183 IBCarbonEditText 185 YES NSCustomView 186 IBCarbonStaticText1 187 IBCarbonStaticText11 188 IBCarbonEditText2 190 IBCarbonEditText21 191 IBCarbonButton 192 IBCarbonButton1 193 IBCarbonSeparator 194 IBCarbonButton2 195 IBCarbonButton3 196 197 201 202 YES YES YES YES YES YES YES YES YES 202 0 3 libiodbc-3.52.9/mac/iODBCadm/English.lproj/driversetup.xib0000644000076400007640000017441712323204667020235 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES ODBC Driver Add/Setup 256 YES 256 {{17, 14}, {178, 16}} YES Description of the driver 256 {{17, 47}, {178, 16}} Driver file name 256 {{203, 7}, {211, 29}} 256 {{203, 40}, {211, 29}} 256 {{12, 141}, {484, 219}} YES Keyword Value 256 {{12, 376}, {70, 16}} Keyword 256 {{12, 409}, {70, 16}} Value 256 {{90, 369}, {313, 29}} 256 {{90, 402}, {313, 29}} 256 {{418, 369}, {84, 32}} Add 256 {{418, 401}, {84, 32}} Update 256 {{12, 444}, {481, 1}} 256 {{415, 460}, {84, 32}} OK 256 {{332, 460}, {84, 32}} Cancel 256 {{17, 80}, {178, 16}} Setup file name 256 {{203, 73}, {211, 29}} 256 {{416, 41}, {84, 32}} Browse 256 {{416, 74}, {84, 32}} Browse 256 {{17, 112}, {178, 16}} Driver defined as 256 {{210, 112}, {197, 17}} YES User System {513, 507} {{98, 44}, {513, 507}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Dialog 167 YES 180 IBCarbonStaticText 182 IBCarbonStaticText2 183 IBCarbonEditText 184 IBCarbonEditText1 185 YES NSCustomView 186 IBCarbonStaticText1 187 IBCarbonStaticText11 188 IBCarbonEditText2 190 IBCarbonEditText21 191 IBCarbonButton 192 IBCarbonButton1 193 IBCarbonSeparator 194 IBCarbonButton2 195 IBCarbonButton3 196 IBCarbonStaticText21 197 IBCarbonEditText11 198 IBCarbonButton4 199 IBCarbonButton5 200 IBCarbonStaticText3 203 IBCarbonRadioGroup 207 208 YES YES YES YES YES YES YES YES YES 208 0 3 libiodbc-3.52.9/mac/iODBCadm/English.lproj/odbcdriverf.xib0000644000076400007640000020233512323204667020141 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES Create New File Data Source 256 YES 256 {{14, 317}, {84, 32}} YES Cancel 256 {{446, 317}, {98, 32}} Continue 256 YES 256 YES 256 {{142, 29}, {380, 209}} YES Name Version File Date Size 256 {{142, 5}, {376, 16}} Select a driver for which you want to setup a data source. 256 {{5, -1}, {125, 268}} 256 {{423, 242}, {104, 30}} Advanced... {{8, 36}, {529, 274}} {{4, -1}, {546, 318}} YES 0 YES Drivers 0 YES 256 YES 256 {{5, -1}, {125, 268}} 256 {{138, 57}, {300, 29}} 256 {{142, 4}, {393, 50}} Type the name of the data source you want to save this connection to. Or, find the location to save to by clicking Browse. 256 {{438, 56}, {85, 32}} Browse {{8, 36}, {529, 274}} FileDSN Name 0 YES 256 YES 256 {{5, -1}, {125, 268}} 256 {{136, 9}, {393, 50}} When you click Finish, you will create the data source which you have just configured. The driver may prompt you more information. 256 {{136, 60}, {381, 203}} YES Message {{8, 36}, {529, 274}} Results 256 {{355, 317}, {91, 32}} Go Back {555, 355} {{123, 60}, {555, 355}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Dialog 167 YES 184 IBCarbonButton 185 IBCarbonButton1 187 YES 197 IBCarbonButton2 216 YES 188 YES 193 IBCarbonPicture 192 IBCarbonStaticText 191 190 YES NSCustomView 214 213 212 211 210 217 YES 189 YES 200 199 198 IBCarbonEditText 195 218 YES 194 YES 202 YES ListView 201 196 215 YES YES YES YES YES YES YES YES YES 218 0 3 libiodbc-3.52.9/mac/iODBCadm/English.lproj/drvchoose.tiff0000644000076400007640000026265212323204667020022 00000000000000II*„dD33fff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌ™™Ì™™ÌÝÝÝ"""U33™ffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌ™™ÌffÌffÌff™™™ÌÌÌÿÌÌÌ3"""33™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ff™ffÌ™™ÌÌÌÌ™™Ì3D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™Ì""""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™33™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌffÌff™ffÌff™ffÌffÌffÌff™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌffÌffÌffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™Ì""""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌffÌff™ff™ffÌff™ffÌff™ffÌff™ffÌ33™33™33™33™33™33™33™33™33™ff™ffÌffÌffÌff™ff™ff™ffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ff™ffÌffÌff™ffÌff™ffÌff™ffÌff™ff™33™33™33™33™33™33™33™ffÌff™ffÌff™ff™ffÌffÌffÌff™ffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™33™ff™ffÌ™™Ì™™Ì3U33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌffÌffÌff̈ˆˆffÌ™™Ìff™ff̈ˆˆffÌff™ffÌffÌ33™33™33™33™33™33™ff™ffÌff™ffÌff̈ˆˆff̈ˆˆffÌ™™Ìff™ffÌffÌffÌff™33™33™33™33™33™33™33™33™33™ff™ffÌffÌffÌffÌff™™™Ì»»»™™Ì"""333333™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ff™ff™ff™ffÌff™ffÌff™ffÌffÌff™ffÌff™ffÌff™33™33™33™33™33™ffÌff™ffÌff™ff™ffÌffÌffÌff™ff™ffÌ™™™ff™ff™ffÌ33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ff™ff™ffÌ™™ÌÌÌÿÌÌÌ""""U33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌffÌ™™ÌffÌffÌff™ffÌff™ffÌff™ffÌffÌff™ffÌff™33™33™33™33™33™ff™ffÌff™™™ÌffÌffÌff™ff™ffÌffÌff™ffÌffÌffÌff™33™33™33™33™33™33™33™ffÌff™ffÌff™ffÌ™™ÌffÌffÌ™™ÌÌÌÌ™™Ì"333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ff™ff™ff̈ˆˆffÌff™™™Ìff™ff̈ˆˆffÌff™ffÌff™33™33™33™33™ff™ffÌff™ffÌff™ff™ff™™™ÌffÌff™ffÌffÌff™ff™ffÌff™ff™33™33™33™33™33™ffÌff™ffÌffÌ™™™ffÌff™ff™ff™™™ÌÌÌÿ™™Ì""""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌffÌff™ff™33™33™33™33™33™33™33™33™33™ff™ffÌffÌffÌff™ffÌffÌff™ffÌffÌff™ff̈ˆˆffÌffÌffÌ33™33™33™33™ff™ffÌffÌff™ffÌffÌffÌff™ff̈ˆˆffÌff™ffÌff̈ˆˆffÌ33™33™33™33™33™ff™ffÌff™ff™ffÌff™ffÌffÌffÌffÌ»»»»»»ÌÌÿ333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌffÌff™ffÌff™ff™ffÌffÌffÌ33™33™33™33™33™33™33™33™ffÌff̈ˆˆffÌff™ff̈ˆˆffÌff™ffÌff™ffÌffÌ™™Ìff™ff™33™33™33™33™33™ff̈ˆˆffÌff̈ˆˆff™ffÌff™ffÌffÌff™™™Ìff™ffÌffÌff™33™33™33™33™ffÌff™ffÌ™™Ìff™ffÌff™ff™ff™ff™™™Ì™™ÿ»»»""""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ff™ffÌff™™™ÌffÌffÌff™ff™ffÌff™33™33™33™33™33™33™ff̈ˆˆffÌff™ffÌff™ffÌffÌff̈ˆˆffÌffÌff™ff™ff™ffÌ33™33™33™33™ff™ff™ffÌffÌff™ffÌffÌffÌff™ff̈ˆˆffÌff™ffÌff™ffÌff™33™33™33™33™ffÌff™ffÌff™ff̈ˆˆffÌffÌ™™ÌffÌ™™ÌÌÌÌÌÌÌ333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌffÌff™ffÌff™ff™ff™ffÌffÌff™ffÌ33™33™33™33™33™33™ff™ffÌffÌff™™™Ìff™ffÌff™ff™ffÌff™ff™ffÌffÌffÌff™33™33™33™33™ff™ffÌff™ff™™™Ìff™ff™™™Ìff™ffÌffÌff™ffÌff™ffÌff™ff™33™33™33™33™ff™ffÌff™ffÌffÌffÌff™ff™ffÌff™™™ÌÌÌÿ™™Ì3D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌffÌff™ffÌ™™™ffÌffÌffÌ™™Ìff™ff̈ˆˆffÌff™33™33™33™33™33™ffÌff™ffÌff™ffÌff̈ˆˆffÌff̈ˆˆffÌ™™Ìff™ff™ffÌffÌ33™33™33™33™33™ffÌffÌffÌff™ffÌffÌff™ffÌff™ffÌff™ffÌff̈ˆˆffÌ33™33™33™33™33™ffÌff™ff̈ˆˆff™ffÌffÌff™ffÌffÌ™™ÌÌÌÌÌÌÿ""""33f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff̈ˆˆffÌff™ffÌff™ffÌff™ff™ffÌff™ffÌffÌff™ffÌ33™33™33™33™33™ff̈ˆˆffÌff™ffÌff™ff̈ˆˆffÌffÌff™ffÌffÌff™™™Ìff™33™33™33™33™ff™ff̈ˆˆffÌff™ffÌff™ff̈ˆˆffÌff™ffÌ™™™ff™ffÌffÌff™33™33™33™33™ff™™™Ìff™ffÌffÌff™™™Ìff̈ˆˆff™™™Ì»»»™™Ì3"""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌff™™™Ìff™ffÌffÌff™ffÌff̈ˆˆffÌff™ffÌffÌff™33™33™33™33™ff™ffÌffÌ™™Ìff™ffÌff™ffÌffÌff™ffÌffÌff™ffÌff™ffÌ33™33™33™33™ff™ffÌff™ffÌff™ffÌff™ffÌffÌff™™™Ìff™ffÌffÌff™ffÌ33™33™33™33™33™ffÌff™ffÌffÌff™ff™ffÌff™ffÌffÌ™™ÌÌÌÿÌÌÌ333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌffÌff™ffÌffÌff™ˆˆˆff̈ˆˆffÌffÌff™ff̈ˆˆffÌ33™33™33™33™33™ffÌff™ff™ff™ffÌff™ffÌff™ff™ff̈ˆˆffÌff™ffÌff™ffÌ33™33™33™33™33™ffÌff™ffÌ™™Ìff™ffÌff™ffÌffÌff™ffÌff™ffÌff̈ˆˆffÌ33™33™33™33™ff™ffÌff™ff™™™ÌffÌff™ffÌff™ffÌ™™ÌÌÌÌ™™ÿ3D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ffÌffÌffÌffÌffÌff™ff™ffÌff™ffÌff™ff™33™33™33™33™ff™ffÌffÌffÌff™ffÌ™™ÌffÌffÌff™ffÌff™™™Ìff™ffÌff™33™33™33™33™ff™ffÌff™ff™ffÌff™™™Ìff™ff™ffÌff™ffÌff̈ˆˆffÌffÌ33™33™33™33™33™ffÌff™ffÌffÌff™ffÌff™ffÌff̈ˆˆ™™ÌÌÌÌ»»»""""33f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌff™ff̈ˆˆff™ff™ff™ff™ffÌffÌ™™Ìff™ffÌffÌff™33™33™33™33™ffÌff™ff̈ˆˆffÌff™ff™ff™™™Ìff™ffÌffÌff™ffÌff™ffÌ33™33™33™33™ff™ff™ffÌffÌff™ffÌff™ffÌffÌff™ff̈ˆˆffÌff™ffÌff™ff™33™33™33™33™ff™ffÌ™™Ìff™ffÌff™ff̈ˆˆffÌffÌ™™ÌÌÌÌ™™ÿ""""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌ™™Ìff™ffÌffÌffÌffÌ™™ÌffÌff™ff™ffÌff™ffÌ33™33™33™33™33™ff™™™Ìff™ffÌff™ffÌffÌffÌffÌff™ffÌff™ffÌ™™Ìff™ffÌ33™33™33™33™ff™ffÌff̈ˆˆffÌff™ffÌff™ffÌ™™™ffÌffÌff™ffÌff™ffÌff™33™33™33™33™ffÌffÌff™ffÌff™™™Ìff™ffÌffÌff™™™Ì™™ÿÌÌÌ"333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌffÌff™ff̈ˆˆff™ff™ff™ffÌffÌff™ff̈ˆˆffÌ33™33™33™33™ffÌff™ffÌffÌff̈ˆˆffÌff™ff™ff̈ˆˆffÌff™ff™ffÌff™33™33™33™33™33™ff̈ˆˆffÌffÌff̈ˆˆffÌff™ffÌff™ffÌff™ffÌffÌff™ffÌ33™33™33™33™ff™ff™ffÌff™ffÌffÌff™ffÌff™ffÌ»»»ÌÌÌ™™Ì""""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ff™ff̈ˆˆffÌffÌffÌffÌff̈ˆˆffÌff™ffÌffÌff™33™33™33™33™ffÌff™ff̈ˆˆffÌffÌff™ffÌff™ffÌffÌff™ffÌffÌff™ffÌ33™33™33™33™ff™ffÌffÌff™ff™ffÌffÌff™ffÌffÌff™ffÌ™™Ìff™ffÌff™ff™33™33™33™33™ffÌff™™™ÌffÌff™ffÌff™ff̈ˆˆffÌ™™ÌÌÌÿ»»»333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™™™ÌffÌff™ffÌff̈ˆˆffÌff™ff™ffÌffÌ™™™ffÌff™33™33™33™33™33™ff™ffÌff™ffÌff™ff™ffÌ™™™ffÌff̈ˆˆffÌff̈ˆˆffÌffÌ33™33™33™33™ff™ff™ff™ffÌ™™Ìff™ff™™™Ìff̈ˆˆffÌff™ff™ffÌff™ffÌ33™33™33™33™33™ff™ffÌff™ff™ff̈ˆˆffÌff™ffÌffÌ™™Ì™™ÌÌÌÿ""""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌffÌff™ff™ffÌ™™™ffÌffÌff™ffÌff™ffÌff™33™33™33™33™ff̈ˆˆffÌff™ffÌffÌffÌff™ffÌff™ffÌff̈ˆˆffÌffÌff™33™33™33™33™ff™ffÌffÌffÌff™ffÌffÌffÌff™ffÌff™ffÌff̈ˆˆffÌffÌff™33™33™33™33™ffÌff™ffÌffÌff™ffÌffÌff™ffÌff™™™ÌÌÌÿ»»»333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ff̈ˆˆffÌff™ffÌffÌff™ff̈ˆˆffÌff™ffÌff™ffÌ33™33™33™33™ffÌffÌff̈ˆˆff̈ˆˆffÌff™ff̈ˆˆffÌff™ffÌff™ff™ffÌ33™33™33™33™33™ffÌff™ff™ffÌff™ff™ff™ffÌff™ff̈ˆˆffÌffÌff™ff™ffÌ33™33™33™33™ffÌff™™™Ìff™ffÌff™™™ÌffÌff™ffÌ»»»»»»™™ÿ3D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌffÌff™ffÌff™ff̈ˆˆffÌffÌff™ffÌff™ffÌffÌff™ff™33™33™33™33™ff™ff™ffÌffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌ™™Ìff™33™33™33™33™ff™ffÌff̈ˆˆffÌffÌ™™Ìff™ffÌffÌffÌffÌff™ffÌffÌff™ff™33™33™33™33™ff™ffÌff™ff̈ˆˆffÌff™ff̈ˆˆffÌ™™ÌÌÌÌ»»»""""33f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff̈ˆˆffÌff™ffÌffÌffÌff™ff™ffÌff™ffÌ™™™ff™ffÌ33™33™33™33™33™ffÌff̈ˆˆffÌff™ffÌff̈ˆˆffÌffÌff̈ˆˆffÌffÌff™ffÌ33™33™33™33™ff™ff™ff™ffÌffÌff™ff™ff̈ˆˆff̈ˆˆff™ffÌ™™™ff™ffÌ33™33™33™33™33™ffÌff™ffÌffÌffÌff™ffÌff™ffÌffÌ™™Ì™™ÌÌÌÿ3"""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌff™ff™33™33™33™33™33™33™33™33™33™ff™ff™ffÌff™ffÌ™™Ìff™ff™ffÌ™™Ìff™ffÌff™ffÌffÌffÌff™33™33™33™33™ff™ff™ffÌffÌ™™™ffÌff™ffÌff̈ˆˆff™ffÌffÌff™ffÌff™33™33™33™33™33™ffÌ™™ÌffÌff™ff™ffÌffÌffÌff™ffÌffÌff™ffÌffÌffÌff™33™33™33™33™ffÌ™™™ffÌff™ff™ffÌffÌff™ffÌff™™™ÌÌÌÿ»»»333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌffÌffÌffÌff™ffÌffÌff™33™33™33™33™33™33™33™33™33™ffÌffÌff̈ˆˆffÌff™ffÌff™ffÌffÌff™ffÌff™ff™ffÌff™33™33™33™33™ffÌffÌff™ff™ffÌff™ffÌff™ffÌffÌffÌff™ff™™™Ìff™ffÌ33™33™33™33™ff™ffÌff™ff™ffÌ™™Ìff™ff™ffÌff™ffÌff™ffÌff™ff™ffÌff™33™33™33™33™ff™ffÌff™ffÌ™™Ìff™ff™™™Ìff™ffÌ»»»»»»™™ÿ3D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ff™ff™ffÌff™ffÌff™ffÌffÌff™33™33™33™33™33™33™ff™ff̈ˆˆffÌffÌff™ffÌffÌff™ff™ffÌ™™Ìff™ffÌ™™Ìff™33™33™33™33™33™ff™ffÌffÌffÌff™ffÌ™™™ffÌff™ff™ffÌ™™Ìff™ffÌff™ffÌ33™33™33™33™33™ffÌffÌff™ffÌff™ffÌff̈ˆˆffÌff™™™Ìff™ffÌffÌff™ff™33™33™33™33™ffÌff™ffÌff™ffÌffÌff™ffÌff™ffÌ™™ÌÌÌÿ»»»""""33f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌffÌffÌff™ffÌff™ffÌffÌff™ffÌff™33™33™33™33™33™ff™ff™ffÌff™ff™ffÌff™ff™™™ÌffÌff™ff™ffÌffÌff™ffÌff™33™33™33™33™ff̈ˆˆff̈ˆˆffÌff™ffÌff™™™ÌffÌff™ff™ffÌff™ffÌff™33™33™33™33™ff™ˆˆˆffÌff™ffÌff™ffÌff™ffÌffÌffÌff™ffÌff̈ˆˆffÌ33™33™33™33™33™ff™ffÌff™ffÌff™ff™ffÌffÌff™ffÌ™™Ì™™Ì»»»""""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌff™ff̈ˆˆffÌff™ffÌff™ff™ffÌff™ffÌ33™33™33™33™33™ffÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ffÌff™33™™™ÌffÌff™ffÌffÌffÌffÌff™ffÌff™ffÌffÌffÌffÌff™ffÌ33™33™33™33™33™ffÌff™™™ÌffÌff™™™Ìff™ff̈ˆˆffÌff™ffÌff™ffÌffÌff™33™33™33™33™ffÌ™™Ìff̈ˆˆffÌff̈ˆˆff̈ˆˆffÌ™™ÌÌÌÌÌÌÿ"333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌ™™™ffÌffÌff™ffÌ™™™ffÌffÌ™™™ffÌ™™ÌffÌff™ffÌff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ffÌff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™™™™ÌffÌff™ff̈ˆˆffÌff™ff™™™Ìff™33™33™33™33™ff™ffÌffÌff™ff™ffÌff™ffÌff™ffÌff™ff̈ˆˆffÌff™ffÌff™33™33™33™33™ff™ff™ffÌffÌff™ffÌffÌff™ffÌffÌ»»»™™ÿ»»»""""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌffÌff™ffÌff™ffÌff™™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™ffÌffÌff™ffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™ffÌffÌff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ìff™ffÌffÌ33™33™33™33™33™ff™ffÌffÌffÌff™ffÌff™ffÌff™™™ÌffÌffÌff™ffÌff™ff™33™33™33™33™ffÌff™ff™ffÌff̈ˆˆffÌffÌff™ff™™™ÌÌÌÌ™™ÿ333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff̈ˆˆffÌff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ff™ff̈ˆˆ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™ÌffÌ™™ÌffÌ™™ÌffÌ™™Ì™™ÌffÌffÌff™ff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìˆˆˆ™™Ì33™33™33™33™ff™ffÌff™ff̈ˆˆffÌffÌ™™™ffÌffÌff™ff™ffÌ™™™ffÌffÌ33™33™33™33™33™ff™ffÌff̈ˆˆffÌff™ff̈ˆˆffÌffÌ™™ÌÌÌÌÌÌÌ""""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ìff™ffÌffÌff™ffÌ™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™ffÌffÌff™™™Ì™™Ì™™ÌffÌ™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™ffÌ33™33™ff™ff̈ˆˆffÌff™ffÌff™ffÌffÌff™ffÌffÌff™ffÌff™ffÌff™33™33™33™33™ffÌffÌff™ffÌff™ffÌff™ffÌffÌff™™™ÌÌÌÿ™™Ì333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ffÌffÌ™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™™™™ÌffÌff™ffÌff™ff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™ÌffÌ™™Ì™™ÌffÌffÌff™ffÌffÌffÌ™™ÌffÌff™ffÌff™ffÌff™ff™ff̈ˆˆffÌff™ffÌff™ffÌff™33™33™33™33™ff™ff™™™ÌffÌffÌff™ffÌff™ff™™™Ì™™Ì»»»ÌÌÿ3D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌ™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ìff™ffÌff™ff™ff™ff̈ˆˆffÌff™™™™ff™ff™ff™ff™ff™ff™ffÌffÌff™ffÌff™33™ff™ffÌ33™™™Ìff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™ffÌff™ff™™™Ì™™Ì™™Ì™™ÌffÌ™™™ffÌff̈ˆˆffÌffÌff™ffÌff™ffÌff™ff™33™33™33™33™ffÌffÌff™ff™ffÌ™™™ffÌffÌffÌff™™™ÌÌÌÿ™™Ì""""33f33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌff™ffÌff™™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™™™™Ì™™Ìff™ffÌ33™33™33™33™ff™ffÌffÌff™ffÌffÌffÌffÌffÌffÌffÌffÌff™ffÌff™ffÌff™33™33™33™33™ff™ffÌffÌff™ff™ffÌff™ffÌ™™Ì™™™ffÌ™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ffÌffÌff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ìff™ffÌffÌff™ffÌffÌ™™™ffÌffÌ33™33™33™33™33™ff™ff™ffÌffÌff™ffÌff̈ˆˆff™ffÌ™™Ì™™ÌÌÌÌ3"""D33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌffÌffÌff™ffÌff™™™Ì™™Ì™™™™™Ì™™Ì™™Ì™™™™™ÌffÌ™™Ìff™ffÌffÌff™ff™ffÌ33™33™33™33™ff™ff™ffÌff™ffÌff™ff™ffÌff™ff™ffÌff™ff™ffÌff™ffÌff™33™33™33™33™ffÌffÌff™ff™ffÌff̈ˆˆffÌff™ffÌffÌ™™™™™ÌffÌ™™Ì™™Ìff̈ˆˆffÌff™™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ìff̈ˆˆffÌff™ffÌff™ffÌff™33™33™33™33™ffÌffÌff̈ˆˆff™ffÌff™ffÌffÌffÌ™™ÌÌÌÿ»»»333f33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ff™ffÌff™ffÌffÌ™™Ì™™Ì™™ÌffÌ™™ÌffÌffÌffÌff™ff™ffÌff™ffÌff™ffÌff™33™33™33™33™33™ffÌff™ffÌff™ffÌffÌff™ffÌffÌff™ffÌffÌff™ffÌff™ff™33™33™33™33™ff™ff™ffÌffÌff™ff™ffÌffÌff™ff̈ˆˆffÌff̈ˆˆ™™Ì™™Ìff™ffÌffÌff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™™™Ìff™ffÌff™ff™33™33™33™33™ff™ˆˆˆffÌffÌffÌff™ff̈ˆˆff̈ˆˆ™™Ì»»»™™ÿ3D33™33™33™33™33™33™33™ff™ffÌffÌff™ffÌff™ffÌffÌff™ffÌff™ff™™™Ì™™Ì™™Ìff̈ˆˆff̈ˆˆffÌff™ffÌffÌff™ffÌffÌffÌffÌ33™33™33™33™ff™ffÌ™™Ìff™ff̈ˆˆffÌff™ff™™™Ìff™ff™ffÌ™™™ffÌffÌ33™33™33™33™33™ffÌff̈ˆˆffÌffÌff̈ˆˆff̈ˆˆffÌffÌff™ffÌffÌff™ffÌ33™ff™ff™ffÌffÌ™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™ÌffÌffÌff™ffÌff™33™33™33™33™ffÌffÌff™ff™ffÌ™™™ffÌffÌff™ffÌ™™ÌÌÌÌÌÌÌ""""33f33™33™33™33™33™ff™™™ÌffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌffÌffÌff™ffÌff™ffÌff™ff̈ˆˆffÌff̈ˆˆff̈ˆˆff̈ˆˆff™33™33™33™33™ff™ff™ffÌff™ffÌff̈ˆˆffÌffÌff™ffÌffÌff™ffÌff™ffÌff™33™33™33™33™ff™ffÌff™ffÌff™ff™ffÌff™ffÌffÌff™ffÌff™ff™ffÌff™33™33™33™33™ff™™™Ì™™Ì™™Ì™™Ì™™™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ33™33™33™33™33™ffÌff™ffÌffÌff™ffÌff™ffÌff™ffÌ™™ÌÌÌÿ™™Ì""""D33™33™ff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™ffÌff™ffÌff™ffÌff™33™ffÌff™ffÌff™ffÌffÌff™ffÌff̈ˆˆffÌffÌffÌff™ffÌffÌ33™33™33™33™33™ffÌffÌff™ffÌff™ffÌff̈ˆˆffÌff̈ˆˆffÌffÌff™ffÌff™33™33™33™33™ffÌff™ffÌff™™™ÌffÌff™ffÌff̈ˆˆffÌff™ffÌffÌff™ffÌ33™33™33™33™ff™ffÌff™™™Ì™™ÌffÌ™™Ì™™Ì™™™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™33™33™33™33™ff̈ˆˆff̈ˆˆffÌffÌff™ffÌff™ffÌ™™Ì™™ÌÌÌÌ"333f33™ff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ffÌff™33™33™33™ff™ff̈ˆˆffÌff™™™ÌffÌff™ff™ffÌff™ff™ffÌff™ffÌff™33™33™33™33™ff™ffÌff™ff̈ˆˆffÌff™ffÌffÌff™ff™ffÌff™ff™ffÌff™ff™33™33™33™33™ff™™™Ìff™ffÌff™ffÌff̈ˆˆffÌff™ffÌ™™Ìff™ffÌff™ffÌ33™33™33™33™33™ffÌff™ffÌff™™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™33™33™33™ff™ffÌffÌffÌff™ff™™™Ìff™ff̈ˆˆ™™ÌÌÌÿ»»»"""""""ffÌ™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™Ì33™33™33™33™33™33™ffÌff™ffÌffÌff™ff™ffÌffÌffÌff™ffÌff̈ˆˆffÌff™ffÌ33™33™33™33™ff™ffÌff™ffÌffÌff™ff̈ˆˆffÌffÌffÌff™™™ÌffÌff™ffÌff™33™33™33™33™ffÌff™ffÌff™ff̈ˆˆffÌffÌff™ffÌff™ffÌff™ffÌ™™™ffÌ33™33™33™33™ff™ffÌff™ffÌffÌff™ffÌ™™Ì™™Ì™™ÌffÌ™™ÌffÌ™™Ì™™Ì™™ÌffÌffÌff™33™33™ffÌff™ff™ffÌffÌff™ffÌffÌff™ffÌ™™ÌÌÌÌ™™ÿ3"""ff™™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™™ffÌff™ff™33™33™33™33™33™ˆˆˆffÌff̈ˆˆffÌffÌff™ff™ffÌ™™™ffÌff™ffÌffÌffÌff™33™33™33™33™ff™ffÌff™™™Ìff™ffÌff™ffÌff™ff̈ˆˆffÌffÌff™ffÌffÌ33™33™33™33™33™ff™ffÌffÌff™ffÌffÌff™ff™ffÌff™ffÌff™ffÌff™ffÌff™33™33™33™33™ff™ff™ffÌff™ff™ffÌff™ffÌff™™™Ì™™Ì™™Ì™™Ì™™™™™Ì™™Ì™™Ìff™ffÌffÌff™™™™ffÌff̈ˆˆffÌff™ff̈ˆˆffÌffÌ™™Ì»»»ÌÌÌ33fUUUˆˆˆ™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™ÌffÌffÌffÌff™ffÌffÌ33™33™33™33™33™ffÌffÌff™ffÌffÌff™™™ÌffÌff™ffÌff̈ˆˆffÌff™ˆˆˆffÌ33™33™33™33™33™ffÌff™ffÌff™ffÌ™™Ìff™ffÌff™ffÌffÌff™ff̈ˆˆffÌff™33™33™33™33™ffÌffÌff™™™ÌffÌff™ffÌffÌ™™™ff̈ˆˆffÌff™ffÌff™ffÌ33™33™33™33™ff™ffÌffÌff™™™ÌffÌff™ffÌff™ffÌff™™™Ì™™Ì™™ÌffÌ™™ÌffÌff™ffÌff™ffÌ™™Ìff̈ˆˆffÌff™ffÌff™ffÌffÌff™™™ÌÌÌÿ™™ÿUUUUUUffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ff™ff™ffÌff™ffÌff™33™33™33™33™33™ff™ff™ff̈ˆˆffÌff™ffÌff™ffÌff™ff™ffÌffÌff™ffÌffÌ33™33™33™33™ff™ffÌff™ffÌff™ffÌff™ffÌff™™™Ìff™ff™ffÌff™ffÌff™ff™33™33™33™33™ff™ff™ffÌff™ff™ff̈ˆˆffÌffÌff™ffÌffÌ™™Ìff™ffÌff™33™33™33™33™33™ff̈ˆˆffÌff™ff™ffÌff™ffÌff™ffÌff™ffÌ™™Ì™™Ì™™ÌˆˆˆffÌff™ffÌff™™™Ì™™Ì™™ÌffÌff̈ˆˆffÌff™ff™™™Ì™™Ì»»»»»»UUUff™ˆˆˆ™™Ì™™Ì™™Ì™™Ì™™Ìff™™™ÌffÌffÌff™ffÌff™ffÌff™ff™33™33™33™33™ffÌffÌff™ffÌff™ffÌff™ff̈ˆˆffÌffÌff™ffÌ™™Ìff™ffÌ33™33™33™33™ff™ffÌff™ffÌff̈ˆˆffÌff™ffÌff™ffÌff̈ˆˆffÌffÌffÌff™33™33™33™33™ffÌff̈ˆˆffÌffÌff™ffÌff™ffÌffÌff™ff™ffÌff™ffÌffÌ33™33™33™33™ff™ffÌffÌff™ffÌff̈ˆˆffÌff™ffÌff™ffÌff™ffÌ™™™™™ÌffÌffÌff™ffÌffÌ™™Ì™™Ì™™Ì™™Ìff™ffÌffÌ™™ÌffÌff™™™ÌÌÌÿ™™ÌUUUfffˆˆˆ™™Ì™™Ì™™ÌffÌff™ffÌff™ˆˆˆffÌff™™™Ìff™ffÌffÌff™33™33™33™33™ff™™™Ìff™ffÌff̈ˆˆffÌff™ffÌff̈ˆˆffÌff™ff™ffÌff™33™33™33™33™ff™ffÌff™™™Ìff™ffÌff™ffÌff™ffÌff™ffÌff̈ˆˆff™ffÌ33™33™33™33™33™ff™ff™ffÌff̈ˆˆffÌffÌff™ff̈ˆˆffÌffÌff™ffÌff™ff™33™33™33™33™ff™ff™ff™ffÌffÌff™ffÌffÌffÌff™™™Ìff™ffÌff™ffÌffÌ™™Ìff™ffÌff™ff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™ff™ff™ffÌ™™Ì»»»ÌÌÌUUUff™ff™™™Ì™™ÌffÌff™ffÌff™ffÌffÌff™ffÌff™ffÌff™ffÌ33™33™33™33™33™ffÌffÌff™™™Ìff™ffÌff™ffÌffÌff™ffÌff™ffÌffÌff™ffÌ33™33™33™33™33™ff™ffÌffÌff™ffÌffÌ™™™ffÌff̈ˆˆffÌff™ffÌffÌffÌff™33™33™33™33™ffÌffÌffÌff™ffÌff̈ˆˆffÌff™ffÌff̈ˆˆffÌff™™™ÌffÌ33™33™33™33™ff™ffÌffÌffÌ™™™ff™ffÌff™ˆˆˆffÌffÌff™ffÌff™ffÌff™ff™ffÌff™ffÌffÌ™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™ÌffÌffÌffÌ™™ÌÌÌÿ™™ÿUUUfff™™™™™Ìff™ffÌff™ffÌffÌff™ffÌffÌff™ffÌff™™™Ìff™ff™33™33™33™33™ff™ff™ffÌff™ffÌffÌff̈ˆˆffÌff™ffÌff̈ˆˆffÌff̈ˆˆ33™33™33™33™ff™ffÌff™ff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ff™ff™ff™33™33™33™33™ff™ˆˆˆffÌff™ffÌff™ffÌffÌff™ffÌff™ffÌffÌff™ffÌff™33™33™33™33™33™ff̈ˆˆffÌff™ffÌff̈ˆˆffÌffÌff™ff̈ˆˆffÌff™ffÌ33™33™33™ffÌff™™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ìff™ff™™™ÌÌÌÌ»»»UUUff™ff™ffÌff™ffÌ™™™ff̈ˆˆffÌff™™™ÌffÌff™ffÌffÌffÌff™33™33™33™33™ffÌffÌff™ffÌff™ˆˆˆffÌffÌff™™™Ìff™ffÌff̈ˆˆffÌffÌ33™33™33™33™ff™ffÌffÌff̈ˆˆffÌff™ffÌff™ffÌff̈ˆˆffÌffÌ™™ÌffÌ33™33™33™33™33™ffÌffÌff™™™Ìff™ffÌff™™™Ìff™ffÌff™ff̈ˆˆffÌff™ffÌ33™33™33™33™ff™ffÌff™ffÌffÌff™ffÌffÌff™ff̈ˆˆffÌffÌffÌff™ffÌff™33™33™33™ff™™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™ÌÌÌÌ™™ÿ33fDDDff™ff™ffÌff™ffÌff™ffÌff™ffÌff™ff™™™Ìff™ff™ffÌ33™33™33™33™33™ffÌff™ffÌff™ffÌffÌff™ff™ffÌff™ffÌff™ff™ffÌff™ff™33™33™33™33™ff™ffÌff™ff™ffÌffÌ™™Ìff™ffÌ™™™ff™ffÌffÌff™ff™ffÌff™33™33™33™33™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™™™Ìff™ffÌffÌffÌff™33™33™33™33™ff™ff™ffÌff™ff™ff̈ˆˆffÌff™ffÌffÌff™ff™™™Ìff™ffÌff™33™33™33™33™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÌ"""333ff™ff™ffÌffÌff™ffÌff™ffÌffÌff™ffÌffÌff™ffÌffÌff™33™33™33™33™ˆˆˆffÌff™™™ÌffÌff™ffÌ™™Ìff™ffÌff™ffÌffÌff™ffÌffÌ33™33™33™33™33™ffÌ™™™ffÌffÌff™ff™ffÌff™ffÌffÌffÌff™ff™ffÌffÌ33™33™33™33™33™ff™ffÌff™ffÌff̈ˆˆffÌff™ffÌff™ffÌff™ffÌff™ˆˆˆffÌ33™33™33™33™ff™ffÌff™ffÌ™™Ìff™ffÌff̈ˆˆffÌff™ffÌffÌffÌff™ffÌ33™33™33™33™33™ff™ffÌ™™™™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™ÌÌÌÌÌÌÿÌÌÌ333333™ff™ff̈ˆˆffÌffÌff̈ˆˆffÌff™ffÌff™ffÌff™ff™ff™33™33™33™33™ffÌffÌff™ffÌff™ffÌff™ffÌffÌ™™Ì™™Ì™™Ì™™™™™Ì™™ÌffÌff™ff™33™ff™ffÌ™™ÌffÌff™™™Ìff™ffÌffÌff™ffÌff™ˆˆˆffÌ™™Ìff™ff™ff™33™33™33™33™ff̈ˆˆffÌff™ffÌffÌff™ff̈ˆˆffÌffÌff™ffÌffÌffÌff™33™33™33™33™33™ffÌffÌff™ffÌff™ffÌff™ffÌff̈ˆˆffÌff™ff™ffÌff™ff™33™33™33™33™ffÌff™ffÌ™™Ì™™Ì™™™™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÿ™™Ì"DDDfffffÌff™ffÌff™ˆˆˆffÌffÌff™ff̈ˆˆffÌff™™™ÌffÌ33™33™33™33™33™ff™™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌffÌffÌff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌffÌff™ffÌffÌffÌff™33™33™33™33™ffÌffÌff™™™Ìff™ffÌffÌff™ffÌff™ffÌ™™Ìff™ff™ffÌffÌ33™33™33™33™ff™ffÌff™ffÌff™ff̈ˆˆffÌff™ffÌffÌff™ffÌff̈ˆˆffÌff™33™33™33™33™ff™ffÌff™ff™ffÌ™™Ì™™Ì™™ÌffÌ™™ÌÌÌÌÌÌÿÝÝÝ3333ff™ff™ffÌffÌffÌffÌff™ff™™™Ìff™ffÌffÌffÌff™ffÌff™33™33™33™ff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ìff™ff™ff™ff̈ˆˆ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™™ffÌ33™33™33™33™33™ff™ff™ffÌff™ffÌff™ff™™™ÌffÌffÌff™ff™ffÌ™™Ìff™ff™33™33™33™33™ff™ffÌff™™™Ìff™ffÌffÌff™ffÌff™ffÌff™™™Ìff™ffÌffÌ33™33™33™33™33™ffÌff™ffÌffÌff™ffÌ™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÌÌÌÿ3333ff™ff™ff̈ˆˆffÌff™ffÌffÌff™ffÌffÌff™ff™ffÌ™™ÌffÌff™ffÌffÌffÌ™™Ì™™Ì™™™ffÌ™™Ì™™Ì™™Ì™™Ì™™™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌffÌffÌffÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™33™33™33™ffÌffÌff™ffÌff̈ˆˆffÌffÌff™™™™ff™ffÌffÌff™ffÌffÌ33™33™33™33™ff™ff™ffÌff™ffÌff̈ˆˆffÌff™™™Ìff™ffÌff™ffÌff™ffÌff™33™33™33™33™ff™ffÌffÌff™ffÌffÌff™™™Ì™™Ì™™ÌÌÌÌÌÌÿÌÌÌ33ffffffÌff™ffÌff™™™Ìff™ffÌffÌff™™™™™™Ì™™Ì™™Ì™™Ìff™ffÌff™ff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™Ìff™ff™ff™ff™™™Ì™™ÌffÌ™™ÌffÌ™™Ì™™Ì™™™™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™ÌffÌffÌff™ff™ff̈ˆˆffÌff™ff™ffÌffÌff™ffÌffÌffÌff™ff™ffÌff™ff™33™33™33™33™33™ffÌffÌff™ffÌff™ffÌffÌff™ffÌff™ffÌff™ffÌff™ffÌff™33™33™33™33™ff̈ˆˆff̈ˆˆff̈ˆˆffÌffÌ™™Ì™™Ì™™ÌÌÌÿÌÌÌ"333ff™ff™ffÌff™ffÌff™ffÌff™™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™ÌffÌffÌff™ff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌffÌffÌffÌff™™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™Ìff™ff™ffÌffÌff™™™Ì™™Ì™™ÌffÌffÌff™ff™ffÌff™ff™ffÌffÌff™ffÌ™™ÌffÌ33™33™33™33™ff™ffÌff™ff̈ˆˆffÌff™ffÌff™ffÌff̈ˆˆffÌffÌ™™™ffÌ33™33™33™33™33™ffÌffÌff™ffÌff™ffÌff™ff™ffÌ™™ÌÌÌÌÌÌÿÌÌÿ"33ffffffÌff™ffÌff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ff™ffÌffÌ™™ÌffÌ™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™ÌffÌff™ff̈ˆˆffÌff™33™ff™ff™ff™ffÌ™™™ffÌ™™Ì™™™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™™ffÌff™ffÌ™™™ffÌff™ff™ff™33™33™33™33™ff™ff̈ˆˆffÌffÌffÌff™ffÌ™™™ffÌff™ffÌff™ffÌff™ffÌff™33™33™33™33™ff™ffÌff™ffÌffÌff™ffÌffÌff™ffÌÌÌÌÌÌÌÌÌÌ3333fffffÌff™ffÌ™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™Ìff™ffÌffÌff™™™Ì™™Ì™™Ìff™™™Ìff™ff™ff™ff™ff™ff̈ˆˆffÌffÌff™ffÌ33™33™33™33™ff™ff™ffÌff™ffÌffÌff™ffÌff™ffÌ™™Ì™™™™™Ì™™Ì™™Ì™™ÌffÌff™ffÌffÌff™™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™™ffÌffÌffÌff™ffÌff™ffÌffÌffÌ33™33™33™33™33™ff™ffÌffÌff™ff™™™Ìff™ffÌff™™™ÌffÌff™ffÌff™ffÌff™33™33™33™33™ff̈ˆˆffÌff̈ˆˆffÌff™™™Ìff™ffÌ™™ÌÌÌÿÌÌÿ33fff™ff™™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ìff™ffÌff™ff™ff™ffÌff™ffÌff™ffÌffÌffÌffÌffÌffÌff™ffÌff™ffÌff̈ˆˆ33™33™33™33™33™ffÌff™ffÌff™ff™ffÌff™ff̈ˆˆffÌffÌff™ffÌ™™Ì™™Ìff™ffÌff™ffÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌˆˆˆffÌff™ffÌff™ff™ffÌ33™33™33™33™ff™ffÌff™ff̈ˆˆffÌffÌff™ffÌffÌff™ff™ff̈ˆˆffÌff™33™33™33™33™33™ff™ffÌff™ffÌffÌff™ffÌff™ffÌff™™™ÌÌÌÌÌÌÌ"333ff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™33™33™33™ffÌff™ffÌff™ff™ff™ff™ff™ff™™™Ìff™ffÌff̈ˆˆffÌffÌ33™33™33™33™ff™ffÌffÌff™ffÌffÌff™™™ÌffÌffÌff™ffÌff™ff™ff™ffÌffÌff™ffÌff™ff™™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff̈ˆˆffÌ™™Ìff™33™33™33™33™ff™ffÌffÌff™ffÌff™ffÌffÌff™ff™ffÌffÌffÌffÌff™ffÌff™33™33™33™33™ffÌffÌff™™™™ffÌffÌff™ffÌff™ffÌ™™ÌÌÌÿÌÌÌ333fffff™™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™ÌˆˆˆffÌff™ff™33™33™33™33™ff™ffÌff™ffÌffÌffÌffÌffÌffÌff™ff̈ˆˆffÌff™ffÌff™33™33™33™33™ff™ff™ff̈ˆˆffÌff™ffÌff™ff™ff™ffÌff™ffÌffÌffÌff™ff™33™33™ff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ffÌ33™33™33™33™33™ff̈ˆˆffÌffÌff™ff̈ˆˆffÌffÌff̈ˆˆff™ff™ffÌffÌff™33™33™33™33™ff™ff™ffÌff™ff̈ˆˆffÌff™™™ÌffÌ™™ÌÌÌÌ™™Ì33fff™ˆˆˆ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ffÌff™ffÌ33™33™33™33™33™ffÌff™ff̈ˆˆff̈ˆˆff̈ˆˆffÌff™ffÌffÌff™ffÌff™ffÌ33™33™33™33™ff™ffÌff™ffÌffÌ™™™ffÌff™ffÌffÌffÌff™™™Ìff™ff™ffÌff™33™33™33™33™ff™ffÌ™™Ì™™™™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌff™33™33™33™33™ff™ff™ffÌff̈ˆˆffÌff™ffÌff̈ˆˆff™ffÌffÌff̈ˆˆffÌ33™33™33™33™33™ffÌ™™ÌffÌffÌff™ffÌffÌff™ffÌff™™™Ì™™ÌÌÌÿUUUfff™™™™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™Ìff™ff™ff™ffÌffÌffÌff™ff™33™33™33™33™ff™ffÌ™™ÌffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌ™™™ffÌ33™33™33™33™33™ffÌffÌff™ffÌff™ffÌff̈ˆˆff̈ˆˆffÌff™ffÌffÌff™ffÌ33™33™33™33™ffÌff™ffÌffÌ™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì33™33™33™33™ff™ffÌff™ffÌffÌff™ffÌff™ff™ffÌffÌff™ff̈ˆˆffÌffÌff™33™33™33™33™ff™ff™ff™ffÌff™ff̈ˆˆffÌff™ffÌ»»»ÌÌÿ™™ÌUUUff™ff™™™Ì™™Ì™™Ì™™ÌˆˆˆffÌff™ffÌffÌffÌff™ff™ffÌffÌff™33™33™33™33™ffÌff™ff™ffÌffÌff™ffÌff™™™ÌffÌff™™™ÌffÌff™ffÌff™33™33™33™33™ff™ff™ff̈ˆˆffÌffÌff™ffÌffÌff™ffÌffÌff™ff̈ˆˆffÌ33™33™33™33™33™ffÌff™ˆˆˆffÌff™™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ìff™33™33™33™33™ffÌff™ff™ffÌ™™Ìff™ffÌffÌff™ffÌ™™™ffÌffÌff™ffÌff™33™33™33™33™ffÌffÌff̈ˆˆffÌffÌffÌff™ffÌff™™™ÌÌÌÌÌÌÌUUUfffˆˆˆ™™Ì™™Ì™™™ffÌffÌff™ffÌff™ff̈ˆˆffÌff̈ˆˆffÌ33™33™33™33™33™ff™ffÌffÌff™ffÌ™™™ffÌffÌff™ff™ffÌff™ff™ffÌff™ffÌ33™33™33™33™ff™ffÌff™ffÌff̈ˆˆffÌff™ff™ffÌff™ff™ffÌff™ffÌffÌff™33™33™33™33™ff™ffÌffÌff™ffÌff™ff™ff™™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™ÌffÌffÌff™33™ffÌff™™™ÌffÌff™ff™ffÌffÌ™™™ffÌff™ffÌff™ffÌff™ffÌ33™33™33™33™33™ff™ff™ffÌffÌff™ff™ffÌ™™™ffÌffÌ™™ÌÌÌÿ™™Ì33ffff™™Ì™™Ìff™ffÌffÌff™ffÌff™ffÌff™ffÌffÌff™ffÌffÌff™33™33™33™33™ffÌffÌff™ff™ffÌff™ffÌff™ffÌffÌff™ffÌffÌffÌff™ffÌ33™33™33™33™ff™ffÌff™ffÌff™ffÌff™™™Ìff̈ˆˆffÌff̈ˆˆffÌffÌff™ff™33™33™33™33™ff™ffÌff™ffÌff™ffÌffÌffÌff™™™Ìff™™™Ì™™Ì™™Ì™™Ì™™Ìff™ffÌff™ffÌ33™ff™ffÌff™ffÌffÌff™ff™ffÌff™ffÌff™ff̈ˆˆffÌff™33™33™33™33™33™ffÌffÌff̈ˆˆffÌffÌff™ffÌffÌff™™™Ì™™ÌÌÌÌUUUff™ff™ff™ffÌff™ff™ffÌ™™™ffÌff™™™Ìff™ff™ffÌff™ff™ff™33™33™33™33™ff™ˆˆˆffÌffÌff™ffÌff™ff̈ˆˆffÌff̈ˆˆff̈ˆˆffÌff™33™33™33™33™33™ffÌff̈ˆˆffÌff™ffÌff™ffÌffÌffÌff™ffÌff̈ˆˆffÌ33™33™33™33™33™33™ffÌ™™™ffÌff̈ˆˆffÌff™ffÌff™™™Ì™™Ì™™Ì™™Ì™™Ìff™ffÌff™ffÌff™ffÌ™™Ìff™ffÌff™ffÌ™™ÌffÌff™ffÌffÌff™ffÌffÌff™ffÌ33™33™33™33™33™ff™ff™ˆˆˆffÌff̈ˆˆffÌff™ff™™™Ì™™ÌÌÌÿ™™ÌUUUDDDff™ffÌff™ffÌffÌff™ffÌff™ffÌff™ffÌff̈ˆˆffÌffÌff™33™33™33™33™ffÌffÌff™™™Ìff™ffÌ™™Ìff™ffÌff™ffÌffÌff™ffÌffÌffÌ33™33™33™33™ff™ff™ffÌffÌff™ffÌffÌff™ffÌff™ffÌ™™™ffÌff™ffÌff™ffÌ33™33™33™33™33™ff™ffÌff™ffÌffÌff™™™ÌffÌffÌff™ffÌff™™™ÌffÌff™ffÌff™ffÌff™ffÌffÌ™™Ìff™ffÌff™ff™ffÌff™™™Ìff™ff̈ˆˆffÌffÌff™33™33™33™33™33™ffÌffÌffÌff™ffÌffÌff™ffÌffÌff™™™ÌÌÌÌÌÌÿ3333fffff™ffÌff™™™Ìff™ffÌffÌff™ffÌffÌff™ffÌff™ffÌ33™33™33™33™33™ffÌff™ffÌff™ffÌff™ff™ffÌff™ff̈ˆˆffÌff™ffÌff™ff™33™33™33™33™ff™ff̈ˆˆffÌff™™™Ìff™ff̈ˆˆffÌff™ffÌff™ffÌff™ffÌff™33™33™33™33™33™33™ff™ffÌff™ff™ffÌff™ff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ff™™™Ì™™ÌˆˆˆffÌff™ffÌff™ffÌff™ffÌffÌff™ff™33™33™33™33™33™33™ff™ffÌff™ffÌff™ff™™™ÌffÌff™ffÌ™™Ì™™Ì»»»3333ff™ffÌffÌffÌff™ff̈ˆˆff̈ˆˆffÌff™™™Ìff™ffÌffÌff™33™33™33™33™ff™ffÌff™ffÌff™ffÌffÌffÌffÌff™ffÌff™ffÌff̈ˆˆffÌ33™33™33™33™33™ffÌffÌff™ffÌffÌff™ffÌffÌff™ffÌff™ffÌff™ffÌffÌ33™33™33™33™33™33™33™33™ffÌ™™™ffÌffÌff™ffÌffÌff™ffÌff™33™33™ff™ffÌff™ffÌffÌff™ffÌffÌffÌ™™ÌffÌff̈ˆˆffÌffÌff™ffÌff™ffÌ33™33™33™33™33™33™33™ff™ff™ff̈ˆˆffÌffÌff™ff̈ˆˆffÌ™™ÌÌÌÌÌÌÿ33fUUUffÌff™ff™ffÌffÌffÌff™ffÌffÌff™ffÌffÌff™ff™ff™33™33™33™33™ff̈ˆˆffÌffÌ™™™ffÌff™ˆˆˆffÌ™™Ìff™ff̈ˆˆffÌffÌffÌ33™33™33™33™ff™ffÌff™ffÌff™ff™ff̈ˆˆffÌff̈ˆˆffÌffÌ™™™ffÌff™ff™33™33™33™33™33™33™33™33™33™ff™ff™ffÌff™ff™ffÌ33™33™33™33™33™ff™ffÌff™ff™ffÌff™ff™ffÌ™™Ì™™Ìff™ffÌff™ff™™™Ìff™ff™33™33™33™33™33™33™33™33™33™ffÌffÌffÌff™ffÌff™ffÌffÌff™™™ÌÌÌÿ™™Ì"333ff™ff™ffÌff̈ˆˆff™ffÌffÌff™ffÌff™ff™ffÌ™™ÌffÌ33™33™33™33™33™ffÌffÌff™ffÌff™ffÌffÌffÌff™ffÌff™ffÌffÌff™ff™ffÌ33™33™33™33™ff™ffÌff™ffÌ™™ÌffÌff™ffÌff™ffÌffÌff™ffÌff™ffÌffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌffÌff™ffÌffÌff™ff™ffÌff™ffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌff™™™Ìff™ff™ffÌffÌ»»»»»»ÌÌÿ3333ff™ff™ffÌff™ffÌff™ff̈ˆˆffÌff™™™ÌffÌff™ff™ffÌff™33™33™33™33™ff̈ˆˆffÌff™ffÌff™ff™ff™ffÌff™ffÌff™ff™™™ÌffÌff™33™33™33™33™33™ff™ffÌff™ff™ff™ffÌffÌff™ff̈ˆˆffÌff™ffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ff™ffÌffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌff™ffÌffÌff™ffÌ™™ÌÌÌÌ™™Ì33ffffffÌff̈ˆˆffÌffÌff™ffÌff™ffÌff™ffÌff™ffÌffÌ33™33™33™33™33™ff™ffÌff™™™Ìff™ffÌ™™ÌffÌffÌff™™™Ìff™ffÌffÌff™ffÌ33™33™33™33™33™ff̈ˆˆffÌffÌffÌffÌff™™™Ìff™ffÌffÌff̈ˆˆffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌffÌffÌff™ff™ffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌff™™™Ìff™™™Ì™™ÿ™™Ì"333ff™ff™ff™ffÌff̈ˆˆffÌffÌff̈ˆˆffÌff™ffÌff™ˆˆˆffÌ33™33™33™33™ffÌff™ffÌffÌff™ffÌff™ff™ff™ffÌff™ffÌff™ff™ffÌff™33™33™33™33™33™ff™ffÌff̈ˆˆff™ˆˆˆffÌff™ffÌff™ff™ff™ffÌffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ff™ffÌffÌff™ffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™33™ff™™™Ì™™Ì™™Ì3333ff™ffÌffÌff™ffÌffÌff™ˆˆˆffÌffÌff™ffÌ™™™ffÌffÌ33™33™33™33™33™ffÌffÌff™ffÌff™ffÌffÌffÌ™™Ìff™ffÌffÌffÌff™™™ÌffÌ33™33™33™33™33™33™ff™ffÌffÌffÌffÌff™ffÌff™ffÌ™™ÌffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌffÌff™ffÌffÌff™ffÌffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™Ì3333fffff™ff™™™Ìff™ff™ffÌffÌff™ffÌff™ffÌffÌff™ffÌff™33™33™33™33™ff™ˆˆˆffÌff™ff̈ˆˆff™ff™ffÌff™ffÌ™™™ff™ffÌff™ff™33™33™33™33™33™33™33™ff™ff™ffÌff™ffÌff™ffÌffÌff™ff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì3333ff™ffÌffÌff™ffÌ™™ÌffÌff™ff̈ˆˆffÌff™ffÌff™ffÌ33™33™33™33™33™ffÌffÌff™™™Ìff™ffÌffÌffÌff™ffÌff™ffÌffÌff™ffÌffÌ33™33™33™33™33™33™33™33™ff̈ˆˆffÌff™™™Ìff̈ˆˆffÌffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™Ì33fUUUffÌff™ffÌff™ff™ff™ffÌff™ffÌff̈ˆˆffÌff̈ˆˆff™33™33™33™33™ff™ffÌffÌff™ffÌff™ff̈ˆˆffÌff™ffÌff™ffÌffÌff™ff™33™33™33™33™33™33™33™33™33™33™ffÌff™ff™ff™33Ì33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì"333ff™ff™ffÌff™ffÌffÌff̈ˆˆffÌff™ffÌffÌff™ffÌffÌff™33™33™33™33™ffÌff™ffÌffÌff™ffÌff™ffÌffÌ™™™ffÌff™™™™ffÌffÌffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌff̈ˆˆffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™™™Ì™™Ì"33ffffffÌff™ff̈ˆˆffÌff™ffÌffÌff™ff̈ˆˆffÌff™ffÌ33™33™33™33™33™ff™™™Ìff™ff™ffÌ™™™ffÌff™ffÌff™ffÌffÌff™ff̈ˆˆff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff̈ˆˆffÌffÌff™ffÌff™ff™33™33™33™33™33™33™ff™33™ff™33™ff™33™ff™33™ff™33™™™Ì»»»™™Ì3333fffffÌffÌff™ffÌffÌff™ffÌff™™™Ìff™ffÌffÌff™ffÌff™33™33™33™33™ffÌff™ffÌffÌff™ffÌff̈ˆˆffÌff™ffÌff™ffÌff™ffÌffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌffÌff™ffÌffÌ™™ÌffÌff™ffÌff™ffÌff™ffÌffÌff™ffÌffÌff™ffÌffÌff™ffÌffÌ™™ÌÌÌÿ™™Ì33fff™ff™ff™™™Ìff™ffÌ™™™ffÌff™ffÌffÌff™ff™ffÌff™ff™33™33™33™33™ff™ffÌff™™™ÌffÌff™ffÌffÌff™ff̈ˆˆffÌffÌff™ffÌff™33™33™33™33™33™ff™33™ff™ffÌff™ff™ffÌff™ff™ffÌ33™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™ffÌff™ffÌff™ff™33Ìff™ff™33Ìff™ff™33Ìff™ff™™™Ì™™Ì»»»"333UUUffÌffÌff™ffÌff™ffÌff™ffÌff™ffÌffÌ™™™ffÌffÌff™33™33™33™33™ffÌff™ffÌff™ffÌff™ff™ffÌffÌff™ffÌff™™™Ìff̈ˆˆffÌff™ff™ffÌ™™Ì™™Ì™™Ì™™ÌffÌ™™ÌffÌ™™ÌffÌ™™ÌffÌ™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™ÌffÌffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌ™™Ì™™™ffÌ™™ÌffÌ™™ÌffÌff™ffÌff™33Ìff™ff™ffÌff™ffÌff™ffÌff™ffÌ33™™™ÌÌÌÿ™™Ì3333ff™ffÌff™ffÌffÌff™ffÌff̈ˆˆffÌff™ff™ffÌff™ffÌ33™33™33™33™33™ff™ffÌff™ffÌff™™™Ìff™ff̈ˆˆffÌffÌ™™Ìff™™™Ì™™Ì™™ÌffÌff™ffÌ™™ÌffÌ™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ìff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌff™ffÌff™ff™™™ÌffÌ™™Ì™™Ì™™™ffÌ™™ÌffÌ33™ff™ff™ffÌffÌff™33Ìff™ffÌ33™ffÌff™ffÌ™™Ì™™Ì»»»"33ffffffÌff™ff̈ˆˆffÌffÌff™ffÌff™™™ÌffÌffÌff™ffÌff™33™33™33™33™ffÌ™™Ìff™ffÌff™ffÌffÌff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™ffÌ™™Ì™™Ì™™™™™Ì™™Ì™™ÌffÌ™™™™™ÌffÌ™™™ffÌ™™™™™Ìff™™™ÌffÌ™™Ìˆˆˆ™™Ìff™™™ÌffÌffÌffÌffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌffÌff™ffÌ33™ff™ffÌff™™™Ìff™™™ÌffÌ™™Ì™™ÌffÌff™ffÌffÌff™33™ff™ff™ffÌff™ff™ff™ffÌff™™™ÌÌÌÌ™™ÿ333ff™ff™ffÌff™ffÌff™™™™ffÌffÌffÌff™ff™ff̈ˆˆffÌff™33™33™33™33™ff™ff™ffÌff™ffÌff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™ÌffÌ™™ÌffÌ™™™ffÌ™™Ì™™Ìff̪ªª™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ìff™ff™ff™ffÌffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌ33™ff™ffÌff™ffÌffÌff™ffÌffÌ™™Ì™™Ì™™Ì™™Ìff™™™ÌffÌff™ff™ffÌffÌffÌff™33™ffÌffÌ33™ff™ffÌ™™Ì™™ÌÌÌÌ3333ff™ff™ffÌffÌff™ffÌffÌff™ff™ffÌffÌff™ffÌffÌff™33™33™33™33™33™ffÌffÌff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™™ffÌ™™Ì™™Ì™™Ìff™™™Ì™™ÌffÌ™™ÌffÌ™™Ì™™ÌffÌ™™Ìff™™™Ì™™ÌffÌ™™ÌffÌ™™Ìff™ffÌffÌff™ffÌff™ffÌff™ffÌ33™33™33™33™33™33™33™33™ff™ffÌff™ff™33™ff™ffÌff™33™ffÌff™33™ffÌff™ff™ffÌ™™Ìff™™™Ì™™Ì™™Ì™™ÌffÌ33™ff™ff™33™ffÌff™ff™ff™ffÌff™33™™™ÌÌÌÌ™™Ì3333fffffÌff™ffÌ™™™ffÌff™ffÌffÌ™™™ff™ff̈ˆˆffÌffÌff™33™33™33™33™ff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì»»»ffÌ™™ÌffÌ™™Ì™™ÌffÌff™™™ÌffÌffÌff™ffÌff™ffÌff™ffÌ™™™ffÌ™™ÌffÌ™™Ì™™ÌffÌ™™™™™ÌffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌ33™33™33™33™33™ffÌff™ffÌff™ffÌffÌffÌff™ffÌffÌff™ff™ffÌ33™ff™ffÌff™™™Ì™™ÌffÌ™™Ìff™™™ÌffÌff™ffÌffÌff™ffÌff™ffÌ33Ìff™ffÌffÌ™™Ì™™ÿ»»»UUUªªªÌÌÿÌÌÌ™™Ìff™ffÌff̈ˆˆffÌff™™™ÌÌÌÌ™™ÌffÌffÌff™ffÌ33™™™Ì»»»ÌÌÿÌÌÌ™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì»»»™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÿÝÝÝÌÌÌ»»»™™Ìff™ff™ffÌff™ff™ff™™™Ì»»»™™Ìff™ff™ffÌff™ffÌ™™ÌÝÝÝÌÌÌ»»»™™Ì™™Ì™™Ìff™ffÌ»»»ÌÌÿÝÝÝÌÌÌ™™Ìff™ffÌff™ffÌff™ffÌ™™Ì»»»ffÌff™ffÌff™33Ì™™Ì»»»ÌÌÌ™™Ì™™Ìff™33™ffÌff™™™Ì™™ÌÌÌÿ»»»»»»ffÌ™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ìff™ffÌff™33Ìff™ff™ffÌff™™™Ì™™ÌÌÌÌ™™Ì»»»»»»™™ÌÌÌÌÌÌÿ»»»ffÌff™ffÌ™™Ì™™ÌÌÌÿÌÌÿ™™Ìff™ff™ffÌff™»»»ÌÌÿ™™ÌÌÌÌÌÌÿÝÝÝ™™Ì™™Ì™™Ì™™Ì»»»ÌÌÿÝÝÝÌÌÿ™™Ì™™Ì™™Ì™™ÌÌÌÌÌÌÿÌÌÌ™™ÿÌÌÿÌÌÌ™™ÌffÌff™33ÌffÌ™™ÌÌÌÿÌÌÿ™™ÌffÌff™ff™ffÌÌÌÌÝÝÝ»»»ÌÌÿÌÌÿÌÌÌffÌff™ffÌÌÌÌÌÌÿÌÌÌÌÌÌÌÌÿÌÌÿ™™ÌffÌff™™™Ì™™ÌÌÌÌÝÝÝÌÌÿff™ffÌ33™ff™™™ÌÌÌÌÌÌÿ™™ÌÌÌÿÌÌÌ™™ÌffÌff™ffÌÌÌÌÌÌÿ™™ÌÌÌÿÌÌÿÌÌÌ™™ÌffÌ™™ÌffÌ™™Ì»»»™™Ì™™Ìff™ffÌff™ffÌff™ffÌffÌ™™Ì»»»™™ÿÌÌÌ»»»fffff™™™ÌÌÌÿÌÌÌ™™ÌffÌff™»»»ÌÌÿÌÌÌÌÌÌ™™ÌffÌff™ffÌ™™ÌÌÌÿ»»»ffÌffÌÌÌÌÌÌÿÌÌÌ™™Ì™™Ì™™ÌÌÌÿÝÝÝîîîÝÝÝffÌ™™Ì™™Ì™™ÌÌÌÿÝÝÝ™™Ìff™™™ÌÌÌÿÌÌÌffÌff™ff™»»»ÌÌÿÌÌÌÌÌÌ™™Ìff™ffÌff™™™ÌÌÌÿÌÌÌffÌ33™»»»ÌÌÿ™™ÌffÌff™ÌÌÌÌÌÌffÌffÌ™™ÌÌÌÌÌÌÌffÌff™ffÌÝÝÝÌÌÿÝÝÝÌÌÿ™™Ìff™ffÌffÌÝÝÝÌÌÿ™™Ìff™™™ÌÌÌÿÌÌÌffÌff™ÌÌÿÌÌÌ™™Ìff™ff™™™ÌÌÌÿ™™Ì™™Ìˆˆˆ™™ÌÌÌÌÌÌÿ»»»™™ÌffÌ33™ff™ffÌff™™™Ì™™Ì™™Ì»»»ÌÌÌ™™ÿ»»»UUUUUUffÌÌÌÌÌÌÿ™™Ìff™ffÌffÌ™™ÌÝÝÝÌÌÿ™™ÌffÌff™ffÌÌÌÌÌÌÿ™™Ìff™ffÌÌÌÌÝÝÝÌÌÿ™™Ì™™Ì™™Ì™™Ì»»»ÌÌÿÝÝÝ™™Ìff™™™Ì™™ÌÝÝÝÌÌÿff™ffÌff™ÌÌÌÌÌÿ™™Ìff™ffÌffÌff™ÌÌÿÌÌÌffÌffÌ33™ffÌÌÌÌÌÌÿ™™Ìff™ffÌ™™ÌÌÌÿÌÌÌff™™™Ì™™ÿ™™Ì33™33™ffÌÌÌÿÝÝÝ™™ÌffÌ™™Ì™™ÌÌÌÿÝÝÝÝÝÝffÌ™™Ìff™™™ÌÌÌÿ»»»ffÌff™ffÌÌÌÌÌÌÿ™™ÌffÌÌÌÌÌÌÿffÌffÌffÌÌÌÌ»»»ÌÌÌffÌ™™Ì™™Ì™™ÌÌÌÌ™™ÿ™™Ìff™ff™ffÌff™ffÌff™ffÌ™™ÌÌÌÿ™™Ì»»»ÌÌÌfffff™ffÌÝÝÝÌÌÿ»»»ffÌff™ffÌff™ÌÌÿÌÌÌ™™Ìff™ffÌ»»»ÌÌÿÝÝÝ™™ÌffÌffÌ™™ÌÌÌÿÝÝÝ™™Ì™™Ì™™ÌffÌ™™ÌÌÌÿÝÝÝffÌ™™Ì™™ÌÌÌÌÌÌÿÌÌÌff™33Ìff™ÌÌÿÌÌÌ™™ÌffÌff™ff™ffÌÌÌÌÌÌÿ™™Ìff™ff™ffÌÌÌÿÌÌÌffÌffÌff™™™ÌÌÌÌÌÌÌffÌÌÌÿÌÌÌ™™Ì33™33™ff™ÌÌÌÌÌÌ™™Ìˆˆˆ™™Ì™™Ì™™ÌÝÝÝÌÌÿ™™Ì™™Ì™™ÌÌÌÌÌÌÌÌÌÿff™33Ìff™ÌÌÿÌÌÌ™™Ì™™ÌÌÌÿÌÌÌffÌff™ff™™™Ì™™ÌÌÌÿ™™Ì™™ÌffÌ™™Ì™™ÌÌÌÌ™™Ì33ÌffÌff™33Ìff™ff™ffÌ™™Ì™™ÌÌÌÿ™™Ì»»»ff™ff™™™ÌÌÌÌÌÌÌ»»»ffÌffÌff™ffÌÝÝÝÌÌÿ™™Ì™™Ì™™Ì™™ÌÝÝÝÌÌÿ™™Ìff™ff™™™ÌÌÌÿÝÝÝ™™Ìff™ffÌff™™™ÌÝÝÝÝÝÝ™™Ì™™ÌffÌÌÌÌÌÌÿÌÌÌffÌff™ffÌÌÌÌÌÌÿ™™Ìff™ffÌff™ffÌÌÌÌÌÌÌ™™ÌffÌff™ffÌÌÌÌÌÌÿ™™Ìff™33Ì™™ÌÌÌÿÌÌÿffÌ»»»»»»™™Ì33™33™ff™™™ÿÌÌÌffÌffÌ™™ÌffÌ»»»ÌÌÿÝÝÝ™™ÌffÌ™™ÌÌÌÿÌÌÿÌÌÌffÌff™ff™ÌÌÿÌÌÌ™™Ì™™ÌÌÌÌÌÌÌffÌff™ffÌ™™ÌÌÌÿ»»»™™ÌffÌ™™Ì™™Ì™™ÌÌÌÿ™™Ìff™ff™ffÌff™ffÌff™ffÌ™™Ì»»»™™ÌÌÌÌ»»»UUUˆˆˆffÌÝÝÝÌÌÿ™™ÿˆˆˆffÌff™ffÌÌÌÌÝÝÝ™™Ì™™Ì™™Ì™™ÌÝÝÝÌÌÌ™™ÌffÌffÌ™™ÌÌÌÌÌÌÿffÌff™ffÌ™™Ì»»»ÌÌÿÌÌÿ™™ÌffÌ™™Ì™™ÌÌÌÌÌÌÿff™ffÌ33™ÌÌÿÌÌÌ™™ÌffÌ33™ffÌff™ÌÌÿÌÌÿffÌff™ffÌffÌÝÝÝÌÌÌ™™Ìff™ff™™™Ì»»»ÌÌÌ™™Ì™™ÿÌÌÿ™™Ì33™33™ff™ÌÌÌÌÌÿ™™Ìff™ff™ffÌ»»»ÌÌÿÝÝÝ™™Ì™™ÌffÌ»»»ÝÝÝÌÌÿff™ffÌff™ÌÌÿÌÌÌ™™Ì™™ÌÌÌÿÌÌÌffÌff™ffÌ™™Ì»»»™™ÿff™™™Ì™™Ì™™Ì»»»ÌÌÿ™™ÌffÌff™33™ffÌff™ffÌff™™™ÌÌÌÿ™™Ì™™Ì»»»fffˆˆˆ™™ÌÌÌÿÝÝÝÌÌÌffÌff™ffÌff™ÝÝÝÌÌÿ™™Ì™™Ì™™Ì™™ÌÌÌÿÌÌÿ™™Ìff™ff™ffÌÌÌÌ»»»ff™ffÌ™™™™™Ì™™ÿÝÝÝÌÌÌ™™Ìff™ff™™™ÌÌÌÿÌÌÌ33Ìff™ff™ÌÌÌÌÌÿ™™Ìff™ffÌff™33ÌÌÌÌÌÌÌ™™ÌffÌff™ˆˆˆÌÌÿÌÌÌffÌffÌff™™™ÌÌÌÿÌÌÌffÌÌÌÌ»»»™™Ì33™33™33ÌÌÌÿÌÌÌ™™ÌffÌff™ffÌ™™ÌÌÌÿÝÝÝff̈ˆˆ™™ÌÌÌÿÌÌÿÝÝÝ™™ÌffÌffÌÌÌÌÌÌÿ™™Ì™™ÌÌÌÿÌÌÌffÌffÌff™™™ÌÌÌÿÌÌÌff™™™ÌffÌ™™Ì™™ÌÌÌÌ»»»ffÌff™ffÌff™ffÌff™ffÌ™™Ì»»»ÌÌÿÌÌÌ»»»ff™ff™™™ÌÝÝÝÌÌÿ™™Ìff™™™Ìff™ffÌÝÝÝÌÌÿÌÌÌ™™Ì™™Ì™™ÌÝÝÝÝÝÝ™™ÌffÌ33™™™Ì»»»ÌÌÿffÌff™33Ìff™™™ÌÌÌÿÌÌÌffÌff™ffÌ™™ÌÌÌÿÌÌÌffÌff™ffÌÌÌÿÌÌÌ™™ÌffÌff™ff™ff™ÌÌÌÌÌÿ™™Ì33™ff™ffÌÌÌÌÌÌÿ™™Ìff™ffÌ™™ÌÌÌÌÌÌÿff™™™ÌÌÌÿ™™Ì33™33™ffÌÌÌÌÌÌÌffÌ33™ffÌff™™™ÌÌÌÌÌÌÿ™™Ì™™ÌffÌ»»»ÝÝÝÝÝÝ™™Ì™™Ìff™ÌÌÿÌÌÌ™™ÌffÌÌÌÌÌÌÌffÌff™ffÌ™™ÌÌÌÌ™™ÌffÌffÌ™™Ì™™Ì™™ÌÌÌÿ™™ÌffÌff™ffÌff™33™ff™ffÌ™™ÌÌÌÿ™™Ì™™ÌîîîÌÌÌÌÌÌÌÌÿÝÝÝÝÝÝ™™ÌffÌffÌffÌ™™ÌÝÝÝÝÝÝÌÌÌ™™Ì™™Ì™™ÌÌÌÿÝÝÝÌÌÌff™ffÌ»»»ÌÌÿ»»»ffÌff™ff™ffÌ™™ÌÌÌÌÌÌÿff™ffÌff™ffÌÌÌÌÌÌÿ»»»™™ÌÌÌÿîîîîîî™™ÌffÌff™ffÌffÌÌÌÿÌÌÌ™™Ìff™ffÌffÌÌÌÌÌÌÿÌÌÌffÌff™ÌÌÌÌÌÿÌÌÌffÌ™™Ì»»»ÌÌÌ33™33™™™ÌÌÌÿÌÌÿff™ffÌff™ff™ffÌÝÝÝÌÌÿ™™ÌÌÌÌÌÌÿîîîîîîÌÌÿ»»»™™Ì™™ÌÝÝÝÌÌÿ™™Ìff™ÌÌÿÌÌÿ™™Ìff™ff™ÌÌÿÌÌÌÌÌÿ»»»ÌÌÌÝÝÝÌÌÌÌÌÿÝÝÝ™™Ì™™ÌffÌff™ffÌffÌff™ffÌ™™Ì™™Ì»»»ÌÌÿîîîÝÝÝÝÝÝîîîîîîîî̙™Ìff™™™Ì™™ÌÌÌÿÌÌÿÌÌÿÌÌÿÝÝÝÝÝÝÝÝÝîîîÌÌÿÌÌÿÝÝÝîîîîîîffÌff™ffÌff™ff™ffÌÌÌÌÌÌÌ33Ìff™ffÌff™ÌÌÿîîîîîîÝÝÝîîîîîîÌÌÿÝÝÝÌÌÌ™™Ì33™ff™ÌÌÌÌÌÿffÌff™ff™ffÌÝÝÝîîîîîîÝÝÝÌÌÿîîîîîîÌÌÿÌÌÌÌÌÿ™™ÌÌÌÿ™™Ì™™ÌÌÌÌÌÌÌ™™Ìff™ff™ffÌffÌ™™ÌÝÝÝîîîÌÌÌÌÌÿÌÌÌÌÌÿîîîÿÿÿîîîÌÌÿÌÌÿÝÝÝÌÌÌffÌff™™™Ì»»»ÌÌÌ™™Ì™™ÌÌÌÿÌÌÿÌÌÌÌÌÿÌÌÌÌÌÿÌÌÿÝÝÝîîîÌÌÿ™™Ìff™ffÌ33™ff™ffÌff™™™ÌÌÌÌ™™Ì™™ÌÝÝÝîîîîîîîîîîîîÌÌÿ™™Ì™™Ì™™Ì™™Ì™™ÌÝÝÝÝÝÝÌÌÌîîîÌÌÿîîîÌÌÿÌÌÿîîîîîîîîîîîîÌÌÿff™ffÌff™33Ìff™™™ÌÌÌÿÌÌÿff™ff™ff™™™ÌÌÌÌÌÌÿîîîîîîîîîÝÝÝÌÌÿÌÌÌÌÌÿÌÌÿ™™Ìff™ÌÌÿÌÌÌ™™ÌffÌffÌ™™ÌÌÌÌÌÌÿîîîîîîîîîîîîÌÌÌÌÌÿÌÌÌ™™Ìff™™™ÌÌÌÿÌÌÌÌÌÿ™™Ìff™ffÌffÌ33™ff™»»»îîîÝÝÝÌÌÿÌÌÌÌÌÿÝÝÝÌÌÿîîîîîîîîîÌÌÿÌÌÌ™™ÌffÌff™ffÌ™™ÌÌÌÿ™™ÿÝÝÝÝÝÝÌÌÿÌÌÌ™™ÌÌÌÿÌÌÌÝÝÝÌÌÿîîîÝÝÝÌÌÌffÌff™ff™ffÌff™ffÌ™™Ì™™ÌÌÌÿ»»»»»»ÌÌÌÝÝÝÌÌÿÌÌÿÝÝÝÌÌÿ»»»™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÿÌÌÿÝÝÝÌÌÿÌÌÌÌÌÌÌÌÿÌÌÌÌÌÿÌÌÿÌÌÌffÌ33™ff™ffÌff™ffÌff™ff™ff™ffÌffÌÌÌÿÌÌÌÌÌÿÌÌÌÌÌÿÌÌÿÌÌÿ»»»ÌÌÿÌÌÌ»»»ÌÌÿ™™Ì33™ffÌff™33™ff™™™Ì™™ÌÌÌÿÌÌÌÌÌÿÌÌÿÌÌÿÌÌÿ»»»ÌÌÿÌÌÌ33™ff™ff™ffÌffÌff™ffÌ33™ff™ffÌ™™ÌÌÌÿÌÌÿÌÌÿ»»»ÌÌÿÌÌÌ»»»ÌÌÿÝÝÝÌÌÿÝÝÝîîî™™ÌffÌ™™Ì™™Ì33Ìff™ff™™™ÌÌÌÌÌÌÿ»»»ÌÌÿÌÌÌÌÌÿÌÌÌÌÌÿÝÝÝÝÝÝÌÌÿÌÌÿ™™ÌffÌff™ffÌff™ff™ffÌ™™ÌÌÌÌ™™ÌˆˆˆˆˆˆÌÌÌÌÌÿÝÝÝÝÝÝÝÝÝÌÌÿ»»»™™ÌÌÌÌ™™ÌÌÌÌÌÌÌÝÝÝÝÝÝÝÝÝÌÌÿÌÌÌÌÌÌÌÌÿ»»»ÌÌÌ™™ÿff™ffÌffÌff™ffÌ33™ffÌff™33Ìff™ÌÌÌÌÌÌÌÌÿ»»»ÌÌÿ™™Ì™™Ì™™Ì™™ÌÌÌÌ™™ÿÌÌÿÌÌÌ™™ÌffÌff™ffÌff™ffÌffÌÝÝÝÌÌÌÌÌÿ»»»ÌÌÌ»»»ÌÌÌÌÌÿ»»»™™ÿ33™ffÌffÌff™ff™ff™ffÌff™ffÌff™™™ÌÌÌÌ»»»ÌÌÿÌÌÌ™™Ì™™Ì™™Ì™™ÌÌÌÿÝÝÝÌÌÿÝÝÝÌÌÿ™™Ì™™Ìff™™™Ìff™ffÌ»»»ÌÌÿÌÌÌÌÌÿ»»»™™ÿ™™ÌffÌÌÌÌÌÌÿÌÌÿÝÝÝÝÝÝÝÝÝffÌff™33Ìff™ffÌff™™™Ì™™ÿ»»»33ffffff™ÝÝÝÌÌÿÌÌÿÝÝÝîîîÌÌÿ™™Ì™™ÿ»»»™™ÿ™™Ì™™Ì™™Ì™™Ì™™ÌffÌÌÌÌÌÌÿÌÌÿÌÌÌÌÌÌffÌff™33™ff™ff™ffÌff™ffÌff™ffÌÌÌÿ»»»ÌÌÿÌÌÌ™™ÌffÌff™ff™ffÌ»»»ÌÌÌÌÌÌÌÌÿÌÌÌ™™Ìff™33Ìff™ff™ffÌffÌffÌff™ffÌ™™ÌÌÌÿ™™ÌÌÌÿÌÌÌ»»»ffÌff™™™Ì™™Ì™™Ì™™Ì™™ÌffÌffÌ™™ÌÌÌÿÌÌÿ»»»ÌÌÿ™™ÌffÌff™ffÌff™»»»ÌÌÿÝÝÝÌÌÿÌÌÌ™™Ì™™Ì™™ÌffÌffÌffÌÌÌÿ»»»ÌÌÿ»»»ÌÌÿff™ff™ffÌffÌÝÝÝÝÝÝÌÌÿÌÌÿÝÝÝ™™ÌffÌff™ffÌff™33Ì™™Ì»»»™™ÿ™™™ˆˆˆˆˆˆ™™ÌÝÝÝîîîÌÌÿÝÝÝÌÌÿ™™ÌÌÌÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™ÌÌÌÿÌÌÌÌÌÌÌÌÿÌÌÿ™™™ffÌ™™ÌffÌffÌ™™™ffÌffÌ™™Ì»»»ÌÌÿÌÌÿÌÌÌÌÌÿ™™Ìff™ffÌff™ffÌffÌÌÌÿ»»»ÌÌÿÌÌÌ™™ÌffÌff™ffÌffÌff™ff™ff™ffÌff™ffÌÌÌÌÌÌÿÌÌÌÌÌÿÌÌÿ»»»™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì»»»»»»ÌÌÌÌÌÿÌÌÌÌÌÿÌÌÌ™™Ìff™33Ìff™ffÌffÌÌÌÌÌÌÌÝÝÝÌÌÿÌÌÌffÌ™™Ì™™Ì™™ÌÌÌÌÌÌÌÌÌÿÌÌÌÌÌÿ™™Ì™™ÌffÌ™™™™™Ì»»»ÌÌÿÝÝÝÝÝÝÝÝÝÝÝÝffÌ™™Ìff™ffÌff™™™ÌÌÌÌ»»»™™™™™ÌÌÌÌ™™ÌÝÝÝÌÌÿÝÝÝîîîÝÝÝ»»»™™ÿ™™Ì™™Ì™™ÌffÌ™™ÌffÌ™™ÌÌÌÌÌÌÿÝÝÝÌÌÿÝÝÝÝÝÝ™™Ì™™Ì»»»™™ÌÌÌÌ™™Ì™™Ì»»»™™ÌÌÌÿÝÝÝÝÝÝÌÌÿÝÝÝffÌff™ff™33Ìff™ffÌÌÌÌÌÌÿ»»»ÌÌÿ™™Ìff™ffÌ33™ff™ff™ffÌff™ffÌff™ffÌÌÌÿÌÌÌÌÌÿÝÝÝÝÝÝÌÌÿ™™ÌÌÌÌ™™ÿ»»»™™ÿ»»»™™ÿ™™ÌÌÌÿÝÝÝÝÝÝÌÌÿÌÌÿff™ffÌff™ffÌff™ffÌÌÌÌÌÌÿÌÌÿÝÝÝÌÌÌ™™Ì™™Ì™™ÌÌÌÌîîîÌÌÿîîîÌÌÿÝÝÝ™™Ì™™Ì»»»™™Ì™™Ì™™ÿîîîîîîîîîÌÌÿÝÝÝ™™Ì™™Ì™™Ìff™33™™™Ì™™Ì™™ÿ™™™ªªª»»»ÌÌÿîîîîîîÌÌÿîîîÌÌÿÌÌÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™ÌÌÌÌÌÿîîîÝÝÝîîîÌÌÿÌÌÌ™™ÿ»»»™™ÿ™™ÌÌÌÿ™™ÌÌÌÌ™™ÿîîîîîîÌÌÿîîîÝÝÝffÌff™ffÌff™ff™ff™™™ÿÌÌÌÌÌÿ»»»ÌÌÿffÌff™ff™ffÌ33Ìff™ffÌff™ffÌff™ÝÝÝÌÌÿÝÝÝîîîÌÌÿ™™Ì»»»™™ÿ»»»™™ÌÌÌÌ™™ÌÌÌÌÌÌÌîîîÝÝÝîîîÝÝÝÝÝÝffÌff™ffÌff™33™ffÌ»»»ÌÌÿ»»»ÌÌÿÌÌÿ™™Ìff™™™ÌÌÌÿÝÝÝîîîÝÝÝîîîÝÝÝ™™ÌÌÌÿ™™Ì™™Ì™™Ì»»»ÝÝÝÌÌÿîîîîîîîî̙™Ì™™Ì33™33™ffÌ»»»™™Ìªªª™™™»»»ÌÌÿÝÝÝîîîîîîÌÌÿîîî™™ÿ»»»™™ÌffÌ™™Ìff™™™ÌffÌffÌÌÌÌÝÝÝÌÌÿîîîÌÌÿîî̻»»™™ÿ»»»™™Ì™™Ì»»»™™ÿÌÌÌÝÝÝÝÝÝîîîÝÝÝÌÌÿffÌff™ffÌff™33Ìff™™™ÌÌÌÌÌÌÿÌÌÌÌÌÌffÌff™ffÌff™ff™ffÌ33™ff™ffÌ™™ÌÝÝÝîîîÌÌÿîîîîî̙™Ì»»»™™ÿ»»»™™ÿ»»»™™ÿ™™ÌîîîÌÌÿÌÌÿîîîÌÌÿ»»»ffÌff™ffÌff™ffÌ™™ÌÌÌÌÌÌÿÌÌÌÌÌÌ™™Ì™™Ì™™ÌÌÌÌîîîîîîÌÌÿîîîÌÌÿ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÿîîîÌÌÿÝÝÝîîîÌÌÿ™™Ì™™Ìff™33™™™Ì™™Ì™™Ì™™™™™Ì»»»ÌÌÿîîîîîîîîîîîîÝÝÝÌÌÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™™™ÿîîîÝÝÝîîîÝÝÝÝÝÝÌÌÿ™™Ì»»»™™ÿ»»»ÌÌÿ™™Ì™™ÌÌÌÌÌÌÿîîîÌÌÿîîîÝÝÝff™ffÌ33™ffÌff™ffÌ™™ÌÌÌÿÌÌÌ™™ÿÌÌÌ™™Ìff™33Ìff™ffÌff™ffÌff™ffÌ»»»ÌÌÿÝÝÝîîîÌÌÿîîî™™ÌÌÌÿ™™Ì»»»™™Ì»»»™™Ì™™ÌÌÌÌÌÌÿîîîîîîÝÝÝÝÝÝ™™ÿ»»»ffÌff™ffÌff™™™Ì™™ÿÌÌÌÌÌÌÌÌÿ™™Ì™™Ì™™ÌÌÌÿÌÌÿîîîîîîÌÌÿÝÝÝ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌÝÝÝÝÝÝîîîîîîÌÌÿ»»»™™Ì™™Ì33™33™ffÌ™™Ì™™Ì™™™ªªª»»»ÝÝÝÌÌÿîîîîîîÌÌÿîî̙™Ì™™ÌffÌ™™™ffÌffÌff™ffÌÌÌÌîîîÌÌÿÝÝÝÌÌÿîî̙™ÌÌÌÌ™™Ì»»»™™Ì™™Ì»»»ÌÌÿîîîÌÌÿÝÝÝÝÝÝÝÝÝffÌffÌff™ff™ffÌff™™™ÌÌÌÿ»»»ÌÌÿÌÌÌffÌffÌff™ff™ffÌ33™ff™ffÌ™™ÌÌÌÌÌÌÿîîîÝÝÝÝÝÝîî̻»»™™ÿ»»»™™ÿ»»»™™ÿ»»»ÌÌÿîîîÝÝÝÌÌÿîîîÌÌÿ™™Ì»»»™™ÌffÌff™ffÌ™™ÌÌÌÌÌÌÌÌÌÿÌÌÌ™™ÌffÌ™™ÌÝÝÝîîîîîîîîîÝÝÝÌÌÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÿÌÌÿîîîÌÌÿÝÝÝÌÌÿ™™Ì™™Ìff™33™™™Ì™™Ì™™Ì™™™™™Ì»»»ÌÌÿîîîîîîîîîîîîÌÌÿ»»»™™ÌffÌ™™Ì™™ÌffÌff™ff™ffÌÌÌÌÌÌÿîîîîîîîîîÌÌÿ»»»™™ÿ™™ÌÌÌÌ™™ÿ»»»™™ÿ»»»ÌÌÿÝÝÝîîîîîîÌÌÿÌÌÿff™ff™ffÌff™ffÌff™™™ÌÌÌÌÌÌÿÌÌÌÌÌÿ™™Ìff™ffÌ33™ff™ffÌffÌff™™™ÌÌÌÿÝÝÝÝÝÝÌÌÿîîîÌÌÿ»»»™™ÿ»»»™™ÌÌÌÌ™™ÿ»»»™™ÌÌÌÿÝÝÝÝÝÝîîîÝÝÝÌÌÿ»»»™™ÿ»»»™™Ìff™ff™™™ÌÌÌÿÌÌÿ»»»ÌÌÿ™™Ì™™Ì™™ÌÌÌÿîîîîîîÌÌÿîîîÌÌÿ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÌîîîÌÌÿîîîîîîÌÌÌ™™Ì™™Ì33Ì33™ffÌ™™Ì™™Ìªªª»»»»»»ÌÌÌÌÌÿîîîîîîîîîÌÌÿ™™Ì™™Ì™™Ìff™ffÌff™ffÌff™ffÌ»»»îîîÌÌÿÝÝÝÌÌÿîîî™™ÌÌÌÌ™™Ì™™Ì»»»™™ÿ»»»™™ÌÌÌÌÌÌÿÝÝÝÌÌÿîîîÝÝÝffÌff™ffÌ33™ff™ffÌ™™ÌÌÌÿ»»»ÌÌÿ»»»ffÌff™ffÌffÌff™ff™ffÌ™™Ì™™ÌÌÌÌÌÌÿîîîîîîÝÝÝîî̻»»™™ÿ»»»™™Ì™™Ì™™ÌÌÌÌÌÌÌÌÌÿîîîÌÌÿîîîÝÝÝ™™Ì»»»™™ÿ™™ÌffÌffÌ™™ÌÌÌÌÌÌÿ»»»ÌÌÿffÌff™™™ÌÝÝÝÌÌÿîîîîîîÌÌÿÌÌÌ™™Ì™™ÌffÌ™™Ì™™Ì™™ÌÌÌÿÝÝÝîîîÌÌÿîîîÌÌÿ™™Ì™™Ìff™33™™™™™™Ì™™Ì»»»»»»™™ÌÌÌÿîîîÌÌÿîîîîîîîîî™™ÌffÌff™ffÌff™ffÌff™ff™ffÌ™™ÌÌÌÿÝÝÝÝÝÝÝÝÝÌÌÿ™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÌ™™Ì™™ÌÌÌÿîîîÝÝÝîîîÝÝÝÝÝÝffÌff™ff™ffÌffÌff™™™ÌÌÌÿ»»»ÌÌÿÌÌÌ™™Ì33Ìff™ff™ffÌ33™™™Ì™™ÌÌÌÿ™™ÌîîîÌÌÿÝÝÝÌÌÿîîî™™ÿ»»»ffÌffÌffÌff™ffÌffÌÌÌÿîîîÌÌÿÝÝÝÝÝÝÌÌÿÌÌÿ™™Ì»»»™™Ì™™Ìff™™™ÌÌÌÿ»»»ÌÌÿ»»»™™ÌffÌ™™ÌÌÌÌîîîÌÌÿÝÝÝÌÌÿÌÌÌffÌff̈ˆˆffÌ™™Ì™™ÌÌÌÌÌÌÿîîîîîîÌÌÿÌÌÌ™™Ì™™Ì33™33™ffÌ™™Ì™™Ì»»»»»»»»»ÌÌÌÝÝÝîîîîîîÌÌÿÝÝÝ™™Ìff™ff™ff™ffÌff™ff™ffÌff™ffÌÌÌÿÌÌÌÌÌÿÌÌÿÌÌÌff™ffÌff™ffÌ™™ÿ™™ÌÌÌÿ™™ÌÌÌÌÌÌÿîîîÌÌÿÝÝÝÌÌÿffÌff™ffÌff™33™ffÌ™™ÌÌÌÌÌÌÌ™™ÿÌÌÌ™™Ìff™ff™33Ìff™ffÌ™™Ì»»»™™ÌÌÌÌîîîÝÝÝîîîîîîîî̙™Ìff™ff™33™ffÌff™ff™™™ÌÝÝÝîîîîîîÌÌÿÝÝÝ™™Ì»»»™™ÿÌÌÌ™™ÌffÌ™™ÌÌÌÿ»»»ÌÌÿÌÌÌ™™Ìff™ff™™™ÌÌÌÿÌÌÌÌÌÿÝÝÝ™™Ìff™33™33™33™™™Ì™™ÌÌÌÿîîîîîîÝÝÝîîîÌÌÿ™™Ì™™Ìff™33™™™Ì™™Ì™™Ì»»»»»»»»»ÌÌÿÌÌÿîîîÌÌÿîîîÝÝÝ™™ÌffÌffÌff™33™ffÌ33Ìff™ffÌff™ÌÌÌÌÌÿ»»»ÌÌÌÌÌÿffÌff™ffÌff™»»»™™Ì™™Ì»»»ÌÌÿÝÝÝÝÝÝîîîîîîÌÌÿff™ffÌ33™ffÌff™ff™™™ÌÌÌÿÌÌÿÌÌÌÌÌÿffÌff™ffÌff™ffÌff™™™Ì™™ÿ»»»™™ÿîîîÌÌÿîîîÌÌÿÝÝÝ™™ÌffÌff™ffÌff™ff™ffÌffÌ™™ÌÌÌÿÝÝÝÌÌÿîîîÝÝÝ™™Ì™™Ì»»»™™ÌÌÌÿ™™Ì™™ÌÌÌÌÌÌÿ»»»ÌÌÿffÌff™ffÌ™™ÌÌÌÌÌÌÿÌÌÌÌÌÿ™™ÌffÌ33™33™33™™™Ì™™Ì»»»ÌÌÿÝÝÝÌÌÿîîîÌÌÌÌÌÌ™™Ì33Ì33™ffÌ™™Ì™™Ì»»»™™Ì»»»ÌÌÌÌÌÿîîîÝÝÝÌÌÿîîî™™Ìff™ffÌffÌff™ff™ff™ffÌff™ffÌÌÌÌÌÌÌÌÌÿ™™ÌÌÌÌ33™ffÌ33™ffÌ™™ÌÌÌÌ™™ÿ™™ÌÌÌÌÌÌÿîîîÌÌÿÝÝÝÝÝÝffÌff™ffÌff™ffÌffÌ™™ÌÌÌÌÌÌÌÌÌÿ»»»™™Ìff™ffÌff™ff™™™Ì»»»™™ÌÌÌÌÌÌÌÌÌÿîîîÝÝÝÝÝÝîîîffÌff™ffÌff™ffÌ33™ff™33™ffÌÝÝÝÝÝÝîîîÌÌÿÝÝÝ™™ÌÌÌÿ™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÿ»»»ÌÌÿ»»»ffÌffÌff™ffÌÌÌÌÌÌÿÌÌÌÌÌÿ»»»ffÌff™33™33™™™Ì™™ÌÌÌÿÝÝÝîîîîîîÌÌÿÌÌÿ™™Ì™™Ìff™33™™™Ì™™Ì™™Ì»»»»»»»»»ÌÌÿÝÝÝÌÌÿîîîîîîÌÌÿÌÌÌffÌff™33™ff™ffÌffÌff™ff™ffÌÌÌÿÌÌÿÌÌÌÌÌÿÌÌÌffÌff™ff™ff™™™ÿ™™Ì»»»»»»™™ÿîîîÝÝÝîîîÌÌÿÝÝÝffÌff™ff™33Ìff™ff™™™ÌÌÌÌ™™ÿÌÌÌÌÌÌffÌ33Ìff™33Ìff™™™ÿ»»»™™ÿ™™ÌÌÌÿÝÝÝîîîÌÌÿîîîÌÌÿff™ffÌff™33Ìff™ffÌffÌff™ffÌÌÌÌÌÌÿÝÝÝîîîÌÌÿ™™Ì™™ÌÌÌÌ™™ÿ»»»™™ÌÌÌÌ»»»ÌÌÿÌÌÌÝÝÝffÌff™33Ìff™ÌÌÿ»»»ÌÌÿ»»»ÌÌÿff™ffÌ33™33™™™Ì™™ÌÌÌÌîîîÌÌÿîîîîîî™™ÌÌÌÌ™™Ì33™33™ff™™™Ì™™Ì™™Ì»»»™™ÌÌÌÌÝÝÝîîîÌÌÿÝÝÝîîî™™ÌffÌff™ffÌffÌff™33™ff™ffÌffÌÌÌÌ™™Ì»»»ÌÌÿÌÌÌffÌff™ffÌffÌ»»»ÌÌÌ™™Ì™™ÿ»»»ÝÝÝîîîÌÌÿîîîîîîffÌff™ffÌff™ff™ffÌÌÌÿÌÌÿÌÌÌÌÌÌÌÌÿff™ff™ffÌff™ffÌ™™Ì™™Ì™™Ì»»»™™ÌÝÝÝÌÌÿÝÝÝîîîÝÝÝffÌ33™ff™ff™ffÌff™ff™ff™ffÌÌÌÌÌÌÿîîîÝÝÝîîî™™ÌÌÌÌ™™Ì™™Ì»»»™™ÌÌÌÿÌÌÿÌÌÿ™™ÌÌÌÿff™ff™ff™33™™™ÌÌÌÌÌÌÿÌÌÌÌÌÿff™ffÌ33™33™™™Ì™™ÌÌÌÿÌÌÿîîîîîîÌÌÿÌÌÌ™™ÿ™™Ìff™33™™™Ì™™Ì™™Ìªªª»»»ÌÌÌÌÌÿÌÌÿîîîÝÝÝîîîÌÌÿ»»»™™Ìff™ffÌ33™ffÌff™ffÌff™ffÌÌÌÌÌÌÿÌÌÿ»»»ÌÌÿ33™ffÌff™33™™™Ì™™ÿ»»»»»»™™ÿÝÝÝÌÌÿîîîÝÝÝÝÝÝ™™Ìff™ffÌff™ffÌff™ÌÌÌÌÌÌÌÌÿ™™ÿ»»»ffÌff™ff™ffÌff™»»»ÌÌÿ™™ÌÌÌÿÌÌÌÌÌÿîîîîîîÌÌÿÝÝÝff™ffÌffÌff™ff™33ÌffÌff™ffÌ™™ÌîîîÝÝÝÌÌÿîîîÌÌÿ™™Ì™™ÿÌÌÌ™™ÿÌÌÌÌÌÿ»»»ÌÌÌÌÌÿ™™ÌffÌffÌ33™33™™™ÌÌÌÿÌÌÌÌÌÿ»»»ffÌff™ffÌ33™™™Ì™™ÌÝÝÝÝÝÝÝÝÝÌÌÿÝÝÝ™™ÌÌÌÌ™™Ì33Ì33™ffÌ™™Ì™™Ì™™™»»»™™ÌÝÝÝîîîÝÝÝÌÌÿîîîÌÌÿ™™Ì™™Ì33Ìff™ff™ffÌff™33Ìff™™™ÌÌÌÌÌÌÌÌÌÿ»»»ÌÌÿff™ff™ffÌffÌ»»»™™Ì™™ÿ»»»™™ÌÌÌÿÝÝÝÝÝÝÌÌÿîîî™™ÌffÌ33™ffÌ33™™™ÌÌÌÿ™™ÌÌÌÌÌÌÌ™™Ì33™ffÌff™ffÌffÌ™™Ì™™Ì»»»™™ÌÌÌÿÝÝÝÌÌÿîîîÝÝÝÌÌÿff™ff™ffÌ33Ìff™ff™ff™ffÌff™™™ÌÌÌÿÝÝÝîîîÌÌÿÌÌÌ»»»™™Ì»»»™™ÌÌÌÿÝÝÝÌÌÿ»»»ÌÌÌ™™Ìff™ff™33™33™ffÌ»»»ÌÌÿÌÌÌÌÌÿ™™ÌffÌff™33™™™Ì»»»ÌÌÿîîîîîîîîîÌÌÿÌÌÌ™™ÿ»»»ff™33™™™Ì™™Ì™™Ì™™™»»»ÝÝÝîîîÌÌÿÝÝÝîîîÌÌÿ»»»™™Ì™™Ìff™ffÌff™ffÌ™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÿ»»»ÌÌÿÌÌÌffÌ™™ÌffÌ™™ÌÌÌÿÌÌÌ™™ÌÌÌÿ™™Ì»»»ÌÌÿîîîîîîÌÌÿÌÌÌ™™ÌffÌff™™™ÌÌÌÿÌÌÌÌÌÿÌÌÌÌÌÿffÌff™ffÌ33™ff™™™ÌÌÌÿÌÌÌÌÌÿÌÌÿÌÌÌîîîîîîÌÌÿÝÝÝÌÌÿ™™ÌffÌ™™™™™Ì™™ÌffÌffÌ33™ff™ffÌÝÝÝÌÌÿÝÝÝîîîÌÌÿÌÌÿÌÌÌ™™ÿÌÌÌÝÝÝÌÌÿ»»»ÌÌÿÌÌÌffÌ33™ffÌ33™33™33™™™ÌÌÌÿÌÌÌÌÌÿÝÝݪªªffÌ33Ì»»»ÌÌÿÝÝÝÌÌÿÝÝÝÌÌÿÌÌÌ™™Ì»»»™™Ì33™33™ffÌ™™Ì™™ÌÝÝÝÝÝÝÝÝÝÌÌÿîîîîîîÌÌÿÝÝÝ™™ÌÌÌÌ™™ÌffÌff™ffÌÌÌÌÌÌÿ»»»ÌÌÌ»»»ÌÌÿ»»»™™ÿ»»»™™ÌÌÌÌ™™Ì»»»»»»ÌÌÌ™™Ì™™Ì™™Ì™™Ì»»»ÌÌÿîîîÌÌÿÝÝÝÌÌÿÌÌÌÌÌÌ»»»ÌÌÿ»»»ÌÌÿ»»»ÌÌÿ™™Ìff™ffÌff™ff™ffÌ™™ÌÝÝÝÝÝÝÌÌÿÝÝÝÝÝÝÌÌÿÝÝÝÝÝÝîîîÌÌÿ»»»ÌÌÿÌÌÌÌÌÿÌÌÌ33™ff™ff™ffÌff™™™ÌÝÝÝîîîÝÝÝîîîÝÝÝÌÌÿÝÝÝîîîîîîÌÌÿÌÌÌÌÌÿ™™Ìff™ffÌ33™33™33™33™™™ÌÌÌÌ»»»ÌÌÿÌÌÌÌÌÿÌÌÌÝÝÝÌÌÿÝÝÝÌÌÿÝÝÝîîîÌÌÿ»»»™™ÿ»»»™™ÿff™33™™™™™™Ì™™ÌÌÌÌîîîÝÝÝîîîÝÝÝÌÌÿîîî™™ÌÌÌÿ™™Ì™™ÌffÌff™™™ÌîîîÝÝÝÌÌÿ™™ÿÌÌÿ™™ÌÌÌÌÝÝÝÿÿÿîîîÌÌÿÌÌÿÌÌÌ™™ÿÌÌÿ™™Ì™™ÌÌÌÌîîîÌÌÿ»»»ÌÌÿîîîÝÝÝÌÌÿÌÌÿîîîîîîîîîÌÌÿÌÌÌÌÌÿ™™ÌffÌ™™ÌÌÌÌÌÌÿÌÌÿ™™ÌÌÌÌÌÌÿîîîÝÝÝÌÌÿîîîîîîÿÿÿîîîÌÌÿÌÌÌÌÌÿÌÌÌÌÌÿÌÌÿîîîîîî™™ÿffÌff™ffÌffÌîîîÌÌÿÌÌÿîîîîîîîîîÝÝÝÌÌÿÝÝÝîîîÌÌÿÝÝÝ™™Ì™™ÌffÌff™33™33™33™33™™™ÿÌÌÿÌÌÌÌÌÿÌÌÌÌÌÿÌÌÌÝÝÝÌÌÿîîîÝÝÝÌÌÿÌÌÌ™™ÿÌÌÌ™™ÿ»»»33™33™ffÌ™™Ì™™ÌÌÌÌÝÝÝÌÌÿîîîÌÌÿÝÝÝÌÌÌ™™Ì™™ÌÌÌÌ™™Ì™™Ì™™ÌÿÿÿîîîÌÌÿÌÌÌÌÌÌÌÌÌÌÌÿîîîîîîîîîîîîÿÿÿîîîÌÌÌ»»»ÝÝÝ™™ÌÌÌÿÌÌÿÿÿÿîîî™™ÌÌÌÌÌÌÿÝÝÝîîîîîîîîîîîîîîîÿÿÿÌÌÿÌÌÌffÌ»»»îîîîîîÌÌÌîîîîîîÌÌÿîîîÌÌÿîîîîîîîîîîîîÿÿÿîîîîîîÌÌÿ»»»ÌÌÿîîîîîîîîîÌÌÿîîîîîîffÌff™ffÌÌÌÌîîîÿÿÿîîîîîîÌÌÿîîîîîîÌÌÿîîîÝÝÝ™™Ì™™Ì™™Ì™™ÌffÌ33™33™33™33™ff™ÌÌÿÝÝÝÌÌÿÌÌÌÌÌÿÌÌÌÌÌÿÝÝÝÌÌÿîîîÌÌÌ™™ÌÌÌÌ™™ÌÌÌÌ™™ÌffÌ33™™™Ì™™Ì™™ÌÝÝÝîîîÝÝÝÝÝÝÌÌÿ»»»™™ÿÌÌÌ™™Ì™™ÿ»»»ÌÌÿîîîîîîÿÿÿÌÌÿÌÌÌÌÌÿÌÌÌÌÌÿîîîîîîÌÌÿ™™ÌîîîÿÿÿÌÌÿ™™ÿîîî™™Ìîîîÿÿÿîîîÿÿÿ™™Ì™™ÌÌÌÌÌÌÿîîîÿÿÿÝÝÝÌÌÿÌÌÿîîîîîî™™ÌffÌîîîÌÌÿ™™ÌffÌ™™ÌîîîîîîîîîîîîÌÌÿîîîÿÿÿÿÿÿÿÿÿîîîÌÌÿÌÌÌÌÌÿÝÝÝÿÿÿîîîÌÌÌff™ÌÌÿÝÝÝ»»»ffÌff™ÌÌÿîîîîîîÿÿÿÿÿÿÝÝÝîîîÌÌÿîîîîîîÌÌÿ™™Ìff™ffÌ™™Ì™™Ì33™33™33™ffÌff™™™ÌÌÌÿ»»»ÌÌÿÌÌÌÌÌÿîîîÝÝÝÝÝÝ™™Ì™™ÿ»»»ÌÌÿ™™ÌÌÌÿ™™Ìff™33™ffÌ™™Ì™™Ì™™Ì»»»ÌÌÌ™™Ì»»»™™ÿ»»»™™Ì™™Ì»»»™™Ì™™ÌffÌîîîÝÝÝ™™ÌffÌ33™ffÌîîîÝÝÝ™™Ì33™33™™™ÌÌÌÿÝÝÝ33™™™Ì™™ÌÌÌÌÌÌÿîîîÿÿÿ™™ÿÌÌÌ™™ÌÌÌÿîîîîî̙™Ì™™Ìîîîîî̙™ÌîîîÝÝÝffÌff™ffÌîîîîîîÌÌÿ™™Ì™™Ì»»»ÌÌÿîîîîîîÌÌÿ»»»ff™ffÌÝÝÝîîî™™ÌffÌffÌ™™ÌÝÝÝÌÌÿff™ffÌ™™Ì»»»ÌÌÿîîîÌÌÿÌÌÌÌÌÿÌÌÌÌÌÌÌÌÿ™™Ìff™ffÌff™™™ÌffÌff™33™33™33™33™ffÌff™™™ÌffÌ™™Ì™™ÌÌÌÿ™™Ì™™Ì™™Ì»»»ÌÌÿ™™ÌÌÌÌ»»»™™Ì33™33™™™Ì™™Ì™™Ìˆˆˆªªª™™Ì»»»™™ÿ»»»™™ÌÌÌÿ™™ÌÌÌÿ™™Ì™™Ìff™îîîÌÌÿ™™Ìff™ff™ffÌîîîÌÌÿ™™Ì33™33™™™ÌÝÝÝÝÝÝffÌ™™Ì™™Ì™™ÌÌÌÿîîîîîî»»»™™Ì™™ÌîîîîîîÌÌÿff™ff™ff™ÌÌÿîîîÌÌÌÌÌÌÌÌÿîîîff™ffÌff™ÌÌÿîîîîîî»»»™™ÿ»»»™™ÌîîîîîîÌÌÿ™™ÌffÌ™™ÌÝÝÝîîî™™Ìff™ff™™™ÌîîîÝÝÝffÌffÌ»»»™™ÿÌÌÌîîîîî̙™Ì™™ÌÌÌÿÝÝÝÌÌÿffÌff™ffÌ™™Ìff™ffÌ33™33™33™33™ff™™™ÌffÌff™ffÌff™»»»™™Ì™™Ì™™ÌÌÌÿ™™ÌÌÌÌ™™ÿ™™Ì™™ÿff™33™ff̪ªª™™Ìˆˆˆªªª™™Ì™™Ì»»»™™ÿ»»»™™Ì»»»™™Ì»»»ffÌffÌîîîîîî™™ÌffÌff™™™ÌÝÝÝÝÝÝffÌ33™33™ffÌîîîÌÌÿff™™™Ì™™Ì™™ÌÝÝÝîîîîîî™™ÌÌÌÿ™™ÌîîîîîîîîîffÌ33Ìff™îîîÌÌÿÌÌÿ»»»îîîÌÌÿff™33™ffÌîîîîîîÌÌÿ»»»™™Ì™™ÿ»»»îîîîîîÌÌÌ™™ÌffÌ™™ÌÌÌÿîîî™™ÌffÌff™™™ÌÌÌÿîîî™™Ìff™ÌÌÌ™™ÌÌÌÿÝÝÝÌÌÿÌÌÌ™™ÿ»»»ÌÌÿÝÝÝ»»»ff™33Ìff™™™ÌffÌff™33™33™33™33™ffÌffÌ™™™ffÌff™ffÌÌÌÿ™™Ì™™Ì™™Ì»»»™™ÌÌÌÌÌÌÌÌÌÌ™™Ìff™33™™™Ì™™Ì™™Ìˆˆˆªªªªªª™™ÿÌÌÌ™™Ì»»»™™ÿ»»»™™ÿ™™Ì™™Ìff™ÌÌÿîîî™™Ìff™ffÌ™™Ìîîîîîî»»»ffÌff™™™ÌÌÌÿÝÝÝff™™™Ì™™Ì™™ÌÌÌÿÿÿÿîîîÌÌÌ™™ÌÌÌÌÌÌÿîîîîîîff™™™ÌffÌîîîîîî»»»ÌÌÿîîîîîîffÌffÌff™îîîîîîîîî™™ÿ»»»ÌÌÌÌÌÿÿÿÿÿÿÿîîîîî̙™Ìîîîîîî™™Ì33™ffÌ™™ÌîîîÌÌÿ™™Ì™™Ì™™ÿ»»»ÌÌÿîîîîîî™™ÌÌÌÌ»»»ÌÌÿÝÝÝ™™ÿffÌff™ff™™™Ì™™™ffÌ33™33™33™33™ff™™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÌÌÌÌ™™Ì™™Ì™™ÿÌÌÌ™™ÿ™™ÌÌÌÿ™™Ì33™33™ffÌ™™Ì™™Ì™™™™™Ì»»»»»»ÌÌÿ»»»™™ÿ™™Ì»»»™™Ì»»»ffÌff™îîîîîî™™ÌffÌ™™Ì™™Ìîîîîîî»»»ffÌ™™Ì™™ÌîîîÝÝÝffÌ™™Ì™™Ì™™ÌÌÌÌîîîÿÿÿÌÌÿÝÝÝÌÌÿîîîîîîîîîÌÌÿ™™ÌÌÌÌîîîÌÌÿÌÌÿ»»»îîîÌÌÿff™ff™ff™ÌÌÿÿÿÿÌÌÿ»»»ÌÌÿÌÌÿÝÝÝîîîÿÿÿîîîÝÝÝÌÌÿÝÝÝîîîÌÌÿ™™ÌffÌff™™™ÌÝÝÝÝÝÝ™™Ì»»»îîîÝÝÝîîîîîîîîîÝÝÝÌÌÿÌÌÿîîîÌÌÿÌÌÌff™ff™ffÌffÌffÌff™33™33™33™33™ffÌ™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÿÌÌÿ™™ÿÌÌÌÌÌÌ™™ÿ»»»ÌÌÌ™™Ì™™ÌffÌ33™™™Ì™™Ì™™Ì™™™ªªª»»»™™ÿ»»»™™Ì»»»ÌÌÿ™™ÌÌÌÿ™™Ì™™ÌffÌÌÌÿÝÝÝ™™Ì™™Ì™™Ì™™Ìîîîîîî™™ÿ™™ÌffÌÌÌÌîîîîîî33™™™Ì™™Ì™™ÌÌÌÿîîîîîîÌÌÿÝÝÝÌÌÿîîîÿÿÿîîî»»»ÌÌÿ»»»îîîîî̙™ÌîîîîîîffÌffÌffÌîîîîîîÝÝÝÌÌÿÝÝÝîîîÝÝÝÿÿÿÿÿÿîîîÌÌÿÝÝÝÌÌÌîîîîîî™™Ìff™ffÌ™™ÌîîîÌÌÿ™™ÌÌÌÿÌÌÿÝÝÝîîîîîîîîîÌÌÿÝÝÝÝÝÝÝÝÝÝÝÝÌÌÿff™33Ìff™™™ÌffÌff™33™33™33™ff™™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÌÌÌÌ»»»ÌÌÿ™™ÌÌÌÌ™™ÌÌÌÿ™™Ì»»»33™33™ffÌ»»»™™Ìˆˆˆ™™Ì»»»ÌÌÌÌÌÿ™™Ì™™Ì™™Ì™™Ì™™Ì»»»ffÌff™îîîîîîÌÌÿ™™Ì™™Ì™™ÌÌÌÿÿÿÿÝÝÝffÌ™™™ÌÌÿîîîÌÌÿff™™™Ì™™Ì™™ÌÝÝÝîîîÿÿÿÝÝÝÌÌÿÝÝÝîîîîîîîîîÌÌÿ™™ÌÌÌÿÿÿÿÝÝÝ™™Ì™™ÌÌÌÿîîîffÌff™ffÌîîîîîîÌÌÿÝÝÝÝÝÝÌÌÿîîîîîîÿÿÿîîîÝÝÝÌÌÿÌÌÿîîîÿÿÿÝÝÝffÌff™ÌÌÿÝÝÝÌÌÿ™™Ì»»»ÌÌÿÌÌÿîîîîîîÿÿÿÝÝÝÌÌÿÌÌÿÌÌÿÝÝÝ™™ÌffÌff™ffÌ™™™ffÌff™33™33™ff™ffÌ™™Ì™™Ì»»»™™Ì™™Ì™™ÌÌÌÿÌÌÿ»»»ÌÌÌÌÌÿÌÌÌ™™ÿ»»»ÌÌÿ™™Ìff™33™™™Ì™™ÌÌÌ̈ˆˆªªª»»»™™ÌÌÌÌ™™ÌÌÌÿ™™ÌÌÌÌ™™ÿ»»»ffÌffÌîîîîî̙™Ì™™Ì™™Ì™™Ìîîîîîî»»»ÌÌÿîîîîîî»»»ffÌ™™Ì™™Ì™™ÌÌÌÿîîîîîîÝÝÝÌÌÿÝÝÝÌÌÿîîîîîîîîîÝÝÝîîîîîîÌÌÿffÌff™ÌÌÿîîîÝÝÝ™™ÌÝÝÝîîîîîîÝÝÝÌÌÿîîîîîîÌÌÿÿÿÿîîîÌÌÿÌÌÿÌÌÌ»»»ÌÌÿîîîÿÿÿ™™Ì™™ÌÝÝÝÝÝÝ™™ÌffÌÌÌÌÝÝÝÌÌÿîîîîîîîîîÌÌÿÝÝÝÝÝÝÝÝÝÌÌÿÝÝÝ™™Ì™™Ì™™ÌffÌffÌ33™33™33™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌÌÌÌÌÌÿ™™ÌÌÌÿÌÌÌÌÌÿÌÌÌ»»»™™Ì™™Ì33™33™™™Ì™™ÿ™™Ìˆˆˆªªª™™ÌÌÌÌÌÌÿ™™Ì™™Ì»»»™™Ì»»»™™Ì™™Ìff™ÌÌÿîîîÌÌÌ™™ÌffÌ™™Ìff™™™ÌÝÝÝÌÌÿîîîÌÌÿ»»»ffÌ™™Ì™™Ì™™Ì™™ÌÌÌÌîîîÿÿÿ™™ÿ»»»™™ÿ»»»™™Ìîîîîîîîîîîîîîîîff™ff™ffÌff™ÌÌÌÌÌÿîîîîîîÌÌÌÌÌÿÝÝÝîîîîîîÌÌÿÝÝÝîîîîîîÝÝÝ™™ÌÌÌÌÌÌÿÌÌÌÌÌÿîîîîîîîîîÌÌÿ™™Ìff™ff™™™ÌÌÌÿ»»»ÌÌÿîîîîîîÝÝÝÝÝÝÌÌÿÌÌÿ»»»™™Ì™™Ì™™Ì™™Ìff™33™33™33™33™™™ÌffÌ™™Ì™™Ì™™Ìff™ffÌff™™™ÌÌÌÌÌÌÿÌÌÌÌÌÿ»»»ÌÌÿ™™Ì™™ÿ™™ÌffÌ33™™™Ì»»»»»»www™™Ì»»»™™ÿ»»»™™ÌÌÌÿ™™Ì™™ÿ™™Ì™™ÌffÌff™ffÌ™™Ì™™Ì™™Ì™™Ìff™ffÌff™33™ffÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÿ™™Ì»»»™™Ì»»»™™Ì™™Ì™™ÿÌÌÌÌÌÿÌÌÿ™™ÌffÌffÌ33™ffÌff™ffÌ™™ÌffÌffÌÌÌÌÌÌÿÝÝÝÌÌÿÝÝÝÌÌÌ™™Ì™™Ì™™Ì»»»™™ÌÌÌÿÌÌÌÌÌÿÌÌÌ™™ÿ™™Ìff™ffÌff™ffÌffÌ™™Ì™™Ì™™Ì»»»ÌÌÿÌÌÿÌÌÿÌÌÌÝÝÝ™™ÌffÌffÌffÌff™33™33™33™33™ffÌ™™™ffÌ™™™ffÌ™™ÌffÌff™ffÌÌÌÌ™™Ì»»»ÌÌÿ»»»ÌÌÿ™™ÌÌÌÌ»»»™™Ì33™ff™™™Ì™™Ì™™ÿˆˆˆªªªªªªÌÌÌ™™ÿ»»»™™Ì™™Ì»»»™™ÌÌÌÌffÌff™™™Ì™™ÌffÌ™™Ì™™Ìff™ffÌffÌ33™33™33™ffÌffÌ™™ÌffÌÌÌÌ™™Ì™™Ì»»»™™Ì»»»™™Ì™™Ì™™ÿ»»»ffÌÌÌÌ™™ÌÌÌÌ»»»ÌÌÿff™ff™ff™ffÌff™ff™ff™ff™33™ÌÌÿîîîÝÝÝîîîÌÌÿ™™ÌÌÌÿ™™Ì™™ÿ™™ÌffÌÌÌÌ™™ÿÌÌÌÌÌÌÌÌÌffÌff™33™ffÌff™ff™™™Ì»»»™™ÿ»»»ÌÌÿÝÝÝÝÝÝÌÌÿÌÌÿ™™Ì™™Ìff™ff™ff™33™33™33™33™ffÌ™™ÌffÌffÌffÌff™ffÌffÌff™™™ÿÌÌÌ™™ÿÌÌÌÌÌÿ»»»ÌÌÿ™™Ì™™Ì™™Ì33™ffÌ™™Ì»»»™™Ìff™ªªª™™Ì™™ÌÌÌÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ffÌ™™Ì™™Ì™™Ì™™ÌffÌ33™ff™ff™33™33™™™™ffÌ™™™™™Ì™™ÿ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÿ»»»™™Ì™™Ì™™Ì»»»ÌÌÿ™™ÌÌÌÿ™™Ìff™33ÌffÌff™33ÌffÌ33™ffÌffÌîîîÝÝÝÌÌÿÝÝÝîî̙™Ì™™Ì»»»™™Ìff™ÌÌÿÌÌÌÌÌÌÌÌÿ»»»ffÌff™ffÌff™ffÌffÌ™™Ì™™Ì™™Ì™™ÌÝÝÝÝÝÝÌÌÿÌÌÌÝÝÝ™™ÌffÌff™ffÌ33™33™33™33™33™™™™ff̈ˆˆ™™Ì™™™ffÌff™ff™ffÌ™™Ì™™Ì»»»ÌÌÌ™™ÿ»»»ÌÌÿ™™Ì™™Ì™™Ì33™ff™™™Ì™™ÿ»»»wwwªªª™™ÌÌÌÌ™™ÿ™™Ì»»»™™ÿ»»»™™Ì™™Ìff™ffÌ™™Ì™™Ìff™™™ÌffÌff™ffÌff™33Ì33™33™ffÌ™™ÌffÌ™™Ì»»»™™Ì™™Ì™™ÿ™™Ì»»»™™Ì™™Ì™™Ì™™Ì™™Ì™™ÿ»»»™™ÿÌÌÌ»»»ffÌff™ff™ffÌff™ff™ffÌff™ffÌÝÝÝÌÌÿîîîÝÝÝÌÌÿ™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ì»»»ÌÌÿ™™ÿÌÌÌffÌff™ffÌ33™ff™ffÌ»»»™™Ì™™ÌÌÌÌÌÌÿÌÌÿÌÌÌÝÝÝÌÌÿ™™Ìff™ff™ffÌ33™33™33™33™33™™™ÌffÌ™™ÌffÌff™ffÌff™ffÌffÌ™™ÌÌÌÌ™™ÌÌÌÿ»»»ÌÌÿÌÌÌ™™Ì™™ÌffÌffÌff™™™Ì»»»™™Ìˆˆˆ™™™ªªª™™Ì»»»™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™™™Ì™™Ì™™Ì™™Ìff™ffÌff™ffÌff™33™33™ff™™™Ì™™ÌffÌÌÌÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì»»»ÌÌÿ»»»ÌÌÿ™™ÌffÌff™ffÌ33™ff™ffÌff™ff™™™ÌÝÝÝÝÝÝÌÌÿÝÝÝÌÌÿ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÿÌÌÌÌÌÌÌÌÿffÌff™ff™ffÌffÌff™™™Ì™™Ì™™Ì™™ÌÌÌÿÌÌÌÌÌÿÌÌÿÌÌÌ™™ÌffÌff™ffÌ33™33™33™33™ff™ffÌ™™Ìff™ffÌffÌff™ffÌff™ff™»»»™™ÿ»»»™™ÿÌÌÌ™™ÌÌÌÌ™™ÿ™™Ì™™™33™ffÌ™™Ì™™Ì™™ÿˆˆˆ™™™™™Ì™™Ì™™ÿ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™ffÌ™™ÌffÌ™™Ì™™Ì™™Ìff™33™ff™ffÌ33™33™ffÌff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ»»»™™ÌÌÌÿ»»»ÌÌÿff™33Ìff™ffÌff™ffÌ33™ffÌ™™ÌÌÌÿÝÝÝÝÝÝÌÌÿÌÌÌ™™Ì™™Ì™™Ì™™Ì™™ÌffÌ»»»ÌÌÿ»»»ÌÌÿ»»»™™ÌffÌ33™ff™ff™ffÌ™™Ì™™Ì™™Ì™™ÌÝÝÝÌÌÿÌÌÌÌÌÌÌÌÿffÌff™33Ìff™33™33™33™33™ff™ffÌ™™ÌffÌ™™™ffÌff™ffÌffÌffÌ™™Ì™™ÌÌÌÌÌÌÌ™™ÿÌÌÌ™™ÿ»»»ffÌffÌff™33™™™Ì»»»»»»ff™™™™ªªª™™Ì»»»™™Ì™™Ì™™Ì™™Ì™™ÌffÌffÌff™™™Ì™™™™™Ì™™ÌffÌff™ffÌffÌff™33™33™ff™™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÿÌÌÌ™™ÌÌÌÌ™™ÌffÌff™ff™ff™33Ìff™ffÌff™ffÌÌÌÌÝÝÝÌÌÿÝÝÝÌÌÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÌ™™ÿÌÌÌÌÌÌffÌffÌff™ffÌffÌ™™Ì™™Ì™™Ì™™Ì™™ÌÌÌÌÌÌÿÌÌÌÌÌÿÌÌÌ™™Ìff™ff™ffÌ33™33™33™33™ff™™™Ìff™™™ÌffÌffÌff™ff̈ˆˆffÌ™™Ì™™Ì™™Ì™™ÿÌÌÌ™™Ì»»»™™Ì™™™ffÌffÌff™™™Ì™™ÿ™™Ì™™™™™™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ffÌffÌ™™ÌffÌ™™ÌffÌffÌff™ff™ffÌ33™33™ffÌffÌ™™™™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌÌÌÌ»»»ÌÌÿ™™ÌÌÌÿff™ff™ffÌffÌff™ffÌff™ff™™™ÌÌÌÌÌÌÿÌÌÿÝÝÝÌÌÿ™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™ÌÌÌÌÌÌÿ»»»ÌÌÿ™™Ìff™ffÌff™ff™ffÌ™™Ì™™Ì™™Ì™™ÌÌÌÿÌÌÌÌÌÌÌÌÿÌÌÌffÌff™ffÌff™33™33™33™33™ff™ffÌ™™ÌffÌ™™™ff™ffÌffÌff™ffÌ™™Ì™™Ì™™ÌÌÌÌ™™ÌÌÌÌ™™ÿ™™ÌffÌff™33™ffÌ™™Ì»»»»»»™™™ˆˆˆ™™™™™Ì™™Ì™™ÌffÌ™™ÌffÌ™™Ìff™ff™ff̪ªª™™Ì™™Ì™™Ìˆˆˆff™33Ìff™ff™33™33™ff™™™Ì™™ÌffÌ»»»™™ÌffÌ™™™™™ÌffÌ™™ÌffÌ™™ÌffÌ™™™™™ÿÌÌÌ™™ÿÌÌÌ»»»ffÌ33Ìff™ff™ff™ff™33ÌffÌ™™ÌÌÌÿÌÌÌÝÝÝÌÌÿ»»»ffÌ™™ÌffÌ™™Ì™™Ì™™Ì™™ÌÌÌÿÌÌÌÌÌÿ»»»ffÌff™33™ffÌff™ffÌ™™Ì™™ÌffÌ™™ÌÝÝÝÌÌÿÌÌÿ»»»ÌÌÿff™ffÌ33™ffÌ33™33™33™33™ff™ff̈ˆˆffÌffÌffÌff™ff™ffÌff™™™Ì™™ÌÌÌÌ™™ÿÌÌÌ™™ÿ»»»™™Ìff™ffÌff™ff™™™Ì™™ÿ™™Ì™™™ˆˆˆ™™Ì™™Ì™™Ì™™ÌffÌ™™™™™ÌffÌff™ffÌff™™™ÌffÌ™™Ì™™ÌffÌffÌff™ffÌffÌ33™33™ffÌ™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™ÌffÌ™™™ffÌ™™™™™Ì™™ÌffÌ»»»ÌÌÿ»»»™™ÿÌÌÌff™ff™ffÌ33ÌffÌff™ff™ff™ffÌÌÌÌÌÌÿÝÝÝÌÌÿÌÌÌ™™ÌffÌ™™™ff̈ˆˆ™™Ì™™ÌÌÌÌÌÌÿ»»»ÌÌÿ™™ÌffÌff™ff™ffÌ™™Ìff™™™Ì™™Ì™™ÌÌÌÌ»»»ÌÌÿ™™ÌÌÌÌ33Ìff™ff™ff™33™33™33™33™ff™ffÌ™™Ì™™ÌˆˆˆffÌffÌffÌff™ffÌ™™Ì™™Ì™™Ì»»»™™Ì»»»™™ÌffÌffÌff™ffÌ33™™™Ì»»»™™Ìªªªff™ˆˆˆ™™Ì™™Ìff™™™ÌffÌ™™Ìff™ffÌff™ffÌ™™ÌªªªffÌ™™Ì™™Ìff™ffÌ33™ff™ff™33™ffÌff™™™Ì™™Ì™™Ìff™™™Ìff™™™Ì™™ÌffÌ™™ÌffÌff™™™Ì»»»™™ÌÌÌÿ»»»ÌÌÿ33™ffÌff™ff™ff™33ÌffÌff™™™ÌÌÌÿÌÌÌÌÌÿÌÌÌÌÌÿff™™™Ì™™ÌffÌ™™ÌffÌ»»»ÌÌÿ™™ÌÌÌÿÌÌÌffÌff™ffÌffÌff™ffÌ™™Ìff™ffÌ™™ÌÌÌÿ™™ÿÌÌÌÌÌÌÌÌÿff™ff™ffÌffÌ33™33™33™33™ff™™™ÌffÌffÌffÌ™™™ff̈ˆˆffÌff™™™Ì™™Ì™™Ì™™ÌÌÌÿ™™Ì™™ÌffÌff™ffÌ33™ff™™™ÌÌÌÿ™™Ìªªªff™™™™™™Ì™™Ì™™ÌffÌ™™Ìff™ffÌff™ffÌff™™™ÌffÌ™™Ì™™Ìff™ffÌff™ff™ffÌ33™33™ff™™™ÌffÌ™™Ì™™ÌffÌff™™™ÌffÌffÌff™™™Ìff™™™ÌffÌ™™ÌÌÌÿ»»»™™ÿ»»»ffÌff™33Ìff™ffÌff™ff™ff™ffÌ»»»ÌÌÌÌÌÌÌÌÿ»»»ffÌ™™ÌffÌff™™™ÌffÌ»»»ÌÌÿÌÌÌÌÌÌÌÌÌff™ffÌff™33™™™ÌffÌ™™ÌffÌ™™Ì™™Ì»»»ÌÌÌÌÌÌ™™ÿ™™Ìff™ffÌff™ff™33™33™33™33™33™ffÌffÌ™™™ffÌ™™Ìff™ffÌff™ffÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™ff™ff™33™ffÌ™™Ì™™Ì™™Ì™™™wwwff™™™Ì™™Ìff™ffÌff™ffÌff™ffÌff™ffÌ™™Ì™™Ì™™Ì™™ÌffÌff™ffÌffÌff™33™33™™™ÌffÌ™™Ì™™™™™ÌffÌffÌff̈ˆˆ™™ÌffÌffÌ™™ÌffÌ™™™ÌÌÿ™™ÌÌÌÌÌÌÌÌÌÿff™ffÌff™ffÌff™ffÌ33ÌffÌffÌÌÌÌ™™ÿÌÌÿÌÌÌ»»»ffÌff™ffÌ™™Ìff™ffÌÌÌÌÌÌÿ™™ÌÌÌÿ™™ÿffÌff™ffÌffÌff™™™Ìff™ff̈ˆˆffÌÌÌÿ™™ÌÌÌÿ»»»™™ÌffÌ33™ffÌ33™33™33™33™33™ff™™™Ì™™™ffÌ™™Ì™™ÌffÌffÌff̈ˆˆ™™ÌffÌ™™Ì™™Ì»»»™™Ì™™ÌffÌ33™ffÌ33™ff™™™Ì™™ÌÌÌÌ™™™ˆˆˆˆˆˆ™™ÌffÌ™™Ìff™™™Ìff™ffÌff™33™ff™ffÌ™™™ffÌ™™Ì™™Ìff™ffÌff™ffÌffÌff™™™Ì™™Ì™™Ì™™Ì™™Ìff™ff™ffÌffÌff™™™Ìff™ff™ffÌffÌÌÌÌÌÌÌ™™ÿ»»»™™ÌffÌff™ffÌff™ffÌff™ff™ff™ff™ÌÌÿ»»»ÌÌÌÌÌÿÌÌÿffÌ™™™ffÌff™™™ÌffÌÌÌÌÌÌÌÌÌÿ»»»ÌÌÌffÌff™ff™ffÌffÌff™™™ÌffÌffÌ™™Ì»»»ÌÌÿ™™ÌÌÌÌ™™ÌffÌff™ffÌff™33™33™33™33™33™™™Ì™™Ì™™Ìff™™™Ì™™Ìˆˆˆ™™ÌffÌ™™Ìff™»»»™™ÿ™™Ì™™ÌffÌff™33™ff™ffÌffÌ™™ÌÌÌÌ™™ÿ™™™ˆˆˆff™™™Ì™™Ìff™ffÌffÌffÌff™ff™ffÌff™™™ÌffÌ™™™™™Ì™™ÌffÌff™ffÌff™ffÌff™ffÌ™™ÌffÌ™™ÌffÌ33™ff™™™Ìff™ffÌff™ffÌffÌff™™™Ì»»»™™ÿ»»»ÌÌÿÌÌÿˆˆˆffÌffÌffÌff™33™ffÌff™ffÌ™™ÌÌÌÌ™™ÿ»»»»»»™™Ìff̈ˆˆffÌffÌff™ÌÌÿÌÌÿ»»»ÌÌÿ»»»ff™ffÌ™™Ìff̈ˆˆffÌff™™™Ìff™ffÌ»»»™™ÌÌÌÿ™™Ì™™Ìff™ffÌff™ffÌ33™33™33™33™33™ffÌffÌ™™Ì™™Ì™™Ì™™ÌffÌffÌff™ffÌ™™Ì™™Ì™™Ì™™Ì™™ÌffÌ33™ffÌ33™33™ff™™™ÌÌÌÿ»»»™™™ˆˆˆff™™™ÌffÌffÌffÌff™ff™ff™33Ìff™ffÌff™™™ÌffÌ™™ÌffÌ™™™ffÌ™™Ìff™ffÌff™™™ÌffÌ™™™™™ÌffÌff™ffÌff™ff̈ˆˆffÌff̈ˆˆffÌffÌ™™ÿ»»»ÌÌÌ™™Ì»»»ffÌffÌff™ff™ff™ffÌff™ffÌ33™™™Ì™™ÿÌÌÌ™™ÌÌÌÿ™™Ìff™ffÌffÌff™™™ÌÌÌÌ™™ÌÌÌÿ™™Ì™™ÌffÌffÌff™ff™ffÌffÌff™ffÌff™™™Ì™™ÿÌÌÌ™™Ì™™Ì™™ÌffÌ33™ffÌff™33™33™33™33™33™ff™™™Ìff™™™Ì™™Ì™™Ìff̈ˆˆ™™ÌffÌ™™Ì™™Ì™™Ì™™Ìff™ff™ff™33™33™33™ff™™™Ì»»»™™Ìˆˆˆ™™™ff™ffÌ™™™ff™™™Ìff™ffÌffÌff™ffÌff™ffÌffÌ™™Ì™™Ì™™Ì™™ÌffÌff™ffÌffÌ™™Ìff™™™ÌffÌ™™Ì33™33™ff™ffÌffÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì»»»™™Ì™™ÿÌÌÌ™™ÿ™™Ì™™Ì™™Ì™™ÌffÌff™ffÌff™ffÌff™»»»™™ÌÌÌÿ™™Ì»»»™™ÌffÌff™™™ÌÌÌÌ™™ÿÌÌÌ»»»ÌÌÿffÌff™ff™ffÌffÌff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì»»»ffÌ™™Ìff™ffÌff™33™33™33™33™ff™ffÌffÌ™™Ì™™Ì™™Ì™™ÌffÌffÌ™™™™™Ì™™Ì™™ÌffÌffÌ33™33™33™ff™33Ì33™™™Ì™™ÿ»»»™™™ˆˆˆff™™™ÌffÌ™™ÌffÌffÌff™™™Ìff™33Ìff™ff™ffÌ™™™ffÌff™™™Ì™™Ì™™Ì™™Ì™™™ffÌffÌ™™™ffÌff™33™33™ffÌff™ff™ff̪ªª™™Ì™™Ì™™Ì™™Ì»»»ÌÌÿ™™Ì™™Ì»»»™™Ì»»»™™Ì»»»™™ÿff™ff™33Ìff™ffÌ™™Ì»»»™™ÌÌÌÿ™™Ì»»»ÌÌÌ™™ÿ»»»™™ÿ»»»™™ÿ»»»™™Ìff™ffÌffÌff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì»»»™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ33™33™33™33™33™ff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™ff™33™ffÌ33™33™ff™33™™™Ì»»»™™ÿff™™™™ˆˆˆff̈ˆˆffÌff™™™ÌffÌffÌffÌff™ff™ffÌff™ffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ìff™ffÌ™™Ì33™ff™33™ff™ffÌff™ffÌ™™Ì™™Ì™™Ì»»»™™Ì™™Ì™™Ì™™Ì»»»™™ÿ»»»™™Ì™™ÿ»»»™™ÌffÌffÌff™ff™ff™ffÌ™™ÿ»»»™™Ì»»»™™ÿ™™ÌÌÌÌ™™ÌÌÌÌ»»»»»»™™ÌffÌffÌff™ffÌff™ff™ffÌ™™Ì»»»™™Ì»»»™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ33™33™33™33™33™33™ff™™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™ÌffÌ™™ÌffÌ33™33™33™33™33™33™33™™™Ì™™Ì»»»ˆˆˆ™™™ˆˆˆ™™ÌffÌff™™™ÌffÌ™™™ffÌff™ff™33Ìff™ff™ff̈ˆˆffÌffÌ™™™ffÌ™™ÌffÌff™ffÌffÌ33™33™33™33™ff™ffÌff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì»»»™™ÿ»»»™™Ì™™ÿ»»»™™Ì™™Ìff™ff™ff™33ÌffÌff™ff™™™Ì»»»™™ÿ™™Ì»»»™™ÿÌÌÌ™™Ì™™ÿ™™ÌffÌff™ff™ff™ffÌff™ffÌffÌ»»»™™Ì™™Ì™™ÿ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ìff™33™33™33™33™33™33™ffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ìff™33™33™ff™33™33™33™33™33™™™Ì™™Ì™™Ìˆˆˆff™™™ÌffÌff™™™ÌffÌff™ffÌ™™Ìff™ffÌff™ffÌffÌff™ffÌffÌ™™™™™Ì™™Ìˆˆˆ™™ÌffÌff™ff™33™33™33™33™ffÌff™ffÌff™™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì»»»™™Ì™™Ì™™ÌffÌ33Ìff™ffÌff™ffÌffÌffÌ™™Ì™™Ì»»»™™Ì™™Ì™™Ì™™Ì™™ÌffÌff™ffÌffÌffÌff™ffÌff™ff™™™Ì™™ÿ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™Ìff™33™33™33™33™33™ff™ffÌff™ffÌ™™Ì™™™™™ÌffÌ™™™ffÌ™™Ì33™33™33™33™33™33™ff™33™33™ffÌ™™Ì™™Ìwwwwwwff™™™Ìff™ff™ffÌff™ff™ff™33Ìff™ffÌ33™ff™ffÌff™ff™ffÌff™ffÌffÌff™33™33™33™33™33™33™33™33™ffÌff™ffÌff™ffÌff™ffÌffÌffÌff™ffÌff™ffÌff™ffÌffÌffÌff™ff™ffÌff™ff™33™ff™ff™ff™ffÌffÌffÌ™™ÌffÌ™™ÌffÌff™ffÌff™ff™ff™ff™ffÌff™ffÌffÌff™ff™ffÌff™ffÌff™ffÌff™ffÌff™33™ff™ff™33™33™33™33™33™33™33™33™ffÌff™ffÌff™ffÌff™ffÌffÌff™ff™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ìff™wwwff™™™ÌffÌ33Ìff™ffÌff™ffÌff™ffÌff™ff™ffÌ33™ff™ffÌff™ffÌff™ff™ffÌ33™33™33™33™33™33™33™ff™ff™ffÌ33™ffÌff™ffÌff™ff™ff™ffÌff™ffÌff™ffÌff™ff™ffÌff™ffÌff™ffÌffÌffÌff™ffÌ33Ìff™ff™ff™ff™ff™ff™ff™ff™ff™ffÌffÌff™ffÌff™ffÌff™ff™ffÌff™ffÌff™ff™ffÌff™ffÌff™ffÌff™ffÌffÌff™33™33™33™33™33™33™ffÌff™ffÌff™ffÌffÌ™™™ffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™Ìwwwwwwˆˆˆ™™ÌffÌff™ff™33Ìff™33Ìff™ff™33Ìff™ffÌff™ffÌff™33™ffÌ33™ffÌff™33™33™33™33™33™33™33™ff™33Ìff™ffÌff™33™ff™33Ìff™ffÌ33™ffÌff™33Ìff™33™ffÌff™33™ffÌ33™ff™33™ff™ffÌff™ff™ff™ffÌffÌ33Ìff™ffÌ33ÌffÌffÌff™ff™33™ffÌff™33™ff™ffÌff™ffÌff™33™ffÌ33™ffÌ33™ff™33Ìff™ffÌff™ff™33™33™33™33™33™33™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ìwwwwwwff™™™ÌˆˆˆffÌff™ff™ffÌff™ffÌff™ffÌff™33Ìff™ffÌ33™ffÌff™ffÌff™ffÌ33™33™33™33™33™33™33™ff™ff™ffÌff™ffÌffÌff™ff™ffÌff™ff™ff™ffÌff™ffÌffÌff™ffÌff™ffÌff™ffÌffÌff™33Ìff™ffÌ33™ff™ff™ff™ffÌff™ff™ff™33™ffÌffÌffÌff™ffÌffÌff™33Ìff™33™ffÌffÌff™ff™ff™ffÌff™ff™ffÌ33™ffÌ33™33™33™33™33™33™ff™ffÌff™™™ÌffÌff™ffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™Ìˆˆˆˆˆˆff™™™ÌffÌffÌffÌff™ff™ffÌ33™ffÌff™ff™ff™ffÌff™ffÌff™ff™ff™33Ìff™33™33™33™33™33™33™33™33Ìff™ff™33™ff™ff™ffÌff™33Ìff™ffÌ33™ff™ffÌff™33™ff™ffÌff™ff™ffÌff™ff™ffÌff™ffÌff™ffÌffÌ33Ìff™ffÌ33™ffÌffÌff™ff™33™ff™ffÌ33™ff™ffÌff™ffÌff™ff™ff™ffÌffÌff™ffÌffÌff™ff™ffÌff™ffÌ33™33™33™33™33™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ìwwwwwwˆˆˆ™™Ì™™Ì™™Ìff™33Ìff™ffÌff™33™ffÌff™ffÌ33™ff™ffÌff™ffÌffÌff™ff™33™33™33™33™33™33™33™ff™ff™ffÌffÌffÌffÌ33™ffÌff™ffÌff™ffÌffÌ33™ffÌff™ffÌ33™ffÌ33Ìff™33™ffÌ33™ff™ff™33Ìff™ff™ffÌff™ff™ffÌff™ff™ffÌffÌff™ffÌff™ff™ffÌff™ff™ffÌff™ffÌffÌ33™ff™33Ìff™33™ffÌ33Ìff™ff™33™33™33™33™33™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™ff™™™Ì™™Ìwwwˆˆˆˆˆˆ™™Ìff™™™ÌffÌff™ffÌff™ff™ffÌff™ˆˆˆˆˆˆff™ffÌ33™ff™33Ìff™ff™ffÌ33™33™33™33™33™33™33™ff™33Ìff™ff™33™ff™ff™ffÌff™33™ffÌff™ff™ff™ff™ffÌff™ffÌff™ff™ff™ffÌffÌff™ffÌffÌff™ff™33Ìff™ff™33Ìff™ff™33Ìff™33™ffÌff™33Ìff™ffÌ33™ffÌ33™ffÌ33™ff™ff™ffÌff™ff™ffÌff™ff™ff™ffÌff™33™33™33™33™ff™ffÌff™ffÌff™ff̈ˆˆffÌffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ìwwwwwwˆˆˆ™™Ì™™Ì™™Ì™™Ìff™ffÌ33™ffÌff™ff™ˆˆˆˆˆˆˆˆˆff™ffÌffÌff™ffÌ33™ffÌ33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ffÌffÌff™ffÌff™ffÌ33™ffÌffÌff™33™ffÌff™ff™ffÌffÌff™ff™ffÌ33™ff™ffÌffÌff™ffÌff™ffÌff™ffÌff™ffÌff™ff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌffÌff™ffÌff™ffÌff™ffÌff™33Ìff™33Ì33™33™33™ffÌffÌff™™™ÌffÌff™ffÌffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌUUUwwwˆˆˆ™™™™™™™™ÌffÌ™™Ìff™ffÌff™ffÌff™ˆˆˆˆˆˆ™™™ff™ff™ff™ff™ffÌff™ff™33™33™33™33™33™33™33™33™ffÌff™33Ìff™ff™33™ffÌ33™ffÌff™ffÌff™33™ffÌff™ff™33Ìff™33™ff™33Ìff™ff™ffÌff™33™ff™ffÌff™33Ìff™ffÌ33™ffÌff™ffÌ33™ff™ffÌ33™ff™ff™ffÌff™ff™ff™33™ffÌ33™ffÌ33™ffÌ33™ffÌff™ffÌff™33™33™ff™ff™ffÌff™ffÌff™ffÌff™ffÌffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì33ffffff™™™Ì™™Ì™™™™™™ffÌffÌff™33Ìff™ffÌff̈ˆˆˆˆˆˆˆˆff™ffÌ33™ffÌff™ffÌ33™33™33™33™33™33™33™ffÌff™ff™ffÌff™ffÌffÌff™ff™ff™ffÌff™ff™ffÌff™ffÌffÌff™ffÌffÌff™ffÌ33™ffÌff™ffÌffÌff™33™ffÌff™ff™ffÌff™ff™33Ìff™ffÌffÌff™ff™ffÌffÌ33™ffÌ33™ffÌffÌff™ff™ff™ffÌff™ff™ff™ffÌff™ff™33™33™ffÌffÌff™ffÌff™ffÌff™ffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDDUUUff™™™Ì™™Ì™™™™™Ì™™Ì™™™ffÌff™ffÌff™ff™ˆˆˆˆˆˆ™™™ff™ff™ffÌff™33Ìff™33™33™33™33™33™33™33™33™ff™33Ìff™ffÌ33™ff™ff™ffÌffÌ33™ff™33Ìff™ffÌff™33™ffÌff™ff™ffÌff™ffÌff™33Ìff™ff™ff™ffÌff™ff™ffÌ33™ff™ffÌff™ffÌff™33™ff™ffÌ33™ff™ff™ff™ffÌff™ff™ff™ffÌffÌff™ff™ffÌffÌ33™ff™33Ì33™ffÌff™ff™ffÌff™ffÌff™ffÌffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™™™™Ì™™Ì33fDDDff™™™Ìff™™™Ì™™™™™™™™ÌffÌff™ff™33Ìff™ff̈ˆˆˆˆˆˆˆˆffÌff™ff™ff™ffÌ33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ffÌffÌ33™ffÌff™ff™ffÌff™ffÌ33™ffÌff™ff™33Ìff™ff™ffÌff™ff™ffÌff™33ÌffÌff™ffÌ33Ìff™ffÌff™ffÌff™ff™ffÌffÌffÌff™ffÌffÌff™ffÌff™33ÌffÌ33™ffÌ33™ffÌ33™ffÌff™ffÌff™ff™ff™ff™ffÌffÌff™ffÌff™™™Ìff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDD33fUUUffÌ™™Ì™™Ì™™Ì™™Ì™™™ªªªffÌff™ffÌff™ff™ff™™™™ˆˆˆˆˆˆffÌffÌff™ff™33™33™33™™™f™™f33™33™33™ffÌff™ff™33Ìff™ff™ffÌff™33Ìff™ffÌff™ff™ffÌff™ffÌff™ffÌffÌ33™ff™33Ìff™ff™ffÌff™ff™33Ìff™ff™ffÌff™33Ìff™33Ìff™ff™ff™33™ffÌff™33™ffÌ33™ffÌff™ff™ffÌff™ff™ffÌff™ff™33™ffÌffÌffÌffÌffÌff™ffÌff™™™ÌffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì33fUUU33fff™™™Ìff™™™Ì™™™™™Ì™™™™™ÌffÌff™ffÌffÌff™ˆˆˆˆˆˆˆˆˆff™ffÌ33™ffÌ33™33™fff™™f™™fwww33™ff™ffÌ33™ffÌff™ff™ffÌff™ffÌff™ff™ffÌ33™ffÌff™ff™33Ìff™ff™ffÌff™ffÌff™ffÌ33Ìff™ff™ffÌff™ffÌff™ff™ffÌff™ff™ffÌff™33Ìff™ffÌff™ff™ffÌff™ffÌff™ff™ffÌff™ffÌff™ffÌff™ffÌffÌff™ff™ffÌff™ff™ffÌff™ffÌff™ff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDD33ffffffÌff™™™Ì™™Ì™™™™™Ì™™™™™Ì™™ÌffÌ33™ff™ff̈ˆˆˆˆˆˆˆˆˆˆˆff™ffÌff™33™33™ff™™™f™™f™™f33™33Ìff™ff™ffÌff™33Ìff™33Ìff™ff™33Ìff™ff™ffÌ33™ffÌff™ff™ffÌ33™ffÌff™ffÌff™ff™ff™ffÌ33™ff™ffÌff™33Ìff™ff™ffÌff™ffÌff™ff™ffÌff™33Ìff™ffÌff™ff™33Ìff™33™ffÌ33™ff™33Ìff™ff™ff™ffÌ™™™ffÌffÌff™ffÌff™ffÌffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™ÌDDDDDDUUUffÌff™™™Ì™™™™™Ì™™™™™Ì™™Ìff™™™Ìff™ffÌff™ff™ˆˆˆ™™™™™fff™ff™ffÌ33™33™33™™™f™™f™™fff™ff™ff™ffÌff™ff™ffÌff™ff™ffÌffÌff™ffÌffÌff™ffÌff™ffÌffÌ33™ff™ff™33Ìff™ffÌffÌffÌ33™ffÌff™33™ffÌff™ffÌff™ff™ff™ff™ffÌff™ff™ffÌff™ffÌ33™ffÌffÌff™ffÌff™ff™ffÌff™ffÌff™ffÌffÌ™™Ì™™Ìff™ffÌffÌff™ffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff̪ªª™™ÌUUUUUUUUUff™ff™ff™™™Ì™™™™™Ìˆˆˆ™™Ì™™Ì™™ÌffÌff™ffÌff™ˆˆˆˆˆˆ™™™ˆˆˆff™ff™33™33™33™™™f™™f™™ffff33™ffÌff™33Ìff™ff™ffÌff™33™ff™ffÌff™33™ff™ff™33Ìff™ff™ffÌffÌff™ff™ffÌ33™ff™ff™ffÌff™ffÌff™ffÌff™ff™ffÌff™ffÌff™ff™ffÌff™33™ffÌff™ff™ff™33™ffÌff™ffÌff™ffÌff™ff™33Ì™™Ì™™ÌffÌffÌffÌff™ff™™™ÌffÌffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™ÌDDD33fff™ff™ffÌff™ff™ffÌ™™ÌffÌ™™ÌffÌ™™Ì™™ÌffÌff™ffÌff̈ˆˆ™™f™™™ff™ff™33™33™33™fffÌÌf™™fwwwff™ff™ffÌff™ffÌffÌ33™ffÌff™ffÌ33™ffÌff™ffÌffÌff™33™ffÌff™ff™ffÌff™ff™ffÌ33™ffÌff™ffÌff™ffÌff™ff™ff™ff™ffÌff™33Ìff™ff™ffÌff™ff™ffÌffÌff™ffÌff™ffÌff™33Ìff™33ÌffÌ™™™ffÌ™™™™™Ì™™Ìff™ffÌffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌUUUUUUUUUffÌff™ff™ffÌff™™™Ì™™™™™Ì™™™™™Ì™™™ªªªªªªff™wwwˆˆˆ™™™™™f™™™ff™33™33™33™ff™™™f™™f™™fff™33Ìff™ffÌ33™ff™ffÌff™ffÌff™ffÌff™ff™33Ìff™ff™ffÌff™ffÌ33™ffÌ33™ffÌff™ffÌff™33™ff™33Ìff™ff™ff™ffÌff™ff™ffÌff™ff™ffÌff™ff™ffÌ33™ff™33™ffÌff™33™ffÌff™ff™ffÌ™™™ffÌ™™Ì™™ÌffÌ™™Ìff™ffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™ÌÌÌÌDDD33f33fff™ffÌff™ff™ˆˆˆˆˆˆ™™Ì™™™™™™™™™ªªªªªª™™™ªªª™™™™™™™™f™™™ˆˆˆ33™33™33™33™33™™™f™™fÌÌfff™ff™ffÌff™ff™ffÌff™ffÌ33™ff™ff™ffÌffÌff™ff™ffÌff™ffÌ33™ff™ffÌff™ff™ffÌff™ffÌffÌff™ff™ff™ff™ffÌff™ff™33Ìff™ffÌff™ff™ff™ffÌff™ffÌffÌff™ffÌff™ffÌff™ffÌffÌffÌ™™Ì™™Ì™™ÌffÌ™™ÌˆˆˆffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì»»»ÌÌÿ33fDDDff™ff™ff™ffÌff™ffÌff™ˆˆˆ™™Ìªªªªªª™™™ªªªªªªªªªªªª™™™™™™ˆˆˆff™ffÌ33™33™33™33™™™f™™3™™fˆˆˆff™33™ffÌff™33Ìff™ff™ffÌffÌ33™ff™ff™ffÌ33™ffÌ33™ff™ffÌff™ff™ffÌ33™ff™33Ìff™ff™ff™ˆˆˆff™ˆˆˆff™ffÌff™ffÌff™ff™ffÌff™ff™ff™ff™ff™ff™ffÌ33™ffÌff™33™ff™™™Ì™™™ffÌ™™ÌffÌ™™™™™ÌffÌffÌffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™ÿ»»»DDDDDD33f33ÌffÌff™ff™ff™ffÌff™ff™™™Ì™™Ì™™Ì™™™™™Ì™™™™™Ì™™™™™™ff™ffÌff™33™33™33™33™wwwÌÌf™™fˆˆˆffÌffÌff™ffÌff™ff™ˆˆˆˆˆˆff™ffÌffÌ33™ffÌff™ffÌff™ffÌff™ffÌffÌff™ffÌffÌff™ff™ff̈ˆˆff̈ˆˆffÌff™ff™ffÌff™33™ffÌff™ff™ff™ff™ff™ffÌ33Ìff™ff™ff™ffÌffÌ™™ÌffÌ™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ìˆˆˆ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌ™™ÌÌÌÿ»»»DDD33fUUUff™ff™ffÌff™ffÌff™ff™ffÌff™ffÌ™™ÌffÌ™™Ì™™Ì™™™™™Ì™™Ì™™ÌffÌ33™33™33™33™33™fff™™f™™fÌÌfff™ff™ff™33Ìff™™™™ÌÌfÌÌ3ˆˆˆff™ff™ff™ffÌff™ff™ffÌff™ffÌ33™ff™33Ìff™ff™ff™ff̈ˆˆˆˆˆˆˆˆff™ffÌff™ffÌ33™ff™ffÌffÌff™ffÌff™ˆˆˆffÌff™ff™ff™ffÌffÌff™™™Ì™™Ì™™ÌffÌ™™Ìff™™™Ì™™Ì™™Ì™™Ì33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™™™ÌÌÌÌ™™Ì33fUUU33™ffÌff™ff™ffÌff™ffÌff™ff™ffÌff™™™Ì™™Ì™™™™™™ªªª™™™™™™™™™™™™™™™33™33™33™33™33™™™fÌÌ3ÌÌfff™ffÌff™ff™ffÌ™™fÌÌfÿÿfˆˆˆffÌffÌff™ffÌ33™ffÌ33™ff™ff™ffÌff™ff™ffÌ33Ìff™ffÌwwwˆˆˆff™ffÌff™ffÌff™ffÌffÌff™ff™ffÌff™™™™ff™ff™ffÌff™ffÌffÌ™™Ì™™Ì™™ÌffÌ™™™™™Ì™™Ì™™ÌffÌ™™Ìff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌ™™ÌÌÌÌ™™ÿUUUDDDUUUffÌ33™ffÌ33™ff™ffÌ33Ìff™ff™ffÌff™ff̪ªªÌÌ™™™fÌÌ™ÌÌfÌÌ™ÌÌ™™™™™™fˆˆˆff™33™33™™™f™™fÌÌfˆˆˆff™33Ìff™ffÌ™™fÌÌ3ÌÌ3™™™ff™33™ffÌff™ffÌff™ffÌffÌ33™ff™ffÌff™ff™ffÌff™ff™ff™ff™ffÌff™ff™33™ffÌff™ff™ff™ff™ff™ff̈ˆˆˆˆˆˆˆˆff™ffÌffÌ™™™ffÌ™™Ìff™™™Ì™™ÌffÌ™™ÌffÌ™™™™™ÌffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌff™™™ÌÌÌÌÌÌÌff™fff33™ff™ff™ffÌff™ffÌff™ff™ffÌff™ffÌff™ff™™™Ì™™™ªªªªªªªªª™™™ÌÌfÌÌfªªªÌÌf™™fÌÌf™™f™™f™™fÌÌf™™fffÌff™ffÌff™™™fÿÿfÌÌfˆˆˆff™ffÌff™33™ff™ffÌff™ff™ffÌffÌff™33Ìff™ffÌ33™ffÌffÌffÌff™ff™ffÌffÌff™ff™ff™ˆˆˆff™ff™ff™ff™ˆˆˆ™™™ff™™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™ÌffÌ™™™™™Ì™™ÌffÌff™ff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ffÌ™™ÌÌÌÿ™™ÌwwwwwwˆˆˆffÌffÌff™ffÌff™33™ffÌff™ffÌ33™ff™ffÌff™ffÌ™™Ì™™Ì™™™ªªªªªª™™™ÌÌf™™fÌÌfÌÌfÌÌf™™fÌÌ3ÌÌf™™fff™ffÌff™ffÌ™™fÌÌfÌÌ3ˆˆˆff™ffÌff™ffÌffÌ33™ff™33Ìff™ff™ffÌff™ffÌff™ffÌff™ff™ff™ff™33Ìff™ff™ff™ˆˆˆ™™™ˆˆˆˆˆˆˆˆˆff̈ˆˆ™™™ªªªªªª™™ÌffÌ™™Ì™™™ffÌ™™ÌffÌ™™ÌffÌ™™Ìff™ffÌff™33ÌffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌffÌffÌff™ffÌffÌ™™Ì»»»™™Ìwwwff™ff™™™Ìff™ffÌff™33Ìff™ffÌ33™ff™ffÌffÌ33™ff™ff™ff™ffÌ™™Ì™™Ì™™™ˆˆˆff™™™™™™™™™fÌÌfÌÌfÌÌf™™fˆˆˆffÌ33™ff™ffÌ™™fÿÿfÌÌ3™™™ffÌ33™ffÌff™ff™ffÌff™ffÌff™33Ìff™ff™ff™33Ìff™ffÌff™ffÌffÌff™ffÌff™ˆˆˆ™™™ˆˆˆˆˆˆ™™™™™™™™™™™Ìªªªªªª™™™™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™™™™Ì™™Ìff™ffÌff™ffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌffÌff™ff™ff™ffÌff™ff™™™Ì™™ÿ™™Ìwwwwwwˆˆˆ™™Ì™™ÌffÌ™™Ìff™ffÌff™ffÌff™ff™ff™ffÌffÌffÌff™ff™ffÌ™™ÌffÌffÌffÌff™™™™ffÌff™™™™™™™ªªªffÌ™™ÌffÌff™ff™™™fÌÌfÿÿfˆˆˆff™ff™ff™33Ìff™ffÌff™ff™ffÌff™ffÌ33Ìff™ff™ffÌ33™ffÌ33™ff™ffÌ33™ff™™™™ˆˆˆ™™™™™™™™™ªªª™™™™™Ì™™™™™Ì™™ÌffÌ™™™ffÌ™™Ì™™ÌffÌ™™ÌffÌff™ffÌff™33™ffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌffÌffÌffÌff™ffÌffÌ™™Ì™™Ì™™Ìff™wwwff™ffÌ™™Ì™™Ì™™Ì™™ÌffÌff™ffÌff™33ÌffÌff™ff™33™ffÌffÌff™ff™™™Ìff̈ˆˆ™™™ÌÌf™™™™™™ff™ff™ffÌ™™Ì™™ÌffÌ™™ÌffÌÌÌ™ÌÌ3ÌÌ3ˆˆˆffÌffÌff™ffÌff™ff™ffÌ33Ìff™ff™ff™ffÌff™ffÌff™ffÌff™ff™ffÌff™ff™ªªª™™fÌÌ™™™™™™Ì™™™ÌÌ™ÌÌfªªªffÌ™™Ìff™™™Ì™™Ì™™Ì™™Ìff™™™ÌffÌff™ff™ffÌff™ffÌff™33Ìff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ff™ff™ff™ffÌff™33™ff™™™Ì™™Ìwwwff™ˆˆˆ™™Ì™™ÌffÌ™™™ffÌ™™Ì™™ÌffÌffÌff™ff™33Ìff™ffÌff™33™ffÌff™ffÌff™ff™ÌÌfÌÌfÌÌfÌÌfªªªff™™™Ì™™Ìff™™™Ì™™Ì™™ÌÌÌfÌÌ3ÿÿf™™™ffÌff™ffÌff™ff™33Ìff™ff™ff™ffÌ33Ìff™ff™33Ìff™ff™ffÌffÌffÌff̪ªªÌÌfÌÌ™ªªª™™™™™Ì™™ÌÌÌf™™™ÌÌ™™™™™™Ì™™Ì™™ÌffÌ™™™ffÌ™™ÌffÌff™ff™ffÌff™33™ffÌff™ff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌffÌff™ffÌff™ffÌffÌffÌffÌff™33™33™™™Ì™™Ì™™Ìwwwwwwff™™™ÌffÌ™™™™™Ì™™Ì™™ÌffÌ™™™™™ÌffÌffÌff™ffÌff™ffÌff™ff™33Ìff™33™33™ˆˆˆ™™fÌÌfÌÌfÌÌfÌÌf™™™™™™™™Ì™™ÌffÌ™™ÌÌÌfÌÌfÿÿf™™f™™Ì™™ÌffÌ™™ÌffÌ™™ÌffÌffÌffÌffÌ™™™ffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™ÌªªªÌÌ™ÌÌ™™™fªªª™™ÌffÌ™™Ì™™™ÌÌ™ÌÌf™™™™™ÌffÌ™™Ì™™ÌffÌffÌff™ff™ffÌ33Ìff™33ÌffÌff™ffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ff™ffÌff™ffÌff™ff™ffÌff™33™33™33™ffÌ™™Ì™™Ìwwwff™ˆˆˆ™™Ì™™ÌffÌ™™ÌffÌ™™™™™ÌffÌ™™Ì™™Ì™™Ì™™ÌffÌff™ff™ffÌff™ff™ffÌ33™33™33™ff™™™fÌÌfÌÌfÌÌ3ÌÌfÌÌf™™™™™Ì™™™ffÌÌÌfÿÿfÌÌ3ÌÌ™ffÌ™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™ÌffÌ™™Ì™™Ìff™™™Ì™™fÌÌfÌÌ™ªªª™™™ffÌ™™Ì™™Ì™™™™™™ÌÌfÌÌf™™™™™Ìff™™™Ìff™ff™ffÌff™ff™ff™ffÌff™ff™ff™33ÌffÌff™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌffÌff™ffÌffÌff™ffÌffÌff™33™33™33™33™™™Ì™™Ì™™Ìff™wwwˆˆˆffÌ™™Ì™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™™ffÌ™™Ì™™Ì™™ÌffÌffÌffÌff™33™33™33™33™33™fff™™fÌÌfÌÌfÿÿfÌÌfÌÌf™™™™™ÌÌÌ™ÌÌ3ÿÿfªªª™™Ìff™™™Ì™™Ì™™™™™™ÌÌf™™™™™™ffÌ™™ÌffÌ™™™™™Ì™™Ìff™™™Ì™™ÌªªªÌÌfÌÌ™ÌÌf™™™™™Ì™™Ì™™ÌffÌ™™Ì™™™ÌÌ™ÌÌfÌÌf™™Ìff™ffÌff™ffÌff™ffÌ33™ffÌff™ff™ffÌffÌff™ff™ffÌff™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ffÌff™ff̈ˆˆffÌff™33™33™33™33™33™33™ffÌ™™Ì™™Ìwwwwwwff™™™Ì™™Ìff™™™ÌffÌ™™Ì™™Ì™™Ìff™™™Ì™™Ì™™ÌffÌ™™ÌffÌ™™Ì™™™™™ÌffÌ33Ìff™33™33™33™33™33™wwwÌÌfÌÌ3ÌÌfÿÿfÌÌfÌÌfÌÌfÌÌfÿÿf™™f™™Ì™™Ì™™ÌffÌ™™™ÿÿfÿÿ3ÌÌ™ffÌ™™Ì™™™™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌÌÌfÌÌ™ÌÌf™™™™™ÌffÌ™™Ìff™™™Ì™™Ì™™ÌªªªÌÌfÌÌf™™fff™33™ffÌff™33™ffÌff™ffÌ33™ffÌ33™ff™ffÌ33™ffÌ33™33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌff™33™33™33™33™33™33™33™™™™™™Ì™™Ìfffff™ˆˆˆ™™ÌffÌ™™Ì™™Ì™™™ffÌ™™ÌffÌ™™Ì™™ÌffÌ™™Ì™™™™™Ì™™ÌffÌ™™ÌffÌ™™™ff™ffÌffÌff™ffÌff™ff™33™ff™™™™ÌÌfÌÌ3ÌÌfÿÿfÌÌ3ÿÿ3ÌÌfÌÌ™ffÌ™™ÌffÌ™™™ÌÌfÌÌ3ÿÿf™™f™™Ì™™ÌffÌ™™ÌffÌ™™Ì™™™ffÌ™™ÌªªªÌÌfÌÌfÌÌf™™Ì™™Ì™™ÌffÌ™™Ì™™ÌffÌff™ˆˆˆ™™fÌÌf™™f™™™ffÌff™ffÌff™ff™ffÌff™ffÌff™ffÌff™ff™ffÌff™ff™33™33™33™33™33™ffÌffÌffÌff™ffÌff™ffÌff™ffÌffÌff™ff™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDDUUUff™™™Ì™™ÌffÌ™™ÌffÌ™™Ì™™™™™ÌffÌ™™Ì™™™ffÌ™™ÌffÌ™™™™™Ì™™Ì™™ÌffÌffÌff™ffÌff™ffÌffÌffÌffÌ™™Ì™™Ì™™™ÌÌ™ÌÌ3ÿÿfÌÌfÿÿfÌÌ3ªªª™™Ì™™™™™Ì™™ÌÌÌfÿÿfÿÿ3ªªª™™ÌffÌ™™Ì™™Ì™™™ffÌ™™Ì™™Ì™™™ÌÌfÌÌfÌÌfªªª™™Ìff™™™Ì™™Ìff™™™™ˆˆˆffÌff™™™™ÌÌfÌÌf™™fff™ffÌ33™ffÌff™33™ffÌff™ff™ffÌ33™ffÌff™33Ìff™33™33™33™ffÌff™ff™ff™ffÌffÌff™ffÌff™ff̈ˆˆffÌ33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì33f33ffffff™ffÌ™™™™™Ì™™Ì™™ÌffÌ™™Ì™™ÌffÌ™™Ì™™Ì™™Ì™™ÌffÌ™™Ìff™™™ÌffÌff™ffÌff™ffÌff™ff™ff™ff™ff™ÌÌfÌÌ™™™Ì™™™ÌÌfÿÿ3ÌÌfÌÌ™™™Ì™™ÌffÌ™™Ì™™™ÿÿfÌÌ3ÌÌf™™™™™Ì™™Ì™™ÌffÌ™™Ì™™ÌffÌ™™ÌªªªÌÌfÌÌfÌÌ™ff™™™Ì™™ÌffÌff™™™™™™fÌÌfÌÌfff™ff™™™fÌÌfÌÌfff™ff™ffÌff™ffÌffÌff™ff™33Ìff™ffÌff™ffÌff™ffÌ33™ff™ffÌff™ffÌffÌffÌff™ff™ff̈ˆˆffÌffÌ33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDDDDD33fffÌff™™™ÌffÌ™™Ìff™™™ÌffÌ™™Ì™™™ffÌ™™ÌffÌ™™Ì™™ÌffÌ™™Ì™™Ìff™ffÌff™ffÌff™ffÌffÌffÌffÌÌÌ™ÌÌfÌÌfÌÌf™™ÌffÌ™™Ì™™™ffÌ™™™ffÌ™™Ì™™ÌÌÌ™ÌÌ3ÿÿfÌÌf™™ÌffÌ™™™ffÌ™™™™™ÌffÌ™™Ì™™Ì™™™ÌÌfÌÌf™™™™™ÌffÌff™ff™ˆˆˆÌÌfÌÌfÌÌfÌÌfÌÌfff™ˆˆˆÌÌf™™™ff™ffÌff™33Ìff™ff™33™ffÌffÌff™ff™33Ìff™ff™ffÌff™ffÌffÌff™ffÌff™ff™™™ÌffÌffÌffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì33fDDDff™ff™ffÌff™ffÌ™™™™™Ì™™Ì™™Ì™™™ffÌ™™Ì™™Ìˆˆˆ™™ÌffÌ™™Ì™™ÌffÌff™ff̈ˆˆffÌffÌff™ff™ff™ffÌ™™™ÿÿfÌÌ3ÿÿfÌÌfªªª™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™™ÌÌfÿÿfÌÌ3ÌÌ™ffÌ™™Ì™™Ì™™ÌffÌ™™Ì™™™™™ÌffÌ™™ÌffÌ™™™ffÌff™ff™ffÌff̈ˆˆÌÌfÌÌfÌÌfÌÌfÌÌfÌÌfff™ffÌff™ff™ffÌff™ff™ffÌffÌff™ff™ff™ffÌff™ffÌ™™Ì™™Ì™™ÌffÌff™ff™ff̈ˆˆffÌffÌff™ff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff̪ªª™™ÌDDD33f33fffÌ33™ff™ffÌff™ffÌffÌ™™Ì™™Ì™™ÌffÌ™™ÌffÌ™™Ì™™Ì™™™™™Ì™™Ìff™ffÌffÌff™ffÌffÌffÌff™ffÌ™™™™™™ÿÿfÌÌ3ÌÌfÌÌfªªª™™Ì™™ÌffÌ™™Ì™™Ì™™ÌÌÌfÌÌ3ÿÿf™™™™™ÌffÌ™™ÌffÌ™™ÌffÌffÌff™ff™ff™ffÌff™ffÌ33™ffÌff™ff™ÌÌfÌÌfÌÌ3™™f™™fÌÌfÌÌfÌÌfwwwffÌ33™ff™ffÌff™33™ff™ffÌ33Ìff™ffÌ™™Ì™™ÌffÌ™™Ìff̈ˆˆffÌffÌff™ffÌff™ffÌffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì33fUUU33fff™ff™ffÌ33™ffÌff™ff™ff™ffÌ™™Ì™™™™™Ì™™ÌffÌ™™ÌffÌ™™ÌffÌffÌff™ffÌff™ff™ff™ff™ff™ff™ffÌ™™Ì™™™ÿÿfÿÿ3ÌÌfÌÌf™™™™™Ì™™™ffÌ™™™™™™ÌÌfÿÿfÌÌfff™™™Ìff™ffÌff™ff™ff™ff™ffÌffÌff™ffÌ33™ff™ffÌff™33Ìff™ÌÌfÌÌfÌÌfˆˆˆff™ÌÌfÌÌ3ÌÌfÌÌfˆˆˆffÌff™33Ìff™ffÌffÌff™™™Ì™™Ì™™Ì™™ÌffÌ™™™™™Ì™™ÌffÌffÌff™ffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDDUUU33fffÌffÌff™ff™ffÌff™ffÌffÌff™ffÌffÌ™™ÌffÌ™™Ì™™™™™ÌffÌ™™™ff™ffÌff™ffÌffÌff™ffÌ33Ì33™ff™ff™ff™ˆˆˆÌÌfÌÌ3ÌÌfÌÌfff™ffÌff™ffÌ™™fÿÿ3ÌÌ3™™fffÌff™ffÌff™ff™ffÌff™ffÌff™ff™33Ìff™ff™ffÌff™ff™ff™ˆˆˆÌÌfÌÌ3ÌÌfffÌff™ff™ÌÌfÌÌfÌÌ3ÌÌfˆˆˆffÌff™™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™Ìff™™™Ì™™ÌffÌ™™Ìff̈ˆˆffÌffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì33fDDD33™ff™ff™33Ìff™ff™33Ìff™ff™ffÌff™ff™ffÌ™™™™™ÌffÌ™™Ì™™ÌffÌffÌff™ffÌff™ffÌff™ffÌff™ffÌffÌffÌffÌff™ˆˆˆÌÌfÌÌfÌÌ3ÌÌfff™ffÌff™ÌÌfÌÌfÌÌf™™™ff™ff™ff™ffÌffÌff™33Ìff™ffÌ33™ff™ffÌffÌff™33ÌffÌff™™™fÌÌfÌÌ3™™fff™ffÌff™ff™ÌÌfÌÌfÌÌ3ÌÌfªªª™™ÌffÌ™™Ì™™™ffÌ™™Ì™™ÌffÌ™™Ì™™ÌffÌ™™Ì™™™ffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDDDDDfffffÌff™ffÌffÌff™ff™ffÌff™ff™ffÌff™ffÌff™ffÌ™™ÌffÌ™™™ff™ffÌff™ffÌff™ffÌff™ffÌff™ffÌ™™Ì™™Ì™™Ì™™Ì™™Ì™™™ÌÌfÌÌfÌÌfÌÌfff™ff™ÌÌfÌÌfÌÌ3ff™ffÌffÌ33™ff™33™ffÌff™ffÌff™ffÌff™ff™33™ffÌff™ff™ffÌÌÌfÿÿ3ÌÌf™™™ffÌff™ffÌ™™Ì™™™ÌÌfÿÿfÿÿ3ÌÌfªªª™™™ffÌ™™Ì™™ÌffÌ™™™™™ÌffÌ™™Ì™™™ffÌ™™Ìff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™™™™Ì™™Ì33f33f33f33™ffÌff™33™ffÌffÌff™ffÌ33Ìff™ffÌff™ffÌff™ff™ff™ffÌffÌff™ff̈ˆˆffÌff™ffÌff™ffÌff™™™™ffÌ™™ÌffÌ™™Ì™™ÌªªªÌÌfÿÿfÌÌfÌÌfÌÌfÌÌfÌÌfÌÌfffÌff™ff™ffÌff™ffÌff™ffÌ33™ff™ffÌff™ffÌffÌff™ffÌff̈ˆˆÿÿ3ÌÌfÌÌf™™™™™Ì™™Ì™™ÌffÌ™™ÌªªªÌÌfÌÌfÿÿ3ÌÌ3ªªª™™ÌffÌ™™Ì™™ÌffÌ™™Ì™™™™™ÌffÌffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDDDDDfffffÌff™ff™ffÌff™ff™33Ìff™ff™ff™ff™ffÌ33™ff™ffÌffÌff™33™ffÌff™ffÌffÌffÌff™ffÌff™ffÌffÌ™™Ì™™™™™Ì™™Ìff™™™ÌªªªÌÌfÌÌfÌÌfÌÌfÌÌfÌÌfªªª™™Ì™™Ì™™ÌffÌ™™Ì™™ÌffÌ™™Ì™™Ì™™ÌffÌ™™ÌffÌ™™™™™Ì™™Ì™™ÌÌÌ™ÌÌfÿÿfÌÌf™™ÌffÌ™™ÌffÌ™™Ì™™Ìff̪ªªÌÌfÿÿfÌÌfÿÿf™™™™™Ìff™™™Ì™™Ìff™ffÌffÌff™ff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì33fDDD33™ff™ffÌ33™ffÌff™33Ìff™ffÌff™33ÌffÌff™ffÌff™ff™ff™33™33™33™33™33™ff™ff™ffÌffÌff™ffÌ™™Ì™™ÌffÌ™™ÌffÌÌÌ™ÌÌf™™™ªªªÌÌfÿÿfÌÌfÿÿfÌÌfªªª™™™ffÌ™™Ì™™Ì™™™ÌÌfÌÌf™™™ffÌ™™Ì™™ÌffÌ™™Ì™™ÌffÌ™™Ìff™ÌÌfÿÿ3ÌÌ3ÌÌ™™™Ì™™Ì™™™™™Ì™™Ìˆˆˆ™™Ì™™Ì™™™ÌÌfÌÌfÿÿ3™™™™™Ì™™Ìff™ffÌff™ffÌff™ff™ffÌ33™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDD33fUUUffÌff™ffÌff™ff™ff™ffÌff™ffÌff™ff™33™ffÌffÌ33Ìff™33™33™33™33™33™33™33™33™ff™ffÌff™™™ÌffÌ™™Ì™™Ì™™™ÌÌfÌÌfÌÌf™™Ì™™™ÌÌfÌÌfÌÌfÌÌ™ffÌ™™Ì™™ÌffÌ™™ÌÌÌfÌÌfÌÌfªªª™™ÌffÌ™™™™™Ì™™ÌffÌ™™Ì™™Ì™™ÌÌÌfÿÿfÌÌ3ªªªffÌ™™ÌffÌ™™Ì™™™ÌÌfÌÌfÌÌf™™Ì™™ÌÌÌfªªªˆˆˆff™ffÌff™ff™ffÌff™33Ìff™ff™ff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì33fUUU33fff™ffÌff™33™ffÌffÌff™ff™33™ffÌff™ffÌff™ff™ff™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff̈ˆˆffÌ™™ÌÌÌfÌÌfÌÌf™™™™™Ì™™Ì™™™™™Ì™™™™™ÌffÌ™™Ì™™Ì™™™ÌÌfÌÌfÌÌf™™™™™Ì™™Ì™™ÌffÌ™™Ì™™Ì™™™ffÌ™™™ÿÿ3ÿÿ3ÌÌf™™Ì™™™™™Ì™™Ì™™™ÿÿfÿÿ3ÌÌfÿÿ3ÌÌf™™fff™ff™ff™33Ìff™ffÌ33Ìff™ffÌff™33™ffÌffÌffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™™™Ì™™ÌDDDUUU33fffÌ33™ff™ffÌff™ff™33™ffÌffÌff™ffÌff™33™ffÌffÌ33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ff™ffÌff™™™™ÌÌfÌÌfÌÌf™™™ffÌ™™ÌffÌ™™ÌffÌ™™Ìˆˆˆ™™ÌÌÌfÌÌfÌÌfªªª™™ÌffÌ™™™ffÌ™™Ìff™™™ÌffÌ™™ÌÌÌ™ÿÿ3ÌÌfÌÌf™™Ì™™ÌffÌff™™™™ÌÌ3ÌÌfÿÿ3ÌÌfÌÌ3ÌÌfÌÌf™™™ff™ffÌff™ff™ff™ffÌff™ff™ffÌff™33™ff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì33f33fUUUffÌff™ffÌff™33ÌffÌff™ffÌff™33™ffÌff™ffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌffÌff™ffÌff™™™™ÌÌfÌÌf™™™ff™ffÌff™ffÌ™™™ffÌ™™Ì™™™ÌÌfÌÌ™ÌÌf™™Ì™™Ì™™Ì™™Ì™™Ì™™Ì™™ÌffÌ™™™ffÌÌÌfÌÌ3ÿÿfˆˆˆff™ff™ffÌff™™™™ÿÿ3ÌÌfÌÌf™™fÿÿfÌÌ3ÌÌfÌÌ3ÌÌfˆˆˆff™33Ìff™ff™33ÌffÌff™ffÌffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDDDDD33™ff™ffÌff™ffÌff™ff™ffÌ33™ffÌff™ff™33Ìff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌ33™ff™ffÌff™™™f™™fÌÌfˆˆˆffÌff™ffÌff™ff™ff™™™fÌÌf™™fˆˆˆff™ff™33™ff™ff™33™ff™ffÌff™ff™ff™™™™™™fffÌffÌ33™ff™ff̈ˆˆÌÌ3ÌÌ3ÌÌfff™ff™ÌÌfÌÌfÌÌfÌÌfÌÌfÌÌfˆˆˆffÌff™ff™ff™ffÌff™ff™33ÌffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™ÌDDD33fUUUffÌff™33™ffÌff™33Ìff™ff™ff™ffÌffÌff™ff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™ff™33Ìff™ff™ffÌff™ff™™™™ÌÌf™™™™™fff™ffÌff™ffÌff™™™™ÌÌf™™™™™fffÌ33Ìff™ffÌffÌffÌffÌff™ffÌff™ffÌffÌff™ff™ff™ff™ff™ffÌff™™™™ÌÌfÿÿf™™fff™ffÌff™ˆˆˆÌÌfÌÌ3ÌÌfÌÌfÌÌf™™fff™ffÌ33Ìff™33™ffÌff™ff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌUUU33fUUU33Ìff™ffÌff™ff™ffÌff™ffÌffÌff™33™ff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌffÌ33™ffÌff™™™™™™f™™™ˆˆˆff™33™ff̈ˆˆ™™™™™f™™fff™ff™ff™ffÌff™ff™33™ff™ffÌ33™ff™33Ìff™ff™ffÌ33ÌffÌffÌff™ff™ˆˆˆÿÿ3ÌÌ3™™fffÌff™ffÌff™ff™ˆˆˆÌÌfÌÌf™™fÌÌfÌÌfˆˆˆff™ff™ffÌffÌff™ffÌffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™™™™Ì™™Ì33fDDD33fffÌff™ffÌ33™ffÌff™ffÌ33™ff™ffÌffÌff™33Ì33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™33™ff™ffÌff™ffÌff™™™f™™f™™™ff™ffÌff™ˆˆˆ™™f™™™™™™ffÌffÌff™ffÌ33™ffÌff™ffÌff™ffÌff™ff™ffÌff™ffÌff™ff™33™ffÌff̈ˆˆÌÌfÌÌfÌÌfffÌff™ff™ffÌff™ffÌff™™™fÌÌfÌÌf™™fÌÌfff™ffÌff™ff™33Ìff™ff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDDUUUfffff™ffÌff™ffÌff™33™ff™ffÌff™33™ff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌffÌff™ff™ffÌff™ff™™™™™™™™™f™™™ff™ˆˆˆ™™™™™f™™fff™ff™ff™ffÌff™ffÌff™ffÌff™33™ffÌffÌff™33™ffÌff™ff™ffÌff™ff™33™™™™ÿÿ3ÌÌf™™fff™33Ìff™ffÌ33™ff™ffÌff™ff™™™fÌÌfˆˆˆff™ff™33Ìff™ff™ffÌ33Ìff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì33f33f33fffÌff™33™ffÌff™ffÌffÌff™ffÌffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ33™ff™ffÌffÌ33™ff™ffÌff™™™f™™™ˆˆˆˆˆˆˆˆˆ™™™™™™ff™ff™ffÌ33™ffÌ33™ff™ffÌ33™ff™ffÌff™ff™ffÌffÌff™33™ffÌ33™ffÌffÌff™ˆˆˆÌÌfÿÿ3™™fffÌff™ffÌff™ffÌff™ˆˆˆˆˆˆff™ffÌff™ff™ffÌff™ffÌff™ffÌff™ff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDDDDD33fffÌff™ffÌff™33Ìff™ff™ffÌ33™ff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌ33™ff™ˆˆˆ™™™ˆˆˆff™ff™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆff™ffÌff™ffÌff™ff™ffÌff™ff™ffÌff™ff™ffÌ33™ff™ff™ffÌff™ffÌff™ff™ff™™™™ÌÌ3ÌÌf™™™ff™ffÌff™ff™ff™ÌÌfÌÌfÌÌfÌÌf™™f™™™ˆˆˆff™ff™ff™ff™33Ìff™ffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì33fUUU33fff™ffÌff™ff™ff™ffÌ33™ff™ffÌff™33™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™33™ffÌff™ffÌff™ff™ˆˆˆˆˆˆff™ff̈ˆˆ™™™ˆˆˆ™™™ˆˆˆff™ffÌff™ffÌff™ffÌffÌ33™ffÌffÌ33™ffÌ33Ìff™ffÌffÌ33Ìff™ffÌff™33Ìff™ff̈ˆˆÌÌ3ÿÿf™™fff™33™ffÌffÌ™™fÌÌfÌÌf™™fÌÌfÌÌf™™fÌÌf™™™™™™ˆˆˆff™ff™ff™ffÌ33™ff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDD33fff™ff™33™ffÌffÌff™ffÌff™ffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ff™ffÌff™ffÌff™™™™ˆˆˆ™™™ff™ff™ˆˆˆˆˆˆˆˆˆˆˆˆffÌff™ffÌ33™ff™33™ff™ffÌff™ff™ffÌff™ff™ffÌff™ff™ff™ffÌ33™ff™ffÌff™33™™™™ÌÌfÌÌ3™™fffÌff™ff™ff™™™fÌÌfÌÌf™™f™™fÌÌf™™f™™fÌÌf™™f™™™ÌÌf™™™ˆˆˆˆˆˆff™ffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™™™™Ì™™Ì33fDDD33fffÌffÌff™33™ffÌ33™ffÌff™33Ìff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌffÌff™33™ffÌff™ˆˆˆˆˆˆff™ffÌff™ffÌff™ff™ffÌff™ff™ff™ffÌff̈ˆˆff™ff™ff™33Ìff™ffÌff™ff™33Ìff™ffÌff™ff™ffÌff™ffÌff™™™™ÌÌ3ÿÿf™™™ff™ffÌ33Ìff̈ˆˆÌÌfÌÌf™™fffÌff™™™™™™™ˆˆˆÌÌf™™f™™™™™f™™™ˆˆˆ™™™wwwffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDDUUU33fff™ff™ff™ffÌff™ff™ff™ffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™33™ff™ffÌff™ffÌff™ff™ˆˆˆff™ff™ffÌff™ffÌ33™ff™33ÌffÌff™ff™ˆˆˆˆˆˆff™ffÌff™ffÌff™33™ffÌff™ff™ffÌ33™ffÌff™ff™ffÌff™ˆˆˆÿÿfÌÌ3™™fffÌff™ff™ff™ff™ÌÌf™™fÌÌfff™ffÌff™ffÌff™ff™ff™ˆˆˆ™™™™™f™™™ˆˆˆˆˆˆ33Ìff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì33fDDD33™ffÌff™33Ìff™ffÌffÌ33™ff™ffÌffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌffÌff™ffÌff™ff™ff™™™™ff™ff™ffÌ33™ffÌff™ffÌffÌff™ff™ff™ˆˆˆˆˆˆff™ffÌff™33Ìff™ffÌff™ffÌff™33Ìff™ffÌff™33ÌffÌ33™ff̈ˆˆÌÌ3ÌÌf™™™ff™ff™ffÌff™ff™™™fÌÌfÌÌfff™ff™ffÌff™ffÌffÌff™ffÌff™ff™ff™ˆˆˆffÌff™ff™ffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™ÌDDD33fUUUff™ffÌff™ffÌ33™ff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌ33™ff™33ÌffÌff™ff™ffÌff™ff™ffÌff™ffÌff™ff™ffÌff™ff™ff™™™™ff™ffÌff™ff™ff™33Ìff™ff™ffÌff™ff™ff™ffÌff™ff™ff™ff™ff™™™™™™fff™ffÌ33™ffÌffÌffÌ™™fÌÌfÌÌfˆˆˆffÌ33™ff™ff™ff™ffÌff™ff™ff™ffÌff™ff™ff™ff™ff™ff™ff™ff™ffÌff™ff™33™33™33™33™33™33™33™33™33™33™33™™™Ì»»»»»»33fUUU33fffÌ33™ffÌff™ff™ffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌffÌff™ff™ffÌff™ˆˆˆff™ffÌff™ff™ff™33Ìff™ff™ff™™™™ff™ff™ff™33Ìff™ffÌffÌff™ffÌ33™ffÌ33™ffÌffÌ33™ff™ffÌffÌffÌff™ffÌff™ffÌff™ffÌ33™ff™ff™™™™™™fÌÌf™™fff™ffÌffÌ33™ffÌff™ˆˆˆ™™™™™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆff™ˆˆˆff™ˆˆˆff™ff™ff™ff™ff™ffÌff™33™ff™ff™33™ff™ffÌff™™™ÌÌÌÿ™™ÌDDDUUU33fff™ffÌff™ff™ffÌffÌ33™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33Ìff™33Ìff™ff™ff™ffÌff™ff™ffÌff™ff™ff™33ÌffÌff™ff™ff™ffÌff™ff™ffÌffÌff™ffÌff™33™ffÌff™ffÌff™ffÌff™33™ff™ffÌ33™ff™33™ffÌff™33™ffÌff™ff™ffÌff™ffÌff™ÌÌfÌÌf™™™ff™ff™ff™ffÌff™ˆˆˆ™™fˆˆˆ™™fˆˆˆ™™™ˆˆˆ™™™ff™™™™ff™™™Ìff™ff™ˆˆˆff™ff™ffÌ33™ff™ffÌffÌffÌffÌffÌff™ff™™™Ì»»»™™Ì33fDDD33™ff™ff™ffÌ33Ìff™ff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ff™ffÌ33Ìff™33Ìff™ffÌff™ff™ffÌff™ffÌff™ff™ffÌff™ˆˆˆff™ffÌff™ff™ffÌff™ffÌff™ff™ffÌff™ff™ffÌff™33™ffÌff™ffÌff™ffÌff™ffÌffÌff™33Ìff™ff™ffÌ33™ffÌ™™fÌÌf™™fˆˆˆffÌ33™ffÌff™ˆˆˆ™™™™™™ˆˆˆˆˆˆff™ff™ffÌff™ff™ff™ff™ff™ffÌffÌff™ffÌff™ffÌff™ff™ff™ff™ff™33™ffÌ33Ì™™Ì™™ÌÌÌÿDDDDDDfffffÌ33™ff™ff™ffÌ33™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ff™ffÌff™ffÌff™ff™ffÌff™ff™ffÌff™ff™ffÌff™ff™ffÌff™ffÌff™ffÌ33™ff™33™ffÌff™33™ffÌ33™ff™ffÌ33™33™ff™ffÌff™ffÌ33™ff™ff™ffÌff™ffÌ33™ffÌff™ff™™™™ÌÌfÌÌfˆˆˆffÌff™ff™ff̈ˆˆˆˆˆ™™fˆˆˆffÌff™ffÌff™ffÌffÌff™ffÌff™ff™ff™ffÌff™ff™ff™ffÌff™ffÌff™ffÌff™ff™ff™™™Ì»»»™™Ì33f33f33fff™ffÌffÌff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌ33™ff™ffÌff™ffÌff™ff™ffÌff™ff™ffÌff™ff™ff™ffÌff™ffÌff™33Ìff™ff™ffÌffÌff™ffÌffÌff™ffÌffÌff™33™33™33™ff™33Ìff™ff™ffÌ33™ff™ffÌff™ffÌff™ff™ff̈ˆˆ™™f™™fˆˆˆff™ffÌ33Ìff™ff™ˆˆˆ™™™™™™wwwffÌff™ffÌff™ff™ff™ffÌff™ffÌff™ff™ff™ffÌff™ff™ff™ff™ff™33Ìff™ffÌffÌ™™Ì™™ÿ»»»DDDUUU33fffÌff™33™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™33™ffÌff™ffÌff™33™ffÌ33™ffÌff™ff™ffÌff™ffÌff™ffÌff™ffÌff™ff™ffÌff™ffÌff™ff™ffÌ33™ff™ffÌff™33™ff™33™33™33™33Ìff™ff™ffÌffÌff™ffÌ33™ff™ffÌff™ffÌff™ff™ÌÌfÌÌfÌÌfff™ff™ff™ff™ff̈ˆˆ™™fˆˆˆˆˆˆff™ff™ff™33™ffÌffÌff™ff™ff™ˆˆˆff™ff™ff™ff™ff™ffÌff™ffÌff™ffÌ33™ff™™™ÌÌÌÌ™™Ì33fDDDff™ff™ffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌff™33Ìff™ff™ffÌff™ff™ffÌ33™ff™ff™ffÌff™33™ff™33Ìff™ff™33Ìff™33Ìff™ff™ffÌff™33™ffÌffÌffÌ33™33™33™33™ff™ffÌ33™ff™ffÌff™ffÌff™33™ffÌ33™ffÌff™™™™™™f™™fff™ffÌffÌffÌ33™ff̈ˆˆ™™™ˆˆˆˆˆˆffÌ33ÌffÌff™33™ffÌff™ˆˆˆffÌff™ffÌff™ffÌffÌff™33Ìff™ffÌff™ffÌff™™™Ì™™ÿÌÌÌDDD33f33fff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™33™ffÌff™ffÌff™ffÌff™33Ìff™ffÌff™ffÌ33™ffÌffÌff™ffÌffÌff™ffÌff™ff™ffÌ33™ff™ffÌff™ff™ff™ff™33™33™33™33™33™ff™ffÌff™ff™ffÌff™ffÌff™ffÌff™ffÌff™ˆˆˆÌÌfÌÌfˆˆˆff™33™ff™ffÌff™ff™ˆˆˆ™™™ˆˆˆff™ff™ff™ffÌff™ff™ff™ff™ˆˆˆffÌff™ffÌff™ff™ffÌff™ff™33™ffÌff™ffÌ™™Ì»»»™™ÿ33fUUU33fffÌ33™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌffÌff™ffÌff™ffÌ33™ff™ffÌff™ff™ffÌff™ff™ff™ffÌff™ff™ffÌ33™ff™ffÌffÌff™ffÌffÌff™ffÌffÌ33™ffÌ33™33™33™33™33™33™ff™33ÌffÌ33™ffÌ33™ffÌff™ffÌ33™ffÌff™™™fˆˆˆffÌff™ffÌffÌff™ff™ff̈ˆˆˆˆˆˆˆˆˆˆˆff™ffÌff™ffÌff̈ˆˆffÌff™ff™ff™ffÌff™33Ìff™ff™ffÌffÌff™33Ìff™™™Ì™™Ì»»»DDDDDD33™ff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ33™ff™ffÌff™33™ffÌff™ffÌff™ff™33Ìff™33™ffÌffÌ33™ff™33Ìff™ff™ffÌ33™ff™33Ìff™ff™ffÌ33™ff™ffÌff™33™33™33™33™33™33™33™ff™ff™ff™ff™ffÌff™33™ff™ffÌff™ff™ffÌff™ff™ffÌff™ff™33™ffÌff™ff™ˆˆˆˆˆˆˆˆˆff™ff™33Ìff™ff™ffÌff™ˆˆˆff™ff™ff™ff™ffÌff™33Ìff™ff™ffÌff™ff™™™ÌÌÌÿ™™ÌDDD33fUUUffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌ33™ff™ffÌff™ffÌff™33ÌffÌff™ffÌffÌff™ff™ffÌff™ffÌff™ffÌff™ffÌff™ff™ffÌ33™ff™ffÌff™ff™ffÌ33™33™33™33™33™33™33™33™ffÌffÌff™ff™ffÌffÌff™ff™ffÌffÌff™ffÌff™33Ìff™ffÌffÌff™ffÌff™ff™™™™ˆˆˆff™ffÌff™ff™ffÌff™ffÌff™ffÌff™ff™ffÌff™ffÌff™ffÌ33™ff™ffÌffÌ™™Ì™™ÌÌÌÌDDD33f33f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌff™ffÌff™ffÌ33™ff™ffÌff™ff™ffÌff™ff™33Ìff™ffÌff™ff™33Ìff™ffÌff™ffÌff™ffÌff™ffÌff™33Ìff™ff™33™33™33™33™33™33™33™33™33™ff™33Ìff™ff™ff™33Ìff™33™ff™ffÌ33™ffÌff™ffÌff™ff™33Ìff™ffÌff™ˆˆˆ™™™ˆˆˆff™ffÌff™33Ìff™ff™ffÌff™ˆˆˆffÌff™ff™ff™ffÌff™ffÌff™33™ff™™™Ì»»»™™ÿDDD33333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌ33™ff™ffÌff™ffÌff™33Ìff™ff™ffÌff™33Ìff™ffÌff™ff™33Ìff™ffÌff™ff™33Ìff™33Ìff™ffÌ33™ffÌff™ffÌffÌ33™33™33™33™33™33™33™33™33™33™ffÌff™33ÌffÌff™ffÌffÌff™ffÌff™ff™ffÌff™33™ffÌff™ffÌff™ffÌff™ˆˆˆˆˆˆˆˆˆff™ffÌff™ff™ffÌff™ffÌff™ff™ff™ffÌff™33™ffÌff™ffÌff™ffÌ™™Ì™™ÿ»»»33f"""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌff™33Ìff™ff™ffÌff™ffÌ33™ff™ff™ffÌff™33™ffÌff™ffÌff™33™ffÌff™ff™ff™ffÌff™ff™ff™ffÌ33™ff™33™33™33™33™33™33™33™33™33™33™33™33Ìff™ff™ffÌff™ff™33Ìff™ff™ffÌ33™ffÌff™ffÌff™ff™33Ìff™ff̈ˆˆ™™™ˆˆˆff™33™ff™ffÌ33Ìff™ff™ffÌff™ff™ff™ff™ffÌff™ffÌ33™ffÌff™™™ÌÌÌÌ»»»""33f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌff™33™ff™ffÌffÌff™ffÌ33™ffÌffÌff™ff™ffÌffÌff™ffÌff™ffÌffÌff™ffÌffÌff™33™ffÌffÌff™ff™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌ33™ffÌff™ff™ffÌ33Ìff™ff™ff™ffÌ33™ffÌff™ff™ffÌff™ff™ˆˆˆˆˆˆffÌffÌff™ffÌff™ff™ffÌff™ffÌff™ff™ff™ff™ff™ff™ffÌff™33Ì™™Ì™™Ì™™ÿ"D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33Ìff™33™ffÌffÌff™ff™33™ffÌff™ffÌff™ff™33Ìff™33™ff™ffÌ33™ff™33™ff™ffÌ33™ff™ffÌff™ff™33ÌffÌff™ff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌff™ff™ff™ffÌffÌff™ffÌff™ff™33Ìff™ff™33ÌffÌff™ffÌff™ff™ffÌ33™ffÌff™33Ìff™ff™ffÌff™ffÌff™ffÌff™ff™ffÌff™™™ÌÌÌÌ»»»333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌffÌff™ff™ffÌff™ffÌ33™ffÌff™ff™ffÌff™ffÌffÌffÌff™ff™ffÌffÌffÌff™ff™33Ìff™ffÌff™ff™ff™ffÌ33Ìff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33Ìff™33ÌffÌffÌff™33™ffÌ33™ff™ffÌff™ffÌffÌff™ff™ffÌff™ff™ffÌff™ff™ff™ffÌff™ff™ffÌff™ffÌff™ff™ff™ff™33Ìff™ff™™™Ì™™ÿ™™Ì3"""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ffÌff™33Ìff™ffÌff™ff™33™ffÌ33™ffÌff™ff™ff™33™ffÌff™ff™33™ff™ffÌff™ffÌ33™ffÌff™33Ìff™ff™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™33™ffÌff™ffÌff™ffÌ33™ffÌff™33™ff™ffÌ33™ff™33ÌffÌ33™ffÌff™33Ìff™ffÌ33™ff™ffÌff™ff™ffÌff™ffÌff™ffÌ™™Ì»»»ÌÌÌ333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ffÌ33™ff™ffÌff™ffÌff™ffÌffÌff™ffÌff™ff™33Ìff™ffÌffÌff™ffÌff™ffÌffÌff™ffÌff™ffÌff™ffÌff™ffÌffÌffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™ffÌff™ffÌff™ffÌff™ffÌffÌff™ffÌff™ffÌff™ff™ffÌff™ffÌff™ffÌff™ffÌffÌff™ffÌff™ff™ffÌff™ffÌ33™™™Ì™™ÿ™™Ì3D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌffÌff™33Ìff™ff™33Ìff™ff™ffÌff™ffÌff™ffÌff™33™ff™ffÌ33™ffÌff™33™ffÌff™33™ff™ffÌ33™ffÌff™33™ff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™33Ìff™ffÌff™33™ff™ff™33Ìff™ffÌff™ffÌff™ff™33Ìff™ff™33Ìff™ff™33™ffÌff™ffÌff™33™ffÌff™ffÌ™™ÌÌÌÌ»»»""""33f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™ff™ff™ffÌff™ff™ffÌff™ff™33Ìff™33Ìff™33™ffÌff™ffÌffÌff™ffÌff™ff™ffÌff™ff™ffÌffÌff™ff™ff™ffÌff™ffÌ33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™33™ff™ffÌffÌff™ffÌff™ff™33Ìff™33Ìff™ffÌff™ffÌff™ffÌffÌff™ff™33Ìff™ffÌffÌ33™ff™ff™™™ÌÌÌÿ™™Ì3"""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33Ìff™33Ìff™ff™ffÌ33™ff™ffÌff™ffÌff™ff™ffÌff™33Ìff™ff™33™ffÌff™33Ìff™ff™33ÌffÌff™33™ffÌffÌ33™ffÌff™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌff™33™ffÌff™33™ffÌff™ffÌff™ffÌff™ffÌ33™ffÌff™33™ff™ffÌff™ffÌff™ff™ff™ffÌffÌ™™Ì»»»™™Ì333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ff™33ÌffÌff™ff™ff™ffÌff™33™ff™ffÌff™ffÌffÌffÌff™33™ff™ffÌ33Ìff™ffÌ33™™™Ì™™ÌÌÌÿ3D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33Ìff™33™ffÌffÌff™ff™33™ff™ff™33™ffÌffÌff™ff™ff™ffÌff™ff™™™Ì»»»™™Ì""""33f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33Ì33™ffÌ33™ffÌff™33™ff™33Ìff™33Ìff™33™ffÌ™™Ì™™ÿ™™Ì""""D33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™ffÌ™™Ì™™Ì"333f33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™33™™™Ì™™Ì™™Ì""""33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33fU33f33™ff™™™Ì3""""""3""""""""3""""""""3""""""""3""""""""3""""""""3""""""""3""""""""3""""""""3""""""""3""""""""3""""""""3""""""""33™33™3"""3""""3"3"""3"""""""3"3"""3"""""""3"3"""3"""""""3"3"""3"""""""3"3"""3"""""""3"3"""3"""""""3"3"""3"""""""3"3"""3"""""""3"3"""3"""""""3"3"""3"""""""3"3"""3"""""""3"""""3"""3"""333fþuJe !Pere@†eše¢e(/Net/Users/epoitier/odbcdrv.tiffÈWˆ¯H_ÀWÀWÀWÀW|HHlibiodbc-3.52.9/mac/iODBCadm/iODBCadm.pbproj/0000755000076400007640000000000012323210720015321 500000000000000libiodbc-3.52.9/mac/iODBCadm/iODBCadm.pbproj/project.pbxproj0000644000076400007640000007134512323204667020344 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 39; objects = { 089C1669FE841209C02AAC07 = { buildSettings = { }; buildStyles = ( 4F9091AC011F3BD104CA0E50, 4F9091AD011F3BD104CA0E50, ); hasScannedForEncodings = 1; isa = PBXProject; mainGroup = 089C166AFE841209C02AAC07; projectDirPath = ""; targets = ( 8D01CCC60486CAD60068D4B7, ); }; 089C166AFE841209C02AAC07 = { children = ( 08FB77ADFE841716C02AAC07, 089C167CFE841241C02AAC07, 089C1671FE841209C02AAC07, 19C28FB4FE9D528D11CA2CBB, ); isa = PBXGroup; name = iODBCadm; refType = 4; sourceTree = ""; }; 089C1671FE841209C02AAC07 = { children = ( 85983E0E07D2C2080022E958, 85983D8707D2C1A50022E958, 85983D8507D2C1870022E958, 08EA7FFBFE8413EDC02AAC07, ); isa = PBXGroup; name = "External Frameworks and Libraries"; refType = 4; sourceTree = ""; }; 089C167CFE841241C02AAC07 = { children = ( 85A1429E09A222FF00A8D155, 85983CCA07D2BCCD0022E958, 85983CCC07D2BCCD0022E958, 85983CCE07D2BCCD0022E958, 85983CD007D2BCCD0022E958, 85983CD207D2BCCD0022E958, 85983CD407D2BCCD0022E958, 85983CD607D2BCCD0022E958, 85983CD807D2BCCD0022E958, 089C167EFE841241C02AAC07, ); isa = PBXGroup; name = Resources; refType = 4; sourceTree = ""; }; 089C167EFE841241C02AAC07 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = InfoPlist.strings; refType = 4; sourceTree = ""; }; 08EA7FFBFE8413EDC02AAC07 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; refType = 0; sourceTree = ""; }; 08FB77ADFE841716C02AAC07 = { children = ( 85983C9C07D2B7A20022E958, 85983C9B07D2B7960022E958, 85983C9A07D2B78C0022E958, 85983C5807D2B6C60022E958, ); isa = PBXGroup; name = Source; refType = 4; sourceTree = ""; }; //080 //081 //082 //083 //084 //190 //191 //192 //193 //194 19C28FB4FE9D528D11CA2CBB = { children = ( 8D01CCD20486CAD60068D4B7, ); isa = PBXGroup; name = Products; refType = 4; sourceTree = ""; }; //190 //191 //192 //193 //194 //4F0 //4F1 //4F2 //4F3 //4F4 4F9091AC011F3BD104CA0E50 = { buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DEBUGGING_SYMBOLS = NO; DEPLOYMENT_POSTPROCESSING = YES; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../macosx/iodbcadm.exp; FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; LIBRARY_STYLE = BUNDLE; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-DODBCVER=0x351 -D_MACX -DDLDAPI_MACX -DMACOSX=103"; SKIP_INSTALL = YES; STRIPFLAGS = "-u -r -s ../../macosx/iodbcadm.exp"; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Development; }; 4F9091AD011F3BD104CA0E50 = { buildSettings = { COPY_PHASE_STRIP = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Deployment; }; //4F0 //4F1 //4F2 //4F3 //4F4 //850 //851 //852 //853 //854 85983C5807D2B6C60022E958 = { children = ( 85983C8107D2B7400022E958, 85983C5D07D2B7260022E958, 85983C5E07D2B7260022E958, 85983C5F07D2B7260022E958, 85983C6007D2B7260022E958, 85983C5907D2B7000022E958, 85983C5A07D2B7000022E958, ); isa = PBXGroup; name = iodbcadm; refType = 4; sourceTree = ""; }; 85983C5907D2B7000022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = drvconn.c; path = ../../iodbcadm/drvconn.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C5A07D2B7000022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = error.c; path = ../../iodbcadm/error.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C5B07D2B7000022E958 = { fileRef = 85983C5907D2B7000022E958; isa = PBXBuildFile; settings = { }; }; 85983C5C07D2B7000022E958 = { fileRef = 85983C5A07D2B7000022E958; isa = PBXBuildFile; settings = { }; }; 85983C5D07D2B7260022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gui.h; path = ../../iodbcadm/gui.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C5E07D2B7260022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Info.c; path = ../../iodbcadm/Info.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C5F07D2B7260022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.exports; name = iodbcadm.exp; path = ../../iodbcadm/iodbcadm.exp; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C6007D2B7260022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcadm.h; path = ../../iodbcadm/iodbcadm.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C6F07D2B7260022E958 = { fileRef = 85983C5D07D2B7260022E958; isa = PBXBuildFile; settings = { }; }; 85983C7007D2B7260022E958 = { fileRef = 85983C5E07D2B7260022E958; isa = PBXBuildFile; settings = { }; }; 85983C7107D2B7260022E958 = { fileRef = 85983C5F07D2B7260022E958; isa = PBXBuildFile; settings = { }; }; 85983C7207D2B7260022E958 = { fileRef = 85983C6007D2B7260022E958; isa = PBXBuildFile; settings = { }; }; 85983C8107D2B7400022E958 = { children = ( 85A1429A09A222D400A8D155, 85A1429B09A222D400A8D155, 85983C8207D2B7780022E958, 85983C8307D2B7780022E958, 85983C8407D2B7780022E958, 85983C8507D2B7780022E958, 85983C8607D2B7780022E958, 85983C8707D2B7780022E958, 85983C8807D2B7780022E958, 85983C8907D2B7780022E958, 85983C8A07D2B7780022E958, 85983C8B07D2B7780022E958, 85983C8C07D2B7780022E958, 85983C8D07D2B7780022E958, ); isa = PBXGroup; name = macosx; refType = 4; sourceTree = ""; }; 85983C8207D2B7780022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = administrator.c; path = ../../iodbcadm/macosx/administrator.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C8307D2B7780022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = confirm.c; path = ../../iodbcadm/macosx/confirm.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C8407D2B7780022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = driverchooser.c; path = ../../iodbcadm/macosx/driverchooser.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C8507D2B7780022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = driversetup.c; path = ../../iodbcadm/macosx/driversetup.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C8607D2B7780022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = dsnchooser.c; path = ../../iodbcadm/macosx/dsnchooser.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C8707D2B7780022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = errorbox.c; path = ../../iodbcadm/macosx/errorbox.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C8807D2B7780022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fdriverchoose.c; path = ../../iodbcadm/macosx/fdriverchoose.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C8907D2B7780022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gui.h; path = ../../iodbcadm/macosx/gui.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C8A07D2B7780022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.rez; name = iodbcadm.r; path = ../../iodbcadm/macosx/iodbcadm.r; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C8B07D2B7780022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = main.c; path = ../../iodbcadm/macosx/main.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C8C07D2B7780022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = messagebox.c; path = ../../iodbcadm/macosx/messagebox.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C8D07D2B7780022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = translatorchooser.c; path = ../../iodbcadm/macosx/translatorchooser.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C8E07D2B7780022E958 = { fileRef = 85983C8207D2B7780022E958; isa = PBXBuildFile; settings = { }; }; 85983C8F07D2B7780022E958 = { fileRef = 85983C8307D2B7780022E958; isa = PBXBuildFile; settings = { }; }; 85983C9007D2B7780022E958 = { fileRef = 85983C8407D2B7780022E958; isa = PBXBuildFile; settings = { }; }; 85983C9107D2B7780022E958 = { fileRef = 85983C8507D2B7780022E958; isa = PBXBuildFile; settings = { }; }; 85983C9207D2B7780022E958 = { fileRef = 85983C8607D2B7780022E958; isa = PBXBuildFile; settings = { }; }; 85983C9307D2B7780022E958 = { fileRef = 85983C8707D2B7780022E958; isa = PBXBuildFile; settings = { }; }; 85983C9407D2B7780022E958 = { fileRef = 85983C8807D2B7780022E958; isa = PBXBuildFile; settings = { }; }; 85983C9507D2B7780022E958 = { fileRef = 85983C8907D2B7780022E958; isa = PBXBuildFile; settings = { }; }; 85983C9607D2B7780022E958 = { fileRef = 85983C8A07D2B7780022E958; isa = PBXBuildFile; settings = { }; }; 85983C9707D2B7780022E958 = { fileRef = 85983C8B07D2B7780022E958; isa = PBXBuildFile; settings = { }; }; 85983C9807D2B7780022E958 = { fileRef = 85983C8C07D2B7780022E958; isa = PBXBuildFile; settings = { }; }; 85983C9907D2B7780022E958 = { fileRef = 85983C8D07D2B7780022E958; isa = PBXBuildFile; settings = { }; }; 85983C9A07D2B78C0022E958 = { children = ( 85983CB707D2B94F0022E958, 85983CB807D2B94F0022E958, 85983CB507D2B9330022E958, 85983CB307D2B90F0022E958, 85983CB107D2B8F10022E958, 85983CAB07D2B8CD0022E958, 85983CAD07D2B8CD0022E958, 85983CA307D2B8930022E958, 85983CA507D2B8930022E958, 85983CA607D2B8930022E958, 85983CA107D2B85F0022E958, 85983C9D07D2B8290022E958, 85983C9E07D2B8290022E958, ); isa = PBXGroup; name = iODBC; refType = 4; sourceTree = ""; }; 85983C9B07D2B7960022E958 = { children = ( 85983CBD07D2B9B30022E958, 85983CBB07D2B98B0022E958, ); isa = PBXGroup; name = iODBCinst; refType = 4; sourceTree = ""; }; 85983C9C07D2B7A20022E958 = { children = ( 85983CBF07D2B9DE0022E958, 85983CC007D2B9DE0022E958, ); isa = PBXGroup; name = "Mac basic functions"; refType = 4; sourceTree = ""; }; 85983C9D07D2B8290022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbc.h; path = ../../include/iodbc.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C9E07D2B8290022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcext.h; path = ../../include/iodbcext.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983C9F07D2B8290022E958 = { fileRef = 85983C9D07D2B8290022E958; isa = PBXBuildFile; settings = { }; }; 85983CA007D2B8290022E958 = { fileRef = 85983C9E07D2B8290022E958; isa = PBXBuildFile; settings = { }; }; 85983CA107D2B85F0022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcunix.h; path = ../../include/iodbcunix.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CA207D2B85F0022E958 = { fileRef = 85983CA107D2B85F0022E958; isa = PBXBuildFile; settings = { }; }; 85983CA307D2B8930022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sql.h; path = ../../include/sql.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CA507D2B8930022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sqltypes.h; path = ../../include/sqltypes.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CA607D2B8930022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sqlucode.h; path = ../../include/sqlucode.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CA707D2B8930022E958 = { fileRef = 85983CA307D2B8930022E958; isa = PBXBuildFile; settings = { }; }; 85983CA907D2B8930022E958 = { fileRef = 85983CA507D2B8930022E958; isa = PBXBuildFile; settings = { }; }; 85983CAA07D2B8930022E958 = { fileRef = 85983CA607D2B8930022E958; isa = PBXBuildFile; settings = { }; }; 85983CAB07D2B8CD0022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dlf.h; path = ../../iodbcinst/dlf.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CAD07D2B8CD0022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dlproc.h; path = ../../iodbc/dlproc.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CAE07D2B8CD0022E958 = { fileRef = 85983CAB07D2B8CD0022E958; isa = PBXBuildFile; settings = { }; }; 85983CB007D2B8CD0022E958 = { fileRef = 85983CAD07D2B8CD0022E958; isa = PBXBuildFile; settings = { }; }; 85983CB107D2B8F10022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = dlproc.c; path = ../../iodbc/dlproc.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CB207D2B8F10022E958 = { fileRef = 85983CB107D2B8F10022E958; isa = PBXBuildFile; settings = { }; }; 85983CB307D2B90F0022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = dlf.c; path = ../../iodbcinst/dlf.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CB407D2B90F0022E958 = { fileRef = 85983CB307D2B90F0022E958; isa = PBXBuildFile; settings = { }; }; 85983CB507D2B9330022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = herr.h; path = ../../iodbc/herr.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CB607D2B9330022E958 = { fileRef = 85983CB507D2B9330022E958; isa = PBXBuildFile; settings = { }; }; 85983CB707D2B94F0022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = unicode.c; path = ../../iodbcinst/unicode.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CB807D2B94F0022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = unicode.h; path = ../../iodbcinst/unicode.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CB907D2B94F0022E958 = { fileRef = 85983CB707D2B94F0022E958; isa = PBXBuildFile; settings = { }; }; 85983CBA07D2B94F0022E958 = { fileRef = 85983CB807D2B94F0022E958; isa = PBXBuildFile; settings = { }; }; 85983CBB07D2B98B0022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcinst.h; path = ../../include/iodbcinst.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CBC07D2B98B0022E958 = { fileRef = 85983CBB07D2B98B0022E958; isa = PBXBuildFile; settings = { }; }; 85983CBD07D2B9B30022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = odbcinst.h; path = ../../include/odbcinst.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CBE07D2B9B30022E958 = { fileRef = 85983CBD07D2B9B30022E958; isa = PBXBuildFile; settings = { }; }; 85983CBF07D2B9DE0022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = getfpn.c; path = ../../iodbcadm/macosx/getfpn.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CC007D2B9DE0022E958 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = getfpn.h; path = ../../iodbcadm/macosx/getfpn.h; refType = 2; sourceTree = SOURCE_ROOT; }; 85983CC107D2B9DE0022E958 = { fileRef = 85983CBF07D2B9DE0022E958; isa = PBXBuildFile; settings = { }; }; 85983CC207D2B9DE0022E958 = { fileRef = 85983CC007D2B9DE0022E958; isa = PBXBuildFile; settings = { }; }; 85983CC707D2BB760022E958 = { fileRef = 089C167EFE841241C02AAC07; isa = PBXBuildFile; settings = { }; }; 85983CCA07D2BCCD0022E958 = { children = ( 85983CCB07D2BCCD0022E958, ); isa = PBXVariantGroup; name = confirmation.nib; path = ""; refType = 4; sourceTree = ""; }; 85983CCB07D2BCCD0022E958 = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/confirmation.nib; refType = 4; sourceTree = ""; }; 85983CCC07D2BCCD0022E958 = { children = ( 85983CCD07D2BCCD0022E958, ); isa = PBXVariantGroup; name = connectionpool.nib; path = ""; refType = 4; sourceTree = ""; }; 85983CCD07D2BCCD0022E958 = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/connectionpool.nib; refType = 4; sourceTree = ""; }; 85983CCE07D2BCCD0022E958 = { children = ( 85983CCF07D2BCCD0022E958, ); isa = PBXVariantGroup; name = driverremove.nib; path = ""; refType = 4; sourceTree = ""; }; 85983CCF07D2BCCD0022E958 = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/driverremove.nib; refType = 4; sourceTree = ""; }; 85983CD007D2BCCD0022E958 = { children = ( 85983CD107D2BCCD0022E958, ); isa = PBXVariantGroup; name = driversetup.nib; path = ""; refType = 4; sourceTree = ""; }; 85983CD107D2BCCD0022E958 = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/driversetup.nib; refType = 4; sourceTree = ""; }; 85983CD207D2BCCD0022E958 = { children = ( 85983CD307D2BCCD0022E958, ); isa = PBXVariantGroup; name = drvchoose.tiff; path = ""; refType = 4; sourceTree = ""; }; 85983CD307D2BCCD0022E958 = { isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/drvchoose.tiff; refType = 4; sourceTree = ""; }; 85983CD407D2BCCD0022E958 = { children = ( 85983CD507D2BCCD0022E958, ); isa = PBXVariantGroup; name = dsnchooser.nib; path = ""; refType = 4; sourceTree = ""; }; 85983CD507D2BCCD0022E958 = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/dsnchooser.nib; refType = 4; sourceTree = ""; }; 85983CD607D2BCCD0022E958 = { children = ( 85983CD707D2BCCD0022E958, ); isa = PBXVariantGroup; name = odbcadmin.nib; path = ""; refType = 4; sourceTree = ""; }; 85983CD707D2BCCD0022E958 = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/odbcadmin.nib; refType = 4; sourceTree = ""; }; 85983CD807D2BCCD0022E958 = { children = ( 85983CD907D2BCCD0022E958, ); isa = PBXVariantGroup; name = odbcdriver.nib; path = ""; refType = 4; sourceTree = ""; }; 85983CD907D2BCCD0022E958 = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/odbcdriver.nib; refType = 4; sourceTree = ""; }; 85983CDA07D2BCCD0022E958 = { fileRef = 85983CCA07D2BCCD0022E958; isa = PBXBuildFile; settings = { }; }; 85983CDB07D2BCCD0022E958 = { fileRef = 85983CCC07D2BCCD0022E958; isa = PBXBuildFile; settings = { }; }; 85983CDC07D2BCCD0022E958 = { fileRef = 85983CCE07D2BCCD0022E958; isa = PBXBuildFile; settings = { }; }; 85983CDD07D2BCCD0022E958 = { fileRef = 85983CD007D2BCCD0022E958; isa = PBXBuildFile; settings = { }; }; 85983CDE07D2BCCD0022E958 = { fileRef = 85983CD207D2BCCD0022E958; isa = PBXBuildFile; settings = { }; }; 85983CDF07D2BCCD0022E958 = { fileRef = 85983CD407D2BCCD0022E958; isa = PBXBuildFile; settings = { }; }; 85983CE007D2BCCD0022E958 = { fileRef = 85983CD607D2BCCD0022E958; isa = PBXBuildFile; settings = { }; }; 85983CE107D2BCCD0022E958 = { fileRef = 85983CD807D2BCCD0022E958; isa = PBXBuildFile; settings = { }; }; 85983D8507D2C1870022E958 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBC.framework; path = ../../mac/iODBC/build/iODBC.framework; refType = 2; sourceTree = SOURCE_ROOT; }; 85983D8607D2C1870022E958 = { fileRef = 85983D8507D2C1870022E958; isa = PBXBuildFile; settings = { }; }; 85983D8707D2C1A50022E958 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBCinst.framework; path = ../../mac/iODBCinst/build/iODBCinst.framework; refType = 2; sourceTree = SOURCE_ROOT; }; 85983D8807D2C1A50022E958 = { fileRef = 85983D8707D2C1A50022E958; isa = PBXBuildFile; settings = { }; }; 85983E0E07D2C2080022E958 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; refType = 0; sourceTree = ""; }; 85983E0F07D2C2080022E958 = { fileRef = 85983E0E07D2C2080022E958; isa = PBXBuildFile; settings = { }; }; 85A1429A09A222D400A8D155 = { fileEncoding = "-2147483641"; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = filedsn.c; path = ../iodbcadm/macosx/filedsn.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85A1429B09A222D400A8D155 = { fileEncoding = "-2147483641"; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gensetup.c; path = ../iodbcadm/macosx/gensetup.c; refType = 2; sourceTree = SOURCE_ROOT; }; 85A1429C09A222D400A8D155 = { fileRef = 85A1429A09A222D400A8D155; isa = PBXBuildFile; settings = { }; }; 85A1429D09A222D400A8D155 = { fileRef = 85A1429B09A222D400A8D155; isa = PBXBuildFile; settings = { }; }; 85A1429E09A222FF00A8D155 = { children = ( 85A1429F09A222FF00A8D155, ); isa = PBXVariantGroup; name = gensetup.nib; path = ""; refType = 4; sourceTree = ""; }; 85A1429F09A222FF00A8D155 = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/gensetup.nib; refType = 4; sourceTree = ""; }; 85A142A009A222FF00A8D155 = { fileRef = 85A1429E09A222FF00A8D155; isa = PBXBuildFile; settings = { }; }; //850 //851 //852 //853 //854 //8D0 //8D1 //8D2 //8D3 //8D4 8D01CCC60486CAD60068D4B7 = { buildPhases = ( 8D01CCC70486CAD60068D4B7, 8D01CCC90486CAD60068D4B7, 8D01CCCB0486CAD60068D4B7, 8D01CCCD0486CAD60068D4B7, 8D01CCCF0486CAD60068D4B7, ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = "../../mac/iODBCinst/build/Deployment ../../mac/iODBCinst/build ../../mac/iODBC/build/Deployment ../../mac/iODBC/build"; GCC_ENABLE_TRIGRAPHS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; HEADER_SEARCH_PATHS = ../../include; INSTALL_PATH = /; LIBRARY_SEARCH_PATHS = ""; LIBRARY_STYLE = Bundle; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-DODBCVER=0x351 -D_MACX -DDLDAPI_MACX -DMACOSX=103"; OTHER_LDFLAGS = "-multiply_defined suppress"; OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iODBCadm; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = bundle; }; dependencies = ( ); isa = PBXBundleTarget; name = iODBCadm; productInstallPath = .; productName = iODBCadm; productReference = 8D01CCD20486CAD60068D4B7; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable iODBCadm CFBundleGetInfoString iODBC Adminstrator Library CFBundleIconFile CFBundleIdentifier org.iodbc.adm CFBundleInfoDictionaryVersion 6.0 CFBundleName iODBC Administrator CFBundlePackageType BNDL CFBundleShortVersionString 3.52.8 CFBundleSignature odbc CFBundleVersion 3.52.8 CFPlugInDynamicRegisterFunction CFPlugInDynamicRegistration NO CFPlugInFactories 00000000-0000-0000-0000-000000000000 MyFactoryFunction CFPlugInTypes 00000000-0000-0000-0000-000000000000 00000000-0000-0000-0000-000000000000 CFPlugInUnloadFunction "; }; 8D01CCC70486CAD60068D4B7 = { buildActionMask = 2147483647; files = ( 85983C6F07D2B7260022E958, 85983C7207D2B7260022E958, 85983C9507D2B7780022E958, 85983C9F07D2B8290022E958, 85983CA007D2B8290022E958, 85983CA207D2B85F0022E958, 85983CA707D2B8930022E958, 85983CA907D2B8930022E958, 85983CAA07D2B8930022E958, 85983CAE07D2B8CD0022E958, 85983CB007D2B8CD0022E958, 85983CB607D2B9330022E958, 85983CBA07D2B94F0022E958, 85983CBC07D2B98B0022E958, 85983CBE07D2B9B30022E958, 85983CC207D2B9DE0022E958, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 8D01CCC90486CAD60068D4B7 = { buildActionMask = 2147483647; files = ( 85983CC707D2BB760022E958, 85983CDA07D2BCCD0022E958, 85983CDB07D2BCCD0022E958, 85983CDC07D2BCCD0022E958, 85983CDD07D2BCCD0022E958, 85983CDE07D2BCCD0022E958, 85983CDF07D2BCCD0022E958, 85983CE007D2BCCD0022E958, 85983CE107D2BCCD0022E958, 85A142A009A222FF00A8D155, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 8D01CCCB0486CAD60068D4B7 = { buildActionMask = 2147483647; files = ( 85983C5B07D2B7000022E958, 85983C5C07D2B7000022E958, 85983C7007D2B7260022E958, 85983C7107D2B7260022E958, 85983C8E07D2B7780022E958, 85983C8F07D2B7780022E958, 85983C9007D2B7780022E958, 85983C9107D2B7780022E958, 85983C9207D2B7780022E958, 85983C9307D2B7780022E958, 85983C9407D2B7780022E958, 85983C9707D2B7780022E958, 85983C9807D2B7780022E958, 85983C9907D2B7780022E958, 85983CB207D2B8F10022E958, 85983CB407D2B90F0022E958, 85983CB907D2B94F0022E958, 85983CC107D2B9DE0022E958, 85A1429C09A222D400A8D155, 85A1429D09A222D400A8D155, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 8D01CCCD0486CAD60068D4B7 = { buildActionMask = 2147483647; files = ( 8D01CCCE0486CAD60068D4B7, 85983D8607D2C1870022E958, 85983D8807D2C1A50022E958, 85983E0F07D2C2080022E958, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 8D01CCCE0486CAD60068D4B7 = { fileRef = 08EA7FFBFE8413EDC02AAC07; isa = PBXBuildFile; settings = { }; }; 8D01CCCF0486CAD60068D4B7 = { buildActionMask = 2147483647; files = ( 85983C9607D2B7780022E958, ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 8D01CCD20486CAD60068D4B7 = { explicitFileType = wrapper.cfbundle; includeInIndex = 0; isa = PBXFileReference; path = iODBCadm.bundle; refType = 3; sourceTree = BUILT_PRODUCTS_DIR; }; }; rootObject = 089C1669FE841209C02AAC07; } libiodbc-3.52.9/mac/iODBCadministrator/0000755000076400007640000000000012323210720014603 500000000000000libiodbc-3.52.9/mac/iODBCadministrator/iODBCadministrator.pbproj/0000755000076400007640000000000012323210720021557 500000000000000libiodbc-3.52.9/mac/iODBCadministrator/iODBCadministrator.pbproj/project.pbxproj0000644000076400007640000002766512323204667024610 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 39; objects = { 0249A667FF388E1711CA2CEA = { explicitFileType = wrapper.application; isa = PBXFileReference; path = "OpenLink ODBC Administrator.app"; refType = 3; sourceTree = BUILT_PRODUCTS_DIR; }; //020 //021 //022 //023 //024 //030 //031 //032 //033 //034 032007F4FFF1FEE97F000001 = { children = ( 032007F5FFF1FEE97F000001, ); isa = PBXVariantGroup; name = iODBCAdministrator.icns; path = ""; refType = 2; sourceTree = SOURCE_ROOT; }; 032007F5FFF1FEE97F000001 = { isa = PBXFileReference; lastKnownFileType = image.icns; name = English; path = English.lproj/iODBCAdministrator.icns; refType = 4; sourceTree = ""; }; 032007F6FFF1FEE97F000001 = { fileRef = 032007F4FFF1FEE97F000001; isa = PBXBuildFile; settings = { }; }; //030 //031 //032 //033 //034 //040 //041 //042 //043 //044 04313892FE3035C9C02AAC07 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 04DF5BB1FFC0300D7F000001 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; refType = 0; sourceTree = ""; }; 04DF5BB4FFC0300D7F000001 = { fileRef = 04DF5BB1FFC0300D7F000001; isa = PBXBuildFile; settings = { }; }; 04DF5BB9FFC030907F000001 = { fileRef = 04DF5BB8FFC030907F000001; isa = PBXBuildFile; settings = { }; }; 04DF5BC2FFC03B507F000001 = { children = ( 04DF5BC3FFC03B507F000001, ); isa = PBXVariantGroup; name = main.nib; path = ""; refType = 4; sourceTree = ""; }; 04DF5BC3FFC03B507F000001 = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; refType = 4; sourceTree = ""; }; 04DF5BC4FFC03B507F000001 = { fileRef = 04DF5BC2FFC03B507F000001; isa = PBXBuildFile; settings = { }; }; //040 //041 //042 //043 //044 //080 //081 //082 //083 //084 0867D6AAFE840B52C02AAC07 = { children = ( 0867D6ABFE840B52C02AAC07, ); isa = PBXVariantGroup; name = InfoPlist.strings; refType = 4; sourceTree = ""; }; 0867D6ABFE840B52C02AAC07 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; refType = 4; sourceTree = ""; }; 0867D6ACFE840B52C02AAC07 = { fileRef = 0867D6AAFE840B52C02AAC07; isa = PBXBuildFile; settings = { }; }; //080 //081 //082 //083 //084 //190 //191 //192 //193 //194 195DF8CFFE9D517E11CA2CBB = { children = ( 0249A667FF388E1711CA2CEA, ); isa = PBXGroup; name = Products; refType = 4; sourceTree = ""; }; //190 //191 //192 //193 //194 //1C0 //1C1 //1C2 //1C3 //1C4 1CEA8F0D005FBAFB7F000001 = { buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; "Current project version" = 3.52.8; DEPLOYMENT_POSTPROCESSING = YES; DYLIB_COMPATIBILITY_VERSION = ""; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_VERSION = 3.52; "Framework version" = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-DDATEBUILD=\"`date`\" -DODBCVER=0x351 -D_MACX"; RESMERGER_SOURCES_FORK = data; SKIP_INSTALL = YES; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Development; }; 1CEA8F0E005FBAFB7F000001 = { buildSettings = { COPY_PHASE_STRIP = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Deployment; }; 1CEA8F15005FBBC97F000001 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = main.c; path = ../../iodbcadm/macosx/main.c; refType = 2; sourceTree = SOURCE_ROOT; }; 1CEA8F16005FBBC97F000001 = { fileRef = 1CEA8F15005FBBC97F000001; isa = PBXBuildFile; settings = { }; }; //1C0 //1C1 //1C2 //1C3 //1C4 //200 //201 //202 //203 //204 20286C28FDCF999611CA2CEA = { buildSettings = { }; buildStyles = ( 1CEA8F0D005FBAFB7F000001, 1CEA8F0E005FBAFB7F000001, ); hasScannedForEncodings = 1; isa = PBXProject; mainGroup = 20286C29FDCF999611CA2CEA; projectDirPath = ""; targets = ( 20286C34FDCF999611CA2CEA, ); }; 20286C29FDCF999611CA2CEA = { children = ( 20286C2AFDCF999611CA2CEA, 20286C2CFDCF999611CA2CEA, 20286C32FDCF999611CA2CEA, 195DF8CFFE9D517E11CA2CBB, ); isa = PBXGroup; name = "OpenLink ODBC Administrator"; path = ""; refType = 4; sourceTree = ""; }; 20286C2AFDCF999611CA2CEA = { children = ( 71A26EE8069D5782005AC343, 1CEA8F15005FBBC97F000001, F5C2EB0F0518625501A801EC, F5C2EB100518625501A801EC, F5C2EB110518625501A801EC, F5C2EB150518627501A801EC, ); isa = PBXGroup; name = Sources; path = ""; refType = 4; sourceTree = ""; }; 20286C2CFDCF999611CA2CEA = { children = ( 04DF5BC2FFC03B507F000001, 0867D6AAFE840B52C02AAC07, 4973747CFFCC29477F000001, 032007F4FFF1FEE97F000001, ); isa = PBXGroup; name = Resources; path = ""; refType = 4; sourceTree = ""; }; 20286C32FDCF999611CA2CEA = { children = ( 85D1BBC707E7D7C90070A59E, 04DF5BB1FFC0300D7F000001, 04DF5BB8FFC030907F000001, F5C2EB0D0518623801A801EC, ); isa = PBXGroup; name = "External Frameworks and Libraries"; path = ""; refType = 4; sourceTree = ""; }; 20286C34FDCF999611CA2CEA = { buildPhases = ( 20286C35FDCF999611CA2CEA, 20286C36FDCF999611CA2CEA, 20286C38FDCF999611CA2CEA, 20286C3BFDCF999611CA2CEA, 04313892FE3035C9C02AAC07, ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = "../../mac/iODBC/build/Deployment ../../mac/iODBC/build ../../mac/iODBCinst/build/Deployment ../../mac/iODBCinst/build"; HEADER_SEARCH_PATHS = "../../include"; INSTALL_PATH = /Applications/Utilities; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-DDATEBUILD=\"`date`\" -DODBCVER=0x351 -D_MACX"; OTHER_LDFLAGS = "-bind_at_load -multiply_defined suppress"; OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = "OpenLink ODBC Administrator"; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = app; }; dependencies = ( ); isa = PBXApplicationTarget; name = "iODBC Administrator"; productInstallPath = /Applications/Utilities; productName = "iODBC Administrator"; productReference = 0249A667FF388E1711CA2CEA; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable OpenLink ODBC Administrator CFBundleGetInfoString OpenLink ODBC Administrator CFBundleIconFile iODBCAdministrator.icns CFBundleIdentifier org.iodbc.iODBCAdministrator CFBundleInfoDictionaryVersion 6.0 CFBundleName OpenLink ODBC Administrator CFBundlePackageType APPL CFBundleShortVersionString 3.52.8 CFBundleSignature odbc CFBundleVersion 3.52.8 "; }; 20286C35FDCF999611CA2CEA = { buildActionMask = 2147483647; files = ( F5C2EB120518625501A801EC, F5C2EB130518625501A801EC, F5C2EB140518625501A801EC, F5C2EB160518627501A801EC, 71A26EE9069D5783005AC343, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 20286C36FDCF999611CA2CEA = { buildActionMask = 2147483647; files = ( 0867D6ACFE840B52C02AAC07, 04DF5BC4FFC03B507F000001, 4973747EFFCC29477F000001, 032007F6FFF1FEE97F000001, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 20286C38FDCF999611CA2CEA = { buildActionMask = 2147483647; files = ( 1CEA8F16005FBBC97F000001, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 20286C3BFDCF999611CA2CEA = { buildActionMask = 2147483647; files = ( 04DF5BB4FFC0300D7F000001, 04DF5BB9FFC030907F000001, F5C2EB0E0518623801A801EC, 85D1BBC807E7D7C90070A59E, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; //200 //201 //202 //203 //204 //490 //491 //492 //493 //494 4973747CFFCC29477F000001 = { children = ( 4973747DFFCC29477F000001, ); isa = PBXVariantGroup; name = about.nib; path = ""; refType = 4; sourceTree = ""; }; 4973747DFFCC29477F000001 = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/about.nib; refType = 4; sourceTree = ""; }; 4973747EFFCC29477F000001 = { fileRef = 4973747CFFCC29477F000001; isa = PBXBuildFile; settings = { }; }; //490 //491 //492 //493 //494 //710 //711 //712 //713 //714 71A26EE8069D5782005AC343 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcunix.h; path = ../../include/iodbcunix.h; refType = 2; sourceTree = SOURCE_ROOT; }; 71A26EE9069D5783005AC343 = { fileRef = 71A26EE8069D5782005AC343; isa = PBXBuildFile; settings = { }; }; //710 //711 //712 //713 //714 //850 //851 //852 //853 //854 85D1BBC707E7D7C90070A59E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBC.framework; path = ../../mac/iODBC/build/iODBC.framework; refType = 2; sourceTree = SOURCE_ROOT; }; 85D1BBC807E7D7C90070A59E = { fileRef = 85D1BBC707E7D7C90070A59E; isa = PBXBuildFile; settings = { }; }; //850 //851 //852 //853 //854 //F50 //F51 //F52 //F53 //F54 F5C2EB0D0518623801A801EC = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBCinst.framework; path = ../../mac/iODBCinst/build/iODBCinst.framework; refType = 2; sourceTree = SOURCE_ROOT; }; F5C2EB0E0518623801A801EC = { fileRef = F5C2EB0D0518623801A801EC; isa = PBXBuildFile; settings = { }; }; F5C2EB0F0518625501A801EC = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = odbcinst.h; path = ../../include/odbcinst.h; refType = 2; sourceTree = SOURCE_ROOT; }; F5C2EB100518625501A801EC = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sql.h; path = ../../include/sql.h; refType = 2; sourceTree = SOURCE_ROOT; }; F5C2EB110518625501A801EC = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sqltypes.h; path = ../../include/sqltypes.h; refType = 2; sourceTree = SOURCE_ROOT; }; F5C2EB120518625501A801EC = { fileRef = F5C2EB0F0518625501A801EC; isa = PBXBuildFile; settings = { }; }; F5C2EB130518625501A801EC = { fileRef = F5C2EB100518625501A801EC; isa = PBXBuildFile; settings = { }; }; F5C2EB140518625501A801EC = { fileRef = F5C2EB110518625501A801EC; isa = PBXBuildFile; settings = { }; }; F5C2EB150518627501A801EC = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbc.h; path = ../../include/iodbc.h; refType = 2; sourceTree = SOURCE_ROOT; }; F5C2EB160518627501A801EC = { fileRef = F5C2EB150518627501A801EC; isa = PBXBuildFile; settings = { }; }; }; rootObject = 20286C28FDCF999611CA2CEA; } libiodbc-3.52.9/mac/iODBCadministrator/Info-iODBC_Administrator.plist0000644000076400007640000000163712323204667022275 00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable OpenLink ODBC Administrator CFBundleGetInfoString OpenLink ODBC Administrator CFBundleIconFile iODBCAdministrator.icns CFBundleIdentifier org.iodbc.iODBCAdministrator CFBundleInfoDictionaryVersion 6.0 CFBundleName OpenLink ODBC Administrator CFBundlePackageType APPL CFBundleShortVersionString 3.52.8 CFBundleSignature odbc CFBundleVersion 3.52.8 libiodbc-3.52.9/mac/iODBCadministrator/English.lproj/0000755000076400007640000000000012323210720017321 500000000000000libiodbc-3.52.9/mac/iODBCadministrator/English.lproj/InfoPlist.strings0000644000076400007640000000053412323204667022602 00000000000000/* Localized versions of Info.plist keys */ CFBundleName = "OpenLink ODBC Administrator"; CFBundleShortVersionString = "OpenLink ODBC Administrator version 3.52.8"; CFBundleGetInfoString = "OpenLink ODBC Administrator version 3.52.8, Copyright 1995-2012, OpenLink Software"; NSHumanReadableCopyright = "Copyright © 1995-2012, OpenLink Software"; libiodbc-3.52.9/mac/iODBCadministrator/English.lproj/about.xib0000644000076400007640000003257412323204667021107 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES About iODBC Administrator ... 256 YES 256 {{20, 12}, {420, 169}} YES Q29weXJpZ2h0IDE5OTUtMjAxMiwgT3BlbkxpbmsgU29mdHdhcmUgYW5kIEtlIEppbgoKVmVyc2lvbiAz LjUyLjcKCmlPREJDIGlzIGFuIE9wZW4gU291cmNlIERyaXZlciBNYW5hZ2VyIG1haW50YWluZWQgYnkg T3BlbkxpbmsgU29mdHdhcmUgYW5kIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgTEdQTCBhbmQgQlNEIGxp Y2Vuc2VzLgoKUGxlYXNlIHZpc2l0IGh0dHA6Ly93d3cub3Blbmxpbmtzdy5jb20gZm9yIG1vcmUgaW5m b3JtYXRpb24gb24gT3BlbkxpbmsgU29mdHdhcmUgb3IgdG8gZG93bmxvYWQgYWRkaXRpb25hbCBPREJD IERyaXZlcnMuCk1vcmUgaW5mb3JtYXRpb24gb24gaU9EQkMgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93 d3cuaW9kYmMub3JnA 256 {{381, 180}, {65, 30}} OK {460, 209} {{61, 44}, {460, 209}} {{0, 0}, {1024, 768}} YES YES 0 166 YES Window 167 YES 183 IBCarbonStaticText 185 YES YES YES YES YES YES YES YES YES 186 0 3 libiodbc-3.52.9/mac/iODBCadministrator/English.lproj/iODBCAdministrator.icns0000644000076400007640000012035412323204667023562 00000000000000icns ìics#H?~?~?~?þ?þ?þð?þ?þ?~?~?~?~?~?~?~?þ?þ?þð?þ?þ?~?~?~?~is32ZQªæ/ªô€ 8fffÅ.fÿÿf³€ 8Ï”ÿfÅ.fÿpð³€ 8ŦÿfÅÿ.wÿੳ€8fof€ÿä¾€f³€3€.ùÿûyï€.=ƒÿõ©o“ô-ƒY€¸ýjï­€¸ö€ 8f³³}ÕTž@f™f³€ 8föÿfÆ.fÿff³€ 8föÿfÆ.fÿ{µ³€8fÆ.f³€.0]@0AžyÅèFÅø€ U™²™™ØE™ÿÿ™Ì€ Uß¶ÿ™ØE˜ÿ¡õÌ€ UÙÄÿ™ØáE·ÿêÆÌ€U™ž™ñ¦uzM€™Ì€H€E˜feÒ`€EUƒ”½¤¨^aƒƒ€Ïi3Í`F€Ïø€ U™ÌÌ2 @™º™Ì€ U™ùÿ™ÙE™ÿ™™Ì€ U™ùÿ™ÙE™ÿ¨ÍÌ€U™ÙE™Ì€EGvIGaž¡ãì^ãû€ pÌÙÌÌì\ÌÿÿÌå€ pïÛÿÌì\ÊÿÐúå€ pìâÿÌìÖ\ÿôâå€pÌÏÌí‰GW(€Ìå€]€\w33M1€\hƒp§‘.$1ƒ°€ç7 80"€çû€ pÌææd) ÌÜÌå€ pÌüÿÌì\ÌÿÌÌå€ pÌüÿÌì\ÌÿÔæå€pÌì\Ìå€\^P^‚žs8mkÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·ÿÿÿÿÿICN#þ?øþ?øþ?øþ?øþ?øþ?øÿÿøÿÿøÿÿøÿÿøÿÿø?ü?üüÿÿøÿÿøÿÿøÿÿøþ?øþ?øþ?øþ?øþ?øþ?øüøþ?øþ?øþ?øþ?øþ?øþ?øÿÿøÿÿøÿÿøÿÿøÿÿø?ü?üüÿÿøÿÿøÿÿøÿÿøþ?øþ?øþ?øþ?øþ?øþ?øüøil32£áG²„¸Ç~€Pª„¸¿í„.…fhÌ€.…fgЄ.†fÅ€.†fÆ„.ffÒ€ÿèffÅ€.ffÿüffÆ„ .ffÿìfÝÿffÅ€ .ffÿÿfËÿffÆ„ .ffÿ fuÿffÅ€ .f[ÿÿf ÿffÆ„.ffÿÀfˆÿffÅäÿ».duÿÿfÙÿffÆ„.ffýÿf‚ÿþÛOÿñffÆ„.€fk³nf‚ÿþè‚Å„fÆ„.e‚fƒÿölxß¹ƒf­„;ƒ. ÿùþÿÿûÆx°éœƒ.+Š sÿªU¹öâ[mÞ퇑 Œÿÿw­Ioo—ûëm‘ 2ÿÿ³U¦vmÄÿÕF‹D¬‚¶ çýÿ%\juñø”@‚¶¾ÿ„.ƒf ´Âíþ'j±÷Â@@ƒfË„.ffÿ puƒÀÃR®@@fÙ·€fÆ„ .ffÿÿ³ÿÿf@A…z€@f‚ÿffÆ„ .ffÿÿÌÿÿffÆ€ .ffÿÿfvqffÆ„ .ffÿÿÆÿÿffÆ€.ffÿÝ‚fÆ„ .ffÿÿêÿffÆ€ .ffÿÿjàÿffÆ„.ffÿèffÆ€.ff|€ÿÐffÆ„.†fÆ€.†fÆ„.e…f¯€.b…f´„†.‚†.9ÿájË„ÏÚ~€_Ç„ÏÔí„E…™›Ý€E˜„™šß„E†™Ø€E†™Ù„E™™á€ÿ؀E™™ÿý™™Ù„ E™™ÿó™éÿ™™Ø€ E™™ÿÿ™Üÿ™™Ù„ E™™ÿ¿™¢ÿ™™Ø€ E˜Šÿÿ™¿ÿ™™Ù„E™™ÿÖ™°ÿ™™Øãû¶E•´ÿÿ™æÿ™™Ù„E™™þÿ™üôåÔÅ®}xÿö™™Ù„E€™ œÌŸ™ô踎ƒ„ÕN˜ƒ™Ù„E˜‚™ àÚ’kffcŸ¿ZJ‚™˜È„BƒE Ì¥jffe^ÑG^?ƒE.Š k±—"KcZ¶ÈY_6‘ ~˜Á¿ª¨Ï[d^,‘ #|ާ«áÑÏOgU‹cÇ‚Ï ]g´;¹Íª`d<‚ÏÔÿ„E˜‚™ HNfÕMÎFdNƒ™Ü„E™™ÿ Ÿ/4l¶’E4™µåÏ€™Ù„ E™™ÿÿÌÿÿ™m_€™‚ÿ™™Ù„ E™™ÿÿÝÿÿ™™Ù€ E™™ÿÿ™£ ™™Ù„ E™™ÿÿØÿÿ™™Ù€E™™ÿè‚™Ù„ E™™ÿÿ²ñÿ™™Ù€ E™™ÿÿ›ëÿ™™Ù„E™™ÿï™™Ù€E™™§€ÿà™™Ù„E†™Ù€E†™Ù„E—„™˜Ê€E”„™˜Í„†E‚†E<ÿáŽå„çì~€nã„çêí„\…ÌÍî€\Ë…Ìï„\†Ìì€\†Ìì„\ÌÌð€ÿ÷ÌÌì€\ÌÌÿþÌÌì„ \ÌÌÿùÌôÿÌÌì€ \ÌÌÿÿÌîÿÌÌì„ \ÌÌÿßÌÑÿÌÌì€ \Ë·ÿÿÌßÿÌÌì„\ÌÌÿêÌ×ÿÌÌìãû³\Ç}ÿÿÌòÿÌÌì„\ÌÌ‚ÿÌûðÛŲ”^ˆÿûÌÌì„\€Ì ÍæÏÌðà¡iUZcX'˃Ìì„\Ê‚Ì ÖÎn9432,>-%‚ÌËä„Fƒ\º‰8€3*K%0 ƒ\5Š i—G&1.-8,/‘ {u­S•.@$2/‘ Ph•+‡H<(4+‹~ä‚ç /5›.8002 ‚çéÿ„\Ë‚Ì $'9Ç9$2' ƒÌî„\ÌÌÿ ÏN§&# ÌÚòç€Ìì„ \ÌÌÿÿæÿÿÌ eV€ Ì‚ÿÌÌì„ \ÌÌÿÿîÿÿÌÌì€ \ÌÌÿÿÌÑÏÌÌì„ \ÌÌÿÿìÿÿÌÌì€\ÌÌÿó‚Ìì„ \ÌÌÿÿÙøÿÌÌì€ \ÌÌÿÿÍõÿÌÌì„\ÌÌÿ÷ÌÌì€\ÌÌÔ€ÿðÌÌì„\†Ìì€\†Ìì„\Ê„ÌËä€\Å„ÌËæ„†\‚†\?ÿl8mkÿÿÿÿÿÿÿÿÿÿ«ÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿ½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿsÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿGwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPich#HÿøÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÿÿ€ÿÿ€ÿÿ€ÿÿÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿüÿÀÿøÿÀÿøÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÿÿ€ÿÿ€ÿÿ€ÿÿÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿü?ÿÀÿüÿÀÿøÿÀih32 |ÿÿŸG޶‡¸Áöƒ`¯‡¸¹Üí‰.gy‡z€Ú7FFxˆz¨æ‰.]‰f¹7G@‰f~ʉ.]‰f¸7G@‰f{Ɖ.]€f²€ÿú€f¸7G@€fƒÿ~ff{Ɖ.]ffŃÿ–ff¸7G@€fƒÿúff{Ɖ.]ffÿÿ³ff€ÿff¸7G@€f ÿÿŒfyÿÿff{Ɖ.]ffÿÿ€fÙÿÿff¸7G@fcXÿÿŒffÿÿff{Ɖ.]ffÿÿ€fÙÿÿff¸7G@e\uÿÿŒffÿÿff{Ɖ.]ffÿÿ¼ff€ÿff¸óÿª@_]LÿÿŒfõÿÿff{Ɖ .]ffÔÿÿóúÿÿ²f¤ƒÿþö‰Sƒÿµff{Ɖ.]€fìÿ¼fõ„ÿüà…š^‚ÿy€f{Ɖ.]†fõ„ÿýíy„¶Ö†f{Ɖ.Y…f¤„ÿþöÖvŠÑш…f{µ‰..:„;‚ÿ þÿþûâU|ªéÅ£…;FbŠ$„+Äÿøãîûÿÿþç‚nqËø½ŽB„+“ÿÿý¤f•Ý÷öÂ\u£æû¸~<›€ÿj¯U@ƒÀVlk¿úü°m-›ÿ ;~ß¾fq|ãþùžS$›í€ÿ æu›ˆlkª÷þï‚B ’†²ƒµÁöÿÿþš6afnsÆýúÕW@Ÿƒµ¶ÔZ‰.j„„…ÍÕíûÿAdmœèúá@@……²ë‰.\…f…¬Áß÷øVg¼õßC@W…f~ɉ.]†f ˆ‡œÂó‹1Ë˃@@B†f{Ɖ.]ffŃÿp]RWÐ2fS€@Bf¤‚ÿuff{Ɖ.]ffÅÿÿÿÿÏfW@BoP€@ VfoÿÿúÈÿÿîff{Ɖ.]ffÅÿÿffÿÿƒff®]'7ffÙÿÿ€fâ‘ff{Ɖ.]ffÅ‚ÿö€f®m+7ff€ÿ„f{Ɖ.]ffÅÿÿ€ÿff®m+7ff€ÿ€f•iff{Ɖ.]ffÅÿÿff€ÿff®m+7ff¼ÿÿffŒÿÿff{Ɖ.]ffŃÿ¼ff®m+7€fõ‚ÿÁff{Ɖ.]ff¢Æ³€f®m+7€fhÆ€ÿ³€f{Ɖ.]‰f®m+7‰f{Ɖ.Y‰f¬k+4‰f|Á‰.6C‡DE`?.@ˆDMx‰Š.5ƒ5Š.9ÿÿŸÿÿŸj´ˆÏÖùƒˇÏÐçí‰E“ˆ¦«ç7Jh¥‡¦§Åï‰EŠˆ™šÐ7M_‰™ªÛ‰EЉ™Ï7M_‰™¨Ù‰EŠ€™Ì€ÿü¾€™Ï7M_€™ƒÿ©™™¨Ù‰EŠ™™Ùƒÿ¹™™Ï7M_€™ƒÿü™™¨Ù‰EŠ™™ÿÿÌ™™€ÿ™™Ï7M_€™ ÿÿ³™¦ÿÿ™™¨Ù‰EŠ™™ÿÿ€™åÿÿ™™Ï7M_˜”‚ÿÿ³™™ÿÿ™™¨Ù‰EŠ™™ÿÿ€™åÿÿ™™Ï7M_—Š­ÿÿ³™™ÿÿ™™¨Ù‰EŠ™™ÿÿÒ™™€ÿ™™ÏõòæÚÖ§_’sÿÿ³™ùÿÿ™™¨Ù‰EŠ™™ãÿÿ÷üÿÿÌ™ÁûóéÝÑǸ‡Ú}ƒÿÍ™™¨Ù‰EŠ€™òÿÒ™ò÷ðÜʼ´°«ŠÁzŒ‚ÿ¦€™¨Ù‰EІ™ êïݸ‹ukjop£ÖL]†™§Ù‰E……™·åÖ§~jgffdWÒ“TTz…™§Î‰EFW„XÖÔ­}j€fdZªÓL]OB…Xh“Š(„/½Äµvce€f\ˆÏ»RdL9?„/“¾²¨S*e…™ªÛ‰EІ™ =6>T»‰bkQR4"†™¨Ù‰EŠ™™ÙƒÿŸ,!#J¸E("€"™Â‚ÿ¢™™¨Ù‰EŠ™™Ùÿÿ²²ÿÿß™eR{.€ e™ ÿÿüÛÿÿô™™¨Ù‰EŠ™™Ùÿÿ™™ÿÿ¬™™É]#S™™åÿÿ€™ì¶™™¨Ù‰EŠ™™Ù‚ÿù€™Éq/S™™€ÿ„™¨Ù‰EŠ™™Ùÿÿ²²€ÿ™™Éq/S™™€ÿ€™¹š™™¨Ù‰EŠ™™Ùÿÿ™™€ÿ™™Éq/S™™Òÿÿ™™³ÿÿ™™¨Ù‰EŠ™™ÙƒÿÒ™™Éq/S€™ø‚ÿÖ™™¨Ù‰EŠ™™ÁÙÌ´€™Éq/S€™›Ù€ÿÌ€™¨Ù‰EЉ™Éq/S‰™¨Ù‰E†‰™Çq/N˜ˆ™¨Ö‰EOe‡fh‹BEaˆfs£‰ŠEIƒIŠE<ÿÿŸÿÿŸŽÚˆçêüƒÀå‡çèóí‰\ÁÒ‡ÓÕó7PŒÒˆÓâ÷‰\¸‰Ìè7S‰ÌÕí‰\¹‰Ìç7S‰ÌÓì‰\¹€Ìæ€ÿýÞ€Ìç7S€ÌƒÿÔÌÌÓì‰\¹ÌÌìƒÿÜÌÌç7S€ÌƒÿþÌÌÓì‰\¹ÌÌÿÿæÌÌ€ÿÌÌç7S€Ì ÿÿÙÌÒÿÿÌÌÓì‰\¹ÌÌÿÿ€ÌòÿÿÌÌç7SËÆ®ÿÿÙÌÌÿÿÌÌÓì‰\¹ÌÌÿÿ€ÌòÿÿÌÌç7S˸ƒÿÿÙÌÌÿÿÌÌÓì‰\¹ÌÌÿÿéÌÌ€ÿÌÌçøíÞÎɬ¾™ÿÿÙÌüÿÿÌÌÓì‰\¹ÌÌñÿÿûýÿÿæÌßùîàÒ³ €ˆj¦ƒÿæÌÌÓì‰\¹€ÌùÿéÌóõë覛–nK>»‚ÿÒ€ÌÓì‰\¹†Ì çéÑ eG98?H5[(6†ÌÓì‰\±Ë„ÌÐÜÈŠS95€3-H:)*ˆ„ÌËÒç‰\]t„vÈÆ‘Q8€32.*P'/'!…v‹ÄŠ(„/¾°ŸQ42€3.*>5+2&?„/“©™Œ0,11).H".3%›}—/–' &+:9&22#›aguÂ&SÕ«U3A--32 ›aKR„»J{`::"23/ ’%×åƒæÄ28E¦13>0(32+ ½ƒæçñ\‰\Â…Ö)+1Q¹ 2=%/2- …Öåø‰\¸…̇"'1mÍ+4&1- …ÌÔí‰\¹†Ì '0©r&)) †ÌÓì‰\¹ÌÌìƒÿÏ8°#€ Ìá‚ÿÑÌÌÓì‰#\¹ÌÌìÿÿÙÙÿÿïÌ~ Hr" ÌÏÿÿþíÿÿúÌÌÓì‰\¹ÌÌìÿÿÌÌÿÿÖÌÌäa'nÌÌòÿÿ€ÌõÛÌÌÓì‰\¹ÌÌì‚ÿü€Ìäw/nÌÌ€ÿ„ÌÓì‰\¹ÌÌìÿÿÙÙ€ÿÌÌäw/nÌÌ€ÿ€ÌÜÍÌÌÓì‰\¹ÌÌìÿÿÌÌ€ÿÌÌäw/nÌÌéÿÿÌÌÙÿÿÌÌÓì‰\¹ÌÌìƒÿéÌÌäw/n€Ìü‚ÿëÌÌÓì‰\¹ÌÌàìæÚ€Ìäw/n€ÌÍì€ÿå€ÌÓì‰\¹‰Ìäw/n‰ÌÓì‰\³ˆÌËãw/hˈÌÓê‰\j‡‡ˆŠ·F\€ˆˆšÎ‰Š\]ƒ]Š\?ÿÿŸh8mk ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8@@@@@@@ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`@@@@@@@0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ80ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿP ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0ÿÿÿÿÿÿÿÿÿÿÿÿÿïïÿÿÿÿÿÿÿÿÿÿÿÿÿPit329³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÅu†¢®™³´¶ÁÔéøžm‘¨²™³µºÇÝñôž¼GYz¢²¶™¸»Çßöþÿ‹…L`‹ªµ™¸¹¿ÐèúÿÿE8Mm¡®²™³¶ÂâúýöŠÏ/@Wƒ§°™³´ºÌëüüö..>^…‹Œ™ŽœÆêïèó‰Ÿ.2Kg‰ŒšŽ”§Öððé..3S›fghn›ËÙ×..A\›fgjw­ÖÝØ..0SfhŒ¾ÌÌ뉓..@\œfgk›ÇÐÌ..0Sfg‰¹ÇÆë‰“..@\fh•ÁÊÇ../Sžfˆ¸ÆÅ뉓..@\fg’¿ÇÅ../Sžfˆ¸ÆÅ뉓..@\žf‘¾ÆÄ../Sžfˆ¸ÆÅ뉓..@\žf‘¾ÆÄ../SŠfƒ©³©Œ‰fˆ¸ÆÅ뉓..@\„f³‰ÿâ¼y‡f‘¾ÆÄ../S‡fp¼õ…ÿõÅy†fˆ¸ÆÅ뉓..@\„f³Œÿ³†f‘¾ÆÄ../S†f õ‰ÿõ …fˆ¸ÆÅ뉓..@\„f³ÿÅ…f‘¾ÆÄ../S…f ÿ „fˆ¸ÆÅ뉓..@\„f³Žÿ–„f‘¾ÆÄ../S„fŒÿ–ƒfˆ¸ÆÅ뉓..@\„f³Žÿõpƒf‘¾ÆÄ../S„fì„ÿìÏÏì„ÿìƒfˆ¸ÆÅ뉓..@\„f³ƒÿŒffy³„ÿ ƒf‘¾ÆÄ../Sƒf–„ÿ©f©„ÿ ‚fˆ¸ÆÅ뉓..@\„f³ƒÿŒf³ƒÿσf‘¾ÆÄ../SƒfŃÿ³ƒf³ƒÿÏ‚fˆ¸ÆÅ뉓..@\„f³ƒÿŒfyƒÿìƒf‘¾ÆÄ../Sƒfìƒÿpƒfpƒÿõ‚fˆ¸ÆÅ뉓..@\€fecba°ƒÿŒ‚fìƒÿƒf‘¾ÆÄ../Sƒfƒÿâ…fÙƒÿ‚fˆ¸ÆÅ뉓..@\€fda^[­ƒÿŒ‚fÙƒÿƒf‘¾ÆÄ../SƒfƒÿÙ…fÙƒÿ‚fˆ¸ÆÅë‰ “..@\ffeb\XTªƒÿŒ‚fÙƒÿƒf‘¾ÆÄ../SƒfƒÿÙ…fÙƒÿ‚fˆ¸ÆÅë‰ “..@\ffd_XRp§ƒÿŒ‚fÙƒÿƒf‘¾ÆÄ../SƒfƒÿÙ…fÙƒÿ‚fˆ¸ÆÅë‰ “..@\feb\U_u§ƒÿŒ‚fÙƒÿƒf‘¾ÆÄ../Sƒfƒÿâ…fâƒÿ‚fˆ¸ÆÅë‰ “..@\ec^XUŒT§ƒÿŒ‚f„ÿƒf‘¾ÆÄ../Sƒfìƒÿyƒfpƒÿâ‚fˆ¸ÆÅí‰ÿ ”..@[da[Uq„J¨ƒÿŒf©ƒÿÙƒf‘¾ÆÄ../SƒfŃÿ¼ƒf³ƒÿÅ‚fˆ¸ÆÅó‰ÿ ª..@[b\V]’eLªƒÿŒ€f õƒÿ©ƒf‘¾ÆÄ../SƒfŒ„ÿ³p€f³„ÿ–‚fˆÁæø‹ÿ ñ¢WY_YW„IN¬ƒÿâÙõ…ÿõpƒf‘¾ÆÄ../S„fÙ„ÿõÙÙõ„ÿâ‚fyÒÿ þþüù·lVlpIQ­Žÿ©„f‘¾ÆÄ../S„fƒõŽÿƒf³Žÿ€þ ûóçÛ‡ƒOKU°ÿÅ…f‘¾ÆÄ../S…f ÿ €fƒâÿ þþüöêÝÎyŒ~GOZ±Œÿ³†f‘¾ÆÄ../S†fƒì‰ÿ쌀fƒõÿþþüùïàÕ‡‚Œš]S^²‰ÿÙ³y‡f‘¾ÆÄ../S‡fp â…ÿâ©p€f ÿ€þ ûóäØžr‹Š«½†ay†ŒŒf‘¾ÆÄ../SŠfpŒŒ³³–Œp‚fƒ‘ÿþþüöêÛÄi‚‰®ÅÚ|—f‘¾ÆÄ../S–fƒõÿþþüøíÞÔyp‰Ÿ¶ÌÛÖ}–f‘¾ÆÄ../R–fâÿþûòãÕœa„…¨ÀÓÜÙ½•fg‘»ÄÁ€.Qe”f³ÿþ€ÿþýüöéÚ¹bn…y‘±ÌÙÜÓÉ””fg¶¾»€.Kbe’fy‘ÿþþüùîÞÒma~x¥¼ÖßÚιp“fhŒ©­®€.7PWX‘YÁ‹ÿþÿþþüûòäÔ’Zn‚v†­Éáä×ȼ°Š“YZf‹¡E€./7::;T‹ÿþÿ€þûõéÚ¹Ua||mž·Õéæ×Ŷ¨ŸG‘;<@LXb¬–.£ÿþþüøìÝÑkZn~s~¨ÃáïèÔ±¢–d“.7F\Ùž¬9”. òÿÿþüûùùûüþþ„ÿ€þùðáÔVbyym‘±ÏìõéÔ¿­›y”.MÔ¡Ï’ÃÒ€ÿ üøðéãäêòùûþÿ€þüõç×°T\n|qq£¼ÛòøêÔ½¨–†z·’Ã׸‚ÿ)þöéÔÀ·¼ËÜìöûþþÿþþüøìÝÉcXcwvl†ªÈæøúëÔ¼¥~q¯Îƒÿ(üìË¥‰~‡Ÿ¼ÔæòùüþüùðáÔ‰U^mxph¶ÔðûûíÔ¹¡ŠxhƒÎ„ÿ'üŸ£qNESn®ÉÞíöøóæ×°TZdssj{¨ÃáõýûíÒ·œ†q`eÎ…ÿªmœs€@A_€¡½ÔááׯcX`ltng’³ÑìúþüíÑ´˜€iWHΆÿjc¢¼‘U€@Qr•°ÀÅyV\errkq¥¿Ýõþþüíϰ“xbN=Άÿ×8[Íâ´k€@S{žšY[blsphŠ®ËéùþýüìÌ«qZE=·ÿ$Œ+PÅÝæÕ‹J@Sƒj`afprll·×òüÿþüêÈ¥†iQ@=ΈÿS"H~µÑßäàœdxjfkqpj|¨Ããø€þùæÂž}`G@<Έÿ#â(Bl¡¿ÍÑʵš‚qjmqmh”±ÑíüÿþþöຕrT@@=Ήÿ"šAa‹¦¯¯£‘~qknnjr¥½Ýõþÿþüòذ‰fH@@RωÿS%C^v…І~tmlpmgŠ®ËéùþýþùìΤ{W€@g¹ßßããçôþ„ÿ$þÿÿâ(,I\gmnljjmpkj ¹Øòüþþûõá¿“kG@@=‘çëï¡Ônv–©²´ŽµÁóóøüÿ þþÿÿš6O^d€fjnnh«ÆäøýýüøìÕ®€W@Ÿµ¶¼ÊÞîùžÔLSh–­µ¸ áçéïõûþüüý€ÿS">Uaefglplgš´ÒïüþþùòáØiB€@O¸ºÀÎèúÿùm5Hb’¦¬­&ÈÚÛàæíóøùüýÿÿâ(+FZbfhnpku¥¿ÞöýþûõçÑ­~P@p­®¯´ÅæûûóE.†@GafâŒÿìp„f‘¾ÆÄ../S„fŒƒÿì³õƒÿÅfS@ ADSpŒ¡£‰jP@?…@S‚f³Žÿ¼„f‘¾ÆÄ../S„fŒƒÿÙfƒƒÿÙ‚faW€@ AGVhy}q_PD@A‚@Ia‚fy„ÿõ¼Œ–Å„ÿyƒf‘¾ÆÄ../S„fŒƒÿÙfpƒÿ³ƒf~ zQ=@FMX\YRIC><==>88Xƒf©ƒÿõƒf ƒÿ©ƒf‘¾ÆÄ../S„fŒƒÿÙf¼ƒÿƒƒf~®ÅÆ¿‰«..7XƒfÙƒÿ ƒfÙÿâÅ ƒ„f‘¾ÆÄ../S„fŒƒÿõÙÙâ„ÿ¼„f~®ÅÆÝ‰Ã..7Xƒf„ÿ„fypˆf‘¾ÆÄ../S„fŒŒÿõ …f~®ÅÆÝ‰Ã..7XƒfƒÿÙ‘f‘¾ÆÄ../S„fŒÿì–„f~®ÅÆÝ‰Ã..7X‚fyƒÿÙ‘f‘¾ÆÄ../S„fŒÿ ƒf~®ÅÆÝ‰Ã..7X‚fyƒÿÙ‘f‘¾ÆÄ../S„fŒƒÿì³Å„ÿy‚f~®ÅÆÝ‰Ã..7XƒfƒÿÙ‘f‘¾ÆÄ../S„fŒƒÿÙ‚f©ƒÿ©‚f~®ÅÆÝ‰Ã..7Xƒfƒÿõ„f õÅ–p…f‘¾ÆÄ../S„fŒƒÿÙ‚fŒƒÿ¼‚f~®ÅÆÝ‰Ã..7XƒfÙƒÿyƒfÙÿÏ ƒf‘¾ÆÄ../S„fŒƒÿÙ‚fσÿÅ‚f~®ÅÆÝ‰Ã..7Xƒf¼ƒÿÏ‚fŒƒÿ¼ƒf‘¾ÆÄ../S„fŒƒÿ쀳Ïì„ÿ³‚f~®ÅÆÝ‰Ã..7Xƒfy„ÿσfp õƒÿƒƒf‘¾ÆÄ../S„fŒÿy‚f~®ÅÆÝ‰Ã..7X„fÅŽÿÙ„f‘¾ÆÄ../S„fŒÿ¼ƒf~®ÅÆÝ‰Ã..7X„fpìÿƒ„f‘¾ÆÄ../S„fŒŽÿÏ„f~®ÅÆÝ‰Ã..7X…fƒõ‹ÿ …f‘¾ÆÄ../S„fŒ‹ÿâÏ …f~®ÅÆÝ‰Ã..7X†fpÙˆÿõ–†f‘¾ÆÄ../S„fp‰ŒŠf~®ÅÆÝ‰Ã..7XˆfŒ¼âƒÿÙ©p‡f‘¾ÆÄ../Sžf~®ÅÆÝ‰Ã..7Xžf‘¾ÆÄ../Sžf~®ÅÆÝ‰Ã..7Xžf‘¾ÆÄ../Ržf~®ÅÆÝ‰Ã..7Xžf‘¾ÆÄ€.Qef~®ÄÄ݉Ã..6Wžf‘¾ÆÄ€.Ndf~¬¾¾Ù‰Ã..4Veœfg‘ºÁÀ€.F`eœf|¢®¯Ó‰Ã€.Pbe›fgŒ®´´E../IR›TU]q„ωÀ.9NS›TUb›y.03š46@O\gߊ9.2š458EUa…Ï9¡.:J•‹Ÿ¡.0@OÌžÏU .9ŽŸ9 .H¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÒ ¯ÁÉ™ÌÍÏÖãðú·ž¶ÅË™ÌÎÑÚèõôžÅj…§ÁËšÏÒÚêùÿÿ‹–s²ÇΙÏÐÔßïûÿÿZSsžÀÉË™ÌÏ×ëûþøŠÔF_ƒ¬ÄË™ÌÍÑÝòýýøEE]Œ®²š³µ½Ùñôïó‰¨EJpš°›³·ÄãõõîEEL}€˜˜™š›Ÿ¼Üæäó‰ŸEEaŠ˜˜™™š›¤ÈãèåEEH|˜œ™›³ÓÝÝEE_‹˜›™šœ¼ÚßÝEEG|˜œ™š°ÐÚÙEE_‹™›¸ÖÛÚEEG|ž™¯ÏÙØï‰ŸEE_‹™š·ÔÚØEEG|ž™¯ÏÙØï‰ŸEE_‹ž™¶ÓÙ×EEG|ž™¯ÏÙØï‰ŸEE_‹ž™¶ÓÙ×EEG|Š™¬ÆÌƳ‰™¯ÏÙØï‰ŸEE_‹„™Ì‰ÿìÒ¦‡™¶ÓÙ×EEG|‡™ŸÒù…ÿùÙ¦†™¯ÏÙØï‰ŸEE_‹„™ÌŒÿ̆™¶ÓÙ×EEG|†™¿ù‰ÿù¿…™¯ÏÙØï‰ŸEE_‹„™ÌÿÙ…™¶ÓÙ×EEG|…™¿ÿ¿„™¯ÏÙØï‰ŸEE_‹„™ÌŽÿ¹„™¶ÓÙ×EEG|„™³ÿ¹ƒ™¯ÏÙØï‰ŸEE_‹„™ÌŽÿùŸƒ™¶ÓÙ×EEG|„™ò„ÿòßßò„ÿòƒ™¯ÏÙØï‰ŸEE_‹„™Ìƒÿ³™™¦Ì„ÿ¿ƒ™¶ÓÙ×EEG|ƒ™¹„ÿƙƄÿ¿‚™¯ÏÙØï‰ŸEE_‹„™Ìƒÿ³™Ìƒÿ߃™¶ÓÙ×EEG|ƒ™Ùƒÿ̃™Ìƒÿß‚™¯ÏÙØï‰ŸEE_‹„™Ìƒÿ³™¦ƒÿòƒ™¶ÓÙ×EEG|ƒ™òƒÿŸƒ™Ÿƒÿù‚™¯ÏÙØï‰ ŸEE_‹™˜˜—•“‘ȃÿ³‚™òƒÿƒ™¶ÓÙ×EEG|ƒ™ƒÿì…™åƒÿ‚™¯ÏÙØï‰ŸEE_‹€˜•‘ŒˆÄƒÿ³‚™åƒÿƒ™¶ÓÙ×EEG|ƒ™ƒÿå…™åƒÿ‚™¯ÏÙØï‰ ŸEE_‹˜˜—“‹ƒ}¿ƒÿ³‚™åƒÿƒ™¶ÓÙ×EEG|ƒ™ƒÿå…™åƒÿ‚™¯ÏÙØï‰ ŸEE_Š˜˜—Ž…z§»ƒÿ³‚™åƒÿƒ™¶ÓÙ×EEG|ƒ™ƒÿå…™åƒÿ‚™¯ÏÙØï‰ ŸEE_Š˜—“Š­ºƒÿ³‚™åƒÿƒ™¶ÓÙ×EEG|ƒ™ƒÿì…™ìƒÿ‚™¯ÏÙØï‰ ŸEE_Š—•Žƒ€Ï}»ƒÿ³‚™„ÿƒ™¶ÓÙ×EEG|ƒ™òƒÿ¦ƒ™Ÿƒÿì‚™¯ÏÙØñ‰ÿ žEE_‰•‘ˆ®Áp½ƒÿ³™Æƒÿ僙¶ÓÙ×EEG|ƒ™ÙƒÿÒƒ™ÌƒÿÙ‚™¯ÏÙØõøôðêæãÞÚÔÖ×á§EE_‰“‹‚’Û—s¿ƒÿ³€™¿ùƒÿƃ™¶ÓÙ×EEG|ƒ™³„ÿÌŸ€™Ì„ÿ¹‚™¯ÔìóöôðìéåàÝØÓÍÈ»­g‡Ž…„ÑÕmuÁƒÿìåù…ÿùŸƒ™¶ÓÙ×EEG|„™å„ÿùååù„ÿì‚™¥Þûú÷õñîéåàÝÙÔÐËÆÀ¹²ª ‰‚¸ÚªnzÄŽÿÆ„™¶ÓÙ×EEG|„™¬ùŽÿ¬™Êüûú÷ôðìèãÞÚÖÒÎËÆÂ»·¯¦šŒ}“ÖÚxq€ÇÿÙ…™¶ÓÙ×EEG|…™¿ÿ¿€™!«éûûøöòîéãÝØÓÎËÇÅÁ¿»·²¬¡“„|ÊÙ¼jv†ÊŒÿ̆™¶ÓÙ×EEG|†™¬ò‰ÿò³€™"«òúø÷õðêãÜÓÍÆÁ¼¹¶´³²¯­«¥šŠ}­ÕÙzg|ŒË‰ÿå̦‡™¶ÓÙ×EEG|‡™Ÿ¿ì…ÿìÆŸ€™#¼ö÷÷õñìäÚÑǾµ®¨£¡žœŸž˜Œ‚–ÐØÆKMr’¥‡³Œ™¶ÓÙ×EEG|Š™Ÿ³³Ì̹³Ÿ‚™ªòôôòïèÞÒĶ©ž•Œ†ƒ€€‚…ˆ‰…}€¿ÕØ‘JNW‹˜˜•™¶ÓÙ×EEG|–™©êððïëã×ȸ§—‹€xrnk€jkmpqpon£ÏØÔ\LQX]Ž•™˜¶ÓÙ×EEG|˜•™ÛëìëèßÒÁ®›‹wplj€gf€ghfb_‚ÂÔÖ¨KNTXWa•™š¶Ò×Ö€Ey˜”™¿æèèäÝм¨•…yqljgg„fc^Yg­ÏÖÒtNRWYUPs“™˜šµÏÓÒ€Eq“˜˜‘™¢àâãàÚμ§’‚wnkhggƒfed`ZUšÂÔÔ¿IPVZXSNJ‘™˜˜›³ÆÈÉ€ESw‚’…ºÜÝÜØÎ¾¨’‚vmjgg„feda[U}³ÏÕщJTZ[VPKF\“…‡˜ª²ÀZ€EFSWXgÖ××ÔÎÁ­–ƒvmjgg…fdb]WcªÂÓÓÎLLW]\WOIC@U‘XZ_q…“½´–E’€Ñ Ìijˆxnjgg…fec^XT—´ÏÔИEP[`]UNGA<>“ESh‚äž´N”E ÀËËǶ£{pjgg†fd`ZU|¬ÄÒÒÎcGT_b^ULE>87”EfÙ¡Ô“Ë ÂÄÄ¿µ¤Žvhccee…feb\Vh¨¸ÏÓлBLXad_ULC<61¯’Ë߸ÿܼ¾¾¹¬–x]OMRX^bd‚fec^XYœ±ÆÒÑÎ}DQ]dd^UKB:2-Î.ÿƵ¶¶´¨lK937@KU\adefed`ZUª»ÎÒÏÍIIUaee_UJ@70*YÎÿ¶®€¯(©“¥[. !,9FPY_bca\Vh¨´ÇÐÐÍ—CNZbfe_TI>6-&:Îÿ¤€¨­­£˜Î¶_&3@LUZZVWœ¯¿ÎÑÏÌcHT^dge_TH=3*#Îÿ ¡¡©°²§ŽÆàÔˆ6€ .ÃÀÂËÏÐÎÄIIVaegfe^PB6* Î"ÿ‰ŠŒŽ˜¨½ÑÙ\EÔæðôöõŸP¦ÒÍËÎÐÏÍ—CN[c€fd\N?2&Î.ÿ€‚„†‡‹”©ÄØÉ><„ÎàêîðíæÝÕÐÍÎÐÎÍZGT_egffbZJ<."Î.ÿŠy|~€…’¯ÌÝ•3>‚ÂØáääàÚÔÐÎÏÏͲBLXbfgfeaVF7)3Ï “prtxyz–¹Óß_3J†»ÑÖØ×ÔÑÎÎÏÎÌtFQ]d€fd^RB1#€G¹çç‘ë-ªfgknqrt‚ ÂØÊ>3Y’¸ÌÎÏÎÍÍÎÏÎÂKJVaegfdbZL;+ëïïô¡ߘ£¹ÆË͎κaacejlmsŠ­ÌÝ•34kž»Ç€ËÍÏÏÍŽDO[cffec^UF3#¬ÎÏÓÛéôùžÔl|›¹ÈÎÏ&j\]`bdgjw”¸Óß_3E|ªÂÊËÌÎÏÎÌRHT`egfdaZN=*1ÏÑÕßïûÿÿ}Pl’·ÃÇÈ&‰WXZ\_adkŸÂÙÌ>3V³ÅËÍÏÏΩBLYbfgdb\TE2 fÈÉÊÍØïüüõZEZ…§¬­­®%£RRSUY\`co‡«ËÝ«33i›»ÉÍÏÎÍtFR]dgdb^VJ9&‚›‘®±»ÛðòìEEMz—˜˜‘™#jMMORUZ^et’¶Òßj3Bz¨ÂÎÏÎÃAJVafeb^XM>+‚J‘™š›ŸÁßãáEEI|˜˜’™#HGHJNRV\fzÀØÕ>3V¶ÍÎÍŽDO[bda^WN@.‚‰“™›¹×ÜÛEEH|˜”™n€BDINT[h‚§ÉÛ«33i¡ÅÍËQHT^ba\UL?/‚Y”™š·ÔÚØEEG|˜•™O€<?CHOXjвÐßj3C„¶Æ¨CKW^^YRH<,‚2–™¶ÓÙ×EEG|–™‡=65683bž»kDNTWRJ@4&ƒ"‰–™¶ÓÙ×EEG|„™³‹ÿòÒŸ™†1/./148@Po›ÂÙª3Cƒ¡=?DHF@5*„‚™¹Ì‚åÙÆ¦ˆ™¶ÓÙ×EEG|„™³ÿù¬™q+)((*,17Mr ÇÛ3kn5344/'…i™Æò‡ÿÙŸ†™¶ÓÙ×EEG|„™³ŽÿòŸ™„,"! !#'2Jv§ÉÊE_I(&# …"€™ŸåŠÿò¬…™¶ÓÙ×EEG|„™³ÿ¿™™Š6 ,L|¥º—nG†2‰™ìŒÿòŸ„™¶ÓÙ×EEG|„™³ƒÿòÌùƒÿÙ™Y 1Sv‘rL.‡Y‚™ÌŽÿÒ„™¶ÓÙ×EEG|„™³ƒÿ噬ƒÿå‚™‰P€ #5J^dU@.‚B‰‚™¦„ÿùÒ³¹Ù„ÿ¦ƒ™¶ÓÙ×EEG|„™³ƒÿ噟ƒÿ̃™©³m2",7<90%-Lƒƒ™Æƒÿù¬™¿ƒÿƃ™¶ÓÙ×EEG|„™³ƒÿå™Òƒÿ¬ƒ™©ÉØÙ¿‰§EESƒƒ™åƒÿ¿ƒ™åÿìÙ¿¬„™¶ÓÙ×EEG|„™³ƒÿùååì„ÿÒ„™©ÉØÙç‰ËEESƒƒ™„ÿ„™¦Ÿˆ™¶ÓÙ×EEG|„™³Œÿù¿…™©ÉØÙç‰ËEESƒƒ™ƒÿå‘™¶ÓÙ×EEG|„™³ÿò¹„™©ÉØÙç‰ËEESƒ‚™¦ƒÿå‘™¶ÓÙ×EEG|„™³ÿ¿ƒ™©ÉØÙç‰ËEESƒ‚™¦ƒÿå‘™¶ÓÙ×EEG|„™³ƒÿòÌÙ„ÿ¦‚™©ÉØÙç‰ËEESƒƒ™ƒÿå‘™¶ÓÙ×EEG|„™³ƒÿ備ƃÿÆ‚™©ÉØÙç‰ËEESƒƒ™ƒÿù„™¿ùÙ¹Ÿ…™¶ÓÙ×EEG|„™³ƒÿå‚™³ƒÿÒ‚™©ÉØÙç‰ËEESƒƒ™åƒÿ¦ƒ™åÿß¿ƒ™¶ÓÙ×EEG|„™³ƒÿ備߃ÿÙ‚™©ÉØÙç‰ËEESƒƒ™Òƒÿß‚™³ƒÿÒƒ™¶ÓÙ×EEG|„™³ƒÿò€Ìßò„ÿÌ‚™©ÉØÙç‰ËEESƒƒ™¦„ÿ߬™Ÿ¿ùƒÿ¬ƒ™¶ÓÙ×EEG|„™³ÿ¦‚™©ÉØÙç‰ËEESƒ„™ÙŽÿå„™¶ÓÙ×EEG|„™³ÿÒƒ™©ÉØÙç‰ËEESƒ„™Ÿòÿ¬„™¶ÓÙ×EEG|„™³Žÿß„™©ÉØÙç‰ËEESƒ…™¬ù‹ÿ¿…™¶ÓÙ×EEG|„™³‹ÿìß¿…™©ÉØÙç‰ËEESƒ†™Ÿåˆÿù¹†™¶ÓÙ×EEG|„™Ÿ‰³Š™©ÉØÙç‰ËEESƒˆ™³ÒìƒÿåÆŸ‡™¶ÓÙ×EEG|ž™©ÉØÙç‰ËEESƒž™¶ÓÙ×EEG|ž™©ÉØÙç‰ËEESƒž™¶ÓÙ×EEG|˜™©ÉØÙç‰ËEESƒž™¶ÓÙ×€Ez˜™©É××ç‰ËEERƒ˜œ™˜¶ÓÙ×€Ev–˜›™˜©ÇÓÓå‰ËEEN€˜œ™š¶ÑÖÕ€Ei—˜˜™€˜§ÁÉÊá‰Ë€Ew”˜˜˜™˜˜š³ÉÍÍZEEGnz~›‹ ­µÜ‰Ë€EUu}~š€“ª´¼ˆEIšMOQ_v‰šäŠNEJšMOTg’­ÔN¡EWn®‹¨¡EH_wÕžÔf ENž¨N E]ÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðßË×àäšæçêñöúÐÎÚâåšæèìôùÿžÏ޲Óàåšçèìôüÿÿ‹ª™ÀØãæ™çèêï÷ýÿÿmošÎàä噿çëõýþúŠÙ^®Öâåšæèîøþþú\\|»ÖØšÙÚÞìøú÷÷‰³\c–ÌØ›ÙÛâñúúõ\\f¦€Ë™ÌÍÏÞîòòó‰©\\‚¸ËËšÌÍÒäñôò\\`¦ËœÌÍÙéîîó‰©\\¹ËœÌÎÞìïî\\_¦ËÌØèììó‰©\\¹ÌÍÜêíì\\^¦žÌ×çììó‰©\\¹žÌÛêìì\\^¦žÌ×çììó‰©\\¹žÌÚéìë\\^¦žÌ×çììó‰©\\¹žÌÚéìë\\^¦ŠÌÖâæâÙ‰Ì×çììó‰©\\¹„Ìæ‰ÿõéÒ‡ÌÚéìë\\^¦‡ÌÏéü…ÿüìÒ†Ì×çììó‰©\\¹„ÌæŒÿæ†ÌÚéìë\\^¦†Ìßü‰ÿüß…Ì×çììó‰©\\¹„Ìæÿì…ÌÚéìë\\^¦…Ìßÿß„Ì×çììó‰©\\¹„ÌæŽÿÜ„ÌÚéìë\\^¦„ÌÙÿ܃Ì×çììó‰©\\¹„ÌæŽÿüσÌÚéìë\\^¦„Ìù„ÿùïïù„ÿùƒÌ×çììó‰©\\¹„ÌæƒÿÙÌÌÒæ„ÿ߃ÌÚéìë\\^¦ƒÌÜ„ÿâÌâ„ÿß‚Ì×çììó‰©\\¹„ÌæƒÿÙÌæƒÿïƒÌÚéìë\\^¦ƒÌìƒÿæƒÌæƒÿï‚Ì×çììó‰©\\¹„ÌæƒÿÙÌÒƒÿùƒÌÚéìë\\^¦ƒÌùƒÿσÌσÿü‚Ì×çììó‰ ©\\¹ÌËËÊÆÄÂàƒÿÙ‚ÌùƒÿƒÌÚéìë\\^¦ƒÌƒÿõ…Ìòƒÿ‚Ì×çììó‰©\\¹€ËÇ»¶ÛƒÿÙ‚ÌòƒÿƒÌÚéìë\\^¦ƒÌƒÿò…Ìòƒÿ‚Ì×çììó‰ ©\\¹ËËÊĹ¯§ÔƒÿÙ‚ÌòƒÿƒÌÚéìë\\^¦ƒÌƒÿò…Ìòƒÿ‚Ì×çììó‰ ©\\¸ËËɾ±£„σÿÙ‚ÌòƒÿƒÌÚéìë\\^¦ƒÌƒÿò…Ìòƒÿ‚Ì×çììó‰ ©\\¸ËÊĸª‘ƒÎƒÿÙ‚ÌòƒÿƒÌÚéìë\\^¦ƒÌƒÿõ…Ìõƒÿ‚Ì×çììó‰ ©\\¸Êƽ¯žvσÿÙ‚Ì„ÿƒÌÚéìë\\^¦ƒÌùƒÿÒƒÌσÿõ‚Ì×çìì÷‰ÿ «\\·Ç¶ª}•уÿÙÌâƒÿòƒÌÚéìë\\^¦ƒÌìƒÿéƒÌæƒÿì‚Ì×çììøöðëãÞÙÓÎÆÈÊ׬\\¶Ä¹­n…™ÕƒÿÙ€ÌßüƒÿâƒÌÚéìë\\^¦ƒÌÙ„ÿæÏ€Ìæ„ÿÜ‚Ì×éóôóðëæáÝÖÑËŽ¶®¥˜{~´¾²£ds’œ×ƒÿõòü…ÿüσÌÚéìë\\^¦„Ìò„ÿüòòü„ÿõ‚ÌÒìùøõñíèáÝÖÑÍÆÀ¹³«¢˜Žƒ‹­­gi{’¢ÛŽÿâ„ÌÚéìë\\^¦„ÌÖüŽÿÖÌãûùøõðëæàÙÓÎÈþ¹³®¥Ÿ•‹}m^hYkˆ–ªßÿì…ÌÚéìë\\^¦…Ìßÿ߀Ì!ÔñùùöóîèáÙÑËž¹µ±­©¥Ÿ˜‘„ufVFfiŽž³âŒÿæ†ÌÚéìë\\^¦†ÌÖù‰ÿùÙ€Ì"ÔóøöõñëãÙÐŽ³­¦¡ž›™˜•’Š~n`=Xf>~¦»ä‰ÿòæÒ‡ÌÚéìë\\^¦‡ÌÏßõ…ÿõâÏ€ÌÚóõõñíæÛÎÁµ¨“‹…~€}~zpfHCeV+(}ÂÒ‡ÙŒÌÚéìë\\^¦ŠÌÏÙÙææÜÙÏ‚ÌÒîððîéàÓðž~qf^Y€UVY^bdd^U3Xa?('+ªËË•ÌÚéìë\\^¦–ÌÑçëëéåÙɶ ‰ueVKC>9€89=@DHJL5@aU0(),6¯•ÌËÚéìë\\^¥Ë•ÌßåæåàÕí“yeUI@;8€53€5767840U[A,(*,,H–ÌÚèëê€\¢Ê”ÌÔÞààÛÑÀ¦‹q]MA;855ƒ3430..->]M3,(+,*(y“ÌËÌÚçéè€\–ÄÊË‘ÌÍÖØÙÖnXI>9655ƒ3220.,+0SU>*++-,+'%·‘ÌËËÍÙâää€\nŸ®±‘²ÃÐÑÐ˾¨‹nXH=855„3220.+*->XH/)--.+(&#X“²´ËÔØÝm€\^ntuv€ÈÉÉÆ¾­‘sYH=855…321/,**0PP=%(-/.-'$" k‘vx—±ÄÝ¿–\“€Á »°™}`K>855…322/,*)->SE/$)/0/+'# 9“\n‹ªéž¿d”\ °¹¹µ®ž†hP@855†3 20-*)+1MM=&%+€1*&#"”\}ä¡Ù’Ï Ì®°°«ŸŠoQ?6342…321.+)*.>PA5!'.121*&"¯’Ï߸ÿѦ¨¨¢“zY<,(*,/12‚322/,*),2IH;)"*022/*&!…Î.ÿ³žžšŒrL- &*.0223220-*)+/=K@6!$+224/*% KÎÿž“€•(pE2#(,/121.+)*-2EE8,"'-132/*%,Îÿ†€‹’’„B=gC  &*--+)*,0;F>5%$*/252/*$ Îÿ}€Œ—™‰/2ƒ¨s'€ #&')+.2CC9/!&,1352/)# Îÿuvyy„’¢¨„-}½ØžC€  ',.1;E@6'#)/2332/)" Î.ÿkmppxˆž²¾b(i±ÑÞÈk 2003@C;5!%+02532/(! Î"ÿacfhku‹§ÂÍ<$SÁÕÛÖ€3UK839A@8-"'-2€32.'  Î.ÿVX[^_dpŒ±Ë¼!;©½Á¸xXA8=A=6$#*/25331-% Î.ÿcMPSVW\n•»Ñ  1eˆ••…mSA9>>81!&,135320+# &Ï n@CFKLNVs¡ÅÕ@ "/H]c^SF=;@=5'#)/2€32/)!€ ?¹ïï‘ó-•359>ABFY€®Ë½ $.5=>;88=@92"%+025321-& {’óô¡äÁÑÜâåæÄ11228;>6+"(.23322/+# ½æçéíôøÿžÙ‹¦ÍÜäæç&E./01258Jq ÅÕ@ *0235;@;5#$*025320-' (çèêï÷ýÿÿjÃÛáãä&},,-./14@90!&,13521.*# k‘äæì÷þþúm\x²Ó’ÖÀ€)!+,.14Ba¹Ñ˜ '/28@=6(#)/2521/+%‚ ½‘ÖØÝíøøö\\f£ÊËË‘Ì#e&&')+-16IožÃÕM *19@94 %+0341/,&‚ U’ÌÍÏàïñð\\a¥ËË’Ì#·$#$%')+/9Q~¬ËÉ #.6=6+"(.121/,' ‚ ´“ÌÍÜëîí\\`¦Ë”Ìw€!"$'+/=\‹·Ð˜ (163"$*/12.+& ‚ l•ÌÛêìì\\_¦Ë•Ì@€ !$)/Ci›ÁÔM !.2-!&,./.)$‚ 1–ÌÚéìë\\^¦–Ì«' %0Kw©ÈÉ (/&"'*+)% ƒ ´–ÌÚéìë\\^¦„ÌÙ‹ÿùéÏ̪€#1R…´Ïš !*"$#!„ ¨‚ÌÜæ‚òìâÒˆÌÚéìë\\^¦„ÌÙÿüÖ̈€4]‘½Ôg $… „Ìâù‡ÿìφÌÚéìë\\^¦„ÌÙŽÿùÏÌ©8hžÂÃ#'… ¨€ÌÏòŠÿùÖ…ÌÚéìë\\^¦„ÌÙÿßÌ̵3 @sžµ†7; ‡ 1´ÌõŒÿùÏ„ÌÚéìë\\^¦„ÌÙƒÿùæüƒÿìÌl &JnˆŠjB"‡ l‚ÌæŽÿé„ÌÚéìë\\^¦„ÌÙƒÿòÌÖƒÿò‚Ì´X€ )@U[L5" ‚ J´‚ÌÒ„ÿüéÙÜì„ÿÒƒÌÚéìë\\^¦„ÌÙƒÿòÌσÿæƒÌÔÉo)  +1-$ 0b¯ƒÌâƒÿüÖÌ߃ÿâƒÌÚéìë\\^¦„ÌÙƒÿòÌéƒÿÖƒÌÔäììʼn«\\n¯ƒÌòƒÿ߃ÌòÿõìßÖ„ÌÚéìë\\^¦„ÌÙƒÿüòòõ„ÿé„ÌÔäììñ‰Ï\\n¯ƒÌ„ÿ„ÌÒψÌÚéìë\\^¦„ÌÙŒÿüß…ÌÔäììñ‰Ï\\n¯ƒÌƒÿò‘ÌÚéìë\\^¦„ÌÙÿùÜ„ÌÔäììñ‰Ï\\n¯‚ÌÒƒÿò‘ÌÚéìë\\^¦„ÌÙÿ߃ÌÔäììñ‰Ï\\n¯‚ÌÒƒÿò‘ÌÚéìë\\^¦„ÌÙƒÿùæì„ÿÒ‚ÌÔäììñ‰Ï\\n¯ƒÌƒÿò‘ÌÚéìë\\^¦„ÌÙƒÿò‚Ìâƒÿâ‚ÌÔäììñ‰Ï\\n¯ƒÌƒÿü„ÌßüìÜÏ…ÌÚéìë\\^¦„ÌÙƒÿò‚ÌÙƒÿé‚ÌÔäììñ‰Ï\\n¯ƒÌòƒÿÒƒÌòÿï߃ÌÚéìë\\^¦„ÌÙƒÿò‚Ìïƒÿì‚ÌÔäììñ‰Ï\\n¯ƒÌéƒÿï‚ÌÙƒÿéƒÌÚéìë\\^¦„ÌÙƒÿù€æïù„ÿæ‚ÌÔäììñ‰Ï\\n¯ƒÌÒ„ÿïÖÌÏßüƒÿÖƒÌÚéìë\\^¦„ÌÙÿÒ‚ÌÔäììñ‰Ï\\n¯„ÌìŽÿò„ÌÚéìë\\^¦„ÌÙÿéƒÌÔäììñ‰Ï\\n¯„ÌÏùÿÖ„ÌÚéìë\\^¦„ÌÙŽÿï„ÌÔäììñ‰Ï\\n¯…ÌÖü‹ÿß…ÌÚéìë\\^¦„ÌÙ‹ÿõïß…ÌÔäììñ‰Ï\\n¯†ÌÏòˆÿü܆ÌÚéìë\\^¦„ÌωيÌÔäììñ‰Ï\\n¯ˆÌÙéõƒÿòâχÌÚéìë\\^¦žÌÔäììñ‰Ï\\n¯žÌÚéìë\\^¦žÌÔäììñ‰Ï\\n¯žÌÚéìë\\^¥ËÌÔäììñ‰Ï\\n¯žÌÚéìë€\¢ÊÌÔäëëñ‰Ï\\m®ËœÌËÚéìë€\ÈË›ÌËÔãééñ‰Ï\\h«ÊÌÚèêê€\ŒÀÊ˘̀ËÓàääï‰Ï€\ŸÅÊ˘ÌËËÌÙäææm\\^’£¨š©ªºÐÖÚì‰Ï€\rœ¦¨š©ªÄÔÚÞ–\af™gilž·ÌïŠd\cšgjpŠªÂÕÙd¡\t“Ê‹³¡\`žåžÙx \d®³d \sÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿît8mk@Pßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿0PÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï0ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€¿ïÿÿÿÿÿÿ¿`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï0`ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß00@@@@@@@@@@@@@@@@@@@@@ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`@@@@@@@@@@@@@@@@@@@@@ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿP@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ @@@@@@@@@@@@@@@@@@@@@¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï@@@@@@@@@@@@@@@@@@@@@@00ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï`0ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯¿ïÿÿÿÿÿÿ¿Ÿ``ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿp@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß0ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿP0ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïpïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßPlibiodbc-3.52.9/mac/iODBCadministrator/English.lproj/main.xib0000644000076400007640000005161212323204667020713 00000000000000 1050 9L30 680 949.54 353.00 YES YES YES YES YES YES main YES OpenLink ODBC Administrator 1048576 2147483647 NSMenuCheckmark 1623195648 NSMenuMixedState 1623195648 submenuAction: OpenLink ODBC Administrator YES About iODBC Administrator 2147483647 About iODBC Administrator YES 1048576 2147483647 _NSAppleMenu OpenLink ODBC Administrator OpenLink ODBC Administrator Edit 1048576 2147483647 submenuAction: Edit YES Cut x 1048576 2147483647 Cut x Copy c 1048576 2147483647 Copy c Paste v 1048576 2147483647 Paste v Clear 1048576 2147483647 Clear Select All a 1048576 2147483647 Select All a Edit Edit _NSMainMenu main YES YES 0 YES 29 YES MainMenu 152 YES 182 YES 147 YES 181 YES 143 144 148 149 151 180 183 YES YES YES YES YES YES YES YES YES 184 0 3 libiodbc-3.52.9/mac/iODBCadministrator/English.lproj/odbcman.tiff0000644000076400007640000022056612323204667021546 00000000000000MM*þ€€Ú!v€âê(R†I<ò‡s H.ã`'ã`'8BIMéxHHØ(ÿáÿâùFG(üHHØ(d'`8BIMí––8BIMîAlpha 18BIMAlpha 18BIMï™™Z8BIM x8BIMó8BIM 8BIM' 8BIMõH/fflff/ff¡™š2Z5-8BIMøpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè8BIM@@8BIM0ðpÿÿ°ÿÿPðÿÿ°ÿÿ8BIM.8BIM ÁppP“¥ÿØÿàJFIFHHÿîAdobed€ÿÛ„            ÿÀpp"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?õT’BÉÉÇŢ̜›M4ºËCZÖŽ\甕%ŸW^éwVÛk±îcÄ´úV‰:”¿lôÿßýµoþ“NàŸîŸ±o¹ÞÚÞIQý³Óÿ}ÿöÕ¿úMJ¾­ƒcÃç—;@=+å­. ~éûÇÞkq$s31pq¬Ë̵´cÒ7YkÌ4W&Ig××zeµ¶ÖXòÇÍ>•¢AøÖ¥ûg§þûÿí«ôšwÿtý‹}È~ô~ÖòJ힟ûïÿ¶­ÿÒjUõ\+^+cž\íô¬õU¥Á/Ý?b¸áûÃín$’I«ŸÿÐõUËÿŒÏüEuëcÿíÎ:ê/þ3?ñÔ?­ÿ·8èÂÏ‹—˜ÜLpÜ›ZßEÐòö£U‘Õ/°ÕnUö MuØà?”+ÚÓ¨vHÀÅc¶; QH;wínøþCW¢õ,Ü?ªý&–âb‡4½´ÓKH`.ÚëeÖÃÝüÝO{íÙm–Xµ2eàሀœç°qðá98å)˜B¼×ulrÖäÙ—Žçývú÷W{B&v{z†)W<ÀAy" ×EÛt^³‹õ—++4×µ·Òãê1Ͳ}7µåµÿ£æþq¹#§}aûvöãåVãÎÇÝPwï=•ÚÖ=ÈC'œ% ÄY蜘L2C!œ% /m_GÀ{ìÅkÞeÅÏ“ð{‚ç?Æy?ó3. ¤£øê—CÓ?¡³úÏÿ«zç¿Æ‡þ#2ÿã(ÿÏÕ,ÓóŸ7X|ƒÉãiÌËf=@dÚÆ6¶è@+¿fúËþƒ¨ÿšõ’÷áãVÙ'àª}`ê9/£_›ŒÖ:êvlm€–ûžÊŽæ±Õ»è¿÷–žl†ŒDŽCZÿƒÿ|ä`Ä2 ’”åãZvõÞ¾{í¼f 2¾ÛY -cdðÝçÚ¥Óóóëê8„dÝ>³Aq ‚aÍsJî~¯uWuÞ™qÍ¥Í{±ïcu­à±Üí®í›¸FÐÜ^¶ÜV’Y›è°Ikµ›¿•± y8øá(ʦ¡9q{cá9J3"¯GÒð,}˜¡ï2âç‰ø=íVUN—ý ¿×³ÿ>=[Y’ù™u£ò ÿÿÑõUËÿŒÏüDõëcÿíÎ:ê/þ2ÄýJêÅØßûsŽˆÜ ì^'¥^ÌWôÜ«'ÓÇ8öÙNÖmßù-÷/BúÑÓ/ë=*£€æZú¬nECpÛcK,¯k-ú Ü˽JßôšbäcœZ"æÚ˜Ò € iÉZ8X3úm~–PmTÌú.,{êv6ÐïKsø'1iäÆda8H C÷¾RäaÌ 2cÉO÷~`öSºwK¯&üàÚíÊ,€CË[Vÿsìo³u¾¯ÐgÐ\íÍ·¬ýk¿#¦Ör+nEnsÛ+k(õŸwóm®ÏBÇÑþæ7Zí®³×òYÓÔ–âÓ]A¬h`×¹þŸé¬ªºw~‰÷ì·ü"é•Óþ¯ôöâa2×XÜ÷@ºç7nû_µU͘ræY2J2É1U–0þQorÜ©æÄ0ጆ(Ky|óŸò—¯C‰ŒÚßµÎÄÁ {œçø)`ýseÝk dôÊ=:®µÕº·½ÇgèÞË\×ífönk=žÅ‹“×ú…î$?hìcÕ:ƒÜÚíöÚv¶tÝçú«\õÊÆ^Œ|cÄešQ„nFåèŒw.UôÙ…nFCC~ÊÖSK ?-â*ÚC_]µa±¯Ë·ü¾“(ÿH½C¯ô˺E»§â–6Ëa†ÂvÃË=Îh{þ‹u‚Ó’Ì6kOOdÙ<>û=öþöÖmj—üâê.êÜÙå®¶?ºBÒå3žlññeá¯G¶8x8ÂõOý«Ïó·Ýyxåà”¹nhH@éîÆøø=ßö¸?Yõyõ¥žÒîûuìÜçºûÞ 0²¿k¬nÊ·=î\+r•ÖÛ”ÐZÜœßY­<†½òÍßÊØ«du+r„eç»%»·[q{C¿yµ¸úmÿ5,<Œq›Œ÷]\6æ9Çpà¡ œ¥!)ϳ››8˜ÇÀÂÏWÔº_ô6ÿ^ÏüøõmQè×UN®Ú\[Ýak‡z–+Ë64¼Ë¯ a ÿÿÒõT,œz2¨³&¶ÛEÍ,²·‰kšD9®ª¾~~N÷;:ÖÑCwÛk¸åîsœïk+g¾Çû’žÿ?©=úqÿØŒýèKÿ/©ù\ö##ÿzŽ/Ö\<¬zò+¢ö²Á¹¡Íh1ÿn"þÜÆÿEwÜßüšÃ ЂÆ2c"ÁŸW~¯}Z˪ޕ‰ökòk±³Õ¶Âk­Õ^ÛZÝÏuE`uÓ×_˜ï²ã àÆz‡·‘éo¯MÝ•Vïgè7ØË?Á-ß­}A¶ý&¶=¬¬ÙK÷€5°2Ækÿqö¬½¶u¬A‰M£«b_£æþuvéºÿ÷-Ÿ ½Ÿ¤¯ü'£g¦³³ëœãÉáÂÇÓÝÛåã’<ŒyŽTŽ8ñqÿƒ9ܼýkç¾—Q‘Q-·æ–X×4í{Ç~{\µ°ÌF[Ôr„4¸Ž ÿ'ó¿3þ9è˜}vž¿UyO£Õúsý7ºÆmº›k/nÝbÍ­{ÞïFíõúŸàýE_¬?pÇÁoøgz·ø:ϵ¿õË¿óÒ£˜GÛ‡‹æn¹~!Ÿâ'%\äÿ\c¡”!ëÿ™Ã,Ÿ×Ÿ¶Ñ!ãËmþvâm´ÿ)çqV¾¡t…õŽÞ¥_VÄÄ4º›E–ÖàÛEÍuNô-­Žk]½žÍÿ¥þ¢¥Ör™‚òN§@¯ø¦±Ø˜ÝS¨\×:¼›i¡Nê[mÖý'7ÚßµÖÕ{Œ‰2vnüjp„1â@Ó°ý§ÿÆËêGþWýˆÈÿÞ„¿ñ²ú“ÿ•Çÿb2?÷¡k~ÜÆÿEwÜßüš=^‹­mMªÐç†ÇýZÐ់…ÇÁ¹UUSS)¥®ªÚ]l­kZ6±Œc}­cZ¦’I‹ßÿÓõUËÿŒÏüEuëcÿíÎ:ê/þ3?ñÔ?­ÿ·8èÂÏI Ã¥äº,& ýߊéæ/^:‡â‘Øúöÿï*æ[ÿ'×ÿ…ÙÿR½o?ü¾›n6=çëkÛ^CfXOç·k«wý5¥Ìf–1„Ź?à¹\®e9x…ðÕVŸ¼ðùRzó1ì$Sh¡UÏu“ù®­—SENs>—ºÕÉWÖ2:nP¯ m{=Íw¶cÔ¯tn­ÛW¯t¼<î™Óì¯'&Þ«xs¬i!­yèÑ_­oþ~Èÿ¶ê^i‘UK/gPÇmùN}”ÌuO±çÖ®»=·Pö}ÿà•ªyyqÎ ÇåÈ4âî×ýK—ççðÞ}¬¦çˆú¸gòñGûß$⟩äÑ–ú~¸tׯ®Ó»]¾Ê1³[[½ÞÏmìwúÐÿ:³3¾°`77&òýîÝéRÆêvWìlYÛ¬]>ø´~;ßDë7aÓk]]•_Kn'éVù}6áµÌszµ‡õ—üZ·¡t\Þ±oQ9N§ÓÙMt Au—UCŸcnKœÝ–¿ÚÏOÞ³çɉÌ|ÕÀ­æÝÁÌCis⥋Œ#/Tª//mÙÝw5´ÔØV´ý7‡dd8nÙ[7«×mѾªõ<œ:kÀ¨·¶ŸO#!æ¦Ø]ï²ö1¾­¿§wÐý¥³Óý-‹?¢áb“„ÊÃ)˶†äA‡Y½ÃÔu¶Ÿsý®~ÏÜÿ½ëgSÉé=*³ƒ¶«-µ´1ð¦Ý¯¶Y[†Ç{iôÖž,?và„92i¡¹|Ç2yÙd˘ËÚÄo‡ôç?Þ—ý¼Rú±Özm'"ú…”0n²Ú,u€~uŒsi·oï=•½ŒüõK¹½CÍq×®qî~+së×QÆÇû>MMͼ“éÜ状Ö¾ªëwªæ;w½žšÃÂÚ°ÐÆœ†±³µ ºElß¹ûôY½]ËÃ! 61ý'?(ÃÅ„H¸È|ŸWÓúk‹±\d—Ù©ÿŒz´ªt¿èmþ½ŸùñêÚÉ—Ì|˳–>AÿÔõUËÿŒÏüDõëcÿíÎ:ê3þ2*²ß©}Eµ´¼Eî ÃY}Úó™]l}þB#pƒ±|ý¿ò}ø]Ÿõ+Ö:Ž]G¥Ý€û}&äW°½¤$} ¼‹¨àŒjZûƒÊÚ×1Ít‚Ñ´þj_lé?ékÿ5ßù¥–È }Á GÊ9'ˆä¦'§éÞþ«ê=#¦ô¿«xÖµÙ§m®õl~EkD ¿£g²ºþ»óßþ“ظŒÌʳºó³)nʯÊc«‚Z6ÖÛ \æúÛ=m¿ËXÃ7¥4Ëm¬ÁØgïØÔúpÉ¡Ç!°ÛX㣸ú¨ã„a)Lä”…]Ä#6YÎ0„qpº©~o­tßè£úÏÿªrÁÿŸø‰ê?ý¸Ç[ *ŒÎ™^N;·ÓkžXñÁïlÿÑYã-®wÔž¢'ù‚|€È¡ÎwöZ³¥¤Íþó«xÁºðØV¾†áäV¬Çônc]Áu{lk]ým«Ñr©éß[:; ðúݺ«š ^E3ôšË_]µnÿ‹óv¯/£¨à zšûƒÖ5®cƒ¤!Íú*´zpvñâ77{LY®Z9! ðHd”67ÉÊÃ’xÌâqJp™ÔT¿ƒèØý¢ô.‘íWU–Ç;պ˫lʪ¢—zŽö·ùªýKmõ¬·ý"â1Ô±œÖ šì–¹µ!.–Tÿßb zN.vHs›Áw¨â?«¼;j.'Sé­ÌÆ{²µ—1ÎÑÜýT±ÄDLœ‚rŸˆóQ–f|8Ž8ÃÂ_ô¸_XéÐÛý{?óãÕµC¡äS“Ó*È¡Ûê´ØêÝØ´Øý®oò]ùªúÍŸÍ/2ëÃåÿÕõTÎhp-p¤APAN’JræŸÕ_ü¦ÀÿØZôš_óOê¯þS`ì-?úMk$’œŸù§õWÿ)°?öŸý&—üÓú«ÿ”Øû Oþ“ZÉ$¦5×]5²ª˜Úë­¡¬c@ k@ÚÖ1­öµ­jVVËêìh{ ^Ç ×4ý&¹I$”äÿÍ?ª¿ùMÿ°´ÿé4¿æŸÕ_ü¦ÀÿØZôšÖI%9?óOê¯þS`ì-?úM/ù§õWÿ)°?öŸý&µ’ILXÆVƱ ckZÑ k@RI$”ÿÿÙ HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeassig CRT curv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊ×äPw¢Í߆¯×ÿ¢Áàÿ®Éäÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ´Íæÿ¶ÏçÿÁÖêÿÔãñÿëòøïüýþpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢»ÔmžÎÿ‘¶Úÿ¨Åâÿ²Ëåÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³ÌæÿµÎæÿºÑèÿÇÚìÿÝèôÿó÷û¿þþÿ0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÊÓPGjŽÿY…²ÿz§Óÿ¢Áàÿ²Ëåÿ¶Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ»ÒèÿÇÚìÿßêôÿöùüÿþÿÿÿÿÿÿpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡™­ŸLs™ÿ`Àÿ‹²ØÿªÇãÿµÎæÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¹Ðèÿ¿ÔêÿÐßïÿèï÷ÿúûýÿÿÿÿïÿÿÿ0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿH\pß8SoÿMsšÿmžÎÿ¡Ààÿ®Éäÿ²Ëåÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ¶ÏçÿÂ×ëÿâëõÿúûýÿýþþÿøúüïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÜà0/F^ÿ@_ÿWƒ®ÿƒ¬Öÿ§Äâÿ°Ëåÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ´ÍæÿºÑèÿÌÝîÿëòøÿüýþÿüýþÿùûýŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ>]|ÿ^Œ»ÿ…®Öÿ‹²ØÿŒ³Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳ÙÿµÚÿœ½ÞÿÆÙìÿêñøÿïôúÿèï÷ÿøúý@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£­·p.E\ÿ2JcÿKp–ÿgšÌÿ‰°ØÿŒ³Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ޳Ùÿ”·Ûÿ§ÄâÿÖãñÿðõúÿðõúÿëñøßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ3LfÿS}¦ÿf˜Ëÿf˜Ëÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿgšÌÿh›ÍÿnŸÏÿ›¼ÞÿËÜîÿÙæòÿ×äòÿôøû@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿAa‚ÿ\Џÿf˜Ëÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿgšÌÿj›Íÿw¤Òÿ­ÈäÿÖãñÿÝèôÿØåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ0H`ÿS|¦ÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿh›ÍÿŒ³Ùÿ¾ÓéÿÌÝîÿÌÝîÿòöû@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿgšÌÿkœÎÿ›¼ÞÿÇÚìÿÐßïÿÌÝîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ0G_ÿS|¦ÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿgšÌÿ‰°Øÿ¹ÐèÿÇÚìÿÆÙìÿñõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿh›Íÿ•¸ÜÿÁÖêÿÊÛíÿÇÚìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿgšÌÿ’·Ûÿ¿ÔêÿÇÚìÿÅØìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿƒ¬Öÿ©Æâÿ³Ìæÿ³Ìæÿ³Ìæÿ³Ìæÿ©ÆâÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³Ìæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâìõÿ¼Òéÿy¦Òÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿpŸÏÿ¼ÒéÿõùüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùüÿÅÙìÿy¦Òÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³Ìæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³Ìæÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ ¿ßÿõùüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùüÿ ¿ßÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³ÌæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÙìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ ¿ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ¿ßÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³Ìæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¹Üÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¹Üÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³ÌæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùüÿpŸÏÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿìòùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìòùÿÏßïÿÏßïÿìòùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìòùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³ÌæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ³Ùÿf™Ìÿf™Ìÿy¦Òÿ³Ìæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ¿ßÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ–¹Üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©Æâÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ©Æâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ¿ßÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³ÌæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³ÌæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏßïÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÅÙìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³Ìæÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³ÌæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏßïÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³ÌæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿy¦Òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìòùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿìòùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpŸÏÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿpŸÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùüÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf™Ìÿf˜Ëÿf˜Ëÿe—Êÿc•Æÿb“Äÿa‘Âÿ°ÈàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿìòùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâìõÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf˜Ëÿf˜Ëÿf˜Ëÿd•Çÿa‘Âÿ^Œ»ÿ[ˆ¶ÿ­ÄÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\‹¹ÿf˜Ëÿf˜Ëÿe—Êÿb“Äÿ\‹¹ÿXƒ¯ÿT}§ÿª¿ÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\Џÿf˜Ëÿf˜Ëÿd—Éÿ_޾ÿX…±ÿRz£ÿp§„ÿ§»ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\Џÿf˜Ëÿe—Êÿb“Äÿ\ЏÿUªÿ_‘ÿu­ƒÿ§ºÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâìõÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿâìõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¢­€.E\ÿ.E\ÿ@_ÿ\Џÿe—Êÿc•Æÿ^޽ÿXƒ¯ÿU€žÿŒÏvÿT}ÿ§»ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿìòùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿy¦Òÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿpŸÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâìõÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿðõú€ÿÿÿÿÿÿ¿ÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿ`–¢­.E\ÿ.E\ÿ@_ÿ[‰·ÿd•Çÿa‘Âÿ[ˆ¶ÿUªÿq®ÿ„Á}ÿJp•ÿ¨½ÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ©ÆâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÅÙìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼Òéÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³ÌæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÙìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿ¸ÏçÿÆÙìÿÅØìÿóõøÿÿøöÿÿôðÿÿðëÿÿêãÿÿæÞÿÿãÙÿÿÞÓÿÿÚÎÿÿÔÆÿÿÖÈÿÿ×Êÿÿá×ÿª§¬ÿ.E\ÿ.E\ÿ@_ÿ[‰¶ÿb“Äÿ\‹¹ÿV‚­ÿ]’ÿ’Ûnÿe—…ÿLs™ÿª¿ÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿ ¿ßÿõùüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©Æâÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³ÌæÿpŸÏÿf™Ìÿf™Ìÿf™Ìÿ³Ìæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–¹Üÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆ¯×ÿÁÔéÿæìóÿøóôÿÿöóÿÿôðÿÿðëÿÿìæÿÿéáÿÿåÝÿÿàÖÿÿÝÑÿÿØËÿÿÓÅÿÿͽÿÿȶÿÿ®ÿÿ»¥ÿñ­˜ÿ¢{ÿWg~ÿY‡´ÿ_޾ÿY…²ÿW„£ÿ„ÑdÿÕsÿIm’ÿNuœÿ¬Á×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâìõÿÙåòÿõùüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùüÿpŸÏÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùüÿÙåòÿÙåòÿõùüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâìõÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿy¥ÒÿÒÞìÿÿûùÿÿúøÿÿ÷õÿÿõñÿÿñíÿÿîèÿÿéáÿÿåÝÿÿàÖÿÿÝÑÿÿÙÍÿÿÔÆÿÿÐÀÿÿ˹ÿÿƳÿÿÀ«ÿþ¹¢ÿþ²˜ÿüªŽÿù ƒÿ·‹ÿl‰­ÿV‚­ÿl¸gÿÚiÿpª{ÿIn’ÿQz¢ÿ­ÄÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©Æâÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿƒ¬Öÿõùüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒ¬Öÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³Êãÿÿüûÿÿûùÿÿúøÿÿ÷õÿÿôðÿÿðëÿÿìæÿÿèàÿÿãÙÿÿÞÓÿÿÚÎÿÿÖÈÿÿÒÃÿÿξÿÿ˹ÿÿƳÿÿ®ÿþ»¥ÿþ·Ÿÿþ¯•ÿû¦‹ÿóš}ÿçŒmÿÛ}^ÿ‡“hÿƒÖYÿÚkÿOxˆÿKq–ÿU€ªÿ°ÇßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÙìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ ¿ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ¿ßÿf™Ìÿf™Ìÿf™Ìÿƒ«ÔÿâéñÿÿûùÿÿûùÿÿøöÿÿöóÿÿòîÿÿîèÿÿéáÿÿãÙÿÿÝÑÿÿØËÿÿÓÅÿÿξÿÿ˹ÿÿǵÿÿűÿÿÁ­ÿÿ¿©ÿÿ»¥ÿþ·Ÿÿþ²˜ÿü¬‘ÿö¡„ÿê“uÿÝ„fÿÎ|VÿyÊFÿŒÙfÿ~¼iÿGjŽÿOvžÿZ†³ÿ±Êâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³Ìæÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿƒ¬ÖÿìòùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìòùÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿƒ«Ôÿõòóÿÿúøÿÿøöÿÿ÷õÿÿõñÿÿðëÿÿêãÿÿãÙÿÿÜÐÿÿÓÅÿÿͽÿÿƳÿÿÁ­ÿÿ¼¦ÿÿ¹¡ÿÿ¶žÿÿ´›ÿÿ³™ÿÿ²˜ÿþ¯•ÿþ­’ÿü«ÿù¥Šÿïš~ÿàŠnÿÕ}`ÿ‡­=ÿ‚ÕXÿŒÙfÿšz>ÿ]g~ÿS|¦ÿ^Œ»ÿ²ËäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿ³Ìæÿy¦Òÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿpŸÏÿ ¿ßÿâìõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâìõÿ©ÆâÿpŸÏÿf™Ìÿf™Ìÿf™Ìÿ ¼Úÿÿöóÿÿ÷õÿÿ÷õÿÿõñÿÿñíÿÿìæÿÿäÛÿÿÚÎÿÿÑÁÿÿǵÿÿ¾¨ÿÿµÿÿ®“ÿÿ¨‹ÿÿ£…ÿÿ¡ÿÿž~ÿÿ}ÿÿ}ÿþœ}ÿþ~ÿþŸÿûžÿó˜zÿäŒpÿØ‚fÿž–HÿrÐCÿ‹ØeÿŠÆVÿ«K+ÿ½M(ÿ†r}ÿa’Âÿy¥Òÿ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿpŸÏÿŒ³ÙÿŒ³Ùÿ³Ìæÿ³Ìæÿ–¹ÜÿŒ³ÙÿpŸÏÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿƒªÒÿÿòîÿÿôðÿÿôðÿÿòîÿÿïéÿÿèàÿÿÞÓÿÿÒÃÿÿİÿÿ¶žÿÿ©ÿÿž~ÿÿ•qÿÿŒfÿÿ†^ÿÿƒYÿÿUÿÿUÿÿUÿÿ€Vÿþ‚Yÿþ…^ÿüˆbÿö‰dÿê…dÿÛ}^ÿÄ€Uÿi¿3ÿ‚ÕXÿ‰Øaÿ‘?ÿ®J(ÿÅN'ÿÚW+ÿ|‹ªÿf˜Ëÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿƒ©ÑÿõêçÿÿðëÿÿðëÿÿïéÿÿëåÿÿãÙÿÿ×Éÿÿȶÿÿ¸ ÿÿ§‰ÿÿ—uÿÿ‹eÿÿ€VÿÿxKÿÿrCÿÿn>ÿÿk9ÿÿj8ÿÿj8ÿÿj8ÿþk9ÿþm=ÿüp@ÿøqDÿípHÿÞoJÿÔnLÿy£5ÿpÏ@ÿ‰ØaÿÔUÿŸ\0ÿ¶L(ÿÌQ)ÿÛX,ÿÖ]6ÿ}ޝÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf˜Ëÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿR|¥ÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿâÛßÿÿëåÿÿìæÿÿëåÿÿèàÿÿßÕÿÿÒÃÿÿÁ­ÿÿ®“ÿÿ›yÿÿ‹eÿÿUÿÿwIÿÿp@ÿÿl;ÿÿj8ÿÿg5ÿÿg5ÿÿg5ÿþf3ÿþg5ÿþg5ÿþg5ÿûh7ÿòf6ÿãb7ÿÕ_8ÿœ‚4ÿaÂ0ÿÔUÿ„Ö[ÿ…¨Aÿ¨K,ÿÀN(ÿÓT*ÿÜX,ÿÙW,ÿ½aHÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿgšÌÿ‘¶Úÿ»ÒèÿÄ×ëÿÁÖêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ.E\ÿQy¢ÿe˜Êÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³¿ÔÿÿæÞÿÿèàÿÿèàÿÿäÛÿÿÝÑÿÿÐÀÿÿ¼¦ÿÿ¨‹ÿÿ•qÿÿ…]ÿÿyMÿÿqAÿÿl;ÿÿj8ÿÿg5ÿÿg5ÿþf3ÿÿf3ÿÿf3ÿÿf3ÿþf3ÿýf3ÿüf4ÿöc3ÿé^0ÿÚY.ÿ¹g.ÿb­-ÿnÏ>ÿ…Ö]ÿyÒMÿ‘t3ÿ±N,ÿÌR(ÿÙW+ÿÜY,ÿÓU*ÿÉP(ÿ”syÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf˜ËÿgšÌÿµÚÿ¶Ïçÿ¾Óéÿ»Òèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ.E\ÿKq–ÿb“Äÿe˜Êÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿy¢ÍÿÿàÖÿÿâØÿÿãÙÿÿàÖÿÿÚÎÿÿξÿÿ¼¦ÿÿ§‰ÿÿ’nÿÿ‚XÿÿwIÿÿn>ÿÿk9ÿÿh6ÿÿg5ÿÿg5ÿÿf3ÿÿf3ÿÿf3ÿÿf3ÿþf3ÿþf3ÿüe2ÿùd2ÿî`0ÿÞZ.ÿÒU,ÿmš+ÿaÂ0ÿ~ÔSÿÔUÿx¿>ÿ¥I*ÿ¼P+ÿÖV+ÿßZ-ÿÚX,ÿÎS+ÿÂN'ÿ¹J%ÿp·ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf˜Ëÿf˜Ëÿh›ÍÿŒ³Ùÿ©Æâÿ­Èäÿ®Éäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ.E\ÿ7SnÿPwŸÿW‚®ÿX…±ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿÁºÃÿÿÜÐÿÿÝÑÿÿÜÐÿÿØËÿÿξÿÿ¾¨ÿÿ¨‹ÿÿ’nÿÿ‚XÿÿvHÿÿm=ÿÿj8ÿÿg5ÿÿg5ÿþf3ÿÿf3ÿÿf3ÿÿf3ÿÿf3ÿþf3ÿþf3ÿüe2ÿûd2ÿòa0ÿä[.ÿÔU+ÿ’}*ÿZ³-ÿnÏ>ÿ‚ÕXÿvÑHÿ†‰/ÿ­J)ÿÉT-ÿáZ-ÿä[.ÿ×V+ÿÈP(ÿ¼K&ÿ°F#ÿŠ\XÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿY…²ÿZ‡´ÿf˜ËÿªÔÿ‹²Øÿ£ÂàßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿH\pß.E\ÿ.E\ÿ.E\ÿ/F^ÿ7Snÿ:Wtÿ:Xuÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;XvÿTg€ÿÿÖÈÿÿ×Éÿÿ×ÉÿÿÔÆÿÿξÿÿÁ­ÿÿ­‘ÿÿ–sÿÿƒYÿÿvHÿÿm=ÿÿj8ÿÿg5ÿÿg5ÿþf3ÿÿf3ÿÿf3ÿÿf3ÿÿf3ÿþf3ÿþf3ÿþf3ÿûd2ÿõb1ÿé]/ÿÚW,ÿ¹c*ÿUª*ÿaÂ0ÿ|ÓPÿ|ÓPÿmÎ=ÿžL%ÿ·L(ÿÕW-ÿé]/ÿæ\.ÿ×W-ÿÅO'ÿ¶I$ÿ¨C"ÿŸ@ ÿGUkÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿ;Xvÿÿÿj8ÿÿg5ÿÿg5ÿÿf3ÿÿf3ÿÿf3ÿÿf3ÿÿf3ÿÿf3ÿþf3ÿþf3ÿüe2ÿøc2ÿì^/ÿÝX,ÿÑT*ÿk—)ÿZ´-ÿnÏ>ÿ~ÔSÿsÐEÿ~˜/ÿ¨E$ÿÃP)ÿá[/ÿï`0ÿè]/ÿÔU+ÿÂN'ÿ±G#ÿ¢A ÿ–<ÿd>9ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ7SnÿFh‹ÿ^„¬ïáêó0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°¹Â`;Qfï.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿòÀ°ÿÿ˹ÿÿ˹ÿþǵÿü®ÿû¶žÿù£†ÿùhÿû{Pÿüp@ÿþj8ÿþg5ÿÿg5ÿÿf3ÿÿf3ÿÿf3ÿÿf3ÿÿf3ÿÿf3ÿþf3ÿþf3ÿþf3ÿùd2ÿð`0ÿáZ-ÿÔU*ÿ|)ÿV¬+ÿbÄ1ÿyÒMÿyÒMÿmÎ=ÿ‘c&ÿ±G%ÿÏT+ÿì_1ÿõb1ÿé^1ÿÔU*ÿ¿L&ÿ­E#ÿ›>ÿ8ÿy7"ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿPi€ßÜãê0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÜà0ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ÔÍÎïÿ®ÿÿİÿÿİÿü¿«ÿøµŸÿð¤ŠÿéŽoÿãvQÿäh?ÿêc6ÿòc3ÿùe4ÿûe2ÿþf3ÿÿf3ÿÿf3ÿÿf3ÿÿf3ÿþf3ÿþf3ÿþf3ÿüe2ÿõb1ÿç\.ÿ×V+ÿ°h)ÿT¨*ÿ\¸.ÿnÏ>ÿ|ÓPÿqÐAÿq»5ÿ£B!ÿ¼L'ÿÛX.ÿòa1ÿød2ÿê_1ÿÔU*ÿ½L&ÿ¨C"ÿ–<ÿ†6ÿz1ÿº²²`ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@ËÐÖ@åèë ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÜÑÿÿ¼¦ÿÿ¾¨ÿÿ¾¨ÿþ¹¢ÿö¬“ÿé–zÿÔxYÿÀ]<ÿ·O,ÿ¼M(ÿËR*ÿÜX,ÿì^/ÿöb1ÿûd2ÿþf3ÿþf3ÿÿf3ÿþf3ÿþf3ÿüe2ÿøc2ÿì^/ÿÝX,ÿÉY*ÿcœ)ÿX±,ÿcÆ2ÿwÒIÿvÑHÿlÎ;ÿ†})ÿªD"ÿÈQ*ÿæ]0ÿød2ÿúd2ÿë^/ÿÔU*ÿ¼K&ÿ¥B!ÿ:ÿ~2ÿq-ÿ´”ŠPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿƳÿÿµÿÿ¶žÿÿ¶žÿÿ´šÿü¨ŒÿìrÿËlLÿ¥K-ÿ‰9ÿ~3ÿ‡7ÿŸ@ ÿ¼K&ÿÔU*ÿæ\.ÿòa0ÿùd2ÿüe2ÿþf3ÿüe2ÿùd2ÿð`0ÿáZ-ÿÔU*ÿ‰)ÿUª+ÿ^»/ÿmÎ=ÿxÒKÿpÏ@ÿhÍ6ÿI!ÿ¶I$ÿÔU+ÿða2ÿûe2ÿûe4ÿí_/ÿÔU*ÿ¹J%ÿ¡@ ÿŠ7ÿx0ÿh*ÿ‡\N€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpÿ¶žÿÿ®“ÿÿ¯•ÿÿ¯•ÿÿ¯•ÿÿ©ÿü“pÿŸ¥Eÿ£[2ÿq.ÿN ÿEÿS!ÿn,ÿ9ÿ®F#ÿÉP(ÿÞY,ÿí_/ÿöb1ÿøc2ÿóa1ÿæ\.ÿ×V+ÿ°h)ÿT¨*ÿZ´-ÿdÇ2ÿsÐEÿsÐEÿjÍ8ÿ{—,ÿ¨C"ÿÃN'ÿáZ-ÿõb1ÿýf3ÿûe2ÿí_/ÿÒT*ÿ·I%ÿœ>ÿ†6ÿq-ÿ`&ÿi=/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿ¤†ÿÿ¨‹ÿÿ¨‹ÿÿ¨‹ÿÿ­’ÿÿ­’ÿÿ£„ÿª˜BÿmÎ=ÿœ¶gÿs_Cÿ@ ÿ@ ÿ@ ÿA ÿ_&ÿ€3ÿ¡@ ÿ½L&ÿÔU*ÿáZ-ÿáZ-ÿ×V+ÿÆW)ÿcœ*ÿX¯,ÿ`¿0ÿlÎ;ÿtÑFÿnÏ>ÿgÌ5ÿ’c%ÿ³H$ÿÑT*ÿì^/ÿúd2ÿþg5ÿüe2ÿí_/ÿÑT*ÿ´H$ÿ˜=ÿ€3ÿi*ÿW#ÿJ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿ}ÿÿ €ÿÿ¡ÿÿ¡ÿÿ©Œÿÿ°—ÿÿ²™ÿÿ§‰ÿjŽ/ÿcÆ2ÿ¢àƒÿ¼Ô¨ÿ‘ˆsÿU6'ÿ@ ÿ@ ÿ@ ÿQ ÿr.ÿ•<ÿ°F#ÿÀM&ÿÅO'ÿyŽ)ÿV­+ÿ\¹.ÿeÊ2ÿrÐCÿrÐCÿkÎ9ÿq±/ÿ¥B!ÿ¿L&ÿÝX,ÿõb1ÿþf3ÿþg5ÿüe2ÿí_/ÿÏS)ÿ°F#ÿ“;ÿx0ÿb'ÿNÿ@ ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿ—uÿÿ˜vÿÿ›yÿÿ›yÿÿ£„ÿÿ­’ÿÿ¹¢ÿÿ¾¨ÿ×£„ÿ8qÿ[¶-ÿÞ}ÿÍî½ÿâõØÿ´²žÿkRCÿ@ ÿ@ ÿ@ ÿS!ÿ{1ÿž? ÿšm'ÿY²,ÿ[¶.ÿbÄ1ÿlÎ;ÿsÐEÿpÏ@ÿhÍ6ÿŠt'ÿ®F#ÿËQ)ÿé]/ÿùd2ÿþf3ÿýf3ÿüe2ÿì^/ÿÌR)ÿ«D"ÿ8ÿq-ÿZ$ÿEÿ@ ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿkÿÿ‘mÿÿ”pÿÿ”pÿÿšxÿÿ¦ˆÿÿ·žÿÿŲÿÿξÿŒ~bÿ+VÿP¡(ÿÚiÿÅì±ÿÝôÑÿæ÷ÞÿÕÜÈÿ‹|kÿJ(ÿ@ ÿS!ÿƒ>ÿjÃ2ÿ`À0ÿaÂ0ÿfË3ÿpÏ@ÿrÐCÿlÎ;ÿlÄ5ÿI!ÿ·I%ÿ×V+ÿòa0ÿüe2ÿÿg5ÿþf3ÿüe2ÿê^/ÿÈP(ÿ¥B!ÿ†6ÿi*ÿQ ÿ@ ÿ@ ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpÿ‰aÿÿŠcÿÿŒfÿÿŽhÿÿkÿÿ˜uÿÿ¨‹ÿÿ½§ÿÿÑÂÿÿÙÍÿS\<ÿ"EÿH$ÿ~ÔSÿµæÿÑðÁÿßôÕÿäöÛÿàõÖÿœŸ€ÿdP3ÿ¦UÿxÒKÿjÍ8ÿfË3ÿkÎ9ÿqÐAÿpÏ@ÿjÍ8ÿ|—-ÿ¨C"ÿÃN'ÿã[-ÿøc2ÿþf3ÿþf3ÿþf3ÿùd2ÿæ\.ÿÂN'ÿž? ÿ}2ÿ`&ÿGÿ@ ÿ@ Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿ€Vÿÿ‚Xÿÿ„[ÿÿ†^ÿÿ‡_ÿÿ‹dÿÿ”pÿÿ©ŒÿÿıÿÿØËÿâɼÿ(>ÿ<ÿB„!ÿlÎ;ÿ¡àÿ¿ê©ÿÍî½ÿÑðÁÿÊí¸ÿµæÿšÝxÿ‚ÕXÿqÐAÿjÍ8ÿmÎ=ÿqÐAÿmÎ=ÿhÍ6ÿ”Z$ÿ±G#ÿÑT*ÿí_/ÿüe2ÿÿg5ÿþf3ÿþf3ÿöb1ÿàZ-ÿºJ%ÿ•<ÿr.ÿT"ÿ@ ÿ@ ÿ@ €ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿŠcÿÿyMÿÿ|Pÿÿ~Sÿÿ€VÿÿWÿÿ…\ÿÿ’nÿÿ¯•ÿÿÌ»ÿÿÝÑÿš•ÿ3 ÿ>ÿA‚ ÿaÂ1ÿ‹Øeÿ¦áˆÿ¯ä•ÿ¯ä•ÿ£à…ÿ‘Úmÿ~ÔSÿqÐAÿkÎ9ÿnÏ>ÿnÏ>ÿjÍ8ÿr²1ÿ¥B!ÿ½L&ÿÝX,ÿõb1ÿþf3ÿÿg5ÿþf3ÿüe2ÿòa0ÿØV+ÿ°F#ÿ‰7ÿf)ÿHÿ@ ÿ@ ÿX7+Pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•qßÿp@ÿÿrCÿÿtFÿÿxKÿÿyLÿÿzNÿÿVÿÿ–sÿÿ¹¡ÿÿÓÅÿÿßÕÿS_@ÿ3 ÿ%JÿC†"ÿ^»/ÿvÑHÿ…Ö]ÿŠØcÿ†×^ÿ~ÔSÿtÑFÿmÎ=ÿlÎ;ÿpÏ@ÿmÎ=ÿgÌ5ÿŠt'ÿ®F#ÿËQ)ÿé]/ÿùd2ÿþf3ÿýf3ÿþf3ÿùd2ÿì^/ÿÎR)ÿ¤B!ÿ{1ÿW#ÿ@ ÿ@ ÿ@ ÿpSJ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïôú æîö@éñø@ëòø@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ö­—¿þf3ÿÿg5ÿÿk9ÿÿn>ÿÿqAÿÿrBÿÿtFÿÿ‚Yÿþ €ÿÿ®ÿÿØËÿâʽÿ(>ÿ3 ÿ,YÿI’$ÿ\¸.ÿgÌ5ÿmÎ=ÿnÏ>ÿlÎ;ÿjÍ8ÿjÍ8ÿmÎ=ÿpÏ@ÿkÎ9ÿjÂ2ÿ K"ÿ¹J%ÿØV+ÿòa0ÿüe2ÿþg5ÿþf3ÿûd2ÿõb1ÿáZ-ÿ¿L&ÿ“;ÿk+ÿGÿ@ ÿ@ ÿ@ ï–†‚@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìòù@ìóù@îôù@ñöú@øúý0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞæí0qšÃßv£Ñÿ–¹Üÿ©Æâÿ²Ëåÿ´ÍæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿÁºÄÿóa1ÿóa1ÿøc2ÿüe2ÿÿj8ÿÿl;ÿÿm<ÿÿsEÿþŠcÿþ­‘ÿÿÌ»ÿÿÝÑÿš•ÿ3 ÿ4 ÿ6kÿOž'ÿ^»/ÿdÇ2ÿfË3ÿfË3ÿfË3ÿjÍ8ÿnÏ>ÿnÏ>ÿhÍ6ÿŽ+ÿ«D"ÿÆO(ÿä[.ÿøc2ÿýf3ÿýf3ÿüe2ÿøc2ÿì^/ÿÕU+ÿ®F#ÿ€3ÿW#ÿ@ ÿ@ ÿ@ ÿ@ ÿŸ¬½ÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿµÎæÿ¶Ïçÿ¼ÓéÿÊÛíÿÞéôÿñöúïýþÿ`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚßä0NnïS|¦ÿh›Íÿ–¹Üÿ­ÈäÿµÎæÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸ÏçÿájEÿç\.ÿé]/ÿï`0ÿõb1ÿûd2ÿþg5ÿüj8ÿüwJÿý”qÿÿ¸ ÿÿÓÅÿÿßÕÿS_@ÿ3 ÿ"Eÿ>|ÿUª*ÿaÂ0ÿeÊ2ÿfË3ÿgÌ5ÿlÎ;ÿpÏ@ÿlÎ;ÿgÌ5ÿšR#ÿ´H$ÿÒT*ÿï`0ÿüe2ÿþg5ÿþf3ÿùd2ÿòa0ÿáZ-ÿÃN'ÿ˜=ÿi*ÿB ÿ@ ÿ@ ÿ@ ÿO1(ÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸Ïçÿ¸ÏçÿºÑèÿÀÕêÿÎßïÿèï÷ÿúûýÿÿÿÿÿþÿÿ`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿp¯5PjÿHlÿb’Ãÿ’·Ûÿ¦Ãáÿ¬Çãÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿȉ}ÿÚW,ÿÛX,ÿàZ-ÿæ\.ÿí_/ÿóa1ÿød4ÿùk<ÿüUÿýŸÿÿ®ÿÿÙÍÿâÌ¿ÿ(>ÿ3 ÿ+VÿF#ÿZ³-ÿbÅ1ÿfË3ÿhÍ6ÿnÏ>ÿpÏ@ÿkÎ9ÿu©0ÿ¥B!ÿ¿L&ÿÞY,ÿöb1ÿýf3ÿþg5ÿûd2ÿõb1ÿç\.ÿÑT*ÿ­E#ÿ~2ÿP ÿ@ ÿ@ ÿ@ ÿ@ ÿpfkÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ­Èäÿ®Éäÿ¯Êäÿ´ÍæÿÅØìÿæï÷ÿûüþÿûüþÿõøüßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿH\pß.E\ÿÿl+ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿNJUÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿgšÌÿh›ÍÿpŸÏÿ¢ÁàÿÎßïÿÖãñÿÒáðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ0IaÿR|¥ÿf˜Ëÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿq·ÿ´H$ÿ±G#ÿ³H$ÿ¹J%ÿÂN'ÿÌR)ÿØV+ÿã\/ÿíf9ÿõzQÿû~ÿýÀ¬ÿþØËÿñÕÉÿ(>ÿ3 ÿ+VÿF#ÿ[¶.ÿhÍ6ÿmÎ=ÿhÍ6ÿŽ+ÿªD"ÿÅO(ÿã[.ÿõb1ÿød2ÿòa1ÿê^/ÿÚW,ÿÂN'ÿŸ@ ÿt.ÿEÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿa‰´ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿh›Íÿ–¹ÜÿÂ×ëÿËÜîÿÈÛíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ0H`ÿS|¦ÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿˆnwÿ¥B!ÿ¤B!ÿ¥B!ÿ«D"ÿ¶I$ÿÂN'ÿÏT+ÿÜ[/ÿèh=ÿò‚\ÿù§‹ÿýÉ·ÿþÛÐÿ·«˜ÿ3 ÿ3 ÿ4iÿP¡(ÿbÅ1ÿhÍ6ÿfË3ÿ™Q"ÿ³H$ÿÑT*ÿë^/ÿõb1ÿða2ÿæ\.ÿÕU+ÿ½L&ÿž? ÿu/ÿHÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿSYlÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿgšÌÿ’·Ûÿ¿ÔêÿÇÚìÿÅØìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ0G_ÿS|¦ÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘O@ÿ•<ÿ•<ÿ–<ÿž? ÿ§C!ÿ´H$ÿÂO)ÿÒX/ÿájCÿîŠiÿ÷²›ÿüÐÁÿþßÔÿbjMÿ3 ÿ"CÿB„!ÿ[¶.ÿcÆ2ÿt¨-ÿ¦C!ÿ½K&ÿÚW,ÿé^.ÿé^/ÿÝY.ÿÌR)ÿ³H$ÿ•<ÿn,ÿEÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿG21ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿn‡«ÿˆ='ÿ†6ÿ„5ÿ‡6ÿŒ8ÿ–<ÿ¢A ÿ²H%ÿÂT0ÿÔmKÿæ“wÿó»©ÿùÕÈÿîÔÉÿ(>ÿ3 ÿ1bÿOž(ÿ^»/ÿk&ÿªD"ÿÁN'ÿÔT*ÿØW+ÿËR)ÿ¹J%ÿ¡@ ÿƒ4ÿ`&ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿB"ÿa‰´ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìòùÿ¼ÒéÿpŸÏÿf™Ìÿk†ªÿ{1ÿu/ÿt.ÿu/ÿz1ÿƒ4ÿŒ8ÿ›@#ÿ­P1ÿÃoRÿÛ›…ÿì´ÿôÙÏÿ²ªšÿ3 ÿ"CÿBƒ!ÿb¡*ÿš=ÿ?ÿ¬D"ÿ´H$ÿ­F#ÿœ@!ÿ„5ÿi*ÿKÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ_¨ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ–¹Üÿ³ÌæÿÙåòÿÙåòÿÙåòÿÙåòÿÙåòÿÅÙìÿ©Æâÿy¦Òÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùüÿƒ¬Öÿf™Ìÿkqˆÿk+ÿf)ÿc(ÿc(ÿh*ÿn,ÿv1ÿ7ÿ–M4ÿ±r]ÿÍ ‘ÿãǽÿîÛÔÿxgÿ3 ÿ6kÿun$ÿƒ5ÿ€3ÿ„4ÿ4ÿu/ÿb'ÿKÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿXi„ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ©ÆâÿìòùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÙìÿpŸÏÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³ÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìòùÿpŸÏÿf™Ìÿf„©ÿ],ÿV"ÿS!ÿQ ÿS!ÿW#ÿ^'ÿj2ÿJ8ÿ¢vhÿŧžÿÛÉÂÿÖÊÃÿ2E#ÿ0_ÿxI'ÿf(ÿ]&ÿX#ÿO ÿBÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿB"ÿ_¨ÿf™Ìÿf™Ìÿf™ÌÿpŸÏÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìòùÿƒ¬Öÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ¿ßÿf™Ìÿf™ÌÿdеÿR63ÿGÿB ÿ@ ÿ@ ÿA ÿGÿT,ÿoL@ÿ—|sÿ¸¥žÿȺµÿš—†ÿSn7ÿjG;ÿEÿ= ÿ> ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿG21ÿa‰´ÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿâìõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìòùÿpŸÏÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìòùÿ³Ìæÿ³Ìæÿ³Ìæÿ³ÌæÿõùüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÙìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿSYlÿ@ ÿ@ ÿ@ ÿ@ ÿAÿDÿS1&ÿpSJÿŒvnÿ¡ˆÿ£‘Šÿ‰rjÿjLBÿP."ÿ@ ÿ? ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿSYlÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ³Ìæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼Òéÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³ÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿƒ¬ÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿa‰´ÿWPXÿ@ ÿ@ ÿ@ ÿAÿG#ÿV5)ÿhJ@ÿy^Uÿ}d[ÿqULÿ_@5ÿP."ÿDÿ@ ÿAÿ@ ÿ@ ÿ@ ÿ@ ÿ@ ÿIBJÿa‰´ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿy¦Òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùüÿ¼ÒéÿŒ³Ùÿ–¹ÜÿÅÙìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿy¦Òÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³ÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿpŸÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³Ìæÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ ³ÉÿzmoÿQ2)ÿ@ ¯CI%¿P."ïX7+ÿ\<1ÿY9-ÿR0$ÿI%ÿCÿA¿@ Ÿ@ `@ `>ÿ8-0ÿ8LbÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ©Æâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùüÿƒ¬Öÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ ¿ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©Æâÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³ÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ¼Òéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒ¬Öÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿÃÃÉ€ ‡rVM\;0F!G#G#DCAZ9-pSJŸŒ†±®°@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ¿ßÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÙåòÿÿÿÿÿâìõÿÅÙìÿ ¿ßÿƒ¬Öÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³ÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùüÿÙåòÿÙåòÿâìõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼Òéÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿy¦ÒÿpŸÏÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùüÿ ¿ßÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìòùÿ–¹Üÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿy¦ÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ¿ßÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿy¦ÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìòùÿ³Ìæÿ³Ìæÿ³Ìæÿ³ÌæÿÅÙìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿy¦Òÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³ÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ©Æâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©Æâÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùüÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ ¿ßÿõùüÿÅÙìÿ–¹ÜÿpŸÏÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³ÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼Òéÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿy¦Òÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏßïÿ ¿ßÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³ÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÏßïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÙìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ¼ÒéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏßïÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼Òéÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìòùÿ³Ìæÿ³Ìæÿ³ÌæÿÏßïÿìòùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³Ìæÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿy¦ÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏßïÿƒ¬Öÿf™ÌÿpŸÏÿ ¿ßÿõùüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒ¬Öÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿy¦Òÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿÅÙìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼Òéÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿpŸÏÿìòùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒ¬Öÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³ÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏßïÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿƒ¬Öÿõùüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ¿ßÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³ÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâìõÿÏßïÿ ¿ßÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿpŸÏÿÙåòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùüÿ–¹Üÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿpŸÏÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³ÙÿŒ³Ùÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿŒ³Ùÿ¼ÒéÿâìõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙåòÿ©ÆâÿpŸÏÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿS|¦ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ/G^ÿR|¥ÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÅØìÿÆÙìÿáëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ7SnÿXƒ¯ÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ.E\ÿQz¢ÿe˜Êÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿ~©Ôÿ®ÉäÿÄ×ëÿÄ×ëÿàëõ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ6RmÿWƒ®ÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf˜Ëÿ‘¶Úÿ¾ÓéÿÆÙìÿÄ×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ.E\ÿNvÿd–Èÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf˜Ëÿ~©Ôÿ¬Çãÿ¾Óéÿ¾ÓéÿÝéô€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ4NhÿV€«ÿe˜Êÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™ÌÿgšÌÿ‘¶ÚÿºÑèÿÁÖêÿÀÕêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.E\ÿ.E\ÿ.E\ÿFiŒÿ`Àÿe—Êÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf˜Ëÿf˜Ëÿf˜Ëÿ|§Óÿ¢Áàÿ®Éäÿ¯Êäÿ×åò€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ.E\ÿPwŸÿb”Åÿe˜Êÿf˜Ëÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf™Ìÿf˜Ëÿf˜ËÿgšÌÿŒ³Ùÿ®Éäÿ´Íæÿ´ÍæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿH\pß.E\ÿ.E\ÿ/G^ÿIn’ÿRz£ÿT~¨ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿUªÿ]‹ºÿq Ðÿ„­ÖÿµÚÿÓáðpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÐÖ@.E\ÿ.E\ÿ.E\ÿ9UrÿNuœÿS}¦ÿT~¨ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿT©ÿU€ªÿb“ÄÿªÔÿ´Úÿ›¼Þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}‹™Ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ0Iaÿ3Mfÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Oiÿ6Qlÿ@_ÿOvžÿ\‰·ÿgšÌÿçï÷0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;Qfï.E\ÿ.E\ÿ.E\ÿ.E\ÿ2Jcÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ4Mgÿ5Ojÿ8TpÿEgŠÿUªÿa’Âÿˆ¯ØßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÜà0;Qfï.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ:WtÿJn“ÿ—²ÍŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£­·p.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ0H`ÿ@_ÿOwžÿÌÛêPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÜà0Uh{Ï.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ;Qfï‘¢²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£­·p;Qfï.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿ.E\ÿJ`ußÃÎØPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿlibiodbc-3.52.9/mac/iODBCadministrator/iODBCadministrator.xcodeproj/0000755000076400007640000000000012323210720022260 500000000000000libiodbc-3.52.9/mac/iODBCadministrator/iODBCadministrator.xcodeproj/project.pbxproj0000644000076400007640000004144312323204667025277 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ CDAE3B750987D655003250F8 /* odbcinst.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C2EB0F0518625501A801EC /* odbcinst.h */; }; CDAE3B760987D655003250F8 /* sql.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C2EB100518625501A801EC /* sql.h */; }; CDAE3B770987D655003250F8 /* sqltypes.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C2EB110518625501A801EC /* sqltypes.h */; }; CDAE3B780987D655003250F8 /* iodbc.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C2EB150518627501A801EC /* iodbc.h */; }; CDAE3B790987D655003250F8 /* iodbcunix.h in Headers */ = {isa = PBXBuildFile; fileRef = 71A26EE8069D5782005AC343 /* iodbcunix.h */; }; CDAE3B7B0987D655003250F8 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; }; CDAE3B7C0987D655003250F8 /* main.xib in Resources */ = {isa = PBXBuildFile; fileRef = 04DF5BC2FFC03B507F000001 /* main.xib */; }; CDAE3B7D0987D655003250F8 /* about.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4973747CFFCC29477F000001 /* about.xib */; }; CDAE3B7E0987D655003250F8 /* iODBCAdministrator.icns in Resources */ = {isa = PBXBuildFile; fileRef = 032007F4FFF1FEE97F000001 /* iODBCAdministrator.icns */; }; CDAE3B800987D655003250F8 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 1CEA8F15005FBBC97F000001 /* main.c */; }; CDAE3B820987D655003250F8 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04DF5BB1FFC0300D7F000001 /* Carbon.framework */; }; CDAE3B830987D655003250F8 /* iODBCinst.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5C2EB0D0518623801A801EC /* iODBCinst.framework */; }; CDAE3B840987D655003250F8 /* iODBC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85D1BBC707E7D7C90070A59E /* iODBC.framework */; }; /* End PBXBuildFile section */ /* Begin PBXBuildStyle section */ 1CEA8F0D005FBAFB7F000001 /* Development */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; "Current project version" = 3.52.8; DEPLOYMENT_POSTPROCESSING = YES; DYLIB_COMPATIBILITY_VERSION = ""; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_VERSION = 3.52; "Framework version" = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = ( "-DDATEBUILD=`date`", "-DODBCVER=0x351", "-D_MACX", ); RESMERGER_SOURCES_FORK = data; SKIP_INSTALL = YES; ZERO_LINK = NO; }; name = Development; }; 1CEA8F0E005FBAFB7F000001 /* Deployment */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; ZERO_LINK = NO; }; name = Deployment; }; /* End PBXBuildStyle section */ /* Begin PBXFileReference section */ 032007F5FFF1FEE97F000001 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = English; path = English.lproj/iODBCAdministrator.icns; sourceTree = ""; }; 04DF5BB1FFC0300D7F000001 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 04DF5BC3FFC03B507F000001 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/main.xib; sourceTree = ""; }; 0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1CEA8F15005FBBC97F000001 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = main.c; path = ../../iodbcadm/macosx/main.c; sourceTree = SOURCE_ROOT; }; 4973747DFFCC29477F000001 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = English; path = English.lproj/about.xib; sourceTree = ""; }; 71A26EE8069D5782005AC343 /* iodbcunix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbcunix.h; path = ../../include/iodbcunix.h; sourceTree = SOURCE_ROOT; }; 85D1BBC707E7D7C90070A59E /* iODBC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBC.framework; path = ../../mac/iODBC/build/iODBC.framework; sourceTree = SOURCE_ROOT; }; CDAE3B890987D655003250F8 /* Info-iODBC_Administrator.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "Info-iODBC_Administrator.plist"; sourceTree = ""; }; CDAE3B8A0987D655003250F8 /* OpenLink ODBC Administrator.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "OpenLink ODBC Administrator.app"; sourceTree = BUILT_PRODUCTS_DIR; }; F5C2EB0D0518623801A801EC /* iODBCinst.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBCinst.framework; path = ../../mac/iODBCinst/build/iODBCinst.framework; sourceTree = SOURCE_ROOT; }; F5C2EB0F0518625501A801EC /* odbcinst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = odbcinst.h; path = ../../include/odbcinst.h; sourceTree = SOURCE_ROOT; }; F5C2EB100518625501A801EC /* sql.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sql.h; path = ../../include/sql.h; sourceTree = SOURCE_ROOT; }; F5C2EB110518625501A801EC /* sqltypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sqltypes.h; path = ../../include/sqltypes.h; sourceTree = SOURCE_ROOT; }; F5C2EB150518627501A801EC /* iodbc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iodbc.h; path = ../../include/iodbc.h; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ CDAE3B810987D655003250F8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CDAE3B820987D655003250F8 /* Carbon.framework in Frameworks */, CDAE3B830987D655003250F8 /* iODBCinst.framework in Frameworks */, CDAE3B840987D655003250F8 /* iODBC.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 195DF8CFFE9D517E11CA2CBB /* Products */ = { isa = PBXGroup; children = ( CDAE3B8A0987D655003250F8 /* OpenLink ODBC Administrator.app */, ); name = Products; sourceTree = ""; }; 20286C29FDCF999611CA2CEA /* OpenLink ODBC Administrator */ = { isa = PBXGroup; children = ( 20286C2AFDCF999611CA2CEA /* Sources */, 20286C2CFDCF999611CA2CEA /* Resources */, 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */, 195DF8CFFE9D517E11CA2CBB /* Products */, CDAE3B890987D655003250F8 /* Info-iODBC_Administrator.plist */, ); name = "OpenLink ODBC Administrator"; sourceTree = ""; }; 20286C2AFDCF999611CA2CEA /* Sources */ = { isa = PBXGroup; children = ( 71A26EE8069D5782005AC343 /* iodbcunix.h */, 1CEA8F15005FBBC97F000001 /* main.c */, F5C2EB0F0518625501A801EC /* odbcinst.h */, F5C2EB100518625501A801EC /* sql.h */, F5C2EB110518625501A801EC /* sqltypes.h */, F5C2EB150518627501A801EC /* iodbc.h */, ); name = Sources; sourceTree = ""; }; 20286C2CFDCF999611CA2CEA /* Resources */ = { isa = PBXGroup; children = ( 04DF5BC2FFC03B507F000001 /* main.xib */, 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */, 4973747CFFCC29477F000001 /* about.xib */, 032007F4FFF1FEE97F000001 /* iODBCAdministrator.icns */, ); name = Resources; sourceTree = ""; }; 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( 85D1BBC707E7D7C90070A59E /* iODBC.framework */, 04DF5BB1FFC0300D7F000001 /* Carbon.framework */, F5C2EB0D0518623801A801EC /* iODBCinst.framework */, ); name = "External Frameworks and Libraries"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ CDAE3B740987D655003250F8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( CDAE3B750987D655003250F8 /* odbcinst.h in Headers */, CDAE3B760987D655003250F8 /* sql.h in Headers */, CDAE3B770987D655003250F8 /* sqltypes.h in Headers */, CDAE3B780987D655003250F8 /* iodbc.h in Headers */, CDAE3B790987D655003250F8 /* iodbcunix.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ CDAE3B730987D655003250F8 /* iODBC Administrator */ = { isa = PBXNativeTarget; buildConfigurationList = CDAE3B860987D655003250F8 /* Build configuration list for PBXNativeTarget "iODBC Administrator" */; buildPhases = ( CDAE3B740987D655003250F8 /* Headers */, CDAE3B7A0987D655003250F8 /* Resources */, CDAE3B7F0987D655003250F8 /* Sources */, CDAE3B810987D655003250F8 /* Frameworks */, CDAE3B850987D655003250F8 /* Rez */, ); buildRules = ( ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); HEADER_SEARCH_PATHS = ../../include; INSTALL_PATH = /Applications/Utilities; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = ( "-DDATEBUILD=`date`", "-DODBCVER=0x351", "-D_MACX", ); OTHER_LDFLAGS = ( "-bind_at_load", "-multiply_defined", suppress, ); OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = "OpenLink ODBC Administrator"; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = app; }; dependencies = ( ); name = "iODBC Administrator"; productInstallPath = /Applications/Utilities; productName = "iODBC Administrator"; productReference = CDAE3B8A0987D655003250F8 /* OpenLink ODBC Administrator.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 20286C28FDCF999611CA2CEA /* Project object */ = { isa = PBXProject; buildConfigurationList = CDAE3B8C0987D656003250F8 /* Build configuration list for PBXProject "iODBCadministrator" */; buildSettings = { }; buildStyles = ( 1CEA8F0D005FBAFB7F000001 /* Development */, 1CEA8F0E005FBAFB7F000001 /* Deployment */, ); hasScannedForEncodings = 1; mainGroup = 20286C29FDCF999611CA2CEA /* OpenLink ODBC Administrator */; projectDirPath = ""; targets = ( CDAE3B730987D655003250F8 /* iODBC Administrator */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ CDAE3B7A0987D655003250F8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( CDAE3B7B0987D655003250F8 /* InfoPlist.strings in Resources */, CDAE3B7C0987D655003250F8 /* main.xib in Resources */, CDAE3B7D0987D655003250F8 /* about.xib in Resources */, CDAE3B7E0987D655003250F8 /* iODBCAdministrator.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXRezBuildPhase section */ CDAE3B850987D655003250F8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ CDAE3B7F0987D655003250F8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CDAE3B800987D655003250F8 /* main.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 032007F4FFF1FEE97F000001 /* iODBCAdministrator.icns */ = { isa = PBXVariantGroup; children = ( 032007F5FFF1FEE97F000001 /* English */, ); name = iODBCAdministrator.icns; sourceTree = SOURCE_ROOT; }; 04DF5BC2FFC03B507F000001 /* main.xib */ = { isa = PBXVariantGroup; children = ( 04DF5BC3FFC03B507F000001 /* English */, ); name = main.xib; sourceTree = ""; }; 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 0867D6ABFE840B52C02AAC07 /* English */, ); name = InfoPlist.strings; sourceTree = ""; }; 4973747CFFCC29477F000001 /* about.xib */ = { isa = PBXVariantGroup; children = ( 4973747DFFCC29477F000001 /* English */, ); name = about.xib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ CDAE3B870987D655003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; "Current project version" = 3.52.8; DEPLOYMENT_POSTPROCESSING = YES; DYLIB_COMPATIBILITY_VERSION = ""; DYLIB_CURRENT_VERSION = 3.52.8; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Development, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Development, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; "Framework version" = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; GCC_PREPROCESSOR_DEFINITIONS = ( "DATEBUILD=`date`", "ODBCVER=0x351", _MACX, ); HEADER_SEARCH_PATHS = ../../include; INFOPLIST_FILE = "Info-iODBC_Administrator.plist"; INSTALL_PATH = /Applications/Utilities; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ( "-bind_at_load", "-multiply_defined", suppress, ); OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = "OpenLink ODBC Administrator"; RESMERGER_SOURCES_FORK = data; SECTORDER_FLAGS = ""; SKIP_INSTALL = YES; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = app; ZERO_LINK = NO; }; name = Development; }; CDAE3B880987D655003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBC/build/Deployment, ../../mac/iODBC/build, ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; GCC_PREPROCESSOR_DEFINITIONS = ( "DATEBUILD=`date`", "ODBCVER=0x351", _MACX, ); HEADER_SEARCH_PATHS = ../../include; INFOPLIST_FILE = "Info-iODBC_Administrator.plist"; INSTALL_PATH = /Applications/Utilities; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ( "-bind_at_load", "-multiply_defined", suppress, ); OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = "OpenLink ODBC Administrator"; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = app; ZERO_LINK = NO; }; name = Deployment; }; CDAE3B8D0987D656003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; }; name = Development; }; CDAE3B8E0987D656003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; }; name = Deployment; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ CDAE3B860987D655003250F8 /* Build configuration list for PBXNativeTarget "iODBC Administrator" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3B870987D655003250F8 /* Development */, CDAE3B880987D655003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; CDAE3B8C0987D656003250F8 /* Build configuration list for PBXProject "iODBCadministrator" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3B8D0987D656003250F8 /* Development */, CDAE3B8E0987D656003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; /* End XCConfigurationList section */ }; rootObject = 20286C28FDCF999611CA2CEA /* Project object */; } libiodbc-3.52.9/mac/Makefile0000644000076400007640000001707312323210535012516 00000000000000# # Makefile.mac # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # # # Determine build model (Deployment/Development) # ifeq (,$(MODEL)) MODEL := Deployment endif # # Determine which version of Mac OS X we are running # macosx_version := $(shell sw_vers -productVersion) # # Mac OS X 10.2 # ifeq (10.2, $(findstring 10.2, $(macosx_version))) PROJBUILD := /usr/bin/pbxbuild -buildstyle $(MODEL) endif # # Mac OS X 10.3 # ifeq (10.3, $(findstring 10.3, $(macosx_version))) PROJBUILD := /usr/bin/xcodebuild -buildstyle $(MODEL) endif # # Mac OS X 10.4 # ifeq (10.4, $(findstring 10.4, $(macosx_version))) PROJBUILD := /usr/bin/xcodebuild -configuration $(MODEL) IODBC_TARGET=10.4 IODBC_SDK=/Developer/SDKs/MacOSX10.4u.sdk/ endif # # Mac OS X 10.5 # ifeq (10.5, $(findstring 10.5, $(macosx_version))) PROJBUILD := /usr/bin/xcodebuild -configuration $(MODEL) IODBC_TARGET=10.5 IODBC_SDK=/Developer/SDKs/MacOSX10.5.sdk/ endif # # Mac OS X 10.6 # ifeq (10.6, $(findstring 10.6, $(macosx_version))) PROJBUILD := /usr/bin/xcodebuild -configuration $(MODEL) IODBC_TARGET=10.6 IODBC_SDK=/Developer/SDKs/MacOSX10.6.sdk/ endif # # Mac OS X 10.7 # ifeq (10.7, $(findstring 10.7, $(macosx_version))) PROJBUILD := /usr/bin/xcodebuild -configuration $(MODEL) -sdk macosx10.7 IODBC_TARGET=10.7 #IODBC_SDK=/Developer/SDKs/MacOSX10.7.sdk/ endif # # Mac OS X 10.8 # ifeq (10.8, $(findstring 10.8, $(macosx_version))) PROJBUILD := /usr/bin/xcodebuild -configuration $(MODEL) -sdk macosx10.8 IODBC_TARGET=10.8 endif # # Mac OS X 10.9 # ifeq (10.9, $(findstring 10.9, $(macosx_version))) PROJBUILD := /usr/bin/xcodebuild -configuration $(MODEL) -sdk macosx10.9 IODBC_TARGET=10.9 endif # # Pass settings to xcodebuild # export IODBC_TARGET IODBC_SDK # # Build the libraries # all: include @echo "Building on Mac OS X $(macosx_version)" @echo "Projbuild is [$(PROJBUILD)]" cd iODBCinst; $(PROJBUILD) build cd iODBC; $(PROJBUILD) build cd iODBCtest; $(PROJBUILD) build cd iODBCtestw; $(PROJBUILD) build cd iODBCdrvproxy; $(PROJBUILD) build cd iODBCadm; $(PROJBUILD) build cd iODBCadministrator; $(PROJBUILD) build cd iODBCdemo; $(PROJBUILD) build -alltargets # # Generate iODBC framework style include files # include: framework-include.sh ../include/sql.h ../include/sqlext.h ../include/sqltypes.h ../include/iodbcext.h ../include/iodbcunix.h ../include/odbcinst.h sh framework-include.sh # # Install libraries in /Library/Frameworks # install: # # Install Frameworks # -rm $(DESTDIR)/Library/Frameworks/iODBC.framework/Versions/Current -rm $(DESTDIR)/Library/Frameworks/iODBCinst.framework/Versions/Current cd iODBCinst; $(PROJBUILD) install DSTROOT=$(DESTDIR)/ cd iODBC; $(PROJBUILD) install DSTROOT=$(DESTDIR)/ # # Install /usr/local/iODBC # sh link-inclibs.sh # # Install iODBC Administrator # cd iODBCadministrator; $(PROJBUILD) install DSTROOT=$(DESTDIR)/ # Next ones are a bit special as they need to be installed twice cd iODBCadm; $(PROJBUILD) install DSTROOT=$(DESTDIR)/Library/Frameworks/iODBC.framework/Resources/ cd iODBCadm; $(PROJBUILD) install DSTROOT=$(DESTDIR)/Library/Frameworks/iODBCinst.framework/Resources/ cd iODBCdrvproxy; $(PROJBUILD) install DSTROOT=$(DESTDIR)/Library/Frameworks/iODBC.framework/Resources/ cd iODBCdrvproxy; $(PROJBUILD) install DSTROOT=$(DESTDIR)/Library/Frameworks/iODBCinst.framework/Resources/ # # Install application # cd iODBCdemo; $(PROJBUILD) install -alltargets DSTROOT=$(DESTDIR)/ cd iODBCtest; $(PROJBUILD) install DSTROOT=$(DESTDIR)/ cd iODBCtestw; $(PROJBUILD) install DSTROOT=$(DESTDIR)/ # # Install CFM bridge for Microsoft Office # mkdir -p "$(DESTDIR)/Library/CFMSupport/iODBC CFM Bridge" install -m755 "iODBCcfmbridge/iODBC_CFM_Bridge" "$(DESTDIR)/Library/CFMSupport/iODBC CFM Bridge" install -m755 "iODBCcfmbridge/iODBC_CFM_Bridge.res" "$(DESTDIR)/Library/CFMSupport/._iODBC CFM Bridge" /System/Library/CoreServices/FixupResourceForks /Library/CFMSupport # # Clean out the targets # clean: rm -rf include cd iODBC; $(PROJBUILD) clean cd iODBCinst; $(PROJBUILD) clean cd iODBCtest; $(PROJBUILD) clean cd iODBCtestw; $(PROJBUILD) clean cd iODBCdrvproxy; $(PROJBUILD) clean cd iODBCadm; $(PROJBUILD) clean cd iODBCadministrator; $(PROJBUILD) clean cd iODBCdemo; $(PROJBUILD) clean realclean: clean rm -rf iODBC/build rm -rf iODBCadm/build rm -rf iODBCadministrator/build rm -rf iODBCdemo/build rm -rf iODBCdrvproxy/build rm -rf iODBCinst/build rm -rf iODBCtest/build rm -rf iODBCtestw/build libiodbc-3.52.9/mac/iodbc.exp0000644000076400007640000000466412323204667012667 00000000000000_SQLAllocConnect _SQLAllocEnv _SQLAllocHandle _SQLAllocStmt _SQLBindCol _SQLBindParam _SQLBindParameter _SQLBrowseConnect _SQLBulkOperations _SQLCancel _SQLCloseCursor _SQLColAttribute _SQLColAttributes _SQLColumnPrivileges _SQLColumns _SQLConnect _SQLCopyDesc _SQLDataSources _SQLDescribeCol _SQLDescribeParam _SQLDisconnect _SQLDriverConnect _SQLDrivers _SQLEndTran _SQLError _SQLExecDirect _SQLExecute _SQLExtendedFetch _SQLFetch _SQLFetchScroll _SQLForeignKeys _SQLFreeConnect _SQLFreeEnv _SQLFreeHandle _SQLFreeStmt _SQLGetConnectAttr _SQLGetConnectOption _SQLGetCursorName _SQLGetData _SQLGetDescField _SQLGetDescRec _SQLGetDiagField _SQLGetDiagRec _SQLGetEnvAttr _SQLGetFunctions _SQLGetInfo _SQLGetStmtAttr _SQLGetStmtOption _SQLGetTypeInfo _SQLMoreResults _SQLNativeSql _SQLNumParams _SQLNumResultCols _SQLParamData _SQLParamOptions _SQLPrepare _SQLPrimaryKeys _SQLProcedureColumns _SQLProcedures _SQLPutData _SQLRowCount _SQLSetConnectAttr _SQLSetConnectOption _SQLSetCursorName _SQLSetDescField _SQLSetDescRec _SQLSetEnvAttr _SQLSetParam _SQLSetPos _SQLSetScrollOptions _SQLSetStmtAttr _SQLSetStmtOption _SQLSpecialColumns _SQLStatistics _SQLTablePrivileges _SQLTables _SQLTransact _SQLConnectW _SQLDriverConnectW _SQLBrowseConnectW _SQLDataSourcesW _SQLDriversW _SQLGetInfoW _SQLGetTypeInfoW _SQLSetConnectOptionW _SQLGetConnectOptionW _SQLPrepareW _SQLGetCursorNameW _SQLSetCursorNameW _SQLExecDirectW _SQLNativeSqlW _SQLDescribeColW _SQLColAttributesW _SQLErrorW _SQLColumnPrivilegesW _SQLColumnsW _SQLForeignKeysW _SQLPrimaryKeysW _SQLProcedureColumnsW _SQLProceduresW _SQLSpecialColumnsW _SQLStatisticsW _SQLTablePrivilegesW _SQLTablesW _SQLColAttributeW _SQLGetConnectAttrW _SQLGetDescFieldW _SQLGetDescRecW _SQLGetDiagFieldW _SQLGetDiagRecW _SQLGetStmtAttrW _SQLSetConnectAttrW _SQLSetDescFieldW _SQLSetStmtAttrW _SQLConnectA _SQLDriverConnectA _SQLBrowseConnectA _SQLDataSourcesA _SQLDriversA _SQLGetInfoA _SQLGetTypeInfoA _SQLSetConnectOptionA _SQLGetConnectOptionA _SQLPrepareA _SQLGetCursorNameA _SQLSetCursorNameA _SQLExecDirectA _SQLNativeSqlA _SQLDescribeColA _SQLColAttributesA _SQLErrorA _SQLColumnPrivilegesA _SQLColumnsA _SQLForeignKeysA _SQLPrimaryKeysA _SQLProcedureColumnsA _SQLProceduresA _SQLSpecialColumnsA _SQLStatisticsA _SQLTablePrivilegesA _SQLTablesA _SQLColAttributeA _SQLGetConnectAttrA _SQLGetDescFieldA _SQLGetDescRecA _SQLGetDiagFieldA _SQLGetDiagRecA _SQLGetStmtAttrA _SQLSetConnectAttrA _SQLSetDescFieldA _SQLSetStmtAttrA _iodbc_version libiodbc-3.52.9/mac/myodbc.configure.diff0000644000076400007640000000637312323204667015157 00000000000000--- configure Thu Feb 27 01:19:11 2003 +++ ../MyODBC-3.51.06.NEW/configure Wed Sep 3 16:51:22 2003 @@ -8453,7 +8453,7 @@ -for ac_header in sql.h sqlext.h sqltypes.h +for ac_header in iODBC/sql.h iODBC/sqlext.h iODBC/sqltypes.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then @@ -8580,7 +8580,7 @@ # odbc_headers manually to make AC_CHECK_ODBC_TYPE to work if test "x$odbc_headers" = "x " then - odbc_headers="sql.h sqlext.h sqltypes.h" + odbc_headers="iODBC/sql.h iODBC/sqlext.h iODBC/sqltypes.h" fi @@ -8903,7 +8903,7 @@ -for ac_header in isql.h isqlext.h isqltypes.h +for ac_header in iODBC/isql.h iODBC/isqlext.h iODBC/isqltypes.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then @@ -9031,11 +9031,11 @@ # odbc_headers manually to make AC_CHECK_ODBC_TYPE to work if test "x$odbc_headers" = "x" then - odbc_headers="isql.h isqlext.h isqltypes.h" + odbc_headers="iODBC/isql.h iODBC/isqlext.h iODBC/isqltypes.h" fi -for ac_header in iodbcinst.h +for ac_header in iODBCinst/iodbcinst.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then @@ -9152,17 +9152,17 @@ if test "x$ac_cv_header_iodbcinst_h" = "xyes" then - odbc_headers="$odbc_headers iodbcinst.h" + odbc_headers="$odbc_headers iODBCinst/iodbcinst.h" save_LIBS="$LIBS" LIBS="-L$iodbc_libs $LIBS" - echo "$as_me:$LINENO: checking for _iodbcdm_admin_dialbox in -liodbcadm" >&5 -echo $ECHO_N "checking for _iodbcdm_admin_dialbox in -liodbcadm... $ECHO_C" >&6 + echo "$as_me:$LINENO: checking for _iodbcdm_admin_dialbox in -framework iODBCadm" >&5 +echo $ECHO_N "checking for _iodbcdm_admin_dialbox in -framework iODBCadm... $ECHO_C" >&6 if test "${ac_cv_lib_iodbcadm__iodbcdm_admin_dialbox+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-liodbcadm $LIBS" +LIBS="-framework iODBCadm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" @@ -9212,20 +9212,20 @@ echo "$as_me:$LINENO: result: $ac_cv_lib_iodbcadm__iodbcdm_admin_dialbox" >&5 echo "${ECHO_T}$ac_cv_lib_iodbcadm__iodbcdm_admin_dialbox" >&6 if test $ac_cv_lib_iodbcadm__iodbcdm_admin_dialbox = yes; then - LIBS="$LIBS -liodbcadm" + LIBS="$LIBS -framework iodbcadm" have_iodbcadm=yes else LIBS="$save_LIBS" fi - echo "$as_me:$LINENO: checking for SQLGetPrivateProfileString in -liodbcinst" >&5 -echo $ECHO_N "checking for SQLGetPrivateProfileString in -liodbcinst... $ECHO_C" >&6 + echo "$as_me:$LINENO: checking for SQLGetPrivateProfileString in -framework iODBCinst" >&5 +echo $ECHO_N "checking for SQLGetPrivateProfileString in -framework iODBCinst... $ECHO_C" >&6 if test "${ac_cv_lib_iodbcinst_SQLGetPrivateProfileString+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-liodbcinst $LIBS" +LIBS="-framework iODBCinst $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" @@ -9280,7 +9280,7 @@ #define HAVE_SQLGETPRIVATEPROFILESTRING 1 _ACEOF - LIBS="$LIBS -liodbcinst" + LIBS="$LIBS -framework iODBCinst" have_iodbcinst=yes else LIBS="$save_LIBS"libiodbc-3.52.9/mac/drvproxy.exp0000644000076400007640000000010712323204667013470 00000000000000_ConfigDriver _ConfigDSN __iodbcdm_drvconn_dialbox _iodbcproxy_version libiodbc-3.52.9/mac/iODBCcfmbridge/0000755000076400007640000000000012323210720013645 500000000000000libiodbc-3.52.9/mac/iODBCcfmbridge/iodbccfm.exp0000644000076400007640000000664412323204667016100 00000000000000SQLAllocConnect SQLAllocEnv SQLAllocHandle SQLAllocStmt SQLBindCol SQLBindParam SQLBindParameter SQLBrowseConnect SQLBulkOperations SQLCancel SQLCloseCursor SQLColAttribute SQLColAttributes SQLColumnPrivileges SQLColumns SQLConnect SQLCopyDesc SQLDataSources SQLDescribeCol SQLDescribeParam SQLDisconnect SQLDriverConnect SQLDrivers SQLEndTran SQLError SQLExecDirect SQLExecute SQLExtendedFetch SQLFetch SQLFetchScroll SQLForeignKeys SQLFreeConnect SQLFreeEnv SQLFreeHandle SQLFreeStmt SQLGetConnectAttr SQLGetConnectOption SQLGetCursorName SQLGetData SQLGetDescField SQLGetDescRec SQLGetDiagField SQLGetDiagRec SQLGetEnvAttr SQLGetFunctions SQLGetInfo SQLGetStmtAttr SQLGetStmtOption SQLGetTypeInfo SQLMoreResults SQLNativeSql SQLNumParams SQLNumResultCols SQLParamData SQLParamOptions SQLPrepare SQLPrimaryKeys SQLProcedureColumns SQLProcedures SQLPutData SQLRowCount SQLSetConnectAttr SQLSetConnectOption SQLSetCursorName SQLSetDescField SQLSetDescRec SQLSetEnvAttr SQLSetParam SQLSetPos SQLSetScrollOptions SQLSetStmtAttr SQLSetStmtOption SQLSpecialColumns SQLStatistics SQLTablePrivileges SQLTables SQLTransact SQLConfigDataSource SQLConfigDriver SQLCreateDataSource SQLGetConfigMode SQLGetAvailableDrivers SQLGetInstalledDrivers SQLGetPrivateProfileString SQLGetTranslator SQLInstallDriverEx SQLInstallDriver SQLInstallDriverManager SQLInstallerError SQLInstallODBC SQLInstallTranslator SQLInstallTranslatorEx SQLManageDataSources SQLPostInstallerError SQLReadFileDSN SQLRemoveDSNFromIni SQLRemoveDefaultDataSource SQLRemoveDriver SQLRemoveDriverManager SQLRemoveTranslator SQLSetConfigMode SQLValidDSN SQLWriteDSNToIni SQLWriteFileDSN SQLWritePrivateProfileString SQLGetKeywordValue SQLSetKeywordValue SQLWriteDSN SQLRemoveDSN SQLConnectW SQLDriverConnectW SQLBrowseConnectW SQLDataSourcesW SQLDriversW SQLGetInfoW SQLGetTypeInfoW SQLSetConnectOptionW SQLGetConnectOptionW SQLPrepareW SQLGetCursorNameW SQLSetCursorNameW SQLExecDirectW SQLNativeSqlW SQLDescribeColW SQLColAttributesW SQLErrorW SQLColumnPrivilegesW SQLColumnsW SQLForeignKeysW SQLPrimaryKeysW SQLProcedureColumnsW SQLProceduresW SQLSpecialColumnsW SQLStatisticsW SQLTablePrivilegesW SQLTablesW SQLColAttributeW SQLGetConnectAttrW SQLGetDescFieldW SQLGetDescRecW SQLGetDiagFieldW SQLGetDiagRecW SQLGetStmtAttrW SQLSetConnectAttrW SQLSetDescFieldW SQLSetStmtAttrW SQLConnectA SQLDriverConnectA SQLBrowseConnectA SQLDataSourcesA SQLDriversA SQLGetInfoA SQLGetTypeInfoA SQLSetConnectOptionA SQLGetConnectOptionA SQLPrepareA SQLGetCursorNameA SQLSetCursorNameA SQLExecDirectA SQLNativeSqlA SQLDescribeColA SQLColAttributesA SQLErrorA SQLColumnPrivilegesA SQLColumnsA SQLForeignKeysA SQLPrimaryKeysA SQLProcedureColumnsA SQLProceduresA SQLSpecialColumnsA SQLStatisticsA SQLTablePrivilegesA SQLTablesA SQLColAttributeA SQLGetConnectAttrA SQLGetDescFieldA SQLGetDescRecA SQLGetDiagFieldA SQLGetDiagRecA SQLGetStmtAttrA SQLSetConnectAttrA SQLSetDescFieldA SQLSetStmtAttrA SQLInstallODBCW SQLCreateDataSourceW SQLGetTranslatorW SQLInstallDriverW SQLInstallDriverManagerW SQLGetInstalledDriversW SQLGetAvailableDriversW SQLConfigDataSourceW SQLWriteDSNToIniW SQLRemoveDSNFromIniW SQLValidDSNW SQLWritePrivateProfileStringW SQLGetPrivateProfileStringW SQLGetKeywordValueW SQLSetKeywordValueW SQLInstallTranslatorW SQLRemoveTranslatorW SQLRemoveDriverW SQLConfigDriverW SQLInstallerErrorW SQLPostInstallerErrorW SQLReadFileDSNW SQLWriteFileDSNW SQLInstallDriverExW SQLInstallTranslatorExW SQLWriteDSNW SQLRemoveDSNW version libname libiodbc-3.52.9/mac/iODBCcfmbridge/Info.c0000644000076400007640000000654312323210535014640 00000000000000/* * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #if !defined(VERSION) || !defined(DRVMGR_VER) # include "Version.h" #endif #ifdef _MAC char *version = DRVMGR_VER; #endif char *libname = "iODBC CFM Bridge"; libiodbc-3.52.9/mac/iODBCcfmbridge/iodbccfm.r0000644000076400007640000000765312323210535015535 00000000000000/* * iodbccfm.r * * $Id$ * * Ressources for the iODBC CFM Bridge * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "Types.r" #include "Version.h" #include "CodeFragmentTypes.r" resource 'cfrg' (0) { { kPowerPCCFragArch, kIsCompleteCFrag, kNoVersionNum, kNoVersionNum, kDefaultStackSize, kNoAppSubFolder, kImportLibraryCFrag, kDataForkCFragLocator, kZeroOffset, kCFragGoesToEOF, "iODBC CFM Bridge"; kPowerPCCFragArch, kIsCompleteCFrag, kNoVersionNum, kNoVersionNum, kDefaultStackSize, kNoAppSubFolder, kImportLibraryCFrag, kDataForkCFragLocator, kZeroOffset, kCFragGoesToEOF, "iodbc:ODBC$CFMBridge"; } }; resource 'vers' (1) { DRVMGR_MAJ, DRVMGR_MIN, final, 2, verUS, DRVMGR_VER, "Release " DRVMGR_VER }; resource 'vers' (2) { DRVMGR_MAJ, DRVMGR_MIN, final, 2, verUS, DRVMGR_VER, DRVBRIDGE_DIZ }; data 'carb' (0) { }; libiodbc-3.52.9/mac/iODBCcfmbridge/Makefile0000644000076400007640000000426412323204667015250 00000000000000# File: Makefile # Target: iodbccfmbridge # These values should change re. your platform TOP = "HardDisk:iodbc-adm" UNIVERSAL = "HardDisk:Development:UniversalInterfaces" CARBON = "HardDisk:Development:CarbonLib" CARBONLIB = "HardDisk:Development:CarbonLib:Carbon Support:CarbonLib:Stub:CarbonLib" CARBONINC = "HardDisk:Development:CarbonLib:Carbon Support:Universal:CIncludes" REZINC = "HardDisk:Development:CarbonLib:Carbon Support:Universal:RIncludes" #----------------------------------------------- MAKEFILE = Makefile ¥MondoBuild¥ = {MAKEFILE} # Make blank to avoid rebuilds when makefile is modified Includes = {TOP}:iODBC,{TOP}:iodbcinst,{TOP}:mac,{CARBONINC},{UNIVERSAL}:Universal:Interfaces:CIncludes Sym-cbn = -sym off PPCCOptions = -includes unix -i {Includes} {Sym-cbn} -proto strict -d TARGET_API_MAC_CARBON ### Source Files ### SrcFiles = ¶ iodbccfm.c ¶ info.c ### Object Files ### ObjFiles-cbn = ¶ "iodbccfm.c.y" ¶ "info.c.y" ### Libraries ### LibFiles-cbn = ¶ {CARBONLIB} ¶ "{SharedLibraries}StdCLib" ¶ "{PPCLibraries}PPCCRuntime.o" ### Default Rules ### .c.y Ä .c {¥MondoBuild¥} {PPCC} {depDir}{default}.c -o {targDir}{default}.c.y {PPCCOptions} ### Build Rules ### "iODBC CFM Bridge" ÄÄ "iODBC CFM Bridge" "iODBC CFM Bridge" ÄÄ {TOP}:mac:iODBCcfmbridge:iodbccfm.exp {ObjFiles-cbn} {LibFiles-cbn} {¥MondoBuild¥} PPCLink -v -xm SharedLibrary ¶ -o {Targ} -@export {TOP}:mac:iODBCcfmbridge:iodbccfm.exp ¶ -init _init {ObjFiles-cbn} ¶ {LibFiles-cbn} ¶ {Sym-cbn} ¶ -mf -d ¶ -t 'shlb' ¶ -c 'odbc' "iODBC CFM Bridge" ÄÄ iodbccfm.r {¥MondoBuild¥} Rez -d SystemSevenOrLater=1 iodbccfm.r -o {Targ} -a -i {REZINC} -i {TOP}:iODBC ### Required Dependencies ### "iodbccfm.c.y" Ä iodbccfm.c "info.c.y" Ä info.c ### Optional Dependencies ### ### Build this target to generate "include file" dependencies. ### Dependencies Ä $OutOfDate MakeDepend ¶ -append {MAKEFILE} ¶ -ignore "{CIncludes}" ¶ -objext .x ¶ {Includes} ¶ {SrcFiles} Clean Ä $OutOfDate Delete -i -y ¶ {ObjFiles-cbn} ¶ "iODBC CFM Bridge" libiodbc-3.52.9/mac/iODBCcfmbridge/iODBC_CFM_Bridge0000755000076400007640000023641412323204667016363 00000000000000Joy!peffpwpc»]ƒ;ÿÿÿÿýXýXýX€ÿÿÿÿ'ø'ä$YýàÿÿÿÿÌ"@|¦”!ÿÀ888`sv|zx"ÿôI, A‚|€bÿè8cTHói€A|dx€¢ÿð€eHóm€Aa8,A‚48CÓxdÛx…ãx¦ëxÇóxèûxHô]€A|zxCÓxHŒ"ÿè8iñ8‰ Kÿøí`Hp8‚'€d8‚œ8„_8¡88ÁKx}4|ü;x|Û4|º4T™>|xxbÿô‹, A‚„€bÿè8ckHò-€A|dx€¢ÿð€eHò1€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxHó€A|xxÃxH”bÿè8kñ8‹ Kÿ÷©`Hx8‚'€d8‚œ8„x8¡88Á4}Cx|ü4|Û4|º4T™>|xx‚ᨂÁ¬bÿô‹, A‚Œ€bÿè8c†HðÙ€A|dx€¢ÿð€eHðÝ€Aa@,A‚D@Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’ÁTš>|yx9B' j, A‚€€bÿè8coHèÙ€A|dx€¢ÿð€eHèÝ€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxHéÉ€A|yx#ËxH9Bœ8jñ8Š KÿîY`Ht8‚'€d8‚œ8„8¡88ÁTš>|yx9B' j, A‚€€bÿè8cH癀A|dx€¢ÿð€eHç€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxH艀A|yx#ËxH9Bœ8jñ8Š Kÿí`Ht8‚'€d8‚œ8„¡8¡88ÁTš>|yx9B' j, A‚Œ€bÿè8c³HæY€A|dx€¢ÿð€eHæ]€Aa8,A‚@8#Ëx†ãx§ëxÈóxéûxDÓx|„4eÛx|¥4HçA€A|yx#ËxH 8‚œ8dñ8‚œ8„ KÿëÍ`H€8‚'€d8‚œ8„Ä8¡88ÁTš>|yx9B' j, A‚€€bÿè8cÖHå€A|dx€¢ÿð€eHå€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxHåñ€A|yx#ËxH9Bœ8jñ8Š Kÿê`Ht8‚'€d8‚œ8„ç8¡88ÁTš>|yx9B' j, A‚€€bÿè8cùHãÁ€A|dx€¢ÿð€eHãÅ€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxHä±€A|yx#ËxH9Bœ8jñ8Š KÿéA`Ht8‚'€d8‚œ8„ 8¡88ÁTš>|yx9B' j, A‚€€bÿè8cHâ€A|dx€¢ÿð€eHâ…€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxHãq€A|yx#ËxH9Bœ8jñ8Š Kÿè`Ht8‚'€d8‚œ8„08¡88Á4}Cx|ü4|Û3x|º4|™#x|xxªáªbÿô‹, A‚ˆ€bÿè8cCHá9€A|dx€¢ÿð€eHá=€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8Hâ!€A|xxÃxH˜bÿè8kñ8‹ Kÿæ±`H|8‚'€d8‚œ8„W8¡<8Á@HàÕ€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8H᥀A|xxÃxHbÿè8kñ8‹‹Kÿæ5`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¾áÿÜ”!ÿ}_Sx}>4}Cx|ü4|Û3x|º4|™#x|xxªáªbÿô‹, A‚ˆ€bÿè8clHßá€A|dx€¢ÿð€eHßå€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HàÉ€A|xxÃxH˜bÿè8kñ8‹ KÿåY`H|8‚'€d8‚œ8„8¡<8Á@Hß}€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HàM€A|xxÃxHbÿè8kñ8‹‹KÿäÝ`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¾áÿÜ”!ÿ}_Sx}>4}Cx|ü4|Û3x|º4|™#x|xxªáªbÿô‹, A‚ˆ€bÿè8c—HÞ‰€A|dx€¢ÿð€eHÞ€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8Hßq€A|xxÃxH˜bÿè8kñ8‹ Kÿä`H|8‚'€d8‚œ8„¬8¡<8Á@HÞ%€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HÞõ€A|xxÃxHbÿè8kñ8‹‹Kÿã…`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¾áÿÜ”!ÿ}_Sx}>4}Cx|ü4|Û3x|º4|™#x|xxªáªbÿô‹, A‚ˆ€bÿè8cÂHÝ1€A|dx€¢ÿð€eHÝ5€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HÞ€A|xxÃxH˜bÿè8kñ8‹ Kÿâ©`H|8‚'€d8‚œ8„Í8¡<8Á@HÜÍ€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HÝ€A|xxÃxHbÿè8kñ8‹‹Kÿâ-`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¾áÿÜ”!ÿ}_Sx}>4}Cx|ü4|Û3x|º4|™#x|xxªáªbÿô‹, A‚ˆ€bÿè8cÙHÛÙ€A|dx€¢ÿð€eHÛÝ€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HÜÁ€A|xxÃxH˜bÿè8kñ8‹ KÿáQ`H|8‚'€d8‚œ8„å8¡<8Á@HÛu€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HÜE€A|xxÃxHbÿè8kñ8‹‹KÿàÕ`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¾áÿÜ”!ÿ}_Sx}>4}Cx|ü4|Û3x|º4|™#x|xxªáªbÿô‹, A‚ˆ€bÿè8còHÚ€A|dx€¢ÿð€eHÚ…€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HÛi€A|xxÃxH˜bÿè8kñ8‹ Kÿßù`H|8‚'€d8‚œ8„þ8¡<8Á@HÚ€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HÚí€A|xxÃxHbÿè8kñ8‹‹Kÿß}`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¿!ÿä”!ÿ }?4}Cx|ý4|Ü3x|»4|š#x|yx9B' j, A‚€€bÿè8c HÙ1€A|dx€¢ÿð€eHÙ5€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxHÚ!€A|yx#ËxH9Bœ8jñ8Š KÿÞ±`Ht8‚'€d8‚œ8„8¡88Á4}Cx|ü;x|Û4|º+xT™>|xxbÿô‹, A‚„€bÿè8cmHÔa€A|dx€¢ÿð€eHÔe€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxHÕM€A|xxÃxH”bÿè8kñ8‹ KÿÙÝ`Hx8‚'€d8‚œ8„|8¡88Á4}Cx|ü;x|Û4|º+xT™>|xxbÿô‹, A‚„€bÿè8cŒHÓ€A|dx€¢ÿð€eHÓ€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxHÔ€A|xxÃxH”bÿè8kñ8‹ KÿØ‘`Hx8‚'€d8‚œ8„œ8¡88Á4}Cx|ü;x|Û4|º+xT™>|xxbÿô‹, A‚„€bÿè8c­HÑÉ€A|dx€¢ÿð€eHÑÍ€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxHÒµ€A|xxÃxH”bÿè8kñ8‹ Kÿ×E`Hx8‚'€d8‚œ8„½8¡88ÁKx}Cx|ü;x|Û4|º+xT™>|xx‚á¨bÿô‹, A‚ˆ€bÿè8cÎHÐy€A|dx€¢ÿð€eHÐ}€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HÑa€A|xxÃxH˜bÿè8kñ8‹ KÿÕñ`H|8‚'€d8‚œ8„Ý8¡<8Á@HЀA,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HÐå€A|xxÃxHbÿè8kñ8‹‹KÿÕu`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¾áÿÜ”!ÿ}_Sx}>Kx}Cx|ü;x|Û4|º+xT™>|xx‚á¨bÿô‹, A‚ˆ€bÿè8cíHÏ!€A|dx€¢ÿð€eHÏ%€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HÐ €A|xxÃxH˜bÿè8kñ8‹ KÿÔ™`H|8‚'€d8‚œ8„ý8¡<8Á@Hν€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HÏ€A|xxÃxHbÿè8kñ8‹‹KÿÔ`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¾áÿÜ”!ÿ}_Sx}>Kx}Cx|ü;x|Û4|º+xT™>|xx‚á¨bÿô‹, A‚ˆ€bÿè8cHÍÉ€A|dx€¢ÿð€eHÍÍ€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8Hα€A|xxÃxH˜bÿè8kñ8‹ KÿÓA`H|8‚'€d8‚œ8„8¡<8Á@HÍe€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HÎ5€A|xxÃxHbÿè8kñ8‹‹KÿÒÅ`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¿Aÿè”!ÿ }Cx|þ;x|Ý3x|¼+xT›>|zx"ÿôI, A‚|€bÿè8c/HÌ}€A|dx€¢ÿð€eHÌ€Aa8,A‚48CÓxdÛx…ãx¦ëxÇóxèûxHÍq€A|zxCÓxHŒ"ÿè8iñ8‰ KÿÒ`Hp8‚'€d8‚œ8„@8¡88Á}>Kx}4|ü;x|Û4|º+x|™#x|xxbÿô‹, A‚„€bÿè8coHÊA€A|dx€¢ÿð€eHÊE€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxHË-€A|xxÃxH”bÿè8kñ8‹ KÿϽ`Hx8‚'€d8‚œ8„€8¡88Á}>Kx}4|ü;x|Û4|º+x|™#x|xxbÿô‹, A‚„€bÿè8c’HÈõ€A|dx€¢ÿð€eHÈù€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxHÉá€A|xxÃxH”bÿè8kñ8‹ KÿÎq`Hx8‚'€d8‚œ8„¤8¡88Á}>Kx}4|ü;x|Û4|º+x|™#x|xxbÿô‹, A‚„€bÿè8c·HÇ©€A|dx€¢ÿð€eHÇ­€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxHÈ•€A|xxÃxH”bÿè8kñ8‹ KÿÍ%`Hx8‚'€d8‚œ8„É8¡88Á4}Cx|ü;x|Û4|º+xT™>|xxbÿô‹, A‚„€bÿè8cÜHÆ]€A|dx€¢ÿð€eHÆa€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxHÇI€A|xxÃxH”bÿè8kñ8‹ KÿËÙ`Hx8‚'€d8‚œ8„ç8¡88Á4}Cx|ü;x|Û4|º+xT™>|xxbÿô‹, A‚„€bÿè8cóHÅ€A|dx€¢ÿð€eHÅ€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxHÅý€A|xxÃxH”bÿè8kñ8‹ KÿÊ`Hx8‚'€d8‚œ8„ÿ8¡88Á4}Cx|ü;x|Û4|º+xT™>|xxbÿô‹, A‚„€bÿè8c HÃÅ€A|dx€¢ÿð€eHÃÉ€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxHı€A|xxÃxH”bÿè8kñ8‹ KÿÉA`Hx8‚'€d8‚œ8„ 8¡88Á4}Cx|ü;x|Û3x|º+x|™#x|xxbÿô‹, A‚„€bÿè8c 4}Cx|ü;x|Û3x|º+x|™#x|xxbÿô‹, A‚„€bÿè8c OHÀ €A|dx€¢ÿð€eHÀ€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxHÀù€A|xxÃxH”bÿè8kñ8‹ Kÿʼn`Hx8‚'€d8‚œ8„ Y8¡88Á4}Cx|ü;x|Û3x|º+x|™#x|xxbÿô‹, A‚„€bÿè8c dH¾Á€A|dx€¢ÿð€eH¾Å€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxH¿­€A|xxÃxH”bÿè8kñ8‹ KÿÄ=`Hx8‚'€d8‚œ8„ n8¡88Á|{x9' (, A‚x€bÿè8c ëH¹!€A|dx€¢ÿð€eH¹%€Aa8,A‚08cÛx„ãx¥ëxÆóxçûxHº€A|{xcÛxHˆ9œ8hñ8ˆ Kÿ¾©`Hl8‚'€d8‚œ8„ ü8¡88Á4}Cx|ü4|Û3x|º4|™#x|xxªáÊ‚Á̪¡Ò‚ÔªaÚbÿô‹, A‚˜€bÿè8c @Hµ¹€A|dx€¢ÿð€eHµ½€AaL,A‚PLÃx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’Á<’¡@’D’aHH¶‘€A|xxÃxH¨bÿè8kñ8‹ Kÿ»!`HŒ8‚'€d8‚œ8„ O8¡L8ÁPHµE€A,@‚PLÃx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’Á<’¡@’D’aHH¶€A|xxÃxHbÿè8kñ8‹‹Kÿº•`8`ÿÿ€˜8!|¦ºaÿÌN€ |¦¾aÿÌ”!ÿp}_Sx}>4}Cx|ü4|Û3x|º4|™#x|xxªáÊ‚Á̪¡Ò‚ÔªaÚbÿô‹, A‚˜€bÿè8c _H´1€A|dx€¢ÿð€eH´5€AaL,A‚PLÃx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’Á<’¡@’D’aHHµ €A|xxÃxH¨bÿè8kñ8‹ Kÿ¹™`HŒ8‚'€d8‚œ8„ o8¡L8ÁPH³½€A,@‚PLÃx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’Á<’¡@’D’aHH´}€A|xxÃxHbÿè8kñ8‹‹Kÿ¹ `8`ÿÿ€˜8!|¦ºaÿÌN€ |¦¾aÿÌ”!ÿp}_Sx}>4}Cx|ü4|Û3x|º4|™#x|xxªáÊ‚Á̪¡Ò‚ÔªaÚbÿô‹, A‚˜€bÿè8c €H²©€A|dx€¢ÿð€eH²­€AaL,A‚PLÃx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’Á<’¡@’D’aHH³€A|xxÃxH¨bÿè8kñ8‹ Kÿ¸`HŒ8‚'€d8‚œ8„ 8¡L8ÁPH²5€A,@‚PLÃx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’Á<’¡@’D’aHH²õ€A|xxÃxHbÿè8kñ8‹‹Kÿ·…`8`ÿÿ€˜8!|¦ºaÿÌN€ |¦“áÿü”!ÿ°|x8‚' €¤,A‚l€bÿè8c ¡H±Q€A|dx€¢ÿð€eH±U€Aa8,A‚ 8ãûxH²Y€A|xãûxH€8‚œ8dñ8‚œ8„ Kÿ¶å`H`8‚'€d8‚œ8„ °8¡88Á|~x€¢ÿô€Å,A‚l€bÿè8c ôH®=€A|dx€¢ÿð€eH®A€Aa8,A‚$8ÃóxäûxH¯A€A|~xÃóxH|€¢ÿè8eñ8… Kÿ³Ñ`H`8‚'€d8‚œ8„ 8¡88Á|}x8Â' €æ,A‚p€bÿè8c €H©±€A|dx€¢ÿð€eH©µ€Aa8,A‚(8£ëxÄóxåûxHª±€A|}x£ëxH€8œ8fñ8† Kÿ¯A`Hd8‚'€d8‚œ8„ ”8¡88Á|}x8Â' €æ,A‚p€bÿè8c ©H¨‘€A|dx€¢ÿð€eH¨•€Aa8,A‚(8£ëxÄóxåûxH©‘€A|}x£ëxH€8œ8fñ8† Kÿ®!`Hd8‚'€d8‚œ8„ ¾8¡88Á|}x8Â' €æ,A‚p€bÿè8c ÔH§q€A|dx€¢ÿð€eH§u€Aa8,A‚(8£ëxÄóxåûxH¨q€A|}x£ëxH€8œ8fñ8† Kÿ­`Hd8‚'€d8‚œ8„ é8¡88Á|zx"ÿôI, A‚|€bÿè8c lH¢ù€A|dx€¢ÿð€eH¢ý€Aa8,A‚48CÓxdÛx…ãx¦ëxÇóxèûxH£í€A|zxCÓxHŒ"ÿè8iñ8‰ Kÿ¨}`Hp8‚'€d8‚œ8„ w8¡88ÁKx}Cx|ü;x|Û4|º+x|™4|xx‚ḂÁ¼‚¡Àbÿô‹, A‚€bÿè8c êHž€A|dx€¢ÿð€eHž€AaD,A‚HDÃx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’Á<’¡@Hžõ€A|xxÃxH bÿè8kñ8‹ Kÿ£…`H„8‚'€d8‚œ8„ ø8¡D8ÁHH©€A,@‚HDÃx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’Á<’¡@Hžq€A|xxÃxHbÿè8kñ8‹‹Kÿ£`8`ÿÿ€ˆ8!€|¦º¡ÿÔN€ |¦¾¡ÿÔ”!ÿ€}_Sx}>Kx}Cx|ü;x|Û4|º+x|™4|xx‚ḂÁ¼‚¡Àbÿô‹, A‚€bÿè8c Hœ¥€A|dx€¢ÿð€eHœ©€AaD,A‚HDÃx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’Á<’¡@H…€A|xxÃxH bÿè8kñ8‹ Kÿ¢`H„8‚'€d8‚œ8„ 8¡D8ÁHHœ9€A,@‚HDÃx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’Á<’¡@H€A|xxÃxHbÿè8kñ8‹‹Kÿ¡‘`8`ÿÿ€ˆ8!€|¦º¡ÿÔN€ |¦¾¡ÿÔ”!ÿ€}_Sx}>Kx}Cx|ü;x|Û4|º+x|™4|xx‚ḂÁ¼‚¡Àbÿô‹, A‚€bÿè8c &H›5€A|dx€¢ÿð€eH›9€AaD,A‚HDÃx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’Á<’¡@Hœ€A|xxÃxH bÿè8kñ8‹ Kÿ ¥`H„8‚'€d8‚œ8„ 58¡D8ÁHHšÉ€A,@‚HDÃx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’Á<’¡@H›‘€A|xxÃxHbÿè8kñ8‹‹Kÿ !`8`ÿÿ€ˆ8!€|¦º¡ÿÔN€ |¦¿!ÿä”!ÿ }?Kx}4|ý;x|Ü4|»4|š#x|y49B' j, A‚€€bÿè8c EH™Õ€A|dx€¢ÿð€eH™Ù€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxHšÅ€A|yx#ËxH9Bœ8jñ8Š KÿŸU`Ht8‚'€d8‚œ8„ U8¡88Á4}Cx|ü;x|Û3x|º4|™#x|x4bÿô‹, A‚„€bÿè8c ¬H–€A|dx€¢ÿð€eH–€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxH–ý€A|xxÃxH”bÿè8kñ8‹ Kÿ›`Hx8‚'€d8‚œ8„ º8¡88Á4}Cx|ü;x|Û3x|º4|™#x|x4bÿô‹, A‚„€bÿè8c ÉH”Å€A|dx€¢ÿð€eH”É€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxH•±€A|xxÃxH”bÿè8kñ8‹ KÿšA`Hx8‚'€d8‚œ8„ Ø8¡88Á4}Cx|ü;x|Û3x|º4|™#x|x4bÿô‹, A‚„€bÿè8c èH“y€A|dx€¢ÿð€eH“}€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxH”e€A|xxÃxH”bÿè8kñ8‹ Kÿ˜õ`Hx8‚'€d8‚œ8„ ÷8¡88Á|}x8Â' €æ,A‚p€bÿè8c$H‘€A|dx€¢ÿð€eH‘€Aa8,A‚(8£ëxÄóxåûxH’€A|}x£ëxH€8œ8fñ8† Kÿ–¡`Hd8‚'€d8‚œ8„48¡88Á|{x9' (, A‚x€bÿè8cEHñ€A|dx€¢ÿð€eHõ€Aa8,A‚08cÛx„ãx¥ëxÆóxçûxHé€A|{xcÛxHˆ9œ8hñ8ˆ Kÿ•y`Hl8‚'€d8‚œ8„P8¡88Á|{x9' (, A‚x€bÿè8c\HŽÉ€A|dx€¢ÿð€eHŽÍ€Aa8,A‚08cÛx„ãx¥ëxÆóxçûxHÁ€A|{xcÛxHˆ9œ8hñ8ˆ Kÿ”Q`Hl8‚'€d8‚œ8„h8¡88Á|{x9' (, A‚x€bÿè8cuH¡€A|dx€¢ÿð€eH¥€Aa8,A‚08cÛx„ãx¥ëxÆóxçûxHŽ™€A|{xcÛxHˆ9œ8hñ8ˆ Kÿ“)`Hl8‚'€d8‚œ8„8¡88Á|}x8Â' €æ,A‚p€bÿè8cïH‰€A|dx€¢ÿð€eH‰€Aa8,A‚(8£ëxÄóxåûxHŠ€A|}x£ëxH€8œ8fñ8† KÿŽ‘`Hd8‚'€d8‚œ8„8¡88Á4}Cx|ü4|Û3x|º4|™#x|xxªáªbÿô‹, A‚ˆ€bÿè8c Ht­€A|dx€¢ÿð€eHt±€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8Hu•€A|xxÃxH˜bÿè8kñ8‹ Kÿz%`H|8‚'€d8‚œ8„8¡<8Á@HtI€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8Hu€A|xxÃxHbÿè8kñ8‹‹Kÿy©`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¾áÿÜ”!ÿ}_Sx}>4}Cx|ü4|Û3x|º4|™#x|xxªáªbÿô‹, A‚ˆ€bÿè8c4HsU€A|dx€¢ÿð€eHsY€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8Ht=€A|xxÃxH˜bÿè8kñ8‹ KÿxÍ`H|8‚'€d8‚œ8„I8¡<8Á@Hrñ€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HsÁ€A|xxÃxHbÿè8kñ8‹‹KÿxQ`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¾áÿÜ”!ÿ}_Sx}>4}Cx|ü4|Û3x|º4|™#x|xxªáªbÿô‹, A‚ˆ€bÿè8c_Hqý€A|dx€¢ÿð€eHr€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8Hrå€A|xxÃxH˜bÿè8kñ8‹ Kÿwu`H|8‚'€d8‚œ8„t8¡<8Á@Hq™€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8Hri€A|xxÃxHbÿè8kñ8‹‹Kÿvù`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¿!ÿä”!ÿ }?4}Cx|ý4|Ü3x|»4|š#x|yx9B' j, A‚€€bÿè8cŠHp­€A|dx€¢ÿð€eHp±€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxHq€A|yx#ËxH9Bœ8jñ8Š Kÿv-`Ht8‚'€d8‚œ8„˜8¡88Á|}x8Â' €æ,A‚p€bÿè8cˆHgu€A|dx€¢ÿð€eHgy€Aa8,A‚(8£ëxÄóxåûxHhu€A|}x£ëxH€8œ8fñ8† Kÿm`Hd8‚'€d8‚œ8„œ8¡88Á|}x8Â' €æ,A‚p€bÿè8c±HfU€A|dx€¢ÿð€eHfY€Aa8,A‚(8£ëxÄóxåûxHgU€A|}x£ëxH€8œ8fñ8† Kÿkå`Hd8‚'€d8‚œ8„Æ8¡88Á|}x8Â' €æ,A‚p€bÿè8cÜHe5€A|dx€¢ÿð€eHe9€Aa8,A‚(8£ëxÄóxåûxHf5€A|}x£ëxH€8œ8fñ8† KÿjÅ`Hd8‚'€d8‚œ8„ñ8¡88Á4}4|ü;x|Û4|º4|™4|xx‚ᨂÁ¬bÿô‹, A‚Œ€bÿè8cÛH])€A|dx€¢ÿð€eH]-€Aa@,A‚D@Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’ÁKx}4|ü;x|Û4|º4T™>|xxbÿô‹, A‚„€bÿè8cHZ±€A|dx€¢ÿð€eHZµ€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxH[€A|xxÃxH”bÿè8kñ8‹ Kÿ`-`Hx8‚'€d8‚œ8„!8¡88ÁT¾>T>||x€âÿô,A‚t€bÿè8c.HYu€A|dx€¢ÿð€eHYy€Aa8,A‚,8ƒãx¤ëxÅóxæûxHZq€A||xƒãxH„€âÿè8gñ8‡ Kÿ_`Hh8‚'€d8‚œ8„88¡88Á|¾+xT>||x€âÿô,A‚t€bÿè8cCHXY€A|dx€¢ÿð€eHX]€Aa8,A‚,8ƒãx¤ëxÅóxæûxHYU€A||xƒãxH„€âÿè8gñ8‡ Kÿ]å`Hh8‚'€d8‚œ8„W8¡88Á|}x8Â' €æ,A‚p€bÿè8cÍHSå€A|dx€¢ÿð€eHSé€Aa8,A‚(8£ëxÄóxåûxHTå€A|}x£ëxH€8œ8fñ8† KÿYu`Hd8‚'€d8‚œ8„Þ8¡88ÁKx}4|ü;x|Û4|º+xT™>|xx¢áª¢Á®bÿô‹, A‚Œ€bÿè8cðHR±€A|dx€¢ÿð€eHRµ€Aa@,A‚D@Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’ÁKx}4|ü;x|Û4|º+xT™>|xx¢áª¢Á®bÿô‹, A‚Œ€bÿè8cHQM€A|dx€¢ÿð€eHQQ€Aa@,A‚D@Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8’ÁKx}4|ü;x|Û4|º+xT™>|xx¢áª¢Á®bÿô‹, A‚Œ€bÿè8c}>4}Cx|ü4|Û3x|º4|™#x|xx¢áªbÿô‹, A‚ˆ€bÿè8ccHN‰€A|dx€¢ÿð€eHN€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HOq€A|xxÃxH˜bÿè8kñ8‹ KÿT`H|8‚'€d8‚œ8„q8¡<8Á@HN%€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HNõ€A|xxÃxHbÿè8kñ8‹‹KÿS…`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¾áÿÜ”!ÿU_>}>4}Cx|ü4|Û3x|º4|™#x|xx¢áªbÿô‹, A‚ˆ€bÿè8c€HM1€A|dx€¢ÿð€eHM5€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HN€A|xxÃxH˜bÿè8kñ8‹ KÿR©`H|8‚'€d8‚œ8„8¡<8Á@HLÍ€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HM€A|xxÃxHbÿè8kñ8‹‹KÿR-`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¾áÿÜ”!ÿU_>}>4}Cx|ü4|Û3x|º4|™#x|xx¢áªbÿô‹, A‚ˆ€bÿè8cŸHKÙ€A|dx€¢ÿð€eHKÝ€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HLÁ€A|xxÃxH˜bÿè8kñ8‹ KÿQQ`H|8‚'€d8‚œ8„®8¡<8Á@HKu€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HLE€A|xxÃxHbÿè8kñ8‹‹KÿPÕ`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¿!ÿä”!ÿ }?4}Cx|ý4|Ü3x|»4|š#x|yx9B' j, A‚€€bÿè8c¾HJ‰€A|dx€¢ÿð€eHJ€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxHKy€A|yx#ËxH9Bœ8jñ8Š KÿP `Ht8‚'€d8‚œ8„Ñ8¡88Á4}Cx|ü4|Û3x|º4|™#x|xxªáªbÿô‹, A‚ˆ€bÿè8c7HFÁ€A|dx€¢ÿð€eHFÅ€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HG©€A|xxÃxH˜bÿè8kñ8‹ KÿL9`H|8‚'€d8‚œ8„A8¡<8Á@HF]€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HG-€A|xxÃxHbÿè8kñ8‹‹KÿK½`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¾áÿÜ”!ÿ}_Sx}>4}Cx|ü4|Û3x|º4|™#x|xxªáªbÿô‹, A‚ˆ€bÿè8cLHEi€A|dx€¢ÿð€eHEm€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HFQ€A|xxÃxH˜bÿè8kñ8‹ KÿJá`H|8‚'€d8‚œ8„W8¡<8Á@HE€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HEÕ€A|xxÃxHbÿè8kñ8‹‹KÿJe`8`ÿÿ€x8!p|¦ºáÿÜN€ |¦¾áÿÜ”!ÿ}_Sx}>4}Cx|ü4|Û3x|º4|™#x|xxªáªbÿô‹, A‚ˆ€bÿè8ccHD€A|dx€¢ÿð€eHD€Aa<,A‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HDù€A|xxÃxH˜bÿè8kñ8‹ KÿI‰`H|8‚'€d8‚œ8„n8¡<8Á@HC­€A,@‚@<Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûx’á8HD}€A|xxÃxHbÿè8kñ8‹‹KÿI `8`ÿÿ€x8!p|¦ºáÿÜN€ |¦“¡ÿô“Áÿø“áÿü”!ÿ°T¿>|ž#x|}x8Â' €æ,A‚p€bÿè8czHBÉ€A|dx€¢ÿð€eHBÍ€Aa8,A‚(8£ëxÄóxåûxHCÉ€A|}x£ëxH€8œ8fñ8† KÿHY`Hd8‚'€d8‚œ8„†8¡88Á||x€âÿô,A‚t€bÿè8c“HA­€A|dx€¢ÿì€eHA±€Aa8,A‚,8ƒãx¤ëxÅóxæûxHB©€A||xƒãxH„€âÿè8gñ8‡§KÿG9`Hh8‚'”€d8‚œ8„8¡88Á||x€âÿô,A‚t€bÿè8c­H@‘€A|dx€¢ÿì€eH@•€Aa8,A‚,8ƒãx¤ëxÅóxæûxHA€A||xƒãxH„€âÿè8gñ8‡§KÿF`Hh8‚'”€d8‚œ8„Â8¡88Á|ý;x|Ü3x|»+xTš>|yx9B' j, A‚€€bÿè8cØH?i€A|dx€¢ÿì€eH?m€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxH@Y€A|yx#ËxH9Bœ8jñ8Š KÿDé`Ht8‚'”€d8‚œ8„è8¡88Á|ý;x|Ü3x|»+xTš>|yx9B' j, A‚€€bÿè8cùH>)€A|dx€¢ÿì€eH>-€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxH?€A|yx#ËxH9Bœ8jñ8Š KÿC©`Ht8‚'”€d8‚œ8„ 8¡88Á¥€A|yx#ËxH9Bœ8jñ8Š0KÿC5`8`ÿÿ€h8!`|¦»!ÿäN€ |¦“Áÿø“áÿü”!ÿ°|Ÿ#x|~x€¢ÿô€Å,A‚l€bÿè8cH<ù€A|dx€¢ÿì€eH<ý€Aa8,A‚$8ÃóxäûxH=ý€A|~xÃóxH|€¢ÿè8eñ8…§KÿB`H`8‚'”€d8‚œ8„08¡88Á|#x||x€âÿô,A‚t€bÿè8c“H9Ý€A|dx€¢ÿì€eH9á€Aa8,A‚,8ƒãx¤ëxÅóxæûxH:Ù€A||xƒãxH„€âÿè8gñ8‡§Kÿ?i`Hh8‚'”€d8‚œ8„ª8¡88Á|#x||x€âÿô,A‚t€bÿè8cÂH8Á€A|dx€¢ÿì€eH8Å€Aa8,A‚,8ƒãx¤ëxÅóxæûxH9½€A||xƒãxH„€âÿè8gñ8‡§Kÿ>M`Hh8‚'”€d8‚œ8„Ú8¡88Á|}x8Â' €æ,A‚p€bÿè8cóH7¡€A|dx€¢ÿì€eH7¥€Aa8,A‚(8£ëxÄóxåûxH8¡€A|}x£ëxH€8œ8fñ8†§Kÿ=1`Hd8‚'”€d8‚œ8„ 8¡88Á|}x8Â' €æ,A‚p€bÿè8c"H6€A|dx€¢ÿì€eH6…€Aa8,A‚(8£ëxÄóxåûxH7€A|}x£ëxH€8œ8fñ8†§Kÿ<`Hd8‚'”€d8‚œ8„:8¡88ÁKxU>|ü;x|Û3xTº>|™#x|xxbÿô‹, A‚„€bÿè8cÃH2í€A|dx€¢ÿì€eH2ñ€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxH3Ù€A|xxÃxH”bÿè8kñ8‹§Kÿ8i`Hx8‚'”€d8‚œ8„Ô8¡88ÁKxU>|ü;x|Û3xTº>|™#x|xxbÿô‹, A‚„€bÿè8cæH1¡€A|dx€¢ÿì€eH1¥€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxH2€A|xxÃxH”bÿè8kñ8‹§Kÿ7`Hx8‚'”€d8‚œ8„ø8¡88Á|ý;xTÜ>|»+x|š#x|yx9B' j, A‚€€bÿè8c H0Y€A|dx€¢ÿì€eH0]€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxH1I€A|yx#ËxH9Bœ8jñ8ЧKÿ5Ù`Ht8‚'”€d8‚œ8„8¡88Á|ý;xTÜ>|»+x|š#x|yx9B' j, A‚€€bÿè8c2H/€A|dx€¢ÿì€eH/€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxH0 €A|yx#ËxH9Bœ8jñ8ЧKÿ4™`Ht8‚'”€d8‚œ8„F8¡88Á|½+x|œ#x|{x9' (, A‚x€bÿè8c[H-á€A|dx€¢ÿì€eH-å€Aa8,A‚08cÛx„ãx¥ëxÆóxçûxH.Ù€A|{xcÛxHˆ9œ8hñ8ˆ§Kÿ3i`Hl8‚'”€d8‚œ8„l8¡88Á|½+x|œ#x|{x9' (, A‚x€bÿè8c~H,¹€A|dx€¢ÿì€eH,½€Aa8,A‚08cÛx„ãx¥ëxÆóxçûxH-±€A|{xcÛxHˆ9œ8hñ8ˆ§Kÿ2A`Hl8‚'”€d8‚œ8„8¡88Á|}x8Â' €æ,A‚p€bÿè8c£H+‘€A|dx€¢ÿì€eH+•€Aa8,A‚(8£ëxÄóxåûxH,‘€A|}x£ëxH€8œ8fñ8†§Kÿ1!`Hd8‚'”€d8‚œ8„»8¡88Á|}x8Â' €æ,A‚p€bÿè8cÔH*q€A|dx€¢ÿì€eH*u€Aa8,A‚(8£ëxÄóxåûxH+q€A|}x£ëxH€8œ8fñ8†§Kÿ0`Hd8‚'”€d8‚œ8„í8¡88Á|½+x|œ#xT{>9' (, A‚x€bÿè8cH)Q€A|dx€¢ÿì€eH)U€Aa8,A‚08cÛx„ãx¥ëxÆóxçûxH*I€A|{xcÛxHˆ9œ8hñ8ˆ§Kÿ.Ù`Hl8‚'”€d8‚œ8„8¡88Á|½+x|œ#xT{>9' (, A‚x€bÿè8c,H()€A|dx€¢ÿì€eH(-€Aa8,A‚08cÛx„ãx¥ëxÆóxçûxH)!€A|{xcÛxHˆ9œ8hñ8ˆ§Kÿ-±`Hl8‚'”€d8‚œ8„?8¡88Á>}CxTü>|Û3x|º+x|™#x|xxbÿô‹, A‚„€bÿè8c“H$½€A|dx€¢ÿì€eH$Á€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxH%©€A|xxÃxH”bÿè8kñ8‹§Kÿ*9`Hx8‚'”€d8‚œ8„¨8¡88Á>}CxTü>|Û3x|º+x|™#x|xxbÿô‹, A‚„€bÿè8c¾H#q€A|dx€¢ÿì€eH#u€Aa8,A‚<8Ãx$ËxEÓxfÛx‡ãx¨ëxÉóxêûxH$]€A|xxÃxH”bÿè8kñ8‹§Kÿ(í`Hx8‚'”€d8‚œ8„Ô8¡88Á|ý;xTÜ>|»+x|š#x|yx9B' j, A‚€€bÿè8cëH")€A|dx€¢ÿì€eH"-€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxH#€A|yx#ËxH9Bœ8jñ8ЧKÿ'©`Ht8‚'”€d8‚œ8„8¡88Á|ý;xTÜ>|»+x|š#x|yx9B' j, A‚€€bÿè8cH é€A|dx€¢ÿì€eH í€Aa8,A‚88#ËxDÓxeÛx†ãx§ëxÈóxéûxH!Ù€A|yx#ËxH9Bœ8jñ8ЧKÿ&i`Ht8‚'”€d8‚œ8„28¡88Á|Ý3x|¼+x|›#x|zx"ÿôI, A‚|€bÿè8cÒH•€A|dx€¢ÿì€eH™€Aa8,A‚48CÓxdÛx…ãx¦ëxÇóxèûxH‰€A|zxCÓxHŒ"ÿè8iñ8‰§Kÿ"`Hp8‚'”€d8‚œ8„á8¡88Á|Ý3x|¼+x|›#x|zx"ÿôI, A‚|€bÿè8cñHa€A|dx€¢ÿì€eHe€Aa8,A‚48CÓxdÛx…ãx¦ëxÇóxèûxHU€A|zxCÓxHŒ"ÿè8iñ8‰§Kÿ å`Hp8‚'”€d8‚œ8„8¡88Á8‚' €¤,A‚l€bÿè8cdHý€A|dx€¢ÿì€eH€Aa8,A‚ 8ãûxH€A|xãûxH€8‚œ8dñ8‚œ8„§Kÿ‘`H`8‚'”€d8‚œ8„u8¡88Á"ðc'ðìôä!èƒÄ!T‚!,T8T8TXTdT ˜T äT HT |T°TäTðTðTðT0TpTÈd@THˆà8è!@"˜#Ø%&X'd(°)ü+H, -ø/P0„1„2Ð45h6´89L:l;¸=>P?p@A°B°CØDØEøG€IJKLMœN¨OÐPøR S@T`U€VœW¸XÔZ[<\p]¤_`„aôc4dte´ghLi˜jÀkàmn0oXp€q¨rÐsðtüvwxyHz|{°|¼}È~Ôô‚4ƒT„”…Ô‡ˆl‰Ä‹Œ\œŽÜü‘’$“@”\•|–œ—¼˜Ü™ü›œDlž”Ÿø¡¢`£|¤˜¥´¦Ð§ì© ªp«Ô­8®¯è±@²€³Àµ¶X·°¹º(»D¼`½ ¾à¿ìÀøÁøÃÄ0ÅPÆpÇ¤ÈØÊ$Ëp̰ÍðÏÐ@Ñ`Ò€Ó¨ÔÐÕìרTÙ ÚàÜ Ý Þ,ß8àlá â ã äŒå¬æÌçÌèØéäêäëäìäíðîüðñ4òPólô”õ¼öØ÷ôùú "û  ÁKT/Library/Frameworks/iODBC.framework/System/Library/Frameworks/iODBC.frameworkFramework loading problemThe iODBC.framework component cannot be loaded. Please check if iODBC is well installed on your Mac OS X system./Library/Frameworks/iODBCinst.framework/System/Library/Frameworks/iODBCinst.frameworkThe iODBCinst.framework component cannot be loaded. Please check if iODBC is well installed on your Mac OS X system.iodbc:ODBC$DriverMgrExtension loading problemThe ODBC Driver Manager PPC extension cannot be loaded. Please check if iODBC is well installed on your Mac OS system.iodbc:ODBC$ConfigMgrThe ODBC Configuration Manager PPC extension cannot be loaded. Please check if iODBC is well installed on your Mac OS system.SQLAllocConnectFunction loading problemThe iODBC.framework function cannot be loaded. Please check if iODBC is well installed on your Mac OS X system.SQLAllocConnectThe ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is well installed on your Mac OS system.SQLAllocEnv SQLAllocEnvSQLAllocHandleSQLAllocHandleSQLAllocStmt SQLAllocStmtSQLBindCol SQLBindColSQLBindParam SQLBindParamSQLBindParameterSQLBindParameterSQLBrowseConnectSQLBrowseConnectSQLBrowseConnectWSQLBrowseConnectWSQLBrowseConnectASQLBrowseConnectASQLBulkOperationsSQLBulkOperationsSQLCancel SQLCancelSQLCloseCursorSQLCloseCursorSQLColAttributeSQLColAttributeSQLColAttributeWSQLColAttributeWSQLColAttributeASQLColAttributeASQLColAttributesSQLColAttributesSQLColAttributesWSQLColAttributesWSQLColAttributesASQLColAttributesASQLColumnPrivilegesSQLColumnPrivilegesSQLColumnPrivilegesWSQLColumnPrivilegesWSQLColumnPrivilegesASQLColumnPrivilegesASQLColumns SQLColumnsSQLColumnsW SQLColumnsWSQLColumnsA SQLColumnsASQLConnect SQLConnectSQLConnectW SQLConnectWSQLConnectA SQLConnectASQLCopyDesc SQLCopyDescSQLDataSourcesSQLDataSourcesSQLDataSourcesWSQLDataSourcesWSQLDataSourcesASQLDataSourcesASQLDescribeColSQLDescribeColSQLDescribeColWSQLDescribeColWSQLDescribeColASQLDescribeColASQLDescribeParamSQLDescribeParamSQLDisconnect SQLDisconnectSQLDriverConnectSQLDriverConnectSQLDriverConnectWSQLDriverConnectWSQLDriverConnectASQLDriverConnectASQLDrivers SQLDriversSQLDriversW SQLDriversWSQLDriversA SQLDriversASQLEndTran SQLEndTranSQLErrorSQLErrorSQLErrorW SQLErrorWSQLErrorA SQLErrorASQLExecDirect SQLExecDirectSQLExecDirectWSQLExecDirectWSQLExecDirectASQLExecDirectASQLExecute SQLExecuteSQLExtendedFetchSQLExtendedFetchSQLFetchSQLFetchSQLFetchScrollSQLFetchScrollSQLForeignKeysSQLForeignKeysSQLForeignKeysASQLForeignKeysASQLForeignKeysWSQLForeignKeysWSQLFreeConnectSQLFreeConnectSQLFreeEnv SQLFreeEnvSQLFreeHandle SQLFreeHandleSQLFreeStmt SQLFreeStmtSQLGetConnectAttrSQLGetConnectAttrSQLGetConnectAttrWSQLGetConnectAttrWSQLGetConnectAttrASQLGetConnectAttrASQLGetConnectOptionSQLGetConnectOptionSQLGetConnectOptionWSQLGetConnectOptionWSQLGetConnectOptionASQLGetConnectOptionASQLGetCursorNameSQLGetCursorNameSQLGetCursorNameWSQLGetCursorNameWSQLGetCursorNameASQLGetCursorNameASQLGetData SQLGetDataSQLGetDescFieldSQLGetDescFieldSQLGetDescFieldWSQLGetDescFieldWSQLGetDescFieldASQLGetDescFieldASQLGetDescRec SQLGetDescRecSQLGetDescRecWSQLGetDescRecWSQLGetDescRecASQLGetDescRecASQLGetDiagFieldSQLGetDiagFieldSQLGetDiagFieldWSQLGetDiagFieldWSQLGetDiagFieldASQLGetDiagFieldASQLGetDiagRec SQLGetDiagRecSQLGetDiagRecWSQLGetDiagRecWSQLGetDiagRecASQLGetDiagRecASQLGetEnvAttr SQLGetEnvAttrSQLGetFunctionsSQLGetFunctionsSQLGetInfo SQLGetInfoSQLGetInfoW SQLGetInfoWSQLGetInfoA SQLGetInfoASQLGetStmtAttrSQLGetStmtAttrSQLGetStmtAttrWSQLGetStmtAttrWSQLGetStmtAttrASQLGetStmtAttrASQLGetStmtOptionSQLGetStmtOptionSQLGetTypeInfoSQLGetTypeInfoSQLGetTypeInfoWSQLGetTypeInfoWSQLGetTypeInfoASQLGetTypeInfoASQLMoreResultsSQLMoreResultsSQLNativeSql SQLNativeSqlSQLNativeSqlW SQLNativeSqlWSQLNativeSqlA SQLNativeSqlASQLNumParams SQLNumParamsSQLNumResultColsSQLNumResultColsSQLParamData SQLParamDataSQLParamOptionsSQLParamOptionsSQLPrepare SQLPrepareSQLPrepareW SQLPrepareWSQLPrepareA SQLPrepareASQLPrimaryKeysSQLPrimaryKeysSQLPrimaryKeysWSQLPrimaryKeysWSQLPrimaryKeysASQLPrimaryKeysASQLProcedureColumnsSQLProcedureColumnsSQLProcedureColumnsWSQLProcedureColumnsWSQLProcedureColumnsASQLProcedureColumnsASQLProcedures SQLProceduresSQLProceduresWSQLProceduresWSQLProceduresASQLProceduresASQLPutData SQLPutDataSQLRowCount SQLRowCountSQLSetConnectAttrSQLSetConnectAttrSQLSetConnectAttrWSQLSetConnectAttrWSQLSetConnectAttrASQLSetConnectAttrASQLSetConnectOptionSQLSetConnectOptionSQLSetConnectOptionWSQLSetConnectOptionWSQLSetConnectOptionASQLSetConnectOptionASQLSetCursorNameSQLSetCursorNameSQLSetCursorNameWSQLSetCursorNameWSQLSetCursorNameASQLSetCursorNameASQLSetDescFieldSQLSetDescFieldSQLSetDescFieldWSQLSetDescFieldWSQLSetDescFieldASQLSetDescFieldASQLSetDescRec SQLSetDescRecSQLSetEnvAttr SQLSetEnvAttrSQLSetParam SQLSetParamSQLSetPos SQLSetPosSQLSetScrollOptionsSQLSetScrollOptionsSQLSetStmtAttrSQLSetStmtAttrSQLSetStmtAttrWSQLSetStmtAttrWSQLSetStmtAttrASQLSetStmtAttrASQLSetStmtOptionSQLSetStmtOptionSQLSpecialColumnsSQLSpecialColumnsSQLSpecialColumnsWSQLSpecialColumnsWSQLSpecialColumnsASQLSpecialColumnsASQLStatistics SQLStatisticsSQLStatisticsWSQLStatisticsWSQLStatisticsASQLStatisticsASQLTablePrivilegesSQLTablePrivilegesSQLTablePrivilegesWSQLTablePrivilegesWSQLTablePrivilegesASQLTablePrivilegesASQLTables SQLTablesSQLTablesW SQLTablesWSQLTablesA SQLTablesASQLTransact SQLTransactSQLConfigDataSourceThe iODBCinst.framework function cannot be loaded. Please check if iODBC is well installed on your Mac OS X system.SQLConfigDataSourceThe ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is well installed on your Mac OS system.SQLConfigDataSourceWSQLConfigDataSourceWSQLConfigDriverSQLConfigDriverSQLConfigDriverWSQLConfigDriverWSQLCreateDataSourceSQLCreateDataSourceSQLCreateDataSourceWSQLCreateDataSourceWSQLGetConfigModeSQLGetConfigModeSQLGetAvailableDriversSQLGetAvailableDriversSQLGetAvailableDriversWSQLGetAvailableDriversWSQLGetInstalledDriversSQLGetInstalledDriversSQLGetInstalledDriversWSQLGetInstalledDriversWSQLGetPrivateProfileStringSQLGetPrivateProfileStringSQLGetPrivateProfileStringWSQLGetPrivateProfileStringWSQLGetTranslatorSQLGetTranslatorSQLGetTranslatorWSQLGetTranslatorWSQLInstallDriverExSQLInstallDriverExSQLInstallDriverExWSQLInstallDriverExWSQLInstallDriverSQLInstallDriverSQLInstallDriverWSQLInstallDriverWSQLInstallDriverManagerSQLInstallDriverManagerSQLInstallDriverManagerWSQLInstallDriverManagerWSQLInstallerErrorSQLInstallerErrorSQLInstallerErrorWSQLInstallerErrorWSQLInstallODBCSQLInstallODBCSQLInstallODBCWSQLInstallODBCWSQLInstallTranslatorSQLInstallTranslatorSQLInstallTranslatorWSQLInstallTranslatorWSQLInstallTranslatorExSQLInstallTranslatorExSQLInstallTranslatorExWSQLInstallTranslatorExWSQLManageDataSourcesSQLManageDataSourcesSQLPostInstallerErrorSQLPostInstallerErrorSQLPostInstallerErrorWSQLPostInstallerErrorWSQLReadFileDSNSQLReadFileDSNSQLReadFileDSNWSQLReadFileDSNWSQLRemoveDSNFromIniSQLRemoveDSNFromIniSQLRemoveDSNFromIniWSQLRemoveDSNFromIniWSQLRemoveDefaultDataSourceSQLRemoveDefaultDataSourceSQLRemoveDriverSQLRemoveDriverSQLRemoveDriverWSQLRemoveDriverWSQLRemoveDriverManagerSQLRemoveDriverManagerSQLRemoveTranslatorSQLRemoveTranslatorSQLRemoveTranslatorWSQLRemoveTranslatorWSQLSetConfigModeSQLSetConfigModeSQLValidDSN SQLValidDSNSQLValidDSNW SQLValidDSNWSQLWriteDSNToIniSQLWriteDSNToIniSQLWriteDSNToIniWSQLWriteDSNToIniWSQLWriteFileDSNSQLWriteFileDSNSQLWriteFileDSNWSQLWriteFileDSNWSQLWritePrivateProfileStringSQLWritePrivateProfileStringSQLWritePrivateProfileStringWSQLWritePrivateProfileStringWSQLGetKeywordValueSQLGetKeywordValueSQLGetKeywordValueWSQLGetKeywordValueWSQLSetKeywordValueSQLSetKeywordValueSQLSetKeywordValueWSQLSetKeywordValueWSQLWriteDSN SQLWriteDSNSQLWriteDSNW SQLWriteDSNWSQLRemoveDSN SQLRemoveDSNSQLRemoveDSNW SQLRemoveDSNW„'À3.0.6#'ЄiODBC CFM BridgeÿÿÿÿXÿÿÿÿ°Ä´Ô C€  (Fhr‰£²ºËßü dJB€FÑDûÿ ÁCarbonLibCloseConnectionStandardAlertCFURLCreateWithFileSystemPathCFBundleGetFunctionPointerForNameCFReleaseCFBundleLoadExecutablekCFAllocatorSystemDefaultCFBundleCreateGestaltGetSharedLibrarykCFAllocatorDefault__CFStringMakeConstantStringFindSymbolStdCLibmemcpystrlenSQLAllocConnectSQLAllocEnvSQLAllocHandleSQLAllocStmtSQLBindColSQLBindParamSQLBindParameterSQLBrowseConnectSQLBrowseConnectWSQLBrowseConnectASQLBulkOperationsSQLCancelSQLCloseCursorSQLColAttributeSQLColAttributeWSQLColAttributeASQLColAttributesSQLColAttributesWSQLColAttributesASQLColumnPrivilegesSQLColumnPrivilegesWSQLColumnPrivilegesASQLColumnsSQLColumnsWSQLColumnsASQLConnectSQLConnectWSQLConnectASQLCopyDescSQLDataSourcesSQLDataSourcesWSQLDataSourcesASQLDescribeColSQLDescribeColWSQLDescribeColASQLDescribeParamSQLDisconnectSQLDriverConnectSQLDriverConnectWSQLDriverConnectASQLDriversSQLDriversWSQLDriversASQLEndTranSQLErrorSQLErrorWSQLErrorASQLExecDirectSQLExecDirectWSQLExecDirectASQLExecuteSQLExtendedFetchSQLFetchSQLFetchScrollSQLForeignKeysSQLForeignKeysASQLForeignKeysWSQLFreeConnectSQLFreeEnvSQLFreeHandleSQLFreeStmtSQLGetConnectAttrSQLGetConnectAttrWSQLGetConnectAttrASQLGetConnectOptionSQLGetConnectOptionWSQLGetConnectOptionASQLGetCursorNameSQLGetCursorNameWSQLGetCursorNameASQLGetDataSQLGetDescFieldSQLGetDescFieldWSQLGetDescFieldASQLGetDescRecSQLGetDescRecWSQLGetDescRecASQLGetDiagFieldSQLGetDiagFieldWSQLGetDiagFieldASQLGetDiagRecSQLGetDiagRecWSQLGetDiagRecASQLGetEnvAttrSQLGetFunctionsSQLGetInfoSQLGetInfoWSQLGetInfoASQLGetStmtAttrSQLGetStmtAttrWSQLGetStmtAttrASQLGetStmtOptionSQLGetTypeInfoSQLGetTypeInfoWSQLGetTypeInfoASQLMoreResultsSQLNativeSqlSQLNativeSqlWSQLNativeSqlASQLNumParamsSQLNumResultColsSQLParamDataSQLParamOptionsSQLPrepareSQLPrepareWSQLPrepareASQLPrimaryKeysSQLPrimaryKeysWSQLPrimaryKeysASQLProcedureColumnsSQLProcedureColumnsWSQLProcedureColumnsASQLProceduresSQLProceduresWSQLProceduresASQLPutDataSQLRowCountSQLSetConnectAttrSQLSetConnectAttrWSQLSetConnectAttrASQLSetConnectOptionSQLSetConnectOptionWSQLSetConnectOptionASQLSetCursorNameSQLSetCursorNameWSQLSetCursorNameASQLSetDescFieldSQLSetDescFieldWSQLSetDescFieldASQLSetDescRecSQLSetEnvAttrSQLSetParamSQLSetPosSQLSetScrollOptionsSQLSetStmtAttrSQLSetStmtAttrWSQLSetStmtAttrASQLSetStmtOptionSQLSpecialColumnsSQLSpecialColumnsWSQLSpecialColumnsASQLStatisticsSQLStatisticsWSQLStatisticsASQLTablePrivilegesSQLTablePrivilegesWSQLTablePrivilegesASQLTablesSQLTablesWSQLTablesASQLTransactSQLConfigDataSourceSQLConfigDataSourceWSQLConfigDriverSQLConfigDriverWSQLCreateDataSourceSQLCreateDataSourceWSQLGetConfigModeSQLGetAvailableDriversSQLGetAvailableDriversWSQLGetInstalledDriversSQLGetInstalledDriversWSQLGetPrivateProfileStringSQLGetPrivateProfileStringWSQLGetTranslatorSQLGetTranslatorWSQLInstallDriverExSQLInstallDriverExWSQLInstallDriverSQLInstallDriverWSQLInstallDriverManagerSQLInstallDriverManagerWSQLInstallerErrorSQLInstallerErrorWSQLInstallODBCSQLInstallODBCWSQLInstallTranslatorSQLInstallTranslatorWSQLInstallTranslatorExSQLInstallTranslatorExWSQLManageDataSourcesSQLPostInstallerErrorSQLPostInstallerErrorWSQLReadFileDSNSQLReadFileDSNWSQLRemoveDSNFromIniSQLRemoveDSNFromIniWSQLRemoveDefaultDataSourceSQLRemoveDriverSQLRemoveDriverWSQLRemoveDriverManagerSQLRemoveTranslatorSQLRemoveTranslatorWSQLSetConfigModeSQLValidDSNSQLValidDSNWSQLWriteDSNToIniSQLWriteDSNToIniWSQLWriteFileDSNSQLWriteFileDSNWSQLWritePrivateProfileStringSQLWritePrivateProfileStringWSQLGetKeywordValueSQLGetKeywordValueWSQLSetKeywordValueSQLSetKeywordValueWSQLWriteDSNSQLWriteDSNWSQLRemoveDSNSQLRemoveDSNWversionlibname  !4%2 6>DJQ WZ(` j$r${„ †Ž4’ Ÿ§®µ¹¿ ÆÎ½þs‚10¤wþú•‚Sú× æ†0 ”†ƒX A¯ i¯¡IW ¦“üQÜA¥ VÒ È \ã3^&42v¹‰r~° e‰ %m¢¾>·›ÅÉô¢~ð ÌE Ÿ|ß>õªùMdeª ‘lŒù¥L) œï or Ï•ƒS™…ò8a ß‹öÅ#.;=å fýŽÙ§³—3Õ ËQ;p}ä®:PÊaÊHë }…g 7 ê ˜‰ê È GÙ /)á ^¤MÁÁ dªM8ªNÙ‰ÿµ½§ï Ès¾Ók Êc;k­e¼õ¼ Ÿj ÌS, ÈS 1[ ‘zg¯¾å@GíåÄ3H È–>#2ä /*~¦ eŸ¹Ÿ ÏÍì ”— ; P ”œW W úG °IÛÜ ˜þe Ê}»ne±› 6 1Ù ð‚E-> ’à ›.Å]=º>=|cl ÈÞ A” "ï9±µ1 ^&ÎÁ×NÏ f Ë 8¼KIöHý#³¯#aÐy– AŽ®ü ü.-˜ ± N A iñò®,™ $#G³;fkáîÈù³L?bé³'»„}ƒEL>Mò.od. ° &Ø7pÑÈx ThNÀw˜‚ ÃÀt° …x´øfpÈx ;0ø8åî{X §  kp™IP¸£ØÕX`æ¾è O8"КЌx((þ(¨˜ð  ˜ æ  >` í@ uÍ š‡ ã° œÈY¢8 ß'¼Wèä0 ‰ ÒèØ¦ð¸Hñ¸à GÈ ö¨ õéˆ8~€ Ö°ùÀ  €ÌðpƨH˜€àЩ°9XJàÖø ÆàkÐ Õp ú,@  Yð½ rh*P躸˜=´pˆ2øXXз  0 Šè_ ‡ˆ 4àE˜¨Ø¨ gm àx—0 °ˆ i@« Åh »(:HÆP(ȉÀf`6ؑȰàsø HM@ ºØ@8i¨-ˆ,hXHiPÚ e° } Ð60 xH à YÐEx¨ˆw@¸ Ó˜­@sx H¨ Ê0 Ú8 ˆP gØQ€‹à[ˆ Fè ì€ 6Àp ¸!ð h lø žXN˜ æ'È ŠÀI``   ŸððØ ((ä` €´#¨{ØØ€  ¯ÐÁ3°Yh ”@ w¸ È µøç¸òh 'X ÌeðÐ( üˆ P ±`ü˜è , \ÈÀ và Álibiodbc-3.52.9/mac/iODBCcfmbridge/iODBC_CFM_Bridge.res0000755000076400007640000001045312323204667017144 00000000000000Mac OS X  2°âIshlbodbcATTR*àÊâxããfœpwpc<iODBC CFM Bridgepwpc@iodbc:ODBC$CFMBridge€3.0.6 Release 3.0.6€3.0.6iODBC CFM BridgeããfSORTî€fcarbcfrg&vers2ÿÿßõ<ÿÿõ;üÿÿ õ<ÿÿ¾õ<libiodbc-3.52.9/mac/iODBCcfmbridge/iodbccfm.c0000644000076400007640000070313312323210535015512 00000000000000/* * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "iodbccfm.h" /* Global variables for the CFM library */ CFragConnectionID iodbcId, iodbcinstId; CFBundleRef iodbcRef, iodbcinstRef; int isOnMacOSX; /* Function which return true if running on Mac OS X */ static int IS_MAC_X(void) { UInt32 response; return (Gestalt(gestaltSystemVersion, (SInt32*)&response) == noErr) && (response >= 0x01000); } /* Function which load and get a reference of a Mac OS Classic library */ OSStatus load_library(Str255 name, CFragConnectionID *id) { OSStatus err = noErr; Ptr main_addr; Str255 err_msg; /* Check at least a pointer is provided */ if(!id) return noErr; *id = NULL; /* Load the library */ err = GetSharedLibrary (name, kPowerPCCFragArch, kLoadCFrag, id, &main_addr, err_msg); if(err != noErr) goto end; end: /* Make some cleaning */ if(err != noErr && *id != NULL) { CloseConnection(id); *id = NULL; } return err; } /* Function which load and get a reference of a Mac OS X framework */ OSStatus load_framework(CFStringRef frame, CFBundleRef *bundle) { CFURLRef bundleURL=NULL; OSStatus err = noErr; /* Check at least a pointer is provided */ if(!bundle) return noErr; *bundle = NULL; /* Get the bundle URL */ bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, frame, kCFURLPOSIXPathStyle, true); if(bundleURL == NULL) { err = coreFoundationUnknownErr; goto end; } /* Get the bundle reference */ *bundle = CFBundleCreate(kCFAllocatorSystemDefault, bundleURL); if(*bundle == NULL) { err = coreFoundationUnknownErr; goto end; } /* Load the bundle */ if(!CFBundleLoadExecutable(*bundle)) { err = coreFoundationUnknownErr; goto end; } end: /* Make some cleaning */ if(err != noErr && *bundle != NULL) { CFRelease(*bundle); *bundle = NULL; } if(bundleURL) CFRelease(bundleURL); return err; } /* Function which display a message error */ void create_error (LPCSTR text, LPCSTR errmsg) { char msg[1024], msg1[1024]; SInt16 out; memcpy (msg + 1, text, msg[0] = STRLEN(text)); memcpy (msg1 + 1, errmsg, msg1[0] = STRLEN(errmsg)); StandardAlert (kAlertStopAlert, (const unsigned char*)msg, (const unsigned char*)msg1, NULL, &out); } /* The initialization entry point of the library */ void _init(void) { OSStatus err; /* Check if it is running on Mac OS X native mode */ isOnMacOSX = IS_MAC_X(); /* Load the bundle or CFM library */ if(isOnMacOSX) { err = load_framework(CFSTR("/Library/Frameworks/iODBC.framework"), &iodbcRef); if(err != noErr) { err = load_framework(CFSTR("/System/Library/Frameworks/iODBC.framework"), &iodbcRef); if(err != noErr) { create_error("Framework loading problem", "The iODBC.framework component cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); return; } } err = load_framework(CFSTR("/Library/Frameworks/iODBCinst.framework"), &iodbcinstRef); if(err != noErr) { err = load_framework(CFSTR("/System/Library/Frameworks/iODBCinst.framework"), &iodbcinstRef); if(err != noErr) { create_error("Framework loading problem", "The iODBCinst.framework component cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); return; } } } else { err = load_library("\piodbc:ODBC$DriverMgr", &iodbcId); if(err != noErr) { create_error("Extension loading problem", "The ODBC Driver Manager PPC extension cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); return; } err = load_library("\piodbc:ODBC$ConfigMgr", &iodbcinstId); if(err != noErr) { create_error("Extension loading problem", "The ODBC Configuration Manager PPC extension cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); return; } } } /* iODBC hook functions */ SQLRETURN SQL_API SQLAllocConnect (SQLHENV EnvironmentHandle, SQLHDBC * ConnectionHandle) { SQLAllocConnectPTR func; if(isOnMacOSX) { func = (SQLAllocConnectPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLAllocConnect")); if(func) return func(EnvironmentHandle, ConnectionHandle); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLAllocConnect", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(EnvironmentHandle, ConnectionHandle); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLAllocEnv (SQLHENV * EnvironmentHandle) { SQLAllocEnvPTR func; if(isOnMacOSX) { func = (SQLAllocEnvPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLAllocEnv")); if(func) return func(EnvironmentHandle); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLAllocEnv", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(EnvironmentHandle); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLAllocHandle (SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE * OutputHandle) { SQLAllocHandlePTR func; if(isOnMacOSX) { func = (SQLAllocHandlePTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLAllocHandle")); if(func) return func(HandleType, InputHandle, OutputHandle); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLAllocHandle", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(HandleType, InputHandle, OutputHandle); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLAllocStmt (SQLHDBC ConnectionHandle, SQLHSTMT * StatementHandle) { SQLAllocStmtPTR func; if(isOnMacOSX) { func = (SQLAllocStmtPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLAllocStmt")); if(func) return func(ConnectionHandle, StatementHandle); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLAllocStmt", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, StatementHandle); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLBindCol (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLINTEGER BufferLength, SQLINTEGER * StrLen_or_Ind) { SQLBindColPTR func; if(isOnMacOSX) { func = (SQLBindColPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLBindCol")); if(func) return func(StatementHandle, ColumnNumber, TargetType, TargetValue, BufferLength, StrLen_or_Ind); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLBindCol", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, ColumnNumber, TargetType, TargetValue, BufferLength, StrLen_or_Ind); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLBindParam (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision, SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue, SQLINTEGER * StrLen_or_Ind) { SQLBindParamPTR func; if(isOnMacOSX) { func = (SQLBindParamPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLBindParam")); if(func) return func(StatementHandle, ParameterNumber, ValueType, ParameterType, LengthPrecision, ParameterScale, ParameterValue, StrLen_or_Ind); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLBindParam", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, ParameterNumber, ValueType, ParameterType, LengthPrecision, ParameterScale, ParameterValue, StrLen_or_Ind); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLBindParameter (SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT fParamType, SQLSMALLINT fCType, SQLSMALLINT fSqlType, SQLUINTEGER cbColDef, SQLSMALLINT ibScale, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue) { SQLBindParameterPTR func; if(isOnMacOSX) { func = (SQLBindParameterPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLBindParameter")); if(func) return func(hstmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale, rgbValue, cbValueMax, pcbValue); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLBindParameter", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale, rgbValue, cbValueMax, pcbValue); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLBrowseConnect (SQLHDBC hdbc, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut) { SQLBrowseConnectPTR func; if(isOnMacOSX) { func = (SQLBrowseConnectPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLBrowseConnect")); if(func) return func(hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLBrowseConnect", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLBrowseConnectW (SQLHDBC hdbc, SQLWCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLWCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut) { SQLBrowseConnectWPTR func; if(isOnMacOSX) { func = (SQLBrowseConnectWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLBrowseConnectW")); if(func) return func(hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLBrowseConnectW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLBrowseConnectA (SQLHDBC hdbc, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut) { SQLBrowseConnectAPTR func; if(isOnMacOSX) { func = (SQLBrowseConnectAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLBrowseConnectA")); if(func) return func(hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLBrowseConnectA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLBulkOperations (SQLHSTMT StatementHandle, SQLSMALLINT Operation) { SQLBulkOperationsPTR func; if(isOnMacOSX) { func = (SQLBulkOperationsPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLBulkOperations")); if(func) return func(StatementHandle, Operation); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLBulkOperations", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, Operation); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLCancel (SQLHSTMT StatementHandle) { SQLCancelPTR func; if(isOnMacOSX) { func = (SQLCancelPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLCancel")); if(func) return func(StatementHandle); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLCancel", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLCloseCursor (SQLHSTMT StatementHandle) { SQLCloseCursorPTR func; if(isOnMacOSX) { func = (SQLCloseCursorPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLCloseCursor")); if(func) return func(StatementHandle); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLCloseCursor", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLColAttribute (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength, SQLPOINTER NumericAttribute) { SQLColAttributePTR func; if(isOnMacOSX) { func = (SQLColAttributePTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLColAttribute")); if(func) return func(StatementHandle, ColumnNumber, FieldIdentifier, CharacterAttribute, BufferLength, StringLength, NumericAttribute); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLColAttribute", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, ColumnNumber, FieldIdentifier, CharacterAttribute, BufferLength, StringLength, NumericAttribute); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLColAttributeW (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength, SQLPOINTER NumericAttribute) { SQLColAttributeWPTR func; if(isOnMacOSX) { func = (SQLColAttributeWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLColAttributeW")); if(func) return func(StatementHandle, ColumnNumber, FieldIdentifier, CharacterAttribute, BufferLength, StringLength, NumericAttribute); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLColAttributeW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, ColumnNumber, FieldIdentifier, CharacterAttribute, BufferLength, StringLength, NumericAttribute); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLColAttributeA (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength, SQLPOINTER NumericAttribute) { SQLColAttributeAPTR func; if(isOnMacOSX) { func = (SQLColAttributeAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLColAttributeA")); if(func) return func(StatementHandle, ColumnNumber, FieldIdentifier, CharacterAttribute, BufferLength, StringLength, NumericAttribute); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLColAttributeA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, ColumnNumber, FieldIdentifier, CharacterAttribute, BufferLength, StringLength, NumericAttribute); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLColAttributes (SQLHSTMT hstmt, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLINTEGER * pfDesc) { SQLColAttributesPTR func; if(isOnMacOSX) { func = (SQLColAttributesPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLColAttributes")); if(func) return func(hstmt, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLColAttributes", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLColAttributesW (SQLHSTMT hstmt, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLINTEGER * pfDesc) { SQLColAttributesWPTR func; if(isOnMacOSX) { func = (SQLColAttributesWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLColAttributesW")); if(func) return func(hstmt, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLColAttributesW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLColAttributesA (SQLHSTMT hstmt, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLINTEGER * pfDesc) { SQLColAttributesAPTR func; if(isOnMacOSX) { func = (SQLColAttributesAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLColAttributesA")); if(func) return func(hstmt, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLColAttributesA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLColumnPrivileges (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName) { SQLColumnPrivilegesPTR func; if(isOnMacOSX) { func = (SQLColumnPrivilegesPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLColumnPrivileges")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName, szColumnName, cbColumnName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLColumnPrivileges", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName, szColumnName, cbColumnName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLColumnPrivilegesW (SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName) { SQLColumnPrivilegesWPTR func; if(isOnMacOSX) { func = (SQLColumnPrivilegesWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLColumnPrivilegesW")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName, szColumnName, cbColumnName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLColumnPrivilegesW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName, szColumnName, cbColumnName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLColumnPrivilegesA (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName) { SQLColumnPrivilegesAPTR func; if(isOnMacOSX) { func = (SQLColumnPrivilegesAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLColumnPrivilegesA")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName, szColumnName, cbColumnName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLColumnPrivilegesA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName, szColumnName, cbColumnName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLColumns (SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLCHAR * ColumnName, SQLSMALLINT NameLength4) { SQLColumnsPTR func; if(isOnMacOSX) { func = (SQLColumnsPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLColumns")); if(func) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLColumns", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLColumnsW (SQLHSTMT StatementHandle, SQLWCHAR* CatalogName, SQLSMALLINT NameLength1, SQLWCHAR* SchemaName, SQLSMALLINT NameLength2, SQLWCHAR* TableName, SQLSMALLINT NameLength3, SQLWCHAR* ColumnName, SQLSMALLINT NameLength4) { SQLColumnsWPTR func; if(isOnMacOSX) { func = (SQLColumnsWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLColumnsW")); if(func) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLColumnsW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLColumnsA (SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLCHAR * ColumnName, SQLSMALLINT NameLength4) { SQLColumnsAPTR func; if(isOnMacOSX) { func = (SQLColumnsAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLColumnsA")); if(func) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLColumnsA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLConnect (SQLHDBC ConnectionHandle, SQLCHAR * ServerName, SQLSMALLINT NameLength1, SQLCHAR * UserName, SQLSMALLINT NameLength2, SQLCHAR * Authentication, SQLSMALLINT NameLength3) { SQLConnectPTR func; if(isOnMacOSX) { func = (SQLConnectPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLConnect")); if(func) return func(ConnectionHandle, ServerName, NameLength1, UserName, NameLength2, Authentication, NameLength3); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLConnect", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, ServerName, NameLength1, UserName, NameLength2, Authentication, NameLength3); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLConnectW (SQLHDBC ConnectionHandle, SQLWCHAR * ServerName, SQLSMALLINT NameLength1, SQLWCHAR * UserName, SQLSMALLINT NameLength2, SQLWCHAR * Authentication, SQLSMALLINT NameLength3) { SQLConnectWPTR func; if(isOnMacOSX) { func = (SQLConnectWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLConnectW")); if(func) return func(ConnectionHandle, ServerName, NameLength1, UserName, NameLength2, Authentication, NameLength3); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLConnectW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, ServerName, NameLength1, UserName, NameLength2, Authentication, NameLength3); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLConnectA (SQLHDBC ConnectionHandle, SQLCHAR * ServerName, SQLSMALLINT NameLength1, SQLCHAR * UserName, SQLSMALLINT NameLength2, SQLCHAR * Authentication, SQLSMALLINT NameLength3) { SQLConnectAPTR func; if(isOnMacOSX) { func = (SQLConnectAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLConnectA")); if(func) return func(ConnectionHandle, ServerName, NameLength1, UserName, NameLength2, Authentication, NameLength3); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLConnectA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, ServerName, NameLength1, UserName, NameLength2, Authentication, NameLength3); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLCopyDesc (SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle) { SQLCopyDescPTR func; if(isOnMacOSX) { func = (SQLCopyDescPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLCopyDesc")); if(func) return func(SourceDescHandle, TargetDescHandle); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLCopyDesc", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(SourceDescHandle, TargetDescHandle); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDataSources (SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLCHAR * ServerName, SQLSMALLINT BufferLength1, SQLSMALLINT * NameLength1, SQLCHAR * Description, SQLSMALLINT BufferLength2, SQLSMALLINT * NameLength2) { SQLDataSourcesPTR func; if(isOnMacOSX) { func = (SQLDataSourcesPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDataSources")); if(func) return func(EnvironmentHandle, Direction, ServerName, BufferLength1, NameLength1, Description, BufferLength2, NameLength2); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDataSources", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(EnvironmentHandle, Direction, ServerName, BufferLength1, NameLength1, Description, BufferLength2, NameLength2); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDataSourcesW (SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLWCHAR * ServerName, SQLSMALLINT BufferLength1, SQLSMALLINT * NameLength1, SQLWCHAR * Description, SQLSMALLINT BufferLength2, SQLSMALLINT * NameLength2) { SQLDataSourcesWPTR func; if(isOnMacOSX) { func = (SQLDataSourcesWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDataSourcesW")); if(func) return func(EnvironmentHandle, Direction, ServerName, BufferLength1, NameLength1, Description, BufferLength2, NameLength2); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDataSourcesW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(EnvironmentHandle, Direction, ServerName, BufferLength1, NameLength1, Description, BufferLength2, NameLength2); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDataSourcesA (SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLCHAR * ServerName, SQLSMALLINT BufferLength1, SQLSMALLINT * NameLength1, SQLCHAR * Description, SQLSMALLINT BufferLength2, SQLSMALLINT * NameLength2) { SQLDataSourcesAPTR func; if(isOnMacOSX) { func = (SQLDataSourcesAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDataSourcesA")); if(func) return func(EnvironmentHandle, Direction, ServerName, BufferLength1, NameLength1, Description, BufferLength2, NameLength2); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDataSourcesA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(EnvironmentHandle, Direction, ServerName, BufferLength1, NameLength1, Description, BufferLength2, NameLength2); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDescribeCol (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLCHAR * ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLength, SQLSMALLINT * DataType, SQLUINTEGER * ColumnSize, SQLSMALLINT * DecimalDigits, SQLSMALLINT * Nullable) { SQLDescribeColPTR func; if(isOnMacOSX) { func = (SQLDescribeColPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDescribeCol")); if(func) return func(StatementHandle, ColumnNumber, ColumnName, BufferLength, NameLength, DataType, ColumnSize, DecimalDigits, Nullable); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDescribeCol", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, ColumnNumber, ColumnName, BufferLength, NameLength, DataType, ColumnSize, DecimalDigits, Nullable); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDescribeColW (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLWCHAR* ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLength, SQLSMALLINT * DataType, SQLUINTEGER * ColumnSize, SQLSMALLINT * DecimalDigits, SQLSMALLINT * Nullable) { SQLDescribeColWPTR func; if(isOnMacOSX) { func = (SQLDescribeColWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDescribeColW")); if(func) return func(StatementHandle, ColumnNumber, ColumnName, BufferLength, NameLength, DataType, ColumnSize, DecimalDigits, Nullable); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDescribeColW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, ColumnNumber, ColumnName, BufferLength, NameLength, DataType, ColumnSize, DecimalDigits, Nullable); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDescribeColA (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLCHAR* ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLength, SQLSMALLINT * DataType, SQLUINTEGER * ColumnSize, SQLSMALLINT * DecimalDigits, SQLSMALLINT * Nullable) { SQLDescribeColAPTR func; if(isOnMacOSX) { func = (SQLDescribeColAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDescribeColA")); if(func) return func(StatementHandle, ColumnNumber, ColumnName, BufferLength, NameLength, DataType, ColumnSize, DecimalDigits, Nullable); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDescribeColA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, ColumnNumber, ColumnName, BufferLength, NameLength, DataType, ColumnSize, DecimalDigits, Nullable); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDescribeParam (SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT * pfSqlType, SQLUINTEGER * pcbParamDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable) { SQLDescribeParamPTR func; if(isOnMacOSX) { func = (SQLDescribeParamPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDescribeParam")); if(func) return func(hstmt, ipar, pfSqlType, pcbParamDef, pibScale, pfNullable); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDescribeParam", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, ipar, pfSqlType, pcbParamDef, pibScale, pfNullable); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDisconnect (SQLHDBC ConnectionHandle) { SQLDisconnectPTR func; if(isOnMacOSX) { func = (SQLDisconnectPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDisconnect")); if(func) return func(ConnectionHandle); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDisconnect", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDriverConnect (SQLHDBC hdbc, SQLHWND hwnd, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion) { SQLDriverConnectPTR func; if(isOnMacOSX) { func = (SQLDriverConnectPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDriverConnect")); if(func) return func(hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDriverConnect", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDriverConnectW (SQLHDBC hdbc, SQLHWND hwnd, SQLWCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLWCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion) { SQLDriverConnectWPTR func; if(isOnMacOSX) { func = (SQLDriverConnectWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDriverConnectW")); if(func) return func(hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDriverConnectW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDriverConnectA (SQLHDBC hdbc, SQLHWND hwnd, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion) { SQLDriverConnectAPTR func; if(isOnMacOSX) { func = (SQLDriverConnectAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDriverConnectA")); if(func) return func(hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDriverConnectA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDrivers (SQLHENV henv, SQLUSMALLINT fDirection, SQLCHAR * szDriverDesc, SQLSMALLINT cbDriverDescMax, SQLSMALLINT * pcbDriverDesc, SQLCHAR * szDriverAttributes, SQLSMALLINT cbDrvrAttrMax, SQLSMALLINT * pcbDrvrAttr) { SQLDriversPTR func; if(isOnMacOSX) { func = (SQLDriversPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDrivers")); if(func) return func(henv, fDirection, szDriverDesc, cbDriverDescMax, pcbDriverDesc, szDriverAttributes, cbDrvrAttrMax, pcbDrvrAttr); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDrivers", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(henv, fDirection, szDriverDesc, cbDriverDescMax, pcbDriverDesc, szDriverAttributes, cbDrvrAttrMax, pcbDrvrAttr); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDriversW (SQLHENV henv, SQLUSMALLINT fDirection, SQLWCHAR * szDriverDesc, SQLSMALLINT cbDriverDescMax, SQLSMALLINT * pcbDriverDesc, SQLWCHAR * szDriverAttributes, SQLSMALLINT cbDrvrAttrMax, SQLSMALLINT * pcbDrvrAttr) { SQLDriversWPTR func; if(isOnMacOSX) { func = (SQLDriversWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDriversW")); if(func) return func(henv, fDirection, szDriverDesc, cbDriverDescMax, pcbDriverDesc, szDriverAttributes, cbDrvrAttrMax, pcbDrvrAttr); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDriversW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(henv, fDirection, szDriverDesc, cbDriverDescMax, pcbDriverDesc, szDriverAttributes, cbDrvrAttrMax, pcbDrvrAttr); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLDriversA (SQLHENV henv, SQLUSMALLINT fDirection, SQLCHAR * szDriverDesc, SQLSMALLINT cbDriverDescMax, SQLSMALLINT * pcbDriverDesc, SQLCHAR * szDriverAttributes, SQLSMALLINT cbDrvrAttrMax, SQLSMALLINT * pcbDrvrAttr) { SQLDriversAPTR func; if(isOnMacOSX) { func = (SQLDriversAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLDriversA")); if(func) return func(henv, fDirection, szDriverDesc, cbDriverDescMax, pcbDriverDesc, szDriverAttributes, cbDrvrAttrMax, pcbDrvrAttr); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLDriversA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(henv, fDirection, szDriverDesc, cbDriverDescMax, pcbDriverDesc, szDriverAttributes, cbDrvrAttrMax, pcbDrvrAttr); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLEndTran (SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType) { SQLEndTranPTR func; if(isOnMacOSX) { func = (SQLEndTranPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLEndTran")); if(func) return func(HandleType, Handle, CompletionType); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLEndTran", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(HandleType, Handle, CompletionType); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLError (SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle, SQLCHAR * Sqlstate, SQLINTEGER * NativeError, SQLCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLength) { SQLErrorPTR func; if(isOnMacOSX) { func = (SQLErrorPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLError")); if(func) return func(EnvironmentHandle, ConnectionHandle, StatementHandle, Sqlstate, NativeError, MessageText, BufferLength, TextLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLError", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(EnvironmentHandle, ConnectionHandle, StatementHandle, Sqlstate, NativeError, MessageText, BufferLength, TextLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLErrorW (SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle, SQLWCHAR * Sqlstate, SQLINTEGER * NativeError, SQLWCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLength) { SQLErrorWPTR func; if(isOnMacOSX) { func = (SQLErrorWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLErrorW")); if(func) return func(EnvironmentHandle, ConnectionHandle, StatementHandle, Sqlstate, NativeError, MessageText, BufferLength, TextLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLErrorW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(EnvironmentHandle, ConnectionHandle, StatementHandle, Sqlstate, NativeError, MessageText, BufferLength, TextLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLErrorA (SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle, SQLCHAR * Sqlstate, SQLINTEGER * NativeError, SQLCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLength) { SQLErrorAPTR func; if(isOnMacOSX) { func = (SQLErrorAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLErrorA")); if(func) return func(EnvironmentHandle, ConnectionHandle, StatementHandle, Sqlstate, NativeError, MessageText, BufferLength, TextLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLErrorA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(EnvironmentHandle, ConnectionHandle, StatementHandle, Sqlstate, NativeError, MessageText, BufferLength, TextLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLExecDirect (SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength) { SQLExecDirectPTR func; if(isOnMacOSX) { func = (SQLExecDirectPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLExecDirect")); if(func) return func(StatementHandle, StatementText, TextLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLExecDirect", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, StatementText, TextLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLExecDirectW (SQLHSTMT StatementHandle, SQLWCHAR * StatementText, SQLINTEGER TextLength) { SQLExecDirectWPTR func; if(isOnMacOSX) { func = (SQLExecDirectWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLExecDirectW")); if(func) return func(StatementHandle, StatementText, TextLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLExecDirectW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, StatementText, TextLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLExecDirectA (SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength) { SQLExecDirectAPTR func; if(isOnMacOSX) { func = (SQLExecDirectAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLExecDirectA")); if(func) return func(StatementHandle, StatementText, TextLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLExecDirectA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, StatementText, TextLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLExecute (SQLHSTMT StatementHandle) { SQLExecutePTR func; if(isOnMacOSX) { func = (SQLExecutePTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLExecute")); if(func) return func(StatementHandle); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLExecute", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLExtendedFetch (SQLHSTMT hstmt, SQLUSMALLINT fFetchType, SQLINTEGER irow, SQLUINTEGER * pcrow, SQLUSMALLINT * rgfRowStatus) { SQLExtendedFetchPTR func; if(isOnMacOSX) { func = (SQLExtendedFetchPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLExtendedFetch")); if(func) return func(hstmt, fFetchType, irow, pcrow, rgfRowStatus); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLExtendedFetch", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, fFetchType, irow, pcrow, rgfRowStatus); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLFetch (SQLHSTMT StatementHandle) { SQLFetchPTR func; if(isOnMacOSX) { func = (SQLFetchPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLFetch")); if(func) return func(StatementHandle); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLFetch", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLFetchScroll (SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLINTEGER FetchOffset) { SQLFetchScrollPTR func; if(isOnMacOSX) { func = (SQLFetchScrollPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLFetchScroll")); if(func) return func(StatementHandle, FetchOrientation, FetchOffset); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLFetchScroll", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, FetchOrientation, FetchOffset); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLForeignKeys (SQLHSTMT hstmt, SQLCHAR * szPkCatalogName, SQLSMALLINT cbPkCatalogName, SQLCHAR * szPkSchemaName, SQLSMALLINT cbPkSchemaName, SQLCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLCHAR * szFkCatalogName, SQLSMALLINT cbFkCatalogName, SQLCHAR * szFkSchemaName, SQLSMALLINT cbFkSchemaName, SQLCHAR * szFkTableName, SQLSMALLINT cbFkTableName) { SQLForeignKeysPTR func; if(isOnMacOSX) { func = (SQLForeignKeysPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLForeignKeys")); if(func) return func(hstmt, szPkCatalogName, cbPkCatalogName, szPkSchemaName, cbPkSchemaName, szPkTableName, cbPkTableName, szFkCatalogName, cbFkCatalogName, szFkSchemaName, cbFkSchemaName, szFkTableName, cbFkTableName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLForeignKeys", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szPkCatalogName, cbPkCatalogName, szPkSchemaName, cbPkSchemaName, szPkTableName, cbPkTableName, szFkCatalogName, cbFkCatalogName, szFkSchemaName, cbFkSchemaName, szFkTableName, cbFkTableName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLForeignKeysA (SQLHSTMT hstmt, SQLCHAR * szPkCatalogName, SQLSMALLINT cbPkCatalogName, SQLCHAR * szPkSchemaName, SQLSMALLINT cbPkSchemaName, SQLCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLCHAR * szFkCatalogName, SQLSMALLINT cbFkCatalogName, SQLCHAR * szFkSchemaName, SQLSMALLINT cbFkSchemaName, SQLCHAR * szFkTableName, SQLSMALLINT cbFkTableName) { SQLForeignKeysAPTR func; if(isOnMacOSX) { func = (SQLForeignKeysAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLForeignKeysA")); if(func) return func(hstmt, szPkCatalogName, cbPkCatalogName, szPkSchemaName, cbPkSchemaName, szPkTableName, cbPkTableName, szFkCatalogName, cbFkCatalogName, szFkSchemaName, cbFkSchemaName, szFkTableName, cbFkTableName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLForeignKeysA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szPkCatalogName, cbPkCatalogName, szPkSchemaName, cbPkSchemaName, szPkTableName, cbPkTableName, szFkCatalogName, cbFkCatalogName, szFkSchemaName, cbFkSchemaName, szFkTableName, cbFkTableName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLForeignKeysW (SQLHSTMT hstmt, SQLWCHAR * szPkCatalogName, SQLSMALLINT cbPkCatalogName, SQLWCHAR * szPkSchemaName, SQLSMALLINT cbPkSchemaName, SQLWCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLWCHAR * szFkCatalogName, SQLSMALLINT cbFkCatalogName, SQLWCHAR * szFkSchemaName, SQLSMALLINT cbFkSchemaName, SQLWCHAR * szFkTableName, SQLSMALLINT cbFkTableName) { SQLForeignKeysWPTR func; if(isOnMacOSX) { func = (SQLForeignKeysWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLForeignKeysW")); if(func) return func(hstmt, szPkCatalogName, cbPkCatalogName, szPkSchemaName, cbPkSchemaName, szPkTableName, cbPkTableName, szFkCatalogName, cbFkCatalogName, szFkSchemaName, cbFkSchemaName, szFkTableName, cbFkTableName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLForeignKeysW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szPkCatalogName, cbPkCatalogName, szPkSchemaName, cbPkSchemaName, szPkTableName, cbPkTableName, szFkCatalogName, cbFkCatalogName, szFkSchemaName, cbFkSchemaName, szFkTableName, cbFkTableName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLFreeConnect (SQLHDBC ConnectionHandle) { SQLFreeConnectPTR func; if(isOnMacOSX) { func = (SQLFreeConnectPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLFreeConnect")); if(func) return func(ConnectionHandle); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLFreeConnect", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLFreeEnv (SQLHENV EnvironmentHandle) { SQLFreeEnvPTR func; if(isOnMacOSX) { func = (SQLFreeEnvPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLFreeEnv")); if(func) return func(EnvironmentHandle); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLFreeEnv", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(EnvironmentHandle); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLFreeHandle (SQLSMALLINT HandleType, SQLHANDLE Handle) { SQLFreeHandlePTR func; if(isOnMacOSX) { func = (SQLFreeHandlePTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLFreeHandle")); if(func) return func(HandleType, Handle); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLFreeHandle", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(HandleType, Handle); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLFreeStmt (SQLHSTMT StatementHandle, SQLUSMALLINT Option) { SQLFreeStmtPTR func; if(isOnMacOSX) { func = (SQLFreeStmtPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLFreeStmt")); if(func) return func(StatementHandle, Option); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLFreeStmt", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, Option); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetConnectAttr (SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength) { SQLGetConnectAttrPTR func; if(isOnMacOSX) { func = (SQLGetConnectAttrPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetConnectAttr")); if(func) return func(ConnectionHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetConnectAttr", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetConnectAttrW (SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength) { SQLGetConnectAttrWPTR func; if(isOnMacOSX) { func = (SQLGetConnectAttrWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetConnectAttrW")); if(func) return func(ConnectionHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetConnectAttrW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetConnectAttrA (SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength) { SQLGetConnectAttrAPTR func; if(isOnMacOSX) { func = (SQLGetConnectAttrAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetConnectAttrA")); if(func) return func(ConnectionHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetConnectAttrA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetConnectOption (SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value) { SQLGetConnectOptionPTR func; if(isOnMacOSX) { func = (SQLGetConnectOptionPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetConnectOption")); if(func) return func(ConnectionHandle, Option, Value); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetConnectOption", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, Option, Value); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetConnectOptionW (SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value) { SQLGetConnectOptionWPTR func; if(isOnMacOSX) { func = (SQLGetConnectOptionWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetConnectOptionW")); if(func) return func(ConnectionHandle, Option, Value); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetConnectOptionW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, Option, Value); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetConnectOptionA (SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value) { SQLGetConnectOptionAPTR func; if(isOnMacOSX) { func = (SQLGetConnectOptionAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetConnectOptionA")); if(func) return func(ConnectionHandle, Option, Value); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetConnectOptionA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, Option, Value); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetCursorName (SQLHSTMT StatementHandle, SQLCHAR * CursorName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLength) { SQLGetCursorNamePTR func; if(isOnMacOSX) { func = (SQLGetCursorNamePTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetCursorName")); if(func) return func(StatementHandle, CursorName, BufferLength, NameLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetCursorName", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CursorName, BufferLength, NameLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetCursorNameW (SQLHSTMT StatementHandle, SQLWCHAR * CursorName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLength) { SQLGetCursorNameWPTR func; if(isOnMacOSX) { func = (SQLGetCursorNameWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetCursorNameW")); if(func) return func(StatementHandle, CursorName, BufferLength, NameLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetCursorNameW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CursorName, BufferLength, NameLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetCursorNameA (SQLHSTMT StatementHandle, SQLCHAR * CursorName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLength) { SQLGetCursorNameAPTR func; if(isOnMacOSX) { func = (SQLGetCursorNameAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetCursorNameA")); if(func) return func(StatementHandle, CursorName, BufferLength, NameLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetCursorNameA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CursorName, BufferLength, NameLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetData (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLINTEGER BufferLength, SQLINTEGER * StrLen_or_Ind) { SQLGetDataPTR func; if(isOnMacOSX) { func = (SQLGetDataPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetData")); if(func) return func(StatementHandle, ColumnNumber, TargetType, TargetValue, BufferLength, StrLen_or_Ind); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetData", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, ColumnNumber, TargetType, TargetValue, BufferLength, StrLen_or_Ind); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetDescField (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength) { SQLGetDescFieldPTR func; if(isOnMacOSX) { func = (SQLGetDescFieldPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetDescField")); if(func) return func(DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetDescField", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetDescFieldW (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength) { SQLGetDescFieldWPTR func; if(isOnMacOSX) { func = (SQLGetDescFieldWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetDescFieldW")); if(func) return func(DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetDescFieldW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetDescFieldA (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength) { SQLGetDescFieldAPTR func; if(isOnMacOSX) { func = (SQLGetDescFieldAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetDescFieldA")); if(func) return func(DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetDescFieldA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetDescRec (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLCHAR * Name, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength, SQLSMALLINT * Type, SQLSMALLINT * SubType, SQLINTEGER * Length, SQLSMALLINT * Precision, SQLSMALLINT * Scale, SQLSMALLINT * Nullable) { SQLGetDescRecPTR func; if(isOnMacOSX) { func = (SQLGetDescRecPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetDescRec")); if(func) return func(DescriptorHandle, RecNumber, Name, BufferLength, StringLength, Type, SubType, Length, Precision, Scale, Nullable); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetDescRec", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(DescriptorHandle, RecNumber, Name, BufferLength, StringLength, Type, SubType, Length, Precision, Scale, Nullable); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetDescRecW (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLWCHAR * Name, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength, SQLSMALLINT * Type, SQLSMALLINT * SubType, SQLINTEGER * Length, SQLSMALLINT * Precision, SQLSMALLINT * Scale, SQLSMALLINT * Nullable) { SQLGetDescRecWPTR func; if(isOnMacOSX) { func = (SQLGetDescRecWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetDescRecW")); if(func) return func(DescriptorHandle, RecNumber, Name, BufferLength, StringLength, Type, SubType, Length, Precision, Scale, Nullable); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetDescRecW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(DescriptorHandle, RecNumber, Name, BufferLength, StringLength, Type, SubType, Length, Precision, Scale, Nullable); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetDescRecA (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLCHAR * Name, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength, SQLSMALLINT * Type, SQLSMALLINT * SubType, SQLINTEGER * Length, SQLSMALLINT * Precision, SQLSMALLINT * Scale, SQLSMALLINT * Nullable) { SQLGetDescRecPTR func; if(isOnMacOSX) { func = (SQLGetDescRecAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetDescRecA")); if(func) return func(DescriptorHandle, RecNumber, Name, BufferLength, StringLength, Type, SubType, Length, Precision, Scale, Nullable); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetDescRecA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(DescriptorHandle, RecNumber, Name, BufferLength, StringLength, Type, SubType, Length, Precision, Scale, Nullable); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetDiagField (SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER DiagInfo, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength) { SQLGetDiagFieldPTR func; if(isOnMacOSX) { func = (SQLGetDiagFieldPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetDiagField")); if(func) return func(HandleType, Handle, RecNumber, DiagIdentifier, DiagInfo, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetDiagField", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(HandleType, Handle, RecNumber, DiagIdentifier, DiagInfo, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetDiagFieldW (SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER DiagInfo, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength) { SQLGetDiagFieldWPTR func; if(isOnMacOSX) { func = (SQLGetDiagFieldWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetDiagFieldW")); if(func) return func(HandleType, Handle, RecNumber, DiagIdentifier, DiagInfo, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetDiagFieldW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(HandleType, Handle, RecNumber, DiagIdentifier, DiagInfo, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetDiagFieldA (SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER DiagInfo, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength) { SQLGetDiagFieldAPTR func; if(isOnMacOSX) { func = (SQLGetDiagFieldAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetDiagFieldA")); if(func) return func(HandleType, Handle, RecNumber, DiagIdentifier, DiagInfo, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetDiagFieldA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(HandleType, Handle, RecNumber, DiagIdentifier, DiagInfo, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetDiagRec (SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLCHAR * Sqlstate, SQLINTEGER * NativeError, SQLCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLength) { SQLGetDiagRecPTR func; if(isOnMacOSX) { func = (SQLGetDiagRecPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetDiagRec")); if(func) return func(HandleType, Handle, RecNumber, Sqlstate, NativeError, MessageText, BufferLength, TextLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetDiagRec", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(HandleType, Handle, RecNumber, Sqlstate, NativeError, MessageText, BufferLength, TextLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetDiagRecW (SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLWCHAR * Sqlstate, SQLINTEGER * NativeError, SQLWCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLength) { SQLGetDiagRecWPTR func; if(isOnMacOSX) { func = (SQLGetDiagRecWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetDiagRecW")); if(func) return func(HandleType, Handle, RecNumber, Sqlstate, NativeError, MessageText, BufferLength, TextLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetDiagRecW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(HandleType, Handle, RecNumber, Sqlstate, NativeError, MessageText, BufferLength, TextLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetDiagRecA (SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLCHAR * Sqlstate, SQLINTEGER * NativeError, SQLCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLength) { SQLGetDiagRecAPTR func; if(isOnMacOSX) { func = (SQLGetDiagRecAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetDiagRecA")); if(func) return func(HandleType, Handle, RecNumber, Sqlstate, NativeError, MessageText, BufferLength, TextLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetDiagRecA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(HandleType, Handle, RecNumber, Sqlstate, NativeError, MessageText, BufferLength, TextLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetEnvAttr (SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength) { SQLGetEnvAttrPTR func; if(isOnMacOSX) { func = (SQLGetEnvAttrPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetEnvAttr")); if(func) return func(EnvironmentHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetEnvAttr", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(EnvironmentHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetFunctions (SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId, SQLUSMALLINT * Supported) { SQLGetFunctionsPTR func; if(isOnMacOSX) { func = (SQLGetFunctionsPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetFunctions")); if(func) return func(ConnectionHandle, FunctionId, Supported); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetFunctions", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, FunctionId, Supported); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetInfo (SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQLPOINTER InfoValue, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength) { SQLGetInfoPTR func; if(isOnMacOSX) { func = (SQLGetInfoPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetInfo")); if(func) return func(ConnectionHandle, InfoType, InfoValue, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetInfo", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, InfoType, InfoValue, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetInfoW (SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQLPOINTER InfoValue, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength) { SQLGetInfoWPTR func; if(isOnMacOSX) { func = (SQLGetInfoWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetInfoW")); if(func) return func(ConnectionHandle, InfoType, InfoValue, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetInfoW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, InfoType, InfoValue, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetInfoA (SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQLPOINTER InfoValue, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength) { SQLGetInfoAPTR func; if(isOnMacOSX) { func = (SQLGetInfoAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetInfoA")); if(func) return func(ConnectionHandle, InfoType, InfoValue, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetInfoA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, InfoType, InfoValue, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetStmtAttr (SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength) { SQLGetStmtAttrPTR func; if(isOnMacOSX) { func = (SQLGetStmtAttrPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetStmtAttr")); if(func) return func(StatementHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetStmtAttr", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetStmtAttrW (SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength) { SQLGetStmtAttrWPTR func; if(isOnMacOSX) { func = (SQLGetStmtAttrWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetStmtAttrW")); if(func) return func(StatementHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetStmtAttrW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetStmtAttrA (SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength) { SQLGetStmtAttrAPTR func; if(isOnMacOSX) { func = (SQLGetStmtAttrAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetStmtAttrA")); if(func) return func(StatementHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetStmtAttrA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, Attribute, Value, BufferLength, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetStmtOption (SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLPOINTER Value) { SQLGetStmtOptionPTR func; if(isOnMacOSX) { func = (SQLGetStmtOptionPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetStmtOption")); if(func) return func(StatementHandle, Option, Value); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetStmtOption", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, Option, Value); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetTypeInfo (SQLHSTMT StatementHandle, SQLSMALLINT DataType) { SQLGetTypeInfoPTR func; if(isOnMacOSX) { func = (SQLGetTypeInfoPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetTypeInfo")); if(func) return func(StatementHandle, DataType); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetTypeInfo", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, DataType); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetTypeInfoW (SQLHSTMT StatementHandle, SQLSMALLINT DataType) { SQLGetTypeInfoWPTR func; if(isOnMacOSX) { func = (SQLGetTypeInfoWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetTypeInfoW")); if(func) return func(StatementHandle, DataType); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetTypeInfoW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, DataType); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLGetTypeInfoA (SQLHSTMT StatementHandle, SQLSMALLINT DataType) { SQLGetTypeInfoAPTR func; if(isOnMacOSX) { func = (SQLGetTypeInfoAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLGetTypeInfoA")); if(func) return func(StatementHandle, DataType); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLGetTypeInfoA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, DataType); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLMoreResults (SQLHSTMT hstmt) { SQLMoreResultsPTR func; if(isOnMacOSX) { func = (SQLMoreResultsPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLMoreResults")); if(func) return func(hstmt); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLMoreResults", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLNativeSql (SQLHDBC hdbc, SQLCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER * pcbSqlStr) { SQLNativeSqlPTR func; if(isOnMacOSX) { func = (SQLNativeSqlPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLNativeSql")); if(func) return func(hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLNativeSql", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLNativeSqlW (SQLHDBC hdbc, SQLWCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER * pcbSqlStr) { SQLNativeSqlWPTR func; if(isOnMacOSX) { func = (SQLNativeSqlWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLNativeSqlW")); if(func) return func(hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLNativeSqlW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLNativeSqlA (SQLHDBC hdbc, SQLCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER * pcbSqlStr) { SQLNativeSqlAPTR func; if(isOnMacOSX) { func = (SQLNativeSqlAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLNativeSqlA")); if(func) return func(hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLNativeSqlA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLNumParams (SQLHSTMT hstmt, SQLSMALLINT * pcpar) { SQLNumParamsPTR func; if(isOnMacOSX) { func = (SQLNumParamsPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLNumParams")); if(func) return func(hstmt, pcpar); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLNumParams", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, pcpar); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLNumResultCols (SQLHSTMT StatementHandle, SQLSMALLINT * ColumnCount) { SQLNumResultColsPTR func; if(isOnMacOSX) { func = (SQLNumResultColsPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLNumResultCols")); if(func) return func(StatementHandle, ColumnCount); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLNumResultCols", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, ColumnCount); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLParamData (SQLHSTMT StatementHandle, SQLPOINTER * Value) { SQLParamDataPTR func; if(isOnMacOSX) { func = (SQLParamDataPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLParamData")); if(func) return func(StatementHandle, Value); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLParamData", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, Value); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLParamOptions (SQLHSTMT hstmt, SQLUINTEGER crow, SQLUINTEGER * pirow) { SQLParamOptionsPTR func; if(isOnMacOSX) { func = (SQLParamOptionsPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLParamOptions")); if(func) return func(hstmt, crow, pirow); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLParamOptions", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, crow, pirow); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLPrepare (SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength) { SQLPreparePTR func; if(isOnMacOSX) { func = (SQLPreparePTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLPrepare")); if(func) return func(StatementHandle, StatementText, TextLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLPrepare", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, StatementText, TextLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLPrepareW (SQLHSTMT StatementHandle, SQLWCHAR * StatementText, SQLINTEGER TextLength) { SQLPrepareWPTR func; if(isOnMacOSX) { func = (SQLPrepareWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLPrepareW")); if(func) return func(StatementHandle, StatementText, TextLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLPrepareW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, StatementText, TextLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLPrepareA (SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength) { SQLPrepareAPTR func; if(isOnMacOSX) { func = (SQLPrepareAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLPrepareA")); if(func) return func(StatementHandle, StatementText, TextLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLPrepareA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, StatementText, TextLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLPrimaryKeys (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName) { SQLPrimaryKeysPTR func; if(isOnMacOSX) { func = (SQLPrimaryKeysPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLPrimaryKeys")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLPrimaryKeys", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLPrimaryKeysW (SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName) { SQLPrimaryKeysWPTR func; if(isOnMacOSX) { func = (SQLPrimaryKeysWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLPrimaryKeysW")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLPrimaryKeysW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLPrimaryKeysA (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName) { SQLPrimaryKeysAPTR func; if(isOnMacOSX) { func = (SQLPrimaryKeysAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLPrimaryKeysA")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLPrimaryKeysA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLProcedureColumns (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szProcName, SQLSMALLINT cbProcName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName) { SQLProcedureColumnsPTR func; if(isOnMacOSX) { func = (SQLProcedureColumnsPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLProcedureColumns")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szProcName, cbProcName, szColumnName, cbColumnName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLProcedureColumns", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szProcName, cbProcName, szColumnName, cbColumnName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLProcedureColumnsW (SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szProcName, SQLSMALLINT cbProcName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName) { SQLProcedureColumnsWPTR func; if(isOnMacOSX) { func = (SQLProcedureColumnsWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLProcedureColumnsW")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szProcName, cbProcName, szColumnName, cbColumnName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLProcedureColumnsW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szProcName, cbProcName, szColumnName, cbColumnName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLProcedureColumnsA (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szProcName, SQLSMALLINT cbProcName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName) { SQLProcedureColumnsAPTR func; if(isOnMacOSX) { func = (SQLProcedureColumnsAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLProcedureColumnsA")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szProcName, cbProcName, szColumnName, cbColumnName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLProcedureColumnsA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szProcName, cbProcName, szColumnName, cbColumnName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLProcedures (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szProcName, SQLSMALLINT cbProcName) { SQLProceduresPTR func; if(isOnMacOSX) { func = (SQLProceduresPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLProcedures")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szProcName, cbProcName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLProcedures", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szProcName, cbProcName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLProceduresW (SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szProcName, SQLSMALLINT cbProcName) { SQLProceduresWPTR func; if(isOnMacOSX) { func = (SQLProceduresWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLProceduresW")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szProcName, cbProcName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLProceduresW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szProcName, cbProcName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLProceduresA (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szProcName, SQLSMALLINT cbProcName) { SQLProceduresAPTR func; if(isOnMacOSX) { func = (SQLProceduresAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLProceduresA")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szProcName, cbProcName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLProceduresA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szProcName, cbProcName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLPutData (SQLHSTMT StatementHandle, SQLPOINTER Data, SQLINTEGER StrLen_or_Ind) { SQLPutDataPTR func; if(isOnMacOSX) { func = (SQLPutDataPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLPutData")); if(func) return func(StatementHandle, Data, StrLen_or_Ind); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLPutData", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, Data, StrLen_or_Ind); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLRowCount (SQLHSTMT StatementHandle, SQLINTEGER * RowCount) { SQLRowCountPTR func; if(isOnMacOSX) { func = (SQLRowCountPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLRowCount")); if(func) return func(StatementHandle, RowCount); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLRowCount", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, RowCount); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetConnectAttr (SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength) { SQLSetConnectAttrPTR func; if(isOnMacOSX) { func = (SQLSetConnectAttrPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetConnectAttr")); if(func) return func(ConnectionHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetConnectAttr", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetConnectAttrW (SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength) { SQLSetConnectAttrWPTR func; if(isOnMacOSX) { func = (SQLSetConnectAttrWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetConnectAttrW")); if(func) return func(ConnectionHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetConnectAttrW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetConnectAttrA (SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength) { SQLSetConnectAttrAPTR func; if(isOnMacOSX) { func = (SQLSetConnectAttrAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetConnectAttrA")); if(func) return func(ConnectionHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetConnectAttrA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetConnectOption (SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLUINTEGER Value) { SQLSetConnectOptionPTR func; if(isOnMacOSX) { func = (SQLSetConnectOptionPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetConnectOption")); if(func) return func(ConnectionHandle, Option, Value); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetConnectOption", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, Option, Value); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetConnectOptionW (SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLUINTEGER Value) { SQLSetConnectOptionWPTR func; if(isOnMacOSX) { func = (SQLSetConnectOptionWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetConnectOptionW")); if(func) return func(ConnectionHandle, Option, Value); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetConnectOptionW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, Option, Value); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetConnectOptionA (SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLUINTEGER Value) { SQLSetConnectOptionAPTR func; if(isOnMacOSX) { func = (SQLSetConnectOptionAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetConnectOptionA")); if(func) return func(ConnectionHandle, Option, Value); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetConnectOptionA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(ConnectionHandle, Option, Value); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetCursorName (SQLHSTMT StatementHandle, SQLCHAR * CursorName, SQLSMALLINT NameLength) { SQLSetCursorNamePTR func; if(isOnMacOSX) { func = (SQLSetCursorNamePTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetCursorName")); if(func) return func(StatementHandle, CursorName, NameLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetCursorName", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CursorName, NameLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetCursorNameW (SQLHSTMT StatementHandle, SQLWCHAR * CursorName, SQLSMALLINT NameLength) { SQLSetCursorNameWPTR func; if(isOnMacOSX) { func = (SQLSetCursorNameWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetCursorNameW")); if(func) return func(StatementHandle, CursorName, NameLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetCursorNameW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CursorName, NameLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetCursorNameA (SQLHSTMT StatementHandle, SQLCHAR * CursorName, SQLSMALLINT NameLength) { SQLSetCursorNameAPTR func; if(isOnMacOSX) { func = (SQLSetCursorNameAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetCursorNameA")); if(func) return func(StatementHandle, CursorName, NameLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetCursorNameA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CursorName, NameLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetDescField (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength) { SQLSetDescFieldPTR func; if(isOnMacOSX) { func = (SQLSetDescFieldPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetDescField")); if(func) return func(DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetDescField", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetDescFieldW (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength) { SQLSetDescFieldWPTR func; if(isOnMacOSX) { func = (SQLSetDescFieldWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetDescFieldW")); if(func) return func(DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetDescFieldW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetDescFieldA (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength) { SQLSetDescFieldAPTR func; if(isOnMacOSX) { func = (SQLSetDescFieldAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetDescFieldA")); if(func) return func(DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetDescFieldA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(DescriptorHandle, RecNumber, FieldIdentifier, Value, BufferLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetDescRec (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT Type, SQLSMALLINT SubType, SQLINTEGER Length, SQLSMALLINT Precision, SQLSMALLINT Scale, SQLPOINTER Data, SQLINTEGER * StringLength, SQLINTEGER * Indicator) { SQLSetDescRecPTR func; if(isOnMacOSX) { func = (SQLSetDescRecPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetDescRec")); if(func) return func(DescriptorHandle, RecNumber, Type, SubType, Length, Precision, Scale, Data, StringLength, Indicator); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetDescRec", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(DescriptorHandle, RecNumber, Type, SubType, Length, Precision, Scale, Data, StringLength, Indicator); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetEnvAttr (SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength) { SQLSetEnvAttrPTR func; if(isOnMacOSX) { func = (SQLSetEnvAttrPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetEnvAttr")); if(func) return func(EnvironmentHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetEnvAttr", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(EnvironmentHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetParam (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision, SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue, SQLINTEGER * StrLen_or_Ind) { SQLSetParamPTR func; if(isOnMacOSX) { func = (SQLSetParamPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetParam")); if(func) return func(StatementHandle, ParameterNumber, ValueType, ParameterType, LengthPrecision, ParameterScale, ParameterValue, StrLen_or_Ind); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetParam", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, ParameterNumber, ValueType, ParameterType, LengthPrecision, ParameterScale, ParameterValue, StrLen_or_Ind); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetPos (SQLHSTMT hstmt, SQLUSMALLINT irow, SQLUSMALLINT fOption, SQLUSMALLINT fLock) { SQLSetPosPTR func; if(isOnMacOSX) { func = (SQLSetPosPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetPos")); if(func) return func(hstmt, irow, fOption, fLock); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetPos", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, irow, fOption, fLock); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetScrollOptions (SQLHSTMT hstmt, SQLUSMALLINT fConcurrency, SQLINTEGER crowKeyset, SQLUSMALLINT crowRowset) { SQLSetScrollOptionsPTR func; if(isOnMacOSX) { func = (SQLSetScrollOptionsPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetScrollOptions")); if(func) return func(hstmt, fConcurrency, crowKeyset, crowRowset); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetScrollOptions", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, fConcurrency, crowKeyset, crowRowset); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetStmtAttr (SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength) { SQLSetStmtAttrPTR func; if(isOnMacOSX) { func = (SQLSetStmtAttrPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetStmtAttr")); if(func) return func(StatementHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetStmtAttr", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetStmtAttrW (SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength) { SQLSetStmtAttrWPTR func; if(isOnMacOSX) { func = (SQLSetStmtAttrWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetStmtAttrW")); if(func) return func(StatementHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetStmtAttrW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetStmtAttrA (SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength) { SQLSetStmtAttrAPTR func; if(isOnMacOSX) { func = (SQLSetStmtAttrAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetStmtAttrA")); if(func) return func(StatementHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetStmtAttrA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, Attribute, Value, StringLength); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSetStmtOption (SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLUINTEGER Value) { SQLSetStmtOptionPTR func; if(isOnMacOSX) { func = (SQLSetStmtOptionPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSetStmtOption")); if(func) return func(StatementHandle, Option, Value); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSetStmtOption", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, Option, Value); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSpecialColumns (SQLHSTMT StatementHandle, SQLUSMALLINT IdentifierType, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLUSMALLINT Scope, SQLUSMALLINT Nullable) { SQLSpecialColumnsPTR func; if(isOnMacOSX) { func = (SQLSpecialColumnsPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSpecialColumns")); if(func) return func(StatementHandle, IdentifierType, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, Scope, Nullable); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSpecialColumns", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, IdentifierType, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, Scope, Nullable); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSpecialColumnsW (SQLHSTMT StatementHandle, SQLUSMALLINT IdentifierType, SQLWCHAR * CatalogName, SQLSMALLINT NameLength1, SQLWCHAR * SchemaName, SQLSMALLINT NameLength2, SQLWCHAR * TableName, SQLSMALLINT NameLength3, SQLUSMALLINT Scope, SQLUSMALLINT Nullable) { SQLSpecialColumnsWPTR func; if(isOnMacOSX) { func = (SQLSpecialColumnsWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSpecialColumnsW")); if(func) return func(StatementHandle, IdentifierType, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, Scope, Nullable); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSpecialColumnsW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, IdentifierType, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, Scope, Nullable); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLSpecialColumnsA (SQLHSTMT StatementHandle, SQLUSMALLINT IdentifierType, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLUSMALLINT Scope, SQLUSMALLINT Nullable) { SQLSpecialColumnsAPTR func; if(isOnMacOSX) { func = (SQLSpecialColumnsAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLSpecialColumnsA")); if(func) return func(StatementHandle, IdentifierType, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, Scope, Nullable); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLSpecialColumnsA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, IdentifierType, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, Scope, Nullable); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLStatistics (SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLUSMALLINT Unique, SQLUSMALLINT Reserved) { SQLStatisticsPTR func; if(isOnMacOSX) { func = (SQLStatisticsPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLStatistics")); if(func) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, Unique, Reserved); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLStatistics", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, Unique, Reserved); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLStatisticsW (SQLHSTMT StatementHandle, SQLWCHAR * CatalogName, SQLSMALLINT NameLength1, SQLWCHAR * SchemaName, SQLSMALLINT NameLength2, SQLWCHAR * TableName, SQLSMALLINT NameLength3, SQLUSMALLINT Unique, SQLUSMALLINT Reserved) { SQLStatisticsWPTR func; if(isOnMacOSX) { func = (SQLStatisticsWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLStatisticsW")); if(func) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, Unique, Reserved); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLStatisticsW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, Unique, Reserved); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLStatisticsA (SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLUSMALLINT Unique, SQLUSMALLINT Reserved) { SQLStatisticsAPTR func; if(isOnMacOSX) { func = (SQLStatisticsAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLStatisticsA")); if(func) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, Unique, Reserved); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLStatisticsA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, Unique, Reserved); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLTablePrivileges (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName) { SQLTablePrivilegesPTR func; if(isOnMacOSX) { func = (SQLTablePrivilegesPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLTablePrivileges")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLTablePrivileges", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLTablePrivilegesW (SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName) { SQLTablePrivilegesWPTR func; if(isOnMacOSX) { func = (SQLTablePrivilegesWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLTablePrivilegesW")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLTablePrivilegesW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLTablePrivilegesA (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName) { SQLTablePrivilegesAPTR func; if(isOnMacOSX) { func = (SQLTablePrivilegesAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLTablePrivilegesA")); if(func) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLTablePrivilegesA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hstmt, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLTables (SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLCHAR * TableType, SQLSMALLINT NameLength4) { SQLTablesPTR func; if(isOnMacOSX) { func = (SQLTablesPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLTables")); if(func) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLTables", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLTablesW (SQLHSTMT StatementHandle, SQLWCHAR * CatalogName, SQLSMALLINT NameLength1, SQLWCHAR * SchemaName, SQLSMALLINT NameLength2, SQLWCHAR * TableName, SQLSMALLINT NameLength3, SQLWCHAR * TableType, SQLSMALLINT NameLength4) { SQLTablesWPTR func; if(isOnMacOSX) { func = (SQLTablesWPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLTablesW")); if(func) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLTablesW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLTablesA (SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLCHAR * TableType, SQLSMALLINT NameLength4) { SQLTablesAPTR func; if(isOnMacOSX) { func = (SQLTablesAPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLTablesA")); if(func) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLTablesA", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } SQLRETURN SQL_API SQLTransact (SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLUSMALLINT CompletionType) { SQLTransactPTR func; if(isOnMacOSX) { func = (SQLTransactPTR)CFBundleGetFunctionPointerForName(iodbcRef, CFSTR("SQLTransact")); if(func) return func(EnvironmentHandle, ConnectionHandle, CompletionType); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcId, "\pSQLTransact", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(EnvironmentHandle, ConnectionHandle, CompletionType); create_error("Function loading problem", "The ODBC Driver Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } /* iODBCinst bundle prototypes functions */ BOOL INSTAPI SQLConfigDataSource (HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes) { SQLConfigDataSourcePTR func; if(isOnMacOSX) { func = (SQLConfigDataSourcePTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLConfigDataSource")); if(func) return func(hwndParent, fRequest, lpszDriver, lpszAttributes); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLConfigDataSource", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hwndParent, fRequest, lpszDriver, lpszAttributes); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLConfigDataSourceW (HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszAttributes) { SQLConfigDataSourceWPTR func; if(isOnMacOSX) { func = (SQLConfigDataSourceWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLConfigDataSourceW")); if(func) return func(hwndParent, fRequest, lpszDriver, lpszAttributes); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLConfigDataSourceW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hwndParent, fRequest, lpszDriver, lpszAttributes); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLConfigDriver (HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszArgs, LPSTR lpszMsg, WORD cbMsgMax, WORD FAR * pcbMsgOut) { SQLConfigDriverPTR func; if(isOnMacOSX) { func = (SQLConfigDriverPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLConfigDriver")); if(func) return func(hwndParent, fRequest, lpszDriver, lpszArgs, lpszMsg, cbMsgMax, pcbMsgOut); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLConfigDriver", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hwndParent, fRequest, lpszDriver, lpszArgs, lpszMsg, cbMsgMax, pcbMsgOut); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLConfigDriverW (HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszArgs, LPWSTR lpszMsg, WORD cbMsgMax, WORD FAR * pcbMsgOut) { SQLConfigDriverWPTR func; if(isOnMacOSX) { func = (SQLConfigDriverWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLConfigDriverW")); if(func) return func(hwndParent, fRequest, lpszDriver, lpszArgs, lpszMsg, cbMsgMax, pcbMsgOut); create_error("Function loading problem", "The iODBC.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLConfigDriverW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hwndParent, fRequest, lpszDriver, lpszArgs, lpszMsg, cbMsgMax, pcbMsgOut); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLCreateDataSource (HWND hwndParent, LPCSTR lpszDSN) { SQLCreateDataSourcePTR func; if(isOnMacOSX) { func = (SQLCreateDataSourcePTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLCreateDataSource")); if(func) return func(hwndParent, lpszDSN); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLCreateDataSource", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hwndParent, lpszDSN); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLCreateDataSourceW (HWND hwndParent, LPCWSTR lpszDSN) { SQLCreateDataSourceWPTR func; if(isOnMacOSX) { func = (SQLCreateDataSourceWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLCreateDataSourceW")); if(func) return func(hwndParent, lpszDSN); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLCreateDataSourceW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hwndParent, lpszDSN); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLGetConfigMode (UWORD * pwConfigMode) { SQLGetConfigModePTR func; if(isOnMacOSX) { func = (SQLGetConfigModePTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLGetConfigMode")); if(func) return func(pwConfigMode); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLGetConfigMode", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(pwConfigMode); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLGetAvailableDrivers (LPCSTR lpszInfFile, LPSTR lpszBuf, WORD cbBufMax, WORD FAR * pcbBufOut) { SQLGetAvailableDriversPTR func; if(isOnMacOSX) { func = (SQLGetAvailableDriversPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLGetAvailableDrivers")); if(func) return func(lpszInfFile, lpszBuf, cbBufMax, pcbBufOut); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLGetAvailableDrivers", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszInfFile, lpszBuf, cbBufMax, pcbBufOut); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLGetAvailableDriversW (LPCWSTR lpszInfFile, LPWSTR lpszBuf, WORD cbBufMax, WORD FAR * pcbBufOut) { SQLGetAvailableDriversWPTR func; if(isOnMacOSX) { func = (SQLGetAvailableDriversWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLGetAvailableDriversW")); if(func) return func(lpszInfFile, lpszBuf, cbBufMax, pcbBufOut); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLGetAvailableDriversW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszInfFile, lpszBuf, cbBufMax, pcbBufOut); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLGetInstalledDrivers (LPSTR lpszBuf, WORD cbBufMax, WORD FAR * pcbBufOut) { SQLGetInstalledDriversPTR func; if(isOnMacOSX) { func = (SQLGetInstalledDriversPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLGetInstalledDrivers")); if(func) return func(lpszBuf, cbBufMax, pcbBufOut); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLGetInstalledDrivers", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszBuf, cbBufMax, pcbBufOut); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLGetInstalledDriversW (LPWSTR lpszBuf, WORD cbBufMax, WORD FAR * pcbBufOut) { SQLGetInstalledDriversWPTR func; if(isOnMacOSX) { func = (SQLGetInstalledDriversWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLGetInstalledDriversW")); if(func) return func(lpszBuf, cbBufMax, pcbBufOut); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLGetInstalledDriversW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszBuf, cbBufMax, pcbBufOut); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } int INSTAPI SQLGetPrivateProfileString (LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszDefault, LPSTR lpszRetBuffer, int cbRetBuffer, LPCSTR lpszFilename) { SQLGetPrivateProfileStringPTR func; if(isOnMacOSX) { func = (SQLGetPrivateProfileStringPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLGetPrivateProfileString")); if(func) return func(lpszSection, lpszEntry, lpszDefault, lpszRetBuffer, cbRetBuffer, lpszFilename); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLGetPrivateProfileString", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszSection, lpszEntry, lpszDefault, lpszRetBuffer, cbRetBuffer, lpszFilename); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } int INSTAPI SQLGetPrivateProfileStringW (LPCWSTR lpszSection, LPCWSTR lpszEntry, LPCWSTR lpszDefault, LPWSTR lpszRetBuffer, int cbRetBuffer, LPCWSTR lpszFilename) { SQLGetPrivateProfileStringWPTR func; if(isOnMacOSX) { func = (SQLGetPrivateProfileStringWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLGetPrivateProfileStringW")); if(func) return func(lpszSection, lpszEntry, lpszDefault, lpszRetBuffer, cbRetBuffer, lpszFilename); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLGetPrivateProfileStringW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszSection, lpszEntry, lpszDefault, lpszRetBuffer, cbRetBuffer, lpszFilename); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLGetTranslator (HWND hwnd, LPSTR lpszName, WORD cbNameMax, WORD FAR * pcbNameOut, LPSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut, DWORD FAR * pvOption) { SQLGetTranslatorPTR func; if(isOnMacOSX) { func = (SQLGetTranslatorPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLGetTranslator")); if(func) return func(hwnd, lpszName, cbNameMax, pcbNameOut, lpszPath, cbPathMax, pcbPathOut, pvOption); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLGetTranslator", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hwnd, lpszName, cbNameMax, pcbNameOut, lpszPath, cbPathMax, pcbPathOut, pvOption); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLGetTranslatorW (HWND hwnd, LPWSTR lpszName, WORD cbNameMax, WORD FAR * pcbNameOut, LPWSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut, DWORD FAR * pvOption) { SQLGetTranslatorWPTR func; if(isOnMacOSX) { func = (SQLGetTranslatorWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLGetTranslatorW")); if(func) return func(hwnd, lpszName, cbNameMax, pcbNameOut, lpszPath, cbPathMax, pcbPathOut, pvOption); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLGetTranslatorW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hwnd, lpszName, cbNameMax, pcbNameOut, lpszPath, cbPathMax, pcbPathOut, pvOption); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLInstallDriverEx (LPCSTR lpszDriver, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount) { SQLInstallDriverExPTR func; if(isOnMacOSX) { func = (SQLInstallDriverExPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallDriverEx")); if(func) return func(lpszDriver, lpszPathIn, lpszPathOut, cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallDriverEx", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDriver, lpszPathIn, lpszPathOut, cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLInstallDriverExW (LPCWSTR lpszDriver, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount) { SQLInstallDriverExWPTR func; if(isOnMacOSX) { func = (SQLInstallDriverExWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallDriverExW")); if(func) return func(lpszDriver, lpszPathIn, lpszPathOut, cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallDriverExW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDriver, lpszPathIn, lpszPathOut, cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLInstallDriver (LPCSTR lpszInfFile, LPCSTR lpszDriver, LPSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut) { SQLInstallDriverPTR func; if(isOnMacOSX) { func = (SQLInstallDriverPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallDriver")); if(func) return func(lpszInfFile, lpszDriver, lpszPath, cbPathMax, pcbPathOut); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallDriver", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszInfFile, lpszDriver, lpszPath, cbPathMax, pcbPathOut); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLInstallDriverW (LPCWSTR lpszInfFile, LPCWSTR lpszDriver, LPWSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut) { SQLInstallDriverWPTR func; if(isOnMacOSX) { func = (SQLInstallDriverWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallDriverW")); if(func) return func(lpszInfFile, lpszDriver, lpszPath, cbPathMax, pcbPathOut); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallDriverW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszInfFile, lpszDriver, lpszPath, cbPathMax, pcbPathOut); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLInstallDriverManager (LPSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut) { SQLInstallDriverManagerPTR func; if(isOnMacOSX) { func = (SQLInstallDriverManagerPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallDriverManager")); if(func) return func(lpszPath, cbPathMax, pcbPathOut); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallDriverManager", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszPath, cbPathMax, pcbPathOut); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLInstallDriverManagerW (LPWSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut) { SQLInstallDriverManagerWPTR func; if(isOnMacOSX) { func = (SQLInstallDriverManagerWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallDriverManagerW")); if(func) return func(lpszPath, cbPathMax, pcbPathOut); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallDriverManagerW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszPath, cbPathMax, pcbPathOut); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } RETCODE INSTAPI SQLInstallerError (WORD iError, DWORD * pfErrorCode, LPSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD * pcbErrorMsg) { SQLInstallerErrorPTR func; if(isOnMacOSX) { func = (SQLInstallerErrorPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallerError")); if(func) return func(iError, pfErrorCode, lpszErrorMsg, cbErrorMsgMax, pcbErrorMsg); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallerError", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(iError, pfErrorCode, lpszErrorMsg, cbErrorMsgMax, pcbErrorMsg); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } RETCODE INSTAPI SQLInstallerErrorW (WORD iError, DWORD * pfErrorCode, LPWSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD * pcbErrorMsg) { SQLInstallerErrorWPTR func; if(isOnMacOSX) { func = (SQLInstallerErrorWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallerErrorW")); if(func) return func(iError, pfErrorCode, lpszErrorMsg, cbErrorMsgMax, pcbErrorMsg); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallerErrorW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(iError, pfErrorCode, lpszErrorMsg, cbErrorMsgMax, pcbErrorMsg); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLInstallODBC (HWND hwndParent, LPCSTR lpszInfFile, LPCSTR lpszSrcPath, LPCSTR lpszDrivers) { SQLInstallODBCPTR func; if(isOnMacOSX) { func = (SQLInstallODBCPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallODBC")); if(func) return func(hwndParent, lpszInfFile, lpszSrcPath, lpszDrivers); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallODBC", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hwndParent, lpszInfFile, lpszSrcPath, lpszDrivers); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLInstallODBCW (HWND hwndParent, LPCWSTR lpszInfFile, LPCWSTR lpszSrcPath, LPCWSTR lpszDrivers) { SQLInstallODBCWPTR func; if(isOnMacOSX) { func = (SQLInstallODBCWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallODBCW")); if(func) return func(hwndParent, lpszInfFile, lpszSrcPath, lpszDrivers); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallODBCW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hwndParent, lpszInfFile, lpszSrcPath, lpszDrivers); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLInstallTranslator (LPCSTR lpszInfFile, LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD FAR * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount) { SQLInstallTranslatorPTR func; if(isOnMacOSX) { func = (SQLInstallTranslatorPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallTranslator")); if(func) return func(lpszInfFile, lpszTranslator, lpszPathIn, lpszPathOut, cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallTranslator", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszInfFile, lpszTranslator, lpszPathIn, lpszPathOut, cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLInstallTranslatorW (LPCWSTR lpszInfFile, LPCWSTR lpszTranslator, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD FAR * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount) { SQLInstallTranslatorWPTR func; if(isOnMacOSX) { func = (SQLInstallTranslatorWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallTranslatorW")); if(func) return func(lpszInfFile, lpszTranslator, lpszPathIn, lpszPathOut, cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallTranslatorW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszInfFile, lpszTranslator, lpszPathIn, lpszPathOut, cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLInstallTranslatorEx (LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount) { SQLInstallTranslatorExPTR func; if(isOnMacOSX) { func = (SQLInstallTranslatorExPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallTranslatorEx")); if(func) return func(lpszTranslator, lpszPathIn, lpszPathOut, cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallTranslatorEx", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszTranslator, lpszPathIn, lpszPathOut, cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLInstallTranslatorExW (LPCWSTR lpszTranslator, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount) { SQLInstallTranslatorExWPTR func; if(isOnMacOSX) { func = (SQLInstallTranslatorExWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLInstallTranslatorExW")); if(func) return func(lpszTranslator, lpszPathIn, lpszPathOut, cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLInstallTranslatorExW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszTranslator, lpszPathIn, lpszPathOut, cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLManageDataSources (HWND hwndParent) { SQLManageDataSourcesPTR func; if(isOnMacOSX) { func = (SQLManageDataSourcesPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLManageDataSources")); if(func) return func(hwndParent); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLManageDataSources", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(hwndParent); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } RETCODE INSTAPI SQLPostInstallerError (DWORD fErrorCode, LPSTR szErrorMsg) { SQLPostInstallerErrorPTR func; if(isOnMacOSX) { func = (SQLPostInstallerErrorPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLPostInstallerError")); if(func) return func(fErrorCode, szErrorMsg); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLPostInstallerError", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(fErrorCode, szErrorMsg); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } RETCODE INSTAPI SQLPostInstallerErrorW (DWORD fErrorCode, LPWSTR szErrorMsg) { SQLPostInstallerErrorWPTR func; if(isOnMacOSX) { func = (SQLPostInstallerErrorWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLPostInstallerErrorW")); if(func) return func(fErrorCode, szErrorMsg); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLPostInstallerErrorW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(fErrorCode, szErrorMsg); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLReadFileDSN (LPCSTR lpszFileName, LPCSTR lpszAppName, LPCSTR lpszKeyName, LPSTR lpszString, WORD cbString, WORD * pcbString) { SQLReadFileDSNPTR func; if(isOnMacOSX) { func = (SQLReadFileDSNPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLReadFileDSN")); if(func) return func(lpszFileName, lpszAppName, lpszKeyName, lpszString, cbString, pcbString); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLReadFileDSN", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszFileName, lpszAppName, lpszKeyName, lpszString, cbString, pcbString); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLReadFileDSNW (LPCWSTR lpszFileName, LPCWSTR lpszAppName, LPCWSTR lpszKeyName, LPWSTR lpszString, WORD cbString, WORD * pcbString) { SQLReadFileDSNWPTR func; if(isOnMacOSX) { func = (SQLReadFileDSNWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLReadFileDSNW")); if(func) return func(lpszFileName, lpszAppName, lpszKeyName, lpszString, cbString, pcbString); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLReadFileDSNW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszFileName, lpszAppName, lpszKeyName, lpszString, cbString, pcbString); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLRemoveDSNFromIni (LPCSTR lpszDSN) { SQLRemoveDSNFromIniPTR func; if(isOnMacOSX) { func = (SQLRemoveDSNFromIniPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLRemoveDSNFromIni")); if(func) return func(lpszDSN); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLRemoveDSNFromIni", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDSN); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLRemoveDSNFromIniW (LPCWSTR lpszDSN) { SQLRemoveDSNFromIniWPTR func; if(isOnMacOSX) { func = (SQLRemoveDSNFromIniWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLRemoveDSNFromIniW")); if(func) return func(lpszDSN); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLRemoveDSNFromIniW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDSN); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLRemoveDefaultDataSource (void) { SQLRemoveDefaultDataSourcePTR func; if(isOnMacOSX) { func = (SQLRemoveDefaultDataSourcePTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLRemoveDefaultDataSource")); if(func) return func(); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLRemoveDefaultDataSource", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLRemoveDriver (LPCSTR lpszDriver, BOOL fRemoveDSN, LPDWORD lpdwUsageCount) { SQLRemoveDriverPTR func; if(isOnMacOSX) { func = (SQLRemoveDriverPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLRemoveDriver")); if(func) return func(lpszDriver, fRemoveDSN, lpdwUsageCount); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLRemoveDriver", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDriver, fRemoveDSN, lpdwUsageCount); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLRemoveDriverW (LPCWSTR lpszDriver, BOOL fRemoveDSN, LPDWORD lpdwUsageCount) { SQLRemoveDriverWPTR func; if(isOnMacOSX) { func = (SQLRemoveDriverWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLRemoveDriverW")); if(func) return func(lpszDriver, fRemoveDSN, lpdwUsageCount); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLRemoveDriverW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDriver, fRemoveDSN, lpdwUsageCount); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLRemoveDriverManager (LPDWORD lpdwUsageCount) { SQLRemoveDriverManagerPTR func; if(isOnMacOSX) { func = (SQLRemoveDriverManagerPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLRemoveDriverManager")); if(func) return func(lpdwUsageCount); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLRemoveDriverManager", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpdwUsageCount); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLRemoveTranslator (LPCSTR lpszTranslator, LPDWORD lpdwUsageCount) { SQLRemoveTranslatorPTR func; if(isOnMacOSX) { func = (SQLRemoveTranslatorPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLRemoveTranslator")); if(func) return func(lpszTranslator, lpdwUsageCount); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLRemoveTranslator", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszTranslator, lpdwUsageCount); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLRemoveTranslatorW (LPCWSTR lpszTranslator, LPDWORD lpdwUsageCount) { SQLRemoveTranslatorWPTR func; if(isOnMacOSX) { func = (SQLRemoveTranslatorWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLRemoveTranslatorW")); if(func) return func(lpszTranslator, lpdwUsageCount); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLRemoveTranslatorW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszTranslator, lpdwUsageCount); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLSetConfigMode (UWORD wConfigMode) { SQLSetConfigModePTR func; if(isOnMacOSX) { func = (SQLSetConfigModePTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLSetConfigMode")); if(func) return func(wConfigMode); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLSetConfigMode", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(wConfigMode); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLValidDSN (LPCSTR lpszDSN) { SQLValidDSNPTR func; if(isOnMacOSX) { func = (SQLValidDSNPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLValidDSN")); if(func) return func(lpszDSN); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLValidDSN", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDSN); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLValidDSNW (LPCWSTR lpszDSN) { SQLValidDSNWPTR func; if(isOnMacOSX) { func = (SQLValidDSNWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLValidDSNW")); if(func) return func(lpszDSN); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLValidDSNW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDSN); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLWriteDSNToIni (LPCSTR lpszDSN, LPCSTR lpszDriver) { SQLWriteDSNToIniPTR func; if(isOnMacOSX) { func = (SQLWriteDSNToIniPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLWriteDSNToIni")); if(func) return func(lpszDSN, lpszDriver); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLWriteDSNToIni", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDSN, lpszDriver); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLWriteDSNToIniW (LPCWSTR lpszDSN, LPCWSTR lpszDriver) { SQLWriteDSNToIniWPTR func; if(isOnMacOSX) { func = (SQLWriteDSNToIniWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLWriteDSNToIniW")); if(func) return func(lpszDSN, lpszDriver); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLWriteDSNToIniW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDSN, lpszDriver); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLWriteFileDSN (LPCSTR lpszFileName, LPCSTR lpszAppName, LPCSTR lpszKeyName, LPSTR lpszString) { SQLWriteFileDSNPTR func; if(isOnMacOSX) { func = (SQLWriteFileDSNPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLWriteFileDSN")); if(func) return func(lpszFileName, lpszAppName, lpszKeyName, lpszString); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLWriteFileDSN", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszFileName, lpszAppName, lpszKeyName, lpszString); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLWriteFileDSNW (LPCWSTR lpszFileName, LPCWSTR lpszAppName, LPCWSTR lpszKeyName, LPWSTR lpszString) { SQLWriteFileDSNWPTR func; if(isOnMacOSX) { func = (SQLWriteFileDSNWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLWriteFileDSNW")); if(func) return func(lpszFileName, lpszAppName, lpszKeyName, lpszString); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLWriteFileDSNW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszFileName, lpszAppName, lpszKeyName, lpszString); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLWritePrivateProfileString (LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszString, LPCSTR lpszFilename) { SQLWritePrivateProfileStringPTR func; if(isOnMacOSX) { func = (SQLWritePrivateProfileStringPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLWritePrivateProfileString")); if(func) return func(lpszSection, lpszEntry, lpszString, lpszFilename); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLWritePrivateProfileString", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszSection, lpszEntry, lpszString, lpszFilename); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLWritePrivateProfileStringW (LPCWSTR lpszSection, LPCWSTR lpszEntry, LPCWSTR lpszString, LPCWSTR lpszFilename) { SQLWritePrivateProfileStringWPTR func; if(isOnMacOSX) { func = (SQLWritePrivateProfileStringWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLWritePrivateProfileStringW")); if(func) return func(lpszSection, lpszEntry, lpszString, lpszFilename); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLWritePrivateProfileStringW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszSection, lpszEntry, lpszString, lpszFilename); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLGetKeywordValue (LPCSTR lpszSection, LPCSTR lpszEntry, LPSTR lpszBuffer, int cbBuffer, int *pcbBufOut) { SQLGetKeywordValuePTR func; if(isOnMacOSX) { func = (SQLGetKeywordValuePTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLGetKeywordValue")); if(func) return func(lpszSection, lpszEntry, lpszBuffer, cbBuffer, pcbBufOut); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLGetKeywordValue", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszSection, lpszEntry, lpszBuffer, cbBuffer, pcbBufOut); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLGetKeywordValueW (LPCWSTR lpszSection, LPCWSTR lpszEntry, LPWSTR lpszBuffer, int cbBuffer, int *pcbBufOut) { SQLGetKeywordValueWPTR func; if(isOnMacOSX) { func = (SQLGetKeywordValueWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLGetKeywordValueW")); if(func) return func(lpszSection, lpszEntry, lpszBuffer, cbBuffer, pcbBufOut); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLGetKeywordValueW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszSection, lpszEntry, lpszBuffer, cbBuffer, pcbBufOut); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLSetKeywordValue (LPCSTR lpszSection, LPCSTR lpszEntry, LPSTR lpszString, int cbString) { SQLSetKeywordValuePTR func; if(isOnMacOSX) { func = (SQLSetKeywordValuePTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLSetKeywordValue")); if(func) return func(lpszSection, lpszEntry, lpszString, cbString); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLSetKeywordValue", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszSection, lpszEntry, lpszString, cbString); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLSetKeywordValueW (LPCWSTR lpszSection, LPCWSTR lpszEntry, LPWSTR lpszString, int cbString) { SQLSetKeywordValueWPTR func; if(isOnMacOSX) { func = (SQLSetKeywordValueWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLSetKeywordValueW")); if(func) return func(lpszSection, lpszEntry, lpszString, cbString); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLSetKeywordValueW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszSection, lpszEntry, lpszString, cbString); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLWriteDSN (LPCSTR lpszDSN, LPCSTR lpszDriver) { SQLWriteDSNPTR func; if(isOnMacOSX) { func = (SQLWriteDSNPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLWriteDSN")); if(func) return func(lpszDSN, lpszDriver); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLWriteDSN", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDSN, lpszDriver); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLWriteDSNW (LPCWSTR lpszDSN, LPCWSTR lpszDriver) { SQLWriteDSNWPTR func; if(isOnMacOSX) { func = (SQLWriteDSNWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLWriteDSNW")); if(func) return func(lpszDSN, lpszDriver); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLWriteDSNW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDSN, lpszDriver); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLRemoveDSN (LPCSTR lpszDSN) { SQLRemoveDSNPTR func; if(isOnMacOSX) { func = (SQLRemoveDSNPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLRemoveDSN")); if(func) return func(lpszDSN); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLRemoveDSN", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDSN); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } BOOL INSTAPI SQLRemoveDSNW (LPCWSTR lpszDSN) { SQLRemoveDSNWPTR func; if(isOnMacOSX) { func = (SQLRemoveDSNWPTR)CFBundleGetFunctionPointerForName(iodbcinstRef, CFSTR("SQLRemoveDSNW")); if(func) return func(lpszDSN); create_error("Function loading problem", "The iODBCinst.framework function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS X system."); } else { CFragSymbolClass symbol_type; OSStatus err; err = FindSymbol (iodbcinstId, "\pSQLRemoveDSNW", (Ptr*)(&func), &symbol_type); if(err == noErr) return func(lpszDSN); create_error("Function loading problem", "The ODBC Configuration Manager PPC function cannot be loaded. Please check if iODBC is" " well installed on your Mac OS system."); } return SQL_ERROR; } libiodbc-3.52.9/mac/iODBCcfmbridge/iodbccfm.h0000644000076400007640000012055212323210535015515 00000000000000/* * $Id$ * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #define UNICODE #define SQL_NOUNICODEMAP #include #include #include #include #include /* Prototypes functions */ OSStatus load_library(Str255 name, CFragConnectionID *id); OSStatus load_framework(CFStringRef freame, CFBundleRef *bundle); void create_error (LPCSTR text, LPCSTR errmsg); void _init(void); /* iODBC bundle prototypes functions */ typedef SQLRETURN SQL_API (*SQLAllocConnectPTR) (SQLHENV EnvironmentHandle, SQLHDBC * ConnectionHandle); typedef SQLRETURN SQL_API (*SQLAllocEnvPTR) (SQLHENV * EnvironmentHandle); typedef SQLRETURN SQL_API (*SQLAllocHandlePTR) (SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE * OutputHandle); typedef SQLRETURN SQL_API (*SQLAllocStmtPTR) (SQLHDBC ConnectionHandle, SQLHSTMT * StatementHandle); typedef SQLRETURN SQL_API (*SQLBindColPTR) (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLINTEGER BufferLength, SQLINTEGER * StrLen_or_Ind); typedef SQLRETURN SQL_API (*SQLBindParamPTR) (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision, SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue, SQLINTEGER * StrLen_or_Ind); typedef SQLRETURN SQL_API (*SQLBindParameterPTR) (SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT fParamType, SQLSMALLINT fCType, SQLSMALLINT fSqlType, SQLUINTEGER cbColDef, SQLSMALLINT ibScale, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue); typedef SQLRETURN SQL_API (*SQLBrowseConnectPTR) (SQLHDBC hdbc, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut); typedef SQLRETURN SQL_API (*SQLBulkOperationsPTR) (SQLHSTMT StatementHandle, SQLSMALLINT Operation); typedef SQLRETURN SQL_API (*SQLCancelPTR) (SQLHSTMT StatementHandle); typedef SQLRETURN SQL_API (*SQLCloseCursorPTR) (SQLHSTMT StatementHandle); typedef SQLRETURN SQL_API (*SQLColAttributePTR) (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength, SQLPOINTER NumericAttribute); typedef SQLRETURN SQL_API (*SQLColAttributesPTR) (SQLHSTMT hstmt, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLINTEGER * pfDesc); typedef SQLRETURN SQL_API (*SQLColumnPrivilegesPTR) (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName); typedef SQLRETURN SQL_API (*SQLColumnsPTR) (SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLCHAR * ColumnName, SQLSMALLINT NameLength4); typedef SQLRETURN SQL_API (*SQLConnectPTR) (SQLHDBC ConnectionHandle, SQLCHAR * ServerName, SQLSMALLINT NameLength1, SQLCHAR * UserName, SQLSMALLINT NameLength2, SQLCHAR * Authentication, SQLSMALLINT NameLength3); typedef SQLRETURN SQL_API (*SQLCopyDescPTR) (SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle); typedef SQLRETURN SQL_API (*SQLDataSourcesPTR) (SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLCHAR * ServerName, SQLSMALLINT BufferLength1, SQLSMALLINT * NameLength1, SQLCHAR * Description, SQLSMALLINT BufferLength2, SQLSMALLINT * NameLength2); typedef SQLRETURN SQL_API (*SQLDescribeColPTR) (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLCHAR * ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLength, SQLSMALLINT * DataType, SQLUINTEGER * ColumnSize, SQLSMALLINT * DecimalDigits, SQLSMALLINT * Nullable); typedef SQLRETURN SQL_API (*SQLDescribeParamPTR) (SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT * pfSqlType, SQLUINTEGER * pcbParamDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable); typedef SQLRETURN SQL_API (*SQLDisconnectPTR) (SQLHDBC ConnectionHandle); typedef SQLRETURN SQL_API (*SQLDriverConnectPTR) (SQLHDBC hdbc, SQLHWND hwnd, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion); typedef SQLRETURN SQL_API (*SQLDriversPTR) (SQLHENV henv, SQLUSMALLINT fDirection, SQLCHAR * szDriverDesc, SQLSMALLINT cbDriverDescMax, SQLSMALLINT * pcbDriverDesc, SQLCHAR * szDriverAttributes, SQLSMALLINT cbDrvrAttrMax, SQLSMALLINT * pcbDrvrAttr); typedef SQLRETURN SQL_API (*SQLEndTranPTR) (SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType); typedef SQLRETURN SQL_API (*SQLErrorPTR) (SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle, SQLCHAR * Sqlstate, SQLINTEGER * NativeError, SQLCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLength); typedef SQLRETURN SQL_API (*SQLExecDirectPTR) (SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength); typedef SQLRETURN SQL_API (*SQLExecutePTR) (SQLHSTMT StatementHandle); typedef SQLRETURN SQL_API (*SQLExtendedFetchPTR) (SQLHSTMT hstmt, SQLUSMALLINT fFetchType, SQLINTEGER irow, SQLUINTEGER * pcrow, SQLUSMALLINT * rgfRowStatus); typedef SQLRETURN SQL_API (*SQLFetchPTR) (SQLHSTMT StatementHandle); typedef SQLRETURN SQL_API (*SQLFetchScrollPTR) (SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLINTEGER FetchOffset); typedef SQLRETURN SQL_API (*SQLForeignKeysPTR) (SQLHSTMT hstmt, SQLCHAR * szPkCatalogName, SQLSMALLINT cbPkCatalogName, SQLCHAR * szPkSchemaName, SQLSMALLINT cbPkSchemaName, SQLCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLCHAR * szFkCatalogName, SQLSMALLINT cbFkCatalogName, SQLCHAR * szFkSchemaName, SQLSMALLINT cbFkSchemaName, SQLCHAR * szFkTableName, SQLSMALLINT cbFkTableName); typedef SQLRETURN SQL_API (*SQLFreeConnectPTR) (SQLHDBC ConnectionHandle); typedef SQLRETURN SQL_API (*SQLFreeEnvPTR) (SQLHENV EnvironmentHandle); typedef SQLRETURN SQL_API (*SQLFreeHandlePTR) (SQLSMALLINT HandleType, SQLHANDLE Handle); typedef SQLRETURN SQL_API (*SQLFreeStmtPTR) (SQLHSTMT StatementHandle, SQLUSMALLINT Option); typedef SQLRETURN SQL_API (*SQLGetConnectAttrPTR) (SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength); typedef SQLRETURN SQL_API (*SQLGetConnectOptionPTR) (SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value); typedef SQLRETURN SQL_API (*SQLGetCursorNamePTR) (SQLHSTMT StatementHandle, SQLCHAR * CursorName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLength); typedef SQLRETURN SQL_API (*SQLGetDataPTR) (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLINTEGER BufferLength, SQLINTEGER * StrLen_or_Ind); typedef SQLRETURN SQL_API (*SQLGetDescFieldPTR) (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength); typedef SQLRETURN SQL_API (*SQLGetDescRecPTR) (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLCHAR * Name, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength, SQLSMALLINT * Type, SQLSMALLINT * SubType, SQLINTEGER * Length, SQLSMALLINT * Precision, SQLSMALLINT * Scale, SQLSMALLINT * Nullable); typedef SQLRETURN SQL_API (*SQLGetDiagFieldPTR) (SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER DiagInfo, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength); typedef SQLRETURN SQL_API (*SQLGetDiagRecPTR) (SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLCHAR * Sqlstate, SQLINTEGER * NativeError, SQLCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLength); typedef SQLRETURN SQL_API (*SQLGetEnvAttrPTR) (SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength); typedef SQLRETURN SQL_API (*SQLGetFunctionsPTR) (SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId, SQLUSMALLINT * Supported); typedef SQLRETURN SQL_API (*SQLGetInfoPTR) (SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQLPOINTER InfoValue, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength); typedef SQLRETURN SQL_API (*SQLGetStmtAttrPTR) (SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER * StringLength); typedef SQLRETURN SQL_API (*SQLGetStmtOptionPTR) (SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLPOINTER Value); typedef SQLRETURN SQL_API (*SQLGetTypeInfoPTR) (SQLHSTMT StatementHandle, SQLSMALLINT DataType); typedef SQLRETURN SQL_API (*SQLMoreResultsPTR) (SQLHSTMT hstmt); typedef SQLRETURN SQL_API (*SQLNativeSqlPTR) (SQLHDBC hdbc, SQLCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER * pcbSqlStr); typedef SQLRETURN SQL_API (*SQLNumParamsPTR) (SQLHSTMT hstmt, SQLSMALLINT * pcpar); typedef SQLRETURN SQL_API (*SQLNumResultColsPTR) (SQLHSTMT StatementHandle, SQLSMALLINT * ColumnCount); typedef SQLRETURN SQL_API (*SQLParamDataPTR) (SQLHSTMT StatementHandle, SQLPOINTER * Value); typedef SQLRETURN SQL_API (*SQLParamOptionsPTR) (SQLHSTMT hstmt, SQLUINTEGER crow, SQLUINTEGER * pirow); typedef SQLRETURN SQL_API (*SQLPreparePTR) (SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength); typedef SQLRETURN SQL_API (*SQLPrimaryKeysPTR) (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName); typedef SQLRETURN SQL_API (*SQLProcedureColumnsPTR) (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szProcName, SQLSMALLINT cbProcName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName); typedef SQLRETURN SQL_API (*SQLProceduresPTR) (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szProcName, SQLSMALLINT cbProcName); typedef SQLRETURN SQL_API (*SQLPutDataPTR) (SQLHSTMT StatementHandle, SQLPOINTER Data, SQLINTEGER StrLen_or_Ind); typedef SQLRETURN SQL_API (*SQLRowCountPTR) (SQLHSTMT StatementHandle, SQLINTEGER * RowCount); typedef SQLRETURN SQL_API (*SQLSetConnectAttrPTR) (SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength); typedef SQLRETURN SQL_API (*SQLSetConnectOptionPTR) (SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLUINTEGER Value); typedef SQLRETURN SQL_API (*SQLSetCursorNamePTR) (SQLHSTMT StatementHandle, SQLCHAR * CursorName, SQLSMALLINT NameLength); typedef SQLRETURN SQL_API (*SQLSetDescFieldPTR) (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength); typedef SQLRETURN SQL_API (*SQLSetDescRecPTR) (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT Type, SQLSMALLINT SubType, SQLINTEGER Length, SQLSMALLINT Precision, SQLSMALLINT Scale, SQLPOINTER Data, SQLINTEGER * StringLength, SQLINTEGER * Indicator); typedef SQLRETURN SQL_API (*SQLSetEnvAttrPTR) (SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength); typedef SQLRETURN SQL_API (*SQLSetParamPTR) (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision, SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue, SQLINTEGER * StrLen_or_Ind); typedef SQLRETURN SQL_API (*SQLSetPosPTR) (SQLHSTMT hstmt, SQLUSMALLINT irow, SQLUSMALLINT fOption, SQLUSMALLINT fLock); typedef SQLRETURN SQL_API (*SQLSetScrollOptionsPTR) (SQLHSTMT hstmt, SQLUSMALLINT fConcurrency, SQLINTEGER crowKeyset, SQLUSMALLINT crowRowset); typedef SQLRETURN SQL_API (*SQLSetStmtAttrPTR) (SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength); typedef SQLRETURN SQL_API (*SQLSetStmtOptionPTR) (SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLUINTEGER Value); typedef SQLRETURN SQL_API (*SQLSpecialColumnsPTR) (SQLHSTMT StatementHandle, SQLUSMALLINT IdentifierType, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLUSMALLINT Scope, SQLUSMALLINT Nullable); typedef SQLRETURN SQL_API (*SQLStatisticsPTR) (SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLUSMALLINT Unique, SQLUSMALLINT Reserved); typedef SQLRETURN SQL_API (*SQLTablePrivilegesPTR) (SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName); typedef SQLRETURN SQL_API (*SQLTablesPTR) (SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLCHAR * TableType, SQLSMALLINT NameLength4); typedef SQLRETURN SQL_API (*SQLTransactPTR) (SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLUSMALLINT CompletionType); /*Unicode functions */ typedef SQLRETURN SQL_API (*SQLColAttributeWPTR)(SQLHSTMT hstmt, SQLUSMALLINT iCol, SQLUSMALLINT iField, SQLPOINTER pCharAttr, SQLSMALLINT cbCharAttrMax, SQLSMALLINT * pcbCharAttr, SQLPOINTER pNumAttr); typedef SQLRETURN SQL_API (*SQLColAttributesWPTR)(SQLHSTMT hstmt, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLINTEGER * pfDesc); typedef SQLRETURN SQL_API (*SQLConnectWPTR)(SQLHDBC hdbc, SQLWCHAR * szDSN, SQLSMALLINT cbDSN, SQLWCHAR * szUID, SQLSMALLINT cbUID, SQLWCHAR * szAuthStr, SQLSMALLINT cbAuthStr); typedef SQLRETURN SQL_API (*SQLDescribeColWPTR)(SQLHSTMT hstmt, SQLUSMALLINT icol, SQLWCHAR * szColName, SQLSMALLINT cbColNameMax, SQLSMALLINT * pcbColName, SQLSMALLINT * pfSqlType, SQLUINTEGER * pcbColDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable); typedef SQLRETURN SQL_API (*SQLErrorWPTR)(SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLWCHAR * szSqlState, SQLINTEGER * pfNativeError, SQLWCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg); typedef SQLRETURN SQL_API (*SQLExecDirectWPTR)(SQLHSTMT hstmt, SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStr); typedef SQLRETURN SQL_API (*SQLGetConnectAttrWPTR)(SQLHDBC hdbc, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue); typedef SQLRETURN SQL_API (*SQLGetCursorNameWPTR)(SQLHSTMT hstmt, SQLWCHAR * szCursor, SQLSMALLINT cbCursorMax, SQLSMALLINT * pcbCursor); typedef SQLRETURN SQL_API (*SQLSetDescFieldWPTR)(SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength); typedef SQLRETURN SQL_API (*SQLGetDescFieldWPTR)(SQLHDESC hdesc, SQLSMALLINT iRecord, SQLSMALLINT iField, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue); typedef SQLRETURN SQL_API (*SQLGetDescRecWPTR)(SQLHDESC hdesc, SQLSMALLINT iRecord, SQLWCHAR * szName, SQLSMALLINT cbNameMax, SQLSMALLINT * pcbName, SQLSMALLINT * pfType, SQLSMALLINT * pfSubType, SQLINTEGER * pLength, SQLSMALLINT * pPrecision, SQLSMALLINT * pScale, SQLSMALLINT * pNullable); typedef SQLRETURN SQL_API (*SQLGetDiagFieldWPTR)(SQLSMALLINT fHandleType, SQLHANDLE handle, SQLSMALLINT iRecord, SQLSMALLINT fDiagField, SQLPOINTER rgbDiagInfo, SQLSMALLINT cbDiagInfoMax, SQLSMALLINT * pcbDiagInfo); typedef SQLRETURN SQL_API (*SQLGetDiagRecWPTR)(SQLSMALLINT fHandleType, SQLHANDLE handle, SQLSMALLINT iRecord, SQLWCHAR * szSqlState, SQLINTEGER * pfNativeError, SQLWCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg); typedef SQLRETURN SQL_API (*SQLPrepareWPTR)(SQLHSTMT hstmt, SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStr); typedef SQLRETURN SQL_API (*SQLSetConnectAttrWPTR)(SQLHDBC hdbc, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValue); typedef SQLRETURN SQL_API (*SQLSetCursorNameWPTR)(SQLHSTMT hstmt, SQLWCHAR * szCursor, SQLSMALLINT cbCursor); typedef SQLRETURN SQL_API (*SQLColumnsWPTR)(SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName); typedef SQLRETURN SQL_API (*SQLGetConnectOptionWPTR)(SQLHDBC hdbc, SQLUSMALLINT fOption, SQLPOINTER pvParam); typedef SQLRETURN SQL_API (*SQLGetInfoWPTR)(SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue); typedef SQLRETURN SQL_API (*SQLGetTypeInfoWPTR)(SQLHSTMT StatementHandle, SQLSMALLINT DataTyoe); typedef SQLRETURN SQL_API (*SQLSetConnectOptionWPTR)(SQLHDBC hdbc, SQLUSMALLINT fOption, SQLUINTEGER vParam); typedef SQLRETURN SQL_API (*SQLSpecialColumnsWPTR)(SQLHSTMT hstmt, SQLUSMALLINT fColType, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fScope, SQLUSMALLINT fNullable); typedef SQLRETURN SQL_API (*SQLStatisticsWPTR)(SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fUnique, SQLUSMALLINT fAccuracy); typedef SQLRETURN SQL_API (*SQLTablesWPTR)(SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szTableType, SQLSMALLINT cbTableType); typedef SQLRETURN SQL_API (*SQLDataSourcesWPTR)(SQLHENV henv, SQLUSMALLINT fDirection, SQLWCHAR * szDSN, SQLSMALLINT cbDSNMax, SQLSMALLINT * pcbDSN, SQLWCHAR * szDescription, SQLSMALLINT cbDescriptionMax, SQLSMALLINT * pcbDescription); typedef SQLRETURN SQL_API (*SQLDriverConnectWPTR)(SQLHDBC hdbc, SQLHWND hwnd, SQLWCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLWCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion); typedef SQLRETURN SQL_API (*SQLBrowseConnectWPTR)(SQLHDBC hdbc, SQLWCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLWCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut); typedef SQLRETURN SQL_API (*SQLColumnPrivilegesWPTR)(SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName); typedef SQLRETURN SQL_API (*SQLGetStmtAttrWPTR)(SQLHSTMT hstmt, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue); typedef SQLRETURN SQL_API (*SQLSetStmtAttrWPTR)(SQLHSTMT hstmt, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax); typedef SQLRETURN SQL_API (*SQLForeignKeysWPTR)(SQLHSTMT hstmt, SQLWCHAR * szPkCatalogName, SQLSMALLINT cbPkCatalogName, SQLWCHAR * szPkSchemaName, SQLSMALLINT cbPkSchemaName, SQLWCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLWCHAR * szFkCatalogName, SQLSMALLINT cbFkCatalogName, SQLWCHAR * szFkSchemaName, SQLSMALLINT cbFkSchemaName, SQLWCHAR * szFkTableName, SQLSMALLINT cbFkTableName); typedef SQLRETURN SQL_API (*SQLNativeSqlWPTR)(SQLHDBC hdbc, SQLWCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER * pcbSqlStr); typedef SQLRETURN SQL_API (*SQLPrimaryKeysWPTR)(SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName); typedef SQLRETURN SQL_API (*SQLProcedureColumnsWPTR)(SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szProcName, SQLSMALLINT cbProcName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName); typedef SQLRETURN SQL_API (*SQLProceduresWPTR)(SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szProcName, SQLSMALLINT cbProcName); typedef SQLRETURN SQL_API (*SQLTablePrivilegesWPTR)(SQLHSTMT hstmt, SQLWCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLWCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLWCHAR * szTableName, SQLSMALLINT cbTableName); typedef SQLRETURN SQL_API (*SQLDriversWPTR)(SQLHENV henv, SQLUSMALLINT fDirection, SQLWCHAR * szDriverDesc, SQLSMALLINT cbDriverDescMax, SQLSMALLINT * pcbDriverDesc, SQLWCHAR * szDriverAttributes, SQLSMALLINT cbDrvrAttrMax, SQLSMALLINT * pcbDrvrAttr); /* ANSI versions */ typedef SQLRETURN SQL_API (*SQLColAttributeAPTR)(SQLHSTMT hstmt, SQLSMALLINT iCol, SQLSMALLINT iField, SQLPOINTER pCharAttr, SQLSMALLINT cbCharAttrMax, SQLSMALLINT * pcbCharAttr, SQLPOINTER pNumAttr); typedef SQLRETURN SQL_API (*SQLColAttributesAPTR)(SQLHSTMT hstmt, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLINTEGER * pfDesc); typedef SQLRETURN SQL_API (*SQLConnectAPTR)(SQLHDBC hdbc, SQLCHAR * szDSN, SQLSMALLINT cbDSN, SQLCHAR * szUID, SQLSMALLINT cbUID, SQLCHAR * szAuthStr, SQLSMALLINT cbAuthStr); typedef SQLRETURN SQL_API (*SQLDescribeColAPTR)(SQLHSTMT hstmt, SQLUSMALLINT icol, SQLCHAR * szColName, SQLSMALLINT cbColNameMax, SQLSMALLINT * pcbColName, SQLSMALLINT * pfSqlType, SQLUINTEGER * pcbColDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable); typedef SQLRETURN SQL_API (*SQLErrorAPTR)(SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLCHAR * szSqlState, SQLINTEGER * pfNativeError, SQLCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg); typedef SQLRETURN SQL_API (*SQLExecDirectAPTR)(SQLHSTMT hstmt, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStr); typedef SQLRETURN SQL_API (*SQLGetConnectAttrAPTR)(SQLHDBC hdbc, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue); typedef SQLRETURN SQL_API (*SQLGetCursorNameAPTR)(SQLHSTMT hstmt, SQLCHAR * szCursor, SQLSMALLINT cbCursorMax, SQLSMALLINT * pcbCursor); typedef SQLRETURN SQL_API (*SQLSetDescFieldAPTR)(SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength); typedef SQLRETURN SQL_API (*SQLGetDescFieldAPTR)(SQLHDESC hdesc, SQLSMALLINT iRecord, SQLSMALLINT iField, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue); typedef SQLRETURN SQL_API (*SQLGetDescRecAPTR)(SQLHDESC hdesc, SQLSMALLINT iRecord, SQLCHAR * szName, SQLSMALLINT cbNameMax, SQLSMALLINT * pcbName, SQLSMALLINT * pfType, SQLSMALLINT * pfSubType, SQLINTEGER * pLength, SQLSMALLINT * pPrecision, SQLSMALLINT * pScale, SQLSMALLINT * pNullable); typedef SQLRETURN SQL_API (*SQLGetDiagFieldAPTR)(SQLSMALLINT fHandleType, SQLHANDLE handle, SQLSMALLINT iRecord, SQLSMALLINT fDiagField, SQLPOINTER rgbDiagInfo, SQLSMALLINT cbDiagInfoMax, SQLSMALLINT * pcbDiagInfo); typedef SQLRETURN SQL_API (*SQLGetDiagRecAPTR)(SQLSMALLINT fHandleType, SQLHANDLE handle, SQLSMALLINT iRecord, SQLCHAR * szSqlState, SQLINTEGER * pfNativeError, SQLCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg); typedef SQLRETURN SQL_API (*SQLGetStmtAttrAPTR)(SQLHSTMT hstmt, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER * pcbValue); typedef SQLRETURN SQL_API (*SQLGetTypeInfoAPTR)(SQLHSTMT StatementHandle, SQLSMALLINT DataTyoe); typedef SQLRETURN SQL_API (*SQLPrepareAPTR)(SQLHSTMT hstmt, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStr); typedef SQLRETURN SQL_API (*SQLSetConnectAttrAPTR)(SQLHDBC hdbc, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValue); typedef SQLRETURN SQL_API (*SQLSetCursorNameAPTR)(SQLHSTMT hstmt, SQLCHAR * szCursor, SQLSMALLINT cbCursor); typedef SQLRETURN SQL_API (*SQLColumnsAPTR)(SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName); typedef SQLRETURN SQL_API (*SQLGetConnectOptionAPTR)(SQLHDBC hdbc, SQLUSMALLINT fOption, SQLPOINTER pvParam); typedef SQLRETURN SQL_API (*SQLGetInfoAPTR)(SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue); typedef SQLRETURN SQL_API (*SQLGetStmtOptionAPTR)(SQLHSTMT hstmt, SQLUSMALLINT fOption, SQLPOINTER pvParam); typedef SQLRETURN SQL_API (*SQLSetConnectOptionAPTR)(SQLHDBC hdbc, SQLUSMALLINT fOption, SQLUINTEGER vParam); typedef SQLRETURN SQL_API (*SQLSetStmtOptionAPTR)(SQLHSTMT hstmt, SQLUSMALLINT fOption, SQLUINTEGER vParam); typedef SQLRETURN SQL_API (*SQLSpecialColumnsAPTR)(SQLHSTMT hstmt, SQLUSMALLINT fColType, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fScope, SQLUSMALLINT fNullable); typedef SQLRETURN SQL_API (*SQLStatisticsAPTR)(SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fUnique, SQLUSMALLINT fAccuracy); typedef SQLRETURN SQL_API (*SQLTablesAPTR)(SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szTableType, SQLSMALLINT cbTableType); typedef SQLRETURN SQL_API (*SQLDataSourcesAPTR)(SQLHENV henv, SQLUSMALLINT fDirection, SQLCHAR * szDSN, SQLSMALLINT cbDSNMax, SQLSMALLINT * pcbDSN, SQLCHAR * szDescription, SQLSMALLINT cbDescriptionMax, SQLSMALLINT * pcbDescription); typedef SQLRETURN SQL_API (*SQLDriverConnectAPTR)(SQLHDBC hdbc, SQLHWND hwnd, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion); typedef SQLRETURN SQL_API (*SQLBrowseConnectAPTR)(SQLHDBC hdbc, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut); typedef SQLRETURN SQL_API (*SQLColumnPrivilegesAPTR)(SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName); typedef SQLRETURN SQL_API (*SQLDescribeParamAPTR)(SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT * pfSqlType, SQLUINTEGER * pcbParamDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable); typedef SQLRETURN SQL_API (*SQLSetStmtAttrAPTR)(SQLHSTMT hstmt, SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax); typedef SQLRETURN SQL_API (*SQLForeignKeysAPTR)(SQLHSTMT hstmt, SQLCHAR * szPkCatalogName, SQLSMALLINT cbPkCatalogName, SQLCHAR * szPkSchemaName, SQLSMALLINT cbPkSchemaName, SQLCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLCHAR * szFkCatalogName, SQLSMALLINT cbFkCatalogName, SQLCHAR * szFkSchemaName, SQLSMALLINT cbFkSchemaName, SQLCHAR * szFkTableName, SQLSMALLINT cbFkTableName); typedef SQLRETURN SQL_API (*SQLNativeSqlAPTR)(SQLHDBC hdbc, SQLCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER * pcbSqlStr); typedef SQLRETURN SQL_API (*SQLPrimaryKeysAPTR)(SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName); typedef SQLRETURN SQL_API (*SQLProcedureColumnsAPTR)(SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szProcName, SQLSMALLINT cbProcName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName); typedef SQLRETURN SQL_API (*SQLProceduresAPTR)(SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szProcName, SQLSMALLINT cbProcName); typedef SQLRETURN SQL_API (*SQLTablePrivilegesAPTR)(SQLHSTMT hstmt, SQLCHAR * szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR * szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR * szTableName, SQLSMALLINT cbTableName); typedef SQLRETURN SQL_API (*SQLDriversAPTR)(SQLHENV henv, SQLUSMALLINT fDirection, SQLCHAR * szDriverDesc, SQLSMALLINT cbDriverDescMax, SQLSMALLINT * pcbDriverDesc, SQLCHAR * szDriverAttributes, SQLSMALLINT cbDrvrAttrMax, SQLSMALLINT * pcbDrvrAttr); /* iODBCinst bundle prototypes functions */ typedef BOOL INSTAPI (*SQLConfigDataSourcePTR) (HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes); typedef BOOL INSTAPI (*SQLConfigDriverPTR) (HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszArgs, LPSTR lpszMsg, WORD cbMsgMax, WORD FAR * pcbMsgOut); typedef BOOL INSTAPI (*SQLCreateDataSourcePTR) (HWND hwndParent, LPCSTR lpszDSN); typedef BOOL INSTAPI (*SQLGetConfigModePTR) (UWORD * pwConfigMode); typedef BOOL INSTAPI (*SQLGetAvailableDriversPTR) (LPCSTR lpszInfFile, LPSTR lpszBuf, WORD cbBufMax, WORD FAR * pcbBufOut); typedef BOOL INSTAPI (*SQLGetInstalledDriversPTR) (LPSTR lpszBuf, WORD cbBufMax, WORD FAR * pcbBufOut); typedef int INSTAPI (*SQLGetPrivateProfileStringPTR) (LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszDefault, LPSTR lpszRetBuffer, int cbRetBuffer, LPCSTR lpszFilename); typedef BOOL INSTAPI (*SQLGetTranslatorPTR) (HWND hwnd, LPSTR lpszName, WORD cbNameMax, WORD FAR * pcbNameOut, LPSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut, DWORD FAR * pvOption); typedef BOOL INSTAPI (*SQLInstallDriverExPTR) (LPCSTR lpszDriver, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount); typedef BOOL INSTAPI (*SQLInstallDriverPTR) (LPCSTR lpszInfFile, LPCSTR lpszDriver, LPSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut); typedef BOOL INSTAPI (*SQLInstallDriverManagerPTR) (LPSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut); typedef RETCODE INSTAPI (*SQLInstallerErrorPTR) (WORD iError, DWORD * pfErrorCode, LPSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD * pcbErrorMsg); typedef BOOL INSTAPI (*SQLInstallODBCPTR) (HWND hwndParent, LPCSTR lpszInfFile, LPCSTR lpszSrcPath, LPCSTR lpszDrivers); typedef BOOL INSTAPI (*SQLInstallTranslatorPTR) (LPCSTR lpszInfFile, LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD FAR * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount); typedef BOOL INSTAPI (*SQLInstallTranslatorExPTR) (LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount); typedef BOOL INSTAPI (*SQLManageDataSourcesPTR) (HWND hwndParent); typedef RETCODE INSTAPI (*SQLPostInstallerErrorPTR) (DWORD fErrorCode, LPSTR szErrorMsg); typedef BOOL INSTAPI (*SQLReadFileDSNPTR) (LPCSTR lpszFileName, LPCSTR lpszAppName, LPCSTR lpszKeyName, LPSTR lpszString, WORD cbString, WORD * pcbString); typedef BOOL INSTAPI (*SQLRemoveDSNFromIniPTR) (LPCSTR lpszDSN); typedef BOOL INSTAPI (*SQLRemoveDefaultDataSourcePTR) (void); typedef BOOL INSTAPI (*SQLRemoveDriverPTR) (LPCSTR lpszDriver, BOOL fRemoveDSN, LPDWORD lpdwUsageCount); typedef BOOL INSTAPI (*SQLRemoveDriverManagerPTR) (LPDWORD lpdwUsageCount); typedef BOOL INSTAPI (*SQLRemoveTranslatorPTR) (LPCSTR lpszTranslator, LPDWORD lpdwUsageCount); typedef BOOL INSTAPI (*SQLSetConfigModePTR) (UWORD wConfigMode); typedef BOOL INSTAPI (*SQLValidDSNPTR) (LPCSTR lpszDSN); typedef BOOL INSTAPI (*SQLWriteDSNToIniPTR) (LPCSTR lpszDSN, LPCSTR lpszDriver); typedef BOOL INSTAPI (*SQLWriteFileDSNPTR) (LPCSTR lpszFileName, LPCSTR lpszAppName, LPCSTR lpszKeyName, LPSTR lpszString); typedef BOOL INSTAPI (*SQLWritePrivateProfileStringPTR) (LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszString, LPCSTR lpszFilename); typedef BOOL INSTAPI (*SQLGetKeywordValuePTR) (LPCSTR lpszSection, LPCSTR lpszEntry, LPSTR lpszBuffer, int cbBuffer, int *pcbBufOut); typedef BOOL INSTAPI (*SQLSetKeywordValuePTR) (LPCSTR lpszSection, LPCSTR lpszEntry, LPSTR lpszString, int cbString); typedef BOOL INSTAPI (*SQLWriteDSNPTR) (LPCSTR lpszDSN, LPCSTR lpszDriver); typedef BOOL INSTAPI (*SQLRemoveDSNPTR) (LPCSTR lpszDSN); /*Unicode functions */ typedef BOOL INSTAPI (*SQLConfigDataSourceWPTR) (HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszAttributes); typedef BOOL INSTAPI (*SQLConfigDriverWPTR) (HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszArgs, LPWSTR lpszMsg, WORD cbMsgMax, WORD FAR * pcbMsgOut); typedef BOOL INSTAPI (*SQLCreateDataSourceWPTR) (HWND hwndParent, LPCWSTR lpszDSN); typedef BOOL INSTAPI (*SQLGetAvailableDriversWPTR) (LPCWSTR lpszInfFile, LPWSTR lpszBuf, WORD cbBufMax, WORD FAR * pcbBufOut); typedef BOOL INSTAPI (*SQLGetKeywordValueWPTR) (LPCWSTR lpszSection, LPCWSTR lpszEntry, LPWSTR lpszBuffer, int cbBuffer, int *pcbBufOut); typedef BOOL INSTAPI (*SQLGetInstalledDriversWPTR) (LPWSTR lpszBuf, WORD cbBufMax, WORD FAR * pcbBufOut); typedef int INSTAPI (*SQLGetPrivateProfileStringWPTR) (LPCWSTR lpszSection, LPCWSTR lpszEntry, LPCWSTR lpszDefault, LPWSTR lpszRetBuffer, int cbRetBuffer, LPCWSTR lpszFilename); typedef BOOL INSTAPI (*SQLGetTranslatorWPTR) (HWND hwnd, LPWSTR lpszName, WORD cbNameMax, WORD FAR * pcbNameOut, LPWSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut, DWORD FAR * pvOption); typedef BOOL INSTAPI (*SQLInstallDriverExWPTR) (LPCWSTR lpszDriver, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount); typedef BOOL INSTAPI (*SQLInstallDriverWPTR) (LPCWSTR lpszInfFile, LPCWSTR lpszDriver, LPWSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut); typedef RETCODE INSTAPI (*SQLInstallerErrorWPTR) (WORD iError, DWORD * pfErrorCode, LPWSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD * pcbErrorMsg); typedef BOOL INSTAPI (*SQLInstallDriverManagerWPTR) (LPWSTR lpszPath, WORD cbPathMax, WORD FAR * pcbPathOut); typedef BOOL INSTAPI (*SQLInstallODBCWPTR) (HWND hwndParent, LPCWSTR lpszInfFile, LPCWSTR lpszSrcPath, LPCWSTR lpszDrivers); typedef BOOL INSTAPI (*SQLInstallTranslatorWPTR) (LPCWSTR lpszInfFile, LPCWSTR lpszTranslator, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD FAR * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount); typedef BOOL INSTAPI (*SQLInstallTranslatorExWPTR) (LPCWSTR lpszTranslator, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD * pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount); typedef RETCODE INSTAPI (*SQLPostInstallerErrorWPTR) (DWORD fErrorCode, LPWSTR szErrorMsg); typedef BOOL INSTAPI (*SQLRemoveDriverWPTR) (LPCWSTR lpszDriver, BOOL fRemoveDSN, LPDWORD lpdwUsageCount); typedef BOOL INSTAPI (*SQLReadFileDSNWPTR) (LPCWSTR lpszFileName, LPCWSTR lpszAppName, LPCWSTR lpszKeyName, LPWSTR lpszString, WORD cbString, WORD * pcbString); typedef BOOL INSTAPI (*SQLRemoveDSNFromIniWPTR) (LPCWSTR lpszDSN); typedef BOOL INSTAPI (*SQLRemoveTranslatorWPTR) (LPCWSTR lpszTranslator, LPDWORD lpdwUsageCount); typedef BOOL INSTAPI (*SQLSetKeywordValueWPTR) (LPCWSTR lpszSection, LPCWSTR lpszEntry, LPWSTR lpszString, int cbString); typedef BOOL INSTAPI (*SQLValidDSNWPTR) (LPCWSTR lpszDSN); typedef BOOL INSTAPI (*SQLWriteDSNToIniWPTR) (LPCWSTR lpszDSN, LPCWSTR lpszDriver); typedef BOOL INSTAPI (*SQLWriteFileDSNWPTR) (LPCWSTR lpszFileName, LPCWSTR lpszAppName, LPCWSTR lpszKeyName, LPWSTR lpszString); typedef BOOL INSTAPI (*SQLWritePrivateProfileStringWPTR) (LPCWSTR lpszSection, LPCWSTR lpszEntry, LPCWSTR lpszString, LPCWSTR lpszFilename); typedef BOOL INSTAPI (*SQLWriteDSNWPTR) (LPCWSTR lpszDSN, LPCWSTR lpszDriver); typedef BOOL INSTAPI (*SQLRemoveDSNWPTR) (LPCWSTR lpszDSN); libiodbc-3.52.9/mac/iodbcadm.exp0000644000076400007640000000045312323204667013341 00000000000000_iodbcdm_drvconn_dialbox _iodbcdm_drvconn_dialboxw __iodbcdm_drvchoose_dialbox __iodbcdm_trschoose_dialbox __iodbcdm_nativeerrorbox __iodbcdm_confirmboxw __iodbcdm_confirmbox __iodbcdm_errorbox __iodbcdm_errorboxw __iodbcdm_messagebox __iodbcdm_messageboxw __iodbcdm_admin_dialbox _iodbcadm_version libiodbc-3.52.9/mac/iodbcinst.exp0000644000076400007640000000253012323204667013553 00000000000000_SQLConfigDataSource _SQLConfigDriver _SQLCreateDataSource _SQLGetConfigMode _SQLGetAvailableDrivers _SQLGetInstalledDrivers _SQLGetPrivateProfileString _SQLGetTranslator _SQLInstallDriverEx _SQLInstallDriver _SQLInstallDriverManager _SQLInstallerError _SQLInstallODBC _SQLInstallTranslator _SQLInstallTranslatorEx _SQLManageDataSources _SQLPostInstallerError _SQLReadFileDSN _SQLRemoveDSNFromIni _SQLRemoveDefaultDataSource _SQLRemoveDriver _SQLRemoveDriverManager _SQLRemoveTranslator _SQLSetConfigMode _SQLValidDSN _SQLWriteDSNToIni _SQLWriteFileDSN _SQLWritePrivateProfileString _SQLGetKeywordValue _SQLSetKeywordValue _SQLInstallODBCW _SQLCreateDataSourceW _SQLGetTranslatorW _SQLInstallDriverW _SQLInstallDriverManagerW _SQLGetInstalledDriversW _SQLGetAvailableDriversW _SQLConfigDataSourceW _SQLWriteDSNToIniW _SQLRemoveDSNFromIniW _SQLValidDSNW _SQLWritePrivateProfileStringW _SQLGetPrivateProfileStringW _SQLGetKeywordValueW _SQLSetKeywordValueW _SQLInstallTranslatorW _SQLRemoveTranslatorW _SQLRemoveDriverW _SQLConfigDriverW _SQLInstallerErrorW _SQLPostInstallerErrorW _SQLReadFileDSNW _SQLWriteFileDSNW _SQLInstallDriverExW _SQLInstallTranslatorExW _iodbcinst_version __iodbcdm_cfg_done __iodbcdm_cfg_find __iodbcdm_cfg_nextentry __iodbcdm_cfg_rewind __iodbcdm_cfg_write __iodbcdm_strlcat __iodbcdm_strlcpy __iodbcdm_cfg_freeimage __iodbcdm_cfg_storeentry libiodbc-3.52.9/mac/link-inclibs.sh0000755000076400007640000001107212323210535013764 00000000000000#!/bin/sh # # link-inclibs.sh # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # # # Installation PATHS # PREFIX="$DESTDIR/usr/local/iODBC" ODBC_FW="/Library/Frameworks/iODBC.framework" INST_FW="/Library/Frameworks/iODBCinst.framework" # # Remove old installation # if [ -d "$PREFIX" ] ; then rm -rf "$PREFIX" fi # # Create new directory structure # mkdir -p "$PREFIX/bin" mkdir -p "$PREFIX/lib" mkdir -p "$PREFIX/include" # # Create symlinks for all header files # ln -s "$ODBC_FW/Headers/iodbcext.h" "$PREFIX/include/iodbcext.h" ln -s "$ODBC_FW/Headers/iodbcunix.h" "$PREFIX/include/iodbcunix.h" ln -s "$ODBC_FW/Headers/isql.h" "$PREFIX/include/isql.h" ln -s "$ODBC_FW/Headers/isqlext.h" "$PREFIX/include/isqlext.h" ln -s "$ODBC_FW/Headers/isqltypes.h" "$PREFIX/include/isqltypes.h" ln -s "$ODBC_FW/Headers/sql.h" "$PREFIX/include/sql.h" ln -s "$ODBC_FW/Headers/sqlext.h" "$PREFIX/include/sqlext.h" ln -s "$ODBC_FW/Headers/sqltypes.h" "$PREFIX/include/sqltypes.h" ln -s "$ODBC_FW/Headers/sqlucode.h" "$PREFIX/include/sqlucode.h" ln -s "$INST_FW/Headers/iodbcinst.h" "$PREFIX/include/iodbcinst.h" ln -s "$INST_FW/Headers/odbcinst.h" "$PREFIX/include/odbcinst.h" # # Create symlinks for libraries # ln -s "$ODBC_FW/iODBC" "$PREFIX/lib/libiodbc.dylib" ln -s "$INST_FW/iODBCinst" "$PREFIX/lib/libiodbcinst.dylib" # # Add special Mac OS X version of iodbc-config # cp iodbc-config.macosx "$PREFIX/bin/iodbc-config" chmod 755 "$PREFIX/bin/iodbc-config" # # Fix basic permissions # chmod -R og+rX "$PREFIX" # # Done # exit 0 libiodbc-3.52.9/mac/iODBC/0000755000076400007640000000000012323210720012002 500000000000000libiodbc-3.52.9/mac/iODBC/English.lproj/0000755000076400007640000000000012323210720014520 500000000000000libiodbc-3.52.9/mac/iODBC/English.lproj/InfoPlist.strings0000644000076400007640000000106412323204667020000 00000000000000þÿ/* Localized versions of Info.plist keys */ CFBundleName = "iODBC"; CFBundleShortVersionString = "iODBC version 3.52.8"; CFBundleGetInfoString = "iODBC version 3.52.8, Copyright 1995-2012, OpenLink Software"; NSHumanReadableCopyright = "Copyright © 1995-2012, OpenLink Software"; libiodbc-3.52.9/mac/iODBC/Info-iODBC.plist0000644000076400007640000000157712323204667014577 00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable iODBC CFBundleGetInfoString iODBC Driver Manager Library CFBundleIconFile CFBundleIdentifier org.iodbc.core CFBundleInfoDictionaryVersion 6.0 CFBundleName iODBC Core CFBundlePackageType FMWK CFBundleShortVersionString 3.52.8 CFBundleSignature odbc CFBundleVersion 3.52.8 CSResourcesFileMapped libiodbc-3.52.9/mac/iODBC/iODBC.pbproj/0000755000076400007640000000000012323210720014155 500000000000000libiodbc-3.52.9/mac/iODBC/iODBC.pbproj/project.pbxproj0000644000076400007640000015526212323204667017201 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 39; objects = { 034768DDFF38A45A11DB9C8B = { children = ( 034768DEFF38A45A11DB9C8B, ); isa = PBXGroup; name = Products; refType = 4; sourceTree = ""; }; 034768DEFF38A45A11DB9C8B = { explicitFileType = wrapper.framework; isa = PBXFileReference; path = iODBC.framework; refType = 3; sourceTree = BUILT_PRODUCTS_DIR; }; //030 //031 //032 //033 //034 //080 //081 //082 //083 //084 0867D690FE84028FC02AAC07 = { buildSettings = { }; buildStyles = ( 4F0BB7EC011F40E904CA0E50, 4F0BB7ED011F40E904CA0E50, ); hasScannedForEncodings = 1; isa = PBXProject; mainGroup = 0867D691FE84028FC02AAC07; productRefGroup = 034768DDFF38A45A11DB9C8B; projectDirPath = ""; targets = ( 0867D69CFE84028FC02AAC07, ); }; 0867D691FE84028FC02AAC07 = { children = ( CD0056F708B12B6C006E73DA, 08FB77ACFE841707C02AAC07, 089C1665FE841158C02AAC07, 0867D69AFE84028FC02AAC07, 034768DDFF38A45A11DB9C8B, ); isa = PBXGroup; name = iODBC; refType = 4; sourceTree = ""; }; 0867D69AFE84028FC02AAC07 = { children = ( F5EC325104D01DC50121CDE8, F5EC325904D0397D0121CDE8, ); isa = PBXGroup; name = "External Frameworks and Libraries"; refType = 4; sourceTree = ""; }; 0867D69CFE84028FC02AAC07 = { buildPhases = ( 0867D69DFE84028FC02AAC07, 0867D69EFE84028FC02AAC07, 0867D69FFE84028FC02AAC07, 0867D6A0FE84028FC02AAC07, 0867D6A2FE84028FC02AAC07, ); buildSettings = { DEBUGGING_SYMBOLS = NO; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; EXPORTED_SYMBOLS_FILE = ../../mac/iodbc.exp; FRAMEWORK_SEARCH_PATHS = "../../mac/iODBCinst/build/Deployment ../../mac/iODBCinst/build"; FRAMEWORK_VERSION = 3.52; HEADER_SEARCH_PATHS = "../../include ../../iodbc ../../iodbcinst"; INSTALL_PATH = /Library/Frameworks; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-D_REENTRANT -DWITH_PTHREADS -D_MACX -DDLDAPI_MACX"; PREBINDING = NO; PRODUCT_NAME = iODBC; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = framework; }; dependencies = ( ); isa = PBXFrameworkTarget; name = iODBC; productInstallPath = /Library/Frameworks; productName = iODBC; productReference = 034768DEFF38A45A11DB9C8B; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable iODBC CFBundleGetInfoString iODBC Driver Manager Library CFBundleIconFile CFBundleIdentifier org.iodbc.core CFBundleInfoDictionaryVersion 6.0 CFBundleName iODBC Core CFBundlePackageType FMWK CFBundleShortVersionString 3.52.8 CFBundleSignature odbc CFBundleVersion 3.52.8 CSResourcesFileMapped "; }; 0867D69DFE84028FC02AAC07 = { buildActionMask = 2147483647; files = ( F535B3340277FBC601A801DE, F535B3350277FBC601A801DE, F535B3360277FBC601A801DE, F535B3370277FBC601A801DE, F535B3380277FBC601A801DE, F535B3390277FBC601A801DE, F535B33A0277FBC601A801DE, F535B33B0277FBC601A801DE, F535B33C0277FBC601A801DE, F535B33D0277FBC601A801DE, F535B3550277FC2E01A801DE, F535B3560277FC2E01A801DE, F535B3570277FC2E01A801DE, F535B3580277FC2E01A801DE, F535B3590277FC2E01A801DE, F535B35A0277FC2E01A801DE, F55DDABD04949A6001000FFE, F586819304949B4701000FFE, F586819704949C2101000FFE, F578097604CED1970194ADB8, F578098604CED1970194ADB8, 71DF011E06A3E1DD007AF56B, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 0867D69EFE84028FC02AAC07 = { buildActionMask = 2147483647; files = ( 089C1668FE841158C02AAC07, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 0867D69FFE84028FC02AAC07 = { buildActionMask = 2147483647; files = ( F535B33E0277FBC601A801DE, F535B33F0277FBC601A801DE, F535B3400277FBC601A801DE, F535B3410277FBC601A801DE, F535B3420277FBC601A801DE, F535B3430277FBC601A801DE, F535B3440277FBC601A801DE, F535B3450277FBC601A801DE, F535B3460277FBC601A801DE, F535B3470277FBC601A801DE, F535B3480277FBC601A801DE, F535B3490277FBC601A801DE, F535B34C0277FBC601A801DE, F535B34D0277FBC601A801DE, F535B34E0277FBC601A801DE, F54DA8D80279592201A801DE, F586819604949C2101000FFE, F578093D04CED1970194ADB8, F578093E04CED1970194ADB8, F578093F04CED1970194ADB8, F578094004CED1970194ADB8, F578094104CED1970194ADB8, F578094204CED1970194ADB8, F578094304CED1970194ADB8, F578094404CED1970194ADB8, F578094504CED1970194ADB8, F578094604CED1970194ADB8, F578094704CED1970194ADB8, F578094804CED1970194ADB8, F578094904CED1970194ADB8, F578094A04CED1970194ADB8, F578094B04CED1970194ADB8, F578094C04CED1970194ADB8, F578094D04CED1970194ADB8, F578094E04CED1970194ADB8, F578094F04CED1970194ADB8, F578095004CED1970194ADB8, F578095104CED1970194ADB8, F578095204CED1970194ADB8, F578095304CED1970194ADB8, F578095404CED1970194ADB8, F578095504CED1970194ADB8, F578095604CED1970194ADB8, F578095704CED1970194ADB8, F578095804CED1970194ADB8, F578095904CED1970194ADB8, F578095A04CED1970194ADB8, F578095B04CED1970194ADB8, F578095C04CED1970194ADB8, F578095D04CED1970194ADB8, F578095E04CED1970194ADB8, F578095F04CED1970194ADB8, F578096004CED1970194ADB8, F578096104CED1970194ADB8, F578096204CED1970194ADB8, F578096304CED1970194ADB8, F578096404CED1970194ADB8, F578096504CED1970194ADB8, F578096604CED1970194ADB8, F578096704CED1970194ADB8, F578096804CED1970194ADB8, F578096904CED1970194ADB8, F578096A04CED1970194ADB8, F578096B04CED1970194ADB8, F578096C04CED1970194ADB8, F578096D04CED1970194ADB8, F578096E04CED1970194ADB8, F578096F04CED1970194ADB8, F578097004CED1970194ADB8, F578097104CED1970194ADB8, F578097204CED1970194ADB8, F578097304CED1970194ADB8, F578097404CED1970194ADB8, F578097504CED1970194ADB8, F578097704CED1970194ADB8, F578097804CED1970194ADB8, F578097904CED1970194ADB8, F578097A04CED1970194ADB8, F578097B04CED1970194ADB8, F578097C04CED1970194ADB8, F578097D04CED1970194ADB8, F578097E04CED1970194ADB8, F578097F04CED1970194ADB8, F578098004CED1970194ADB8, F578098104CED1970194ADB8, F578098204CED1970194ADB8, F578098304CED1970194ADB8, F578098404CED1970194ADB8, F578098504CED1970194ADB8, F578098704CED1970194ADB8, F5C609C404D1703401237589, 71C53C2A05E39D1F00D95EFB, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 0867D6A0FE84028FC02AAC07 = { buildActionMask = 2147483647; files = ( F5EC325604D01DC50121CDE8, F5EC32F104D0397E0121CDE8, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 0867D6A2FE84028FC02AAC07 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 089C1665FE841158C02AAC07 = { children = ( 089C1666FE841158C02AAC07, ); isa = PBXGroup; name = Resources; refType = 4; sourceTree = ""; }; 089C1666FE841158C02AAC07 = { children = ( 089C1667FE841158C02AAC07, ); isa = PBXVariantGroup; name = InfoPlist.strings; refType = 4; sourceTree = ""; }; 089C1667FE841158C02AAC07 = { fileEncoding = 10; isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; refType = 4; sourceTree = ""; }; 089C1668FE841158C02AAC07 = { fileRef = 089C1666FE841158C02AAC07; isa = PBXBuildFile; settings = { }; }; 08FB77ACFE841707C02AAC07 = { children = ( F535B3150277FB3501A801DE, ); isa = PBXGroup; name = Source; refType = 4; sourceTree = ""; }; //080 //081 //082 //083 //084 //4F0 //4F1 //4F2 //4F3 //4F4 4F0BB7EC011F40E904CA0E50 = { buildSettings = { COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ""; FRAMEWORK_SEARCH_PATHS = "../../mac/iODBCinst/build/Development ../../mac/iODBCinst/build"; FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; HEADER_SEARCH_PATHS = "../../include ../../iodbcinst ../../iodbc"; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = "-D_REENTRANT -DWITH_PTHREADS -D_MACX -DDLDAPI_MACX"; RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Development; }; 4F0BB7ED011F40E904CA0E50 = { buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../mac/iodbc.exp; FRAMEWORK_SEARCH_PATHS = "../../mac/iODBCinst/build/Deployment ../../mac/iODBCinst/build"; FRAMEWORK_VERSION = 3.52; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; OTHER_CFLAGS = "-D_REENTRANT -DWITH_PTHREADS -D_MACX -DDLDAPI_MACX"; RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Deployment; }; //4F0 //4F1 //4F2 //4F3 //4F4 //710 //711 //712 //713 //714 71C53C2905E39D1F00D95EFB = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SetDescRec.c; path = ../../iodbc/trace/SetDescRec.c; refType = 2; sourceTree = SOURCE_ROOT; }; 71C53C2A05E39D1F00D95EFB = { fileRef = 71C53C2905E39D1F00D95EFB; isa = PBXBuildFile; settings = { }; }; 71DF011C06A3E1DD007AF56B = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcunix.h; path = ../include/iodbcunix.h; refType = 2; sourceTree = SOURCE_ROOT; }; 71DF011E06A3E1DD007AF56B = { fileRef = 71DF011C06A3E1DD007AF56B; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; //710 //711 //712 //713 //714 //CD0 //CD1 //CD2 //CD3 //CD4 CD0056F708B12B6C006E73DA = { children = ( F535B34F0277FC2E01A801DE, F535B3510277FC2E01A801DE, F535B3520277FC2E01A801DE, F535B3500277FC2E01A801DE, F535B3530277FC2E01A801DE, F535B3540277FC2E01A801DE, 71DF011C06A3E1DD007AF56B, ); isa = PBXGroup; name = Headers; refType = 4; sourceTree = ""; }; //CD0 //CD1 //CD2 //CD3 //CD4 //F50 //F51 //F52 //F53 //F54 F535B3150277FB3501A801DE = { children = ( F57808F104CED1010194ADB8, F535B3160277FBC601A801DE, F535B3170277FBC601A801DE, F535B3180277FBC601A801DE, F535B3190277FBC601A801DE, F535B31A0277FBC601A801DE, F535B31B0277FBC601A801DE, F535B31C0277FBC601A801DE, F535B31D0277FBC601A801DE, F535B31E0277FBC601A801DE, F535B31F0277FBC601A801DE, F535B3200277FBC601A801DE, F535B3210277FBC601A801DE, F535B3220277FBC601A801DE, F535B3230277FBC601A801DE, F535B3240277FBC601A801DE, F535B3250277FBC601A801DE, F535B3260277FBC601A801DE, F535B3270277FBC601A801DE, F535B3280277FBC601A801DE, F535B3290277FBC601A801DE, F535B32A0277FBC601A801DE, F535B32C0277FBC601A801DE, F535B32D0277FBC601A801DE, F535B32F0277FBC601A801DE, F535B3300277FBC601A801DE, F535B3310277FBC601A801DE, F535B3320277FBC601A801DE, F535B3330277FBC601A801DE, F54DA8D70279592201A801DE, F55DDABC04949A6001000FFE, F586819204949B4701000FFE, F586819404949C2101000FFE, F586819504949C2101000FFE, ); isa = PBXGroup; name = iODBC; refType = 4; sourceTree = ""; }; F535B3160277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = odbc3.c; path = ../../iodbc/odbc3.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3170277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = catalog.c; path = ../../iodbc/catalog.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3180277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = connect.c; path = ../../iodbc/connect.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3190277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = dlf.c; path = ../../iodbcinst/dlf.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B31A0277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dlf.h; path = ../../iodbcinst/dlf.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B31B0277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = dlproc.c; path = ../../iodbc/dlproc.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B31C0277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dlproc.h; path = ../../iodbc/dlproc.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B31D0277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = execute.c; path = ../../iodbc/execute.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B31E0277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fetch.c; path = ../../iodbc/fetch.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B31F0277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = hdbc.c; path = ../../iodbc/hdbc.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3200277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = hdbc.h; path = ../../iodbc/hdbc.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3210277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = hdesc.h; path = ../../iodbc/hdesc.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3220277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = henv.c; path = ../../iodbc/henv.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3230277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = henv.ci; path = ../../iodbc/henv.ci; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3240277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = henv.h; path = ../../iodbc/henv.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3250277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = herr.c; path = ../../iodbc/herr.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3260277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = herr.ci; path = ../../iodbc/herr.ci; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3270277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = herr.h; path = ../../iodbc/herr.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3280277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = hstmt.c; path = ../../iodbc/hstmt.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3290277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = hstmt.h; path = ../../iodbc/hstmt.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B32A0277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = info.c; path = ../../iodbc/info.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B32C0277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbc.h; path = ../../include/iodbc.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B32D0277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ithread.h; path = ../../iodbc/ithread.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B32F0277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = itrace.h; path = ../../iodbc/itrace.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3300277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = main.c; path = ../../iodbc/main.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3310277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = misc.c; path = ../../iodbc/misc.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3320277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = prepare.c; path = ../../iodbc/prepare.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3330277FBC601A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = result.c; path = ../../iodbc/result.c; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3340277FBC601A801DE = { fileRef = F535B31A0277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3350277FBC601A801DE = { fileRef = F535B31C0277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3360277FBC601A801DE = { fileRef = F535B3200277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3370277FBC601A801DE = { fileRef = F535B3210277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3380277FBC601A801DE = { fileRef = F535B3240277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3390277FBC601A801DE = { fileRef = F535B3270277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B33A0277FBC601A801DE = { fileRef = F535B3290277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B33B0277FBC601A801DE = { fileRef = F535B32C0277FBC601A801DE; isa = PBXBuildFile; settings = { ATTRIBUTES = ( ); }; }; F535B33C0277FBC601A801DE = { fileRef = F535B32D0277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B33D0277FBC601A801DE = { fileRef = F535B32F0277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B33E0277FBC601A801DE = { fileRef = F535B3160277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B33F0277FBC601A801DE = { fileRef = F535B3170277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3400277FBC601A801DE = { fileRef = F535B3180277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3410277FBC601A801DE = { fileRef = F535B3190277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3420277FBC601A801DE = { fileRef = F535B31B0277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3430277FBC601A801DE = { fileRef = F535B31D0277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3440277FBC601A801DE = { fileRef = F535B31E0277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3450277FBC601A801DE = { fileRef = F535B31F0277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3460277FBC601A801DE = { fileRef = F535B3220277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3470277FBC601A801DE = { fileRef = F535B3250277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3480277FBC601A801DE = { fileRef = F535B3280277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B3490277FBC601A801DE = { fileRef = F535B32A0277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B34C0277FBC601A801DE = { fileRef = F535B3310277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B34D0277FBC601A801DE = { fileRef = F535B3320277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B34E0277FBC601A801DE = { fileRef = F535B3330277FBC601A801DE; isa = PBXBuildFile; settings = { }; }; F535B34F0277FC2E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = isqltypes.h; path = ../include/isqltypes.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3500277FC2E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = isql.h; path = ../include/isql.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3510277FC2E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = isqlext.h; path = ../include/isqlext.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3520277FC2E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sql.h; path = ../include/sql.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3530277FC2E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sqlext.h; path = ../include/sqlext.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3540277FC2E01A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sqltypes.h; path = ../include/sqltypes.h; refType = 2; sourceTree = SOURCE_ROOT; }; F535B3550277FC2E01A801DE = { fileRef = F535B34F0277FC2E01A801DE; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F535B3560277FC2E01A801DE = { fileRef = F535B3500277FC2E01A801DE; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F535B3570277FC2E01A801DE = { fileRef = F535B3510277FC2E01A801DE; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F535B3580277FC2E01A801DE = { fileRef = F535B3520277FC2E01A801DE; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F535B3590277FC2E01A801DE = { fileRef = F535B3530277FC2E01A801DE; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F535B35A0277FC2E01A801DE = { fileRef = F535B3540277FC2E01A801DE; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F54DA8D70279592201A801DE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.exports; name = iodbc.exp; path = ../iodbc.exp; refType = 2; sourceTree = SOURCE_ROOT; }; F54DA8D80279592201A801DE = { fileRef = F54DA8D70279592201A801DE; isa = PBXBuildFile; settings = { }; }; F55DDABC04949A6001000FFE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sqlucode.h; path = ../include/sqlucode.h; refType = 2; sourceTree = SOURCE_ROOT; }; F55DDABD04949A6001000FFE = { fileRef = F55DDABC04949A6001000FFE; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F57808F104CED1010194ADB8 = { children = ( 71C53C2905E39D1F00D95EFB, F57808F204CED1970194ADB8, F57808F304CED1970194ADB8, F57808F404CED1970194ADB8, F57808F504CED1970194ADB8, F57808F604CED1970194ADB8, F57808F704CED1970194ADB8, F57808F804CED1970194ADB8, F57808F904CED1970194ADB8, F57808FA04CED1970194ADB8, F57808FB04CED1970194ADB8, F57808FC04CED1970194ADB8, F57808FD04CED1970194ADB8, F57808FE04CED1970194ADB8, F57808FF04CED1970194ADB8, F578090004CED1970194ADB8, F578090104CED1970194ADB8, F578090204CED1970194ADB8, F578090304CED1970194ADB8, F578090404CED1970194ADB8, F578090504CED1970194ADB8, F578090604CED1970194ADB8, F578090704CED1970194ADB8, F578090804CED1970194ADB8, F578090904CED1970194ADB8, F578090A04CED1970194ADB8, F578090B04CED1970194ADB8, F578090C04CED1970194ADB8, F578090D04CED1970194ADB8, F578090E04CED1970194ADB8, F578090F04CED1970194ADB8, F578091004CED1970194ADB8, F578091104CED1970194ADB8, F578091204CED1970194ADB8, F578091304CED1970194ADB8, F578091404CED1970194ADB8, F578091504CED1970194ADB8, F578091604CED1970194ADB8, F578091704CED1970194ADB8, F578091804CED1970194ADB8, F578091904CED1970194ADB8, F578091A04CED1970194ADB8, F578091B04CED1970194ADB8, F578091C04CED1970194ADB8, F578091D04CED1970194ADB8, F578091E04CED1970194ADB8, F578091F04CED1970194ADB8, F578092004CED1970194ADB8, F578092104CED1970194ADB8, F578092204CED1970194ADB8, F578092304CED1970194ADB8, F578092404CED1970194ADB8, F578092504CED1970194ADB8, F578092604CED1970194ADB8, F578092704CED1970194ADB8, F578092804CED1970194ADB8, F578092904CED1970194ADB8, F578092A04CED1970194ADB8, F578092B04CED1970194ADB8, F578092C04CED1970194ADB8, F578092D04CED1970194ADB8, F578092E04CED1970194ADB8, F578092F04CED1970194ADB8, F578093004CED1970194ADB8, F5C609C304D1703401237589, F578093104CED1970194ADB8, F578093204CED1970194ADB8, F578093304CED1970194ADB8, F578093404CED1970194ADB8, F578093504CED1970194ADB8, F578093604CED1970194ADB8, F578093704CED1970194ADB8, F578093804CED1970194ADB8, F578093904CED1970194ADB8, F578093A04CED1970194ADB8, F578093B04CED1970194ADB8, F578093C04CED1970194ADB8, ); isa = PBXGroup; name = trace; refType = 4; sourceTree = ""; }; F57808F204CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = AllocConnect.c; path = ../../iodbc/trace/AllocConnect.c; refType = 2; sourceTree = SOURCE_ROOT; }; F57808F304CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = AllocEnv.c; path = ../../iodbc/trace/AllocEnv.c; refType = 2; sourceTree = SOURCE_ROOT; }; F57808F404CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = AllocHandle.c; path = ../../iodbc/trace/AllocHandle.c; refType = 2; sourceTree = SOURCE_ROOT; }; F57808F504CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = AllocStmt.c; path = ../../iodbc/trace/AllocStmt.c; refType = 2; sourceTree = SOURCE_ROOT; }; F57808F604CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = BindCol.c; path = ../../iodbc/trace/BindCol.c; refType = 2; sourceTree = SOURCE_ROOT; }; F57808F704CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = BindParameter.c; path = ../../iodbc/trace/BindParameter.c; refType = 2; sourceTree = SOURCE_ROOT; }; F57808F804CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = BrowseConnect.c; path = ../../iodbc/trace/BrowseConnect.c; refType = 2; sourceTree = SOURCE_ROOT; }; F57808F904CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = BulkOperations.c; path = ../../iodbc/trace/BulkOperations.c; refType = 2; sourceTree = SOURCE_ROOT; }; F57808FA04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Cancel.c; path = ../../iodbc/trace/Cancel.c; refType = 2; sourceTree = SOURCE_ROOT; }; F57808FB04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = CloseCursor.c; path = ../../iodbc/trace/CloseCursor.c; refType = 2; sourceTree = SOURCE_ROOT; }; F57808FC04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = ColAttribute.c; path = ../../iodbc/trace/ColAttribute.c; refType = 2; sourceTree = SOURCE_ROOT; }; F57808FD04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = ColumnPrivileges.c; path = ../../iodbc/trace/ColumnPrivileges.c; refType = 2; sourceTree = SOURCE_ROOT; }; F57808FE04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Columns.c; path = ../../iodbc/trace/Columns.c; refType = 2; sourceTree = SOURCE_ROOT; }; F57808FF04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Connect.c; path = ../../iodbc/trace/Connect.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090004CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = CopyDesc.c; path = ../../iodbc/trace/CopyDesc.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090104CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = DataSources.c; path = ../../iodbc/trace/DataSources.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090204CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = DescribeCol.c; path = ../../iodbc/trace/DescribeCol.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090304CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = DescribeParam.c; path = ../../iodbc/trace/DescribeParam.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090404CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Disconnect.c; path = ../../iodbc/trace/Disconnect.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090504CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = DriverConnect.c; path = ../../iodbc/trace/DriverConnect.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090604CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Drivers.c; path = ../../iodbc/trace/Drivers.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090704CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = EndTran.c; path = ../../iodbc/trace/EndTran.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090804CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Error.c; path = ../../iodbc/trace/Error.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090904CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = ExecDirect.c; path = ../../iodbc/trace/ExecDirect.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090A04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Execute.c; path = ../../iodbc/trace/Execute.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090B04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = ExtendedFetch.c; path = ../../iodbc/trace/ExtendedFetch.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090C04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Fetch.c; path = ../../iodbc/trace/Fetch.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090D04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = FetchScroll.c; path = ../../iodbc/trace/FetchScroll.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090E04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = ForeignKeys.c; path = ../../iodbc/trace/ForeignKeys.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578090F04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = FreeConnect.c; path = ../../iodbc/trace/FreeConnect.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091004CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = FreeEnv.c; path = ../../iodbc/trace/FreeEnv.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091104CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = FreeHandle.c; path = ../../iodbc/trace/FreeHandle.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091204CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = FreeStmt.c; path = ../../iodbc/trace/FreeStmt.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091304CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = GetConnectAttr.c; path = ../../iodbc/trace/GetConnectAttr.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091404CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = GetConnectOption.c; path = ../../iodbc/trace/GetConnectOption.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091504CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = GetCursorName.c; path = ../../iodbc/trace/GetCursorName.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091604CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = GetData.c; path = ../../iodbc/trace/GetData.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091704CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = GetDescField.c; path = ../../iodbc/trace/GetDescField.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091804CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = GetDescRec.c; path = ../../iodbc/trace/GetDescRec.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091904CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = GetDiagField.c; path = ../../iodbc/trace/GetDiagField.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091A04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = GetDiagRec.c; path = ../../iodbc/trace/GetDiagRec.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091B04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = GetEnvAttr.c; path = ../../iodbc/trace/GetEnvAttr.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091C04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = GetFunctions.c; path = ../../iodbc/trace/GetFunctions.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091D04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = GetStmtAttr.c; path = ../../iodbc/trace/GetStmtAttr.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091E04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = GetStmtOption.c; path = ../../iodbc/trace/GetStmtOption.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578091F04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = GetTypeInfo.c; path = ../../iodbc/trace/GetTypeInfo.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092004CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Info.c; path = ../../iodbc/trace/Info.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092104CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = MoreResults.c; path = ../../iodbc/trace/MoreResults.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092204CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = NativeSql.c; path = ../../iodbc/trace/NativeSql.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092304CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = NumParams.c; path = ../../iodbc/trace/NumParams.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092404CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = NumResultCols.c; path = ../../iodbc/trace/NumResultCols.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092504CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = ParamData.c; path = ../../iodbc/trace/ParamData.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092604CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = ParamOptions.c; path = ../../iodbc/trace/ParamOptions.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092704CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Prepare.c; path = ../../iodbc/trace/Prepare.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092804CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = PrimaryKeys.c; path = ../../iodbc/trace/PrimaryKeys.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092904CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = ProcedureColumns.c; path = ../../iodbc/trace/ProcedureColumns.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092A04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Procedures.c; path = ../../iodbc/trace/Procedures.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092B04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = proto.h; path = ../../iodbc/trace/proto.h; refType = 2; sourceTree = SOURCE_ROOT; }; F578092C04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = PutData.c; path = ../../iodbc/trace/PutData.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092D04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = RowCount.c; path = ../../iodbc/trace/RowCount.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092E04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SetConnectAttr.c; path = ../../iodbc/trace/SetConnectAttr.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578092F04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SetConnectOption.c; path = ../../iodbc/trace/SetConnectOption.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578093004CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SetCursorName.c; path = ../../iodbc/trace/SetCursorName.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578093104CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SetEnvAttr.c; path = ../../iodbc/trace/SetEnvAttr.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578093204CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SetPos.c; path = ../../iodbc/trace/SetPos.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578093304CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SetScrollOptions.c; path = ../../iodbc/trace/SetScrollOptions.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578093404CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SetStmtAttr.c; path = ../../iodbc/trace/SetStmtAttr.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578093504CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SetStmtOption.c; path = ../../iodbc/trace/SetStmtOption.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578093604CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SpecialColumns.c; path = ../../iodbc/trace/SpecialColumns.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578093704CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Statistics.c; path = ../../iodbc/trace/Statistics.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578093804CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = TablePrivileges.c; path = ../../iodbc/trace/TablePrivileges.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578093904CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Tables.c; path = ../../iodbc/trace/Tables.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578093A04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = trace.c; path = ../../iodbc/trace/trace.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578093B04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = trace.h; path = ../../iodbc/trace/trace.h; refType = 2; sourceTree = SOURCE_ROOT; }; F578093C04CED1970194ADB8 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = Transact.c; path = ../../iodbc/trace/Transact.c; refType = 2; sourceTree = SOURCE_ROOT; }; F578093D04CED1970194ADB8 = { fileRef = F57808F204CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578093E04CED1970194ADB8 = { fileRef = F57808F304CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578093F04CED1970194ADB8 = { fileRef = F57808F404CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094004CED1970194ADB8 = { fileRef = F57808F504CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094104CED1970194ADB8 = { fileRef = F57808F604CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094204CED1970194ADB8 = { fileRef = F57808F704CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094304CED1970194ADB8 = { fileRef = F57808F804CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094404CED1970194ADB8 = { fileRef = F57808F904CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094504CED1970194ADB8 = { fileRef = F57808FA04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094604CED1970194ADB8 = { fileRef = F57808FB04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094704CED1970194ADB8 = { fileRef = F57808FC04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094804CED1970194ADB8 = { fileRef = F57808FD04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094904CED1970194ADB8 = { fileRef = F57808FE04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094A04CED1970194ADB8 = { fileRef = F57808FF04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094B04CED1970194ADB8 = { fileRef = F578090004CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094C04CED1970194ADB8 = { fileRef = F578090104CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094D04CED1970194ADB8 = { fileRef = F578090204CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094E04CED1970194ADB8 = { fileRef = F578090304CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578094F04CED1970194ADB8 = { fileRef = F578090404CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095004CED1970194ADB8 = { fileRef = F578090504CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095104CED1970194ADB8 = { fileRef = F578090604CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095204CED1970194ADB8 = { fileRef = F578090704CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095304CED1970194ADB8 = { fileRef = F578090804CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095404CED1970194ADB8 = { fileRef = F578090904CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095504CED1970194ADB8 = { fileRef = F578090A04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095604CED1970194ADB8 = { fileRef = F578090B04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095704CED1970194ADB8 = { fileRef = F578090C04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095804CED1970194ADB8 = { fileRef = F578090D04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095904CED1970194ADB8 = { fileRef = F578090E04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095A04CED1970194ADB8 = { fileRef = F578090F04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095B04CED1970194ADB8 = { fileRef = F578091004CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095C04CED1970194ADB8 = { fileRef = F578091104CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095D04CED1970194ADB8 = { fileRef = F578091204CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095E04CED1970194ADB8 = { fileRef = F578091304CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578095F04CED1970194ADB8 = { fileRef = F578091404CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096004CED1970194ADB8 = { fileRef = F578091504CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096104CED1970194ADB8 = { fileRef = F578091604CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096204CED1970194ADB8 = { fileRef = F578091704CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096304CED1970194ADB8 = { fileRef = F578091804CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096404CED1970194ADB8 = { fileRef = F578091904CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096504CED1970194ADB8 = { fileRef = F578091A04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096604CED1970194ADB8 = { fileRef = F578091B04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096704CED1970194ADB8 = { fileRef = F578091C04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096804CED1970194ADB8 = { fileRef = F578091D04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096904CED1970194ADB8 = { fileRef = F578091E04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096A04CED1970194ADB8 = { fileRef = F578091F04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096B04CED1970194ADB8 = { fileRef = F578092004CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096C04CED1970194ADB8 = { fileRef = F578092104CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096D04CED1970194ADB8 = { fileRef = F578092204CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096E04CED1970194ADB8 = { fileRef = F578092304CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578096F04CED1970194ADB8 = { fileRef = F578092404CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097004CED1970194ADB8 = { fileRef = F578092504CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097104CED1970194ADB8 = { fileRef = F578092604CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097204CED1970194ADB8 = { fileRef = F578092704CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097304CED1970194ADB8 = { fileRef = F578092804CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097404CED1970194ADB8 = { fileRef = F578092904CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097504CED1970194ADB8 = { fileRef = F578092A04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097604CED1970194ADB8 = { fileRef = F578092B04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097704CED1970194ADB8 = { fileRef = F578092C04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097804CED1970194ADB8 = { fileRef = F578092D04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097904CED1970194ADB8 = { fileRef = F578092E04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097A04CED1970194ADB8 = { fileRef = F578092F04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097B04CED1970194ADB8 = { fileRef = F578093004CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097C04CED1970194ADB8 = { fileRef = F578093104CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097D04CED1970194ADB8 = { fileRef = F578093204CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097E04CED1970194ADB8 = { fileRef = F578093304CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578097F04CED1970194ADB8 = { fileRef = F578093404CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578098004CED1970194ADB8 = { fileRef = F578093504CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578098104CED1970194ADB8 = { fileRef = F578093604CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578098204CED1970194ADB8 = { fileRef = F578093704CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578098304CED1970194ADB8 = { fileRef = F578093804CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578098404CED1970194ADB8 = { fileRef = F578093904CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578098504CED1970194ADB8 = { fileRef = F578093A04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578098604CED1970194ADB8 = { fileRef = F578093B04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F578098704CED1970194ADB8 = { fileRef = F578093C04CED1970194ADB8; isa = PBXBuildFile; settings = { }; }; F586819204949B4701000FFE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = iodbcext.h; path = ../include/iodbcext.h; refType = 2; sourceTree = SOURCE_ROOT; }; F586819304949B4701000FFE = { fileRef = F586819204949B4701000FFE; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; F586819404949C2101000FFE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = unicode.c; path = ../../iodbcinst/unicode.c; refType = 2; sourceTree = SOURCE_ROOT; }; F586819504949C2101000FFE = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = unicode.h; path = ../../iodbcinst/unicode.h; refType = 2; sourceTree = SOURCE_ROOT; }; F586819604949C2101000FFE = { fileRef = F586819404949C2101000FFE; isa = PBXBuildFile; settings = { }; }; F586819704949C2101000FFE = { fileRef = F586819504949C2101000FFE; isa = PBXBuildFile; settings = { }; }; F5C609C304D1703401237589 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = SetDescField.c; path = ../../iodbc/trace/SetDescField.c; refType = 2; sourceTree = SOURCE_ROOT; }; F5C609C404D1703401237589 = { fileRef = F5C609C304D1703401237589; isa = PBXBuildFile; settings = { }; }; F5EC325104D01DC50121CDE8 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBCinst.framework; path = ../iODBCinst/build/iODBCinst.framework; refType = 2; sourceTree = SOURCE_ROOT; }; F5EC325604D01DC50121CDE8 = { fileRef = F5EC325104D01DC50121CDE8; isa = PBXBuildFile; settings = { }; }; F5EC325904D0397D0121CDE8 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; refType = 0; sourceTree = ""; }; F5EC32F104D0397E0121CDE8 = { fileRef = F5EC325904D0397D0121CDE8; isa = PBXBuildFile; settings = { }; }; }; rootObject = 0867D690FE84028FC02AAC07; } libiodbc-3.52.9/mac/iODBC/iODBC.xcodeproj/0000755000076400007640000000000012323210720014656 500000000000000libiodbc-3.52.9/mac/iODBC/iODBC.xcodeproj/project.pbxproj0000644000076400007640000020031212323204667017665 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ CDAE3A340987CB86003250F8 /* dlf.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B31A0277FBC601A801DE /* dlf.h */; }; CDAE3A350987CB86003250F8 /* dlproc.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B31C0277FBC601A801DE /* dlproc.h */; }; CDAE3A360987CB86003250F8 /* hdbc.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3200277FBC601A801DE /* hdbc.h */; }; CDAE3A370987CB86003250F8 /* hdesc.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3210277FBC601A801DE /* hdesc.h */; }; CDAE3A380987CB86003250F8 /* henv.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3240277FBC601A801DE /* henv.h */; }; CDAE3A390987CB86003250F8 /* herr.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3270277FBC601A801DE /* herr.h */; }; CDAE3A3A0987CB86003250F8 /* hstmt.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3290277FBC601A801DE /* hstmt.h */; }; CDAE3A3B0987CB86003250F8 /* iodbc.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B32C0277FBC601A801DE /* iodbc.h */; settings = {ATTRIBUTES = (); }; }; CDAE3A3C0987CB86003250F8 /* ithread.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B32D0277FBC601A801DE /* ithread.h */; }; CDAE3A3D0987CB86003250F8 /* itrace.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B32F0277FBC601A801DE /* itrace.h */; }; CDAE3A3E0987CB86003250F8 /* isqltypes.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B34F0277FC2E01A801DE /* isqltypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; CDAE3A3F0987CB86003250F8 /* isql.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3500277FC2E01A801DE /* isql.h */; settings = {ATTRIBUTES = (Public, ); }; }; CDAE3A400987CB86003250F8 /* isqlext.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3510277FC2E01A801DE /* isqlext.h */; settings = {ATTRIBUTES = (Public, ); }; }; CDAE3A410987CB86003250F8 /* sql.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3520277FC2E01A801DE /* sql.h */; settings = {ATTRIBUTES = (Public, ); }; }; CDAE3A420987CB86003250F8 /* sqlext.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3530277FC2E01A801DE /* sqlext.h */; settings = {ATTRIBUTES = (Public, ); }; }; CDAE3A430987CB86003250F8 /* sqltypes.h in Headers */ = {isa = PBXBuildFile; fileRef = F535B3540277FC2E01A801DE /* sqltypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; CDAE3A440987CB86003250F8 /* sqlucode.h in Headers */ = {isa = PBXBuildFile; fileRef = F55DDABC04949A6001000FFE /* sqlucode.h */; settings = {ATTRIBUTES = (Public, ); }; }; CDAE3A450987CB86003250F8 /* iodbcext.h in Headers */ = {isa = PBXBuildFile; fileRef = F586819204949B4701000FFE /* iodbcext.h */; settings = {ATTRIBUTES = (Public, ); }; }; CDAE3A460987CB86003250F8 /* unicode.h in Headers */ = {isa = PBXBuildFile; fileRef = F586819504949C2101000FFE /* unicode.h */; }; CDAE3A470987CB86003250F8 /* proto.h in Headers */ = {isa = PBXBuildFile; fileRef = F578092B04CED1970194ADB8 /* proto.h */; }; CDAE3A480987CB86003250F8 /* trace.h in Headers */ = {isa = PBXBuildFile; fileRef = F578093B04CED1970194ADB8 /* trace.h */; }; CDAE3A490987CB86003250F8 /* iodbcunix.h in Headers */ = {isa = PBXBuildFile; fileRef = 71DF011C06A3E1DD007AF56B /* iodbcunix.h */; settings = {ATTRIBUTES = (Public, ); }; }; CDAE3A4B0987CB86003250F8 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; CDAE3A4D0987CB86003250F8 /* odbc3.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3160277FBC601A801DE /* odbc3.c */; }; CDAE3A4E0987CB86003250F8 /* catalog.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3170277FBC601A801DE /* catalog.c */; }; CDAE3A4F0987CB86003250F8 /* connect.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3180277FBC601A801DE /* connect.c */; }; CDAE3A500987CB86003250F8 /* dlf.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3190277FBC601A801DE /* dlf.c */; }; CDAE3A510987CB86003250F8 /* dlproc.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B31B0277FBC601A801DE /* dlproc.c */; }; CDAE3A520987CB86003250F8 /* execute.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B31D0277FBC601A801DE /* execute.c */; }; CDAE3A530987CB86003250F8 /* fetch.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B31E0277FBC601A801DE /* fetch.c */; }; CDAE3A540987CB86003250F8 /* hdbc.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B31F0277FBC601A801DE /* hdbc.c */; }; CDAE3A550987CB86003250F8 /* henv.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3220277FBC601A801DE /* henv.c */; }; CDAE3A560987CB86003250F8 /* herr.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3250277FBC601A801DE /* herr.c */; }; CDAE3A570987CB86003250F8 /* hstmt.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3280277FBC601A801DE /* hstmt.c */; }; CDAE3A580987CB86003250F8 /* info.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B32A0277FBC601A801DE /* info.c */; }; CDAE3A590987CB86003250F8 /* misc.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3310277FBC601A801DE /* misc.c */; }; CDAE3A5A0987CB86003250F8 /* prepare.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3320277FBC601A801DE /* prepare.c */; }; CDAE3A5B0987CB86003250F8 /* result.c in Sources */ = {isa = PBXBuildFile; fileRef = F535B3330277FBC601A801DE /* result.c */; }; CDAE3A5C0987CB86003250F8 /* iodbc.exp in Sources */ = {isa = PBXBuildFile; fileRef = F54DA8D70279592201A801DE /* iodbc.exp */; }; CDAE3A5D0987CB86003250F8 /* unicode.c in Sources */ = {isa = PBXBuildFile; fileRef = F586819404949C2101000FFE /* unicode.c */; }; CDAE3A5E0987CB86003250F8 /* AllocConnect.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808F204CED1970194ADB8 /* AllocConnect.c */; }; CDAE3A5F0987CB86003250F8 /* AllocEnv.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808F304CED1970194ADB8 /* AllocEnv.c */; }; CDAE3A600987CB86003250F8 /* AllocHandle.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808F404CED1970194ADB8 /* AllocHandle.c */; }; CDAE3A610987CB86003250F8 /* AllocStmt.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808F504CED1970194ADB8 /* AllocStmt.c */; }; CDAE3A620987CB86003250F8 /* BindCol.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808F604CED1970194ADB8 /* BindCol.c */; }; CDAE3A630987CB86003250F8 /* BindParameter.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808F704CED1970194ADB8 /* BindParameter.c */; }; CDAE3A640987CB86003250F8 /* BrowseConnect.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808F804CED1970194ADB8 /* BrowseConnect.c */; }; CDAE3A650987CB86003250F8 /* BulkOperations.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808F904CED1970194ADB8 /* BulkOperations.c */; }; CDAE3A660987CB86003250F8 /* Cancel.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808FA04CED1970194ADB8 /* Cancel.c */; }; CDAE3A670987CB86003250F8 /* CloseCursor.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808FB04CED1970194ADB8 /* CloseCursor.c */; }; CDAE3A680987CB86003250F8 /* ColAttribute.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808FC04CED1970194ADB8 /* ColAttribute.c */; }; CDAE3A690987CB86003250F8 /* ColumnPrivileges.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808FD04CED1970194ADB8 /* ColumnPrivileges.c */; }; CDAE3A6A0987CB86003250F8 /* Columns.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808FE04CED1970194ADB8 /* Columns.c */; }; CDAE3A6B0987CB86003250F8 /* Connect.c in Sources */ = {isa = PBXBuildFile; fileRef = F57808FF04CED1970194ADB8 /* Connect.c */; }; CDAE3A6C0987CB86003250F8 /* CopyDesc.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090004CED1970194ADB8 /* CopyDesc.c */; }; CDAE3A6D0987CB86003250F8 /* DataSources.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090104CED1970194ADB8 /* DataSources.c */; }; CDAE3A6E0987CB86003250F8 /* DescribeCol.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090204CED1970194ADB8 /* DescribeCol.c */; }; CDAE3A6F0987CB86003250F8 /* DescribeParam.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090304CED1970194ADB8 /* DescribeParam.c */; }; CDAE3A700987CB86003250F8 /* Disconnect.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090404CED1970194ADB8 /* Disconnect.c */; }; CDAE3A710987CB86003250F8 /* DriverConnect.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090504CED1970194ADB8 /* DriverConnect.c */; }; CDAE3A720987CB86003250F8 /* Drivers.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090604CED1970194ADB8 /* Drivers.c */; }; CDAE3A730987CB86003250F8 /* EndTran.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090704CED1970194ADB8 /* EndTran.c */; }; CDAE3A740987CB86003250F8 /* Error.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090804CED1970194ADB8 /* Error.c */; }; CDAE3A750987CB86003250F8 /* ExecDirect.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090904CED1970194ADB8 /* ExecDirect.c */; }; CDAE3A760987CB86003250F8 /* Execute.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090A04CED1970194ADB8 /* Execute.c */; }; CDAE3A770987CB86003250F8 /* ExtendedFetch.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090B04CED1970194ADB8 /* ExtendedFetch.c */; }; CDAE3A780987CB86003250F8 /* Fetch.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090C04CED1970194ADB8 /* Fetch.c */; }; CDAE3A790987CB86003250F8 /* FetchScroll.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090D04CED1970194ADB8 /* FetchScroll.c */; }; CDAE3A7A0987CB86003250F8 /* ForeignKeys.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090E04CED1970194ADB8 /* ForeignKeys.c */; }; CDAE3A7B0987CB86003250F8 /* FreeConnect.c in Sources */ = {isa = PBXBuildFile; fileRef = F578090F04CED1970194ADB8 /* FreeConnect.c */; }; CDAE3A7C0987CB86003250F8 /* FreeEnv.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091004CED1970194ADB8 /* FreeEnv.c */; }; CDAE3A7D0987CB86003250F8 /* FreeHandle.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091104CED1970194ADB8 /* FreeHandle.c */; }; CDAE3A7E0987CB86003250F8 /* FreeStmt.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091204CED1970194ADB8 /* FreeStmt.c */; }; CDAE3A7F0987CB86003250F8 /* GetConnectAttr.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091304CED1970194ADB8 /* GetConnectAttr.c */; }; CDAE3A800987CB86003250F8 /* GetConnectOption.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091404CED1970194ADB8 /* GetConnectOption.c */; }; CDAE3A810987CB86003250F8 /* GetCursorName.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091504CED1970194ADB8 /* GetCursorName.c */; }; CDAE3A820987CB86003250F8 /* GetData.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091604CED1970194ADB8 /* GetData.c */; }; CDAE3A830987CB86003250F8 /* GetDescField.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091704CED1970194ADB8 /* GetDescField.c */; }; CDAE3A840987CB86003250F8 /* GetDescRec.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091804CED1970194ADB8 /* GetDescRec.c */; }; CDAE3A850987CB86003250F8 /* GetDiagField.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091904CED1970194ADB8 /* GetDiagField.c */; }; CDAE3A860987CB86003250F8 /* GetDiagRec.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091A04CED1970194ADB8 /* GetDiagRec.c */; }; CDAE3A870987CB86003250F8 /* GetEnvAttr.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091B04CED1970194ADB8 /* GetEnvAttr.c */; }; CDAE3A880987CB86003250F8 /* GetFunctions.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091C04CED1970194ADB8 /* GetFunctions.c */; }; CDAE3A890987CB86003250F8 /* GetStmtAttr.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091D04CED1970194ADB8 /* GetStmtAttr.c */; }; CDAE3A8A0987CB86003250F8 /* GetStmtOption.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091E04CED1970194ADB8 /* GetStmtOption.c */; }; CDAE3A8B0987CB86003250F8 /* GetTypeInfo.c in Sources */ = {isa = PBXBuildFile; fileRef = F578091F04CED1970194ADB8 /* GetTypeInfo.c */; }; CDAE3A8C0987CB86003250F8 /* Info.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092004CED1970194ADB8 /* Info.c */; }; CDAE3A8D0987CB86003250F8 /* MoreResults.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092104CED1970194ADB8 /* MoreResults.c */; }; CDAE3A8E0987CB86003250F8 /* NativeSql.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092204CED1970194ADB8 /* NativeSql.c */; }; CDAE3A8F0987CB86003250F8 /* NumParams.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092304CED1970194ADB8 /* NumParams.c */; }; CDAE3A900987CB86003250F8 /* NumResultCols.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092404CED1970194ADB8 /* NumResultCols.c */; }; CDAE3A910987CB86003250F8 /* ParamData.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092504CED1970194ADB8 /* ParamData.c */; }; CDAE3A920987CB86003250F8 /* ParamOptions.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092604CED1970194ADB8 /* ParamOptions.c */; }; CDAE3A930987CB86003250F8 /* Prepare.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092704CED1970194ADB8 /* Prepare.c */; }; CDAE3A940987CB86003250F8 /* PrimaryKeys.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092804CED1970194ADB8 /* PrimaryKeys.c */; }; CDAE3A950987CB86003250F8 /* ProcedureColumns.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092904CED1970194ADB8 /* ProcedureColumns.c */; }; CDAE3A960987CB86003250F8 /* Procedures.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092A04CED1970194ADB8 /* Procedures.c */; }; CDAE3A970987CB86003250F8 /* PutData.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092C04CED1970194ADB8 /* PutData.c */; }; CDAE3A980987CB86003250F8 /* RowCount.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092D04CED1970194ADB8 /* RowCount.c */; }; CDAE3A990987CB86003250F8 /* SetConnectAttr.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092E04CED1970194ADB8 /* SetConnectAttr.c */; }; CDAE3A9A0987CB86003250F8 /* SetConnectOption.c in Sources */ = {isa = PBXBuildFile; fileRef = F578092F04CED1970194ADB8 /* SetConnectOption.c */; }; CDAE3A9B0987CB86003250F8 /* SetCursorName.c in Sources */ = {isa = PBXBuildFile; fileRef = F578093004CED1970194ADB8 /* SetCursorName.c */; }; CDAE3A9C0987CB86003250F8 /* SetEnvAttr.c in Sources */ = {isa = PBXBuildFile; fileRef = F578093104CED1970194ADB8 /* SetEnvAttr.c */; }; CDAE3A9D0987CB86003250F8 /* SetPos.c in Sources */ = {isa = PBXBuildFile; fileRef = F578093204CED1970194ADB8 /* SetPos.c */; }; CDAE3A9E0987CB86003250F8 /* SetScrollOptions.c in Sources */ = {isa = PBXBuildFile; fileRef = F578093304CED1970194ADB8 /* SetScrollOptions.c */; }; CDAE3A9F0987CB86003250F8 /* SetStmtAttr.c in Sources */ = {isa = PBXBuildFile; fileRef = F578093404CED1970194ADB8 /* SetStmtAttr.c */; }; CDAE3AA00987CB86003250F8 /* SetStmtOption.c in Sources */ = {isa = PBXBuildFile; fileRef = F578093504CED1970194ADB8 /* SetStmtOption.c */; }; CDAE3AA10987CB86003250F8 /* SpecialColumns.c in Sources */ = {isa = PBXBuildFile; fileRef = F578093604CED1970194ADB8 /* SpecialColumns.c */; }; CDAE3AA20987CB86003250F8 /* Statistics.c in Sources */ = {isa = PBXBuildFile; fileRef = F578093704CED1970194ADB8 /* Statistics.c */; }; CDAE3AA30987CB86003250F8 /* TablePrivileges.c in Sources */ = {isa = PBXBuildFile; fileRef = F578093804CED1970194ADB8 /* TablePrivileges.c */; }; CDAE3AA40987CB86003250F8 /* Tables.c in Sources */ = {isa = PBXBuildFile; fileRef = F578093904CED1970194ADB8 /* Tables.c */; }; CDAE3AA50987CB86003250F8 /* trace.c in Sources */ = {isa = PBXBuildFile; fileRef = F578093A04CED1970194ADB8 /* trace.c */; }; CDAE3AA60987CB86003250F8 /* Transact.c in Sources */ = {isa = PBXBuildFile; fileRef = F578093C04CED1970194ADB8 /* Transact.c */; }; CDAE3AA70987CB86003250F8 /* SetDescField.c in Sources */ = {isa = PBXBuildFile; fileRef = F5C609C304D1703401237589 /* SetDescField.c */; }; CDAE3AA80987CB86003250F8 /* SetDescRec.c in Sources */ = {isa = PBXBuildFile; fileRef = 71C53C2905E39D1F00D95EFB /* SetDescRec.c */; }; CDAE3AAA0987CB86003250F8 /* iODBCinst.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5EC325104D01DC50121CDE8 /* iODBCinst.framework */; }; CDAE3AAB0987CB86003250F8 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5EC325904D0397D0121CDE8 /* Carbon.framework */; }; /* End PBXBuildFile section */ /* Begin PBXBuildStyle section */ 4F0BB7EC011F40E904CA0E50 /* Development */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ""; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBCinst/build/Development, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; HEADER_SEARCH_PATHS = ( ../../include, ../../iodbcinst, ../../iodbc, ); OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = ( "-D_REENTRANT", "-DWITH_PTHREADS", "-D_MACX", "-DDLDAPI_MACX", ); RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; name = Development; }; 4F0BB7ED011F40E904CA0E50 /* Deployment */ = { isa = PBXBuildStyle; buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../mac/iodbc.exp; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; OTHER_CFLAGS = ( "-D_REENTRANT", "-DWITH_PTHREADS", "-D_MACX", "-DDLDAPI_MACX", ); RESMERGER_SOURCES_FORK = data; ZERO_LINK = NO; }; name = Deployment; }; /* End PBXBuildStyle section */ /* Begin PBXFileReference section */ 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 71C53C2905E39D1F00D95EFB /* SetDescRec.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SetDescRec.c; path = ../../iodbc/trace/SetDescRec.c; sourceTree = SOURCE_ROOT; }; 71DF011C06A3E1DD007AF56B /* iodbcunix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbcunix.h; path = ../include/iodbcunix.h; sourceTree = SOURCE_ROOT; }; CDAE3AB10987CB86003250F8 /* Info-iODBC.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "Info-iODBC.plist"; sourceTree = ""; }; CDAE3AB20987CB86003250F8 /* iODBC.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = iODBC.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F535B3160277FBC601A801DE /* odbc3.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = odbc3.c; path = ../../iodbc/odbc3.c; sourceTree = SOURCE_ROOT; }; F535B3170277FBC601A801DE /* catalog.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = catalog.c; path = ../../iodbc/catalog.c; sourceTree = SOURCE_ROOT; }; F535B3180277FBC601A801DE /* connect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = connect.c; path = ../../iodbc/connect.c; sourceTree = SOURCE_ROOT; }; F535B3190277FBC601A801DE /* dlf.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dlf.c; path = ../../iodbcinst/dlf.c; sourceTree = SOURCE_ROOT; }; F535B31A0277FBC601A801DE /* dlf.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = dlf.h; path = ../../iodbcinst/dlf.h; sourceTree = SOURCE_ROOT; }; F535B31B0277FBC601A801DE /* dlproc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dlproc.c; path = ../../iodbc/dlproc.c; sourceTree = SOURCE_ROOT; }; F535B31C0277FBC601A801DE /* dlproc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = dlproc.h; path = ../../iodbc/dlproc.h; sourceTree = SOURCE_ROOT; }; F535B31D0277FBC601A801DE /* execute.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = execute.c; path = ../../iodbc/execute.c; sourceTree = SOURCE_ROOT; }; F535B31E0277FBC601A801DE /* fetch.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = fetch.c; path = ../../iodbc/fetch.c; sourceTree = SOURCE_ROOT; }; F535B31F0277FBC601A801DE /* hdbc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hdbc.c; path = ../../iodbc/hdbc.c; sourceTree = SOURCE_ROOT; }; F535B3200277FBC601A801DE /* hdbc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hdbc.h; path = ../../iodbc/hdbc.h; sourceTree = SOURCE_ROOT; }; F535B3210277FBC601A801DE /* hdesc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hdesc.h; path = ../../iodbc/hdesc.h; sourceTree = SOURCE_ROOT; }; F535B3220277FBC601A801DE /* henv.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = henv.c; path = ../../iodbc/henv.c; sourceTree = SOURCE_ROOT; }; F535B3230277FBC601A801DE /* henv.ci */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = henv.ci; path = ../../iodbc/henv.ci; sourceTree = SOURCE_ROOT; }; F535B3240277FBC601A801DE /* henv.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = henv.h; path = ../../iodbc/henv.h; sourceTree = SOURCE_ROOT; }; F535B3250277FBC601A801DE /* herr.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = herr.c; path = ../../iodbc/herr.c; sourceTree = SOURCE_ROOT; }; F535B3260277FBC601A801DE /* herr.ci */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = herr.ci; path = ../../iodbc/herr.ci; sourceTree = SOURCE_ROOT; }; F535B3270277FBC601A801DE /* herr.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = herr.h; path = ../../iodbc/herr.h; sourceTree = SOURCE_ROOT; }; F535B3280277FBC601A801DE /* hstmt.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hstmt.c; path = ../../iodbc/hstmt.c; sourceTree = SOURCE_ROOT; }; F535B3290277FBC601A801DE /* hstmt.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hstmt.h; path = ../../iodbc/hstmt.h; sourceTree = SOURCE_ROOT; }; F535B32A0277FBC601A801DE /* info.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = info.c; path = ../../iodbc/info.c; sourceTree = SOURCE_ROOT; }; F535B32C0277FBC601A801DE /* iodbc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbc.h; path = ../../include/iodbc.h; sourceTree = SOURCE_ROOT; }; F535B32D0277FBC601A801DE /* ithread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ithread.h; path = ../../iodbc/ithread.h; sourceTree = SOURCE_ROOT; }; F535B32F0277FBC601A801DE /* itrace.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = itrace.h; path = ../../iodbc/itrace.h; sourceTree = SOURCE_ROOT; }; F535B3300277FBC601A801DE /* main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = main.c; path = ../../iodbc/main.c; sourceTree = SOURCE_ROOT; }; F535B3310277FBC601A801DE /* misc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = misc.c; path = ../../iodbc/misc.c; sourceTree = SOURCE_ROOT; }; F535B3320277FBC601A801DE /* prepare.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = prepare.c; path = ../../iodbc/prepare.c; sourceTree = SOURCE_ROOT; }; F535B3330277FBC601A801DE /* result.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = result.c; path = ../../iodbc/result.c; sourceTree = SOURCE_ROOT; }; F535B34F0277FC2E01A801DE /* isqltypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = isqltypes.h; path = ../include/isqltypes.h; sourceTree = SOURCE_ROOT; }; F535B3500277FC2E01A801DE /* isql.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = isql.h; path = ../include/isql.h; sourceTree = SOURCE_ROOT; }; F535B3510277FC2E01A801DE /* isqlext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = isqlext.h; path = ../include/isqlext.h; sourceTree = SOURCE_ROOT; }; F535B3520277FC2E01A801DE /* sql.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sql.h; path = ../include/sql.h; sourceTree = SOURCE_ROOT; }; F535B3530277FC2E01A801DE /* sqlext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sqlext.h; path = ../include/sqlext.h; sourceTree = SOURCE_ROOT; }; F535B3540277FC2E01A801DE /* sqltypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sqltypes.h; path = ../include/sqltypes.h; sourceTree = SOURCE_ROOT; }; F54DA8D70279592201A801DE /* iodbc.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; name = iodbc.exp; path = ../iodbc.exp; sourceTree = SOURCE_ROOT; }; F55DDABC04949A6001000FFE /* sqlucode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sqlucode.h; path = ../include/sqlucode.h; sourceTree = SOURCE_ROOT; }; F57808F204CED1970194ADB8 /* AllocConnect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = AllocConnect.c; path = ../../iodbc/trace/AllocConnect.c; sourceTree = SOURCE_ROOT; }; F57808F304CED1970194ADB8 /* AllocEnv.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = AllocEnv.c; path = ../../iodbc/trace/AllocEnv.c; sourceTree = SOURCE_ROOT; }; F57808F404CED1970194ADB8 /* AllocHandle.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = AllocHandle.c; path = ../../iodbc/trace/AllocHandle.c; sourceTree = SOURCE_ROOT; }; F57808F504CED1970194ADB8 /* AllocStmt.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = AllocStmt.c; path = ../../iodbc/trace/AllocStmt.c; sourceTree = SOURCE_ROOT; }; F57808F604CED1970194ADB8 /* BindCol.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = BindCol.c; path = ../../iodbc/trace/BindCol.c; sourceTree = SOURCE_ROOT; }; F57808F704CED1970194ADB8 /* BindParameter.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = BindParameter.c; path = ../../iodbc/trace/BindParameter.c; sourceTree = SOURCE_ROOT; }; F57808F804CED1970194ADB8 /* BrowseConnect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = BrowseConnect.c; path = ../../iodbc/trace/BrowseConnect.c; sourceTree = SOURCE_ROOT; }; F57808F904CED1970194ADB8 /* BulkOperations.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = BulkOperations.c; path = ../../iodbc/trace/BulkOperations.c; sourceTree = SOURCE_ROOT; }; F57808FA04CED1970194ADB8 /* Cancel.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Cancel.c; path = ../../iodbc/trace/Cancel.c; sourceTree = SOURCE_ROOT; }; F57808FB04CED1970194ADB8 /* CloseCursor.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = CloseCursor.c; path = ../../iodbc/trace/CloseCursor.c; sourceTree = SOURCE_ROOT; }; F57808FC04CED1970194ADB8 /* ColAttribute.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ColAttribute.c; path = ../../iodbc/trace/ColAttribute.c; sourceTree = SOURCE_ROOT; }; F57808FD04CED1970194ADB8 /* ColumnPrivileges.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ColumnPrivileges.c; path = ../../iodbc/trace/ColumnPrivileges.c; sourceTree = SOURCE_ROOT; }; F57808FE04CED1970194ADB8 /* Columns.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Columns.c; path = ../../iodbc/trace/Columns.c; sourceTree = SOURCE_ROOT; }; F57808FF04CED1970194ADB8 /* Connect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Connect.c; path = ../../iodbc/trace/Connect.c; sourceTree = SOURCE_ROOT; }; F578090004CED1970194ADB8 /* CopyDesc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = CopyDesc.c; path = ../../iodbc/trace/CopyDesc.c; sourceTree = SOURCE_ROOT; }; F578090104CED1970194ADB8 /* DataSources.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = DataSources.c; path = ../../iodbc/trace/DataSources.c; sourceTree = SOURCE_ROOT; }; F578090204CED1970194ADB8 /* DescribeCol.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = DescribeCol.c; path = ../../iodbc/trace/DescribeCol.c; sourceTree = SOURCE_ROOT; }; F578090304CED1970194ADB8 /* DescribeParam.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = DescribeParam.c; path = ../../iodbc/trace/DescribeParam.c; sourceTree = SOURCE_ROOT; }; F578090404CED1970194ADB8 /* Disconnect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Disconnect.c; path = ../../iodbc/trace/Disconnect.c; sourceTree = SOURCE_ROOT; }; F578090504CED1970194ADB8 /* DriverConnect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = DriverConnect.c; path = ../../iodbc/trace/DriverConnect.c; sourceTree = SOURCE_ROOT; }; F578090604CED1970194ADB8 /* Drivers.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Drivers.c; path = ../../iodbc/trace/Drivers.c; sourceTree = SOURCE_ROOT; }; F578090704CED1970194ADB8 /* EndTran.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = EndTran.c; path = ../../iodbc/trace/EndTran.c; sourceTree = SOURCE_ROOT; }; F578090804CED1970194ADB8 /* Error.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Error.c; path = ../../iodbc/trace/Error.c; sourceTree = SOURCE_ROOT; }; F578090904CED1970194ADB8 /* ExecDirect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ExecDirect.c; path = ../../iodbc/trace/ExecDirect.c; sourceTree = SOURCE_ROOT; }; F578090A04CED1970194ADB8 /* Execute.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Execute.c; path = ../../iodbc/trace/Execute.c; sourceTree = SOURCE_ROOT; }; F578090B04CED1970194ADB8 /* ExtendedFetch.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ExtendedFetch.c; path = ../../iodbc/trace/ExtendedFetch.c; sourceTree = SOURCE_ROOT; }; F578090C04CED1970194ADB8 /* Fetch.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Fetch.c; path = ../../iodbc/trace/Fetch.c; sourceTree = SOURCE_ROOT; }; F578090D04CED1970194ADB8 /* FetchScroll.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = FetchScroll.c; path = ../../iodbc/trace/FetchScroll.c; sourceTree = SOURCE_ROOT; }; F578090E04CED1970194ADB8 /* ForeignKeys.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ForeignKeys.c; path = ../../iodbc/trace/ForeignKeys.c; sourceTree = SOURCE_ROOT; }; F578090F04CED1970194ADB8 /* FreeConnect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = FreeConnect.c; path = ../../iodbc/trace/FreeConnect.c; sourceTree = SOURCE_ROOT; }; F578091004CED1970194ADB8 /* FreeEnv.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = FreeEnv.c; path = ../../iodbc/trace/FreeEnv.c; sourceTree = SOURCE_ROOT; }; F578091104CED1970194ADB8 /* FreeHandle.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = FreeHandle.c; path = ../../iodbc/trace/FreeHandle.c; sourceTree = SOURCE_ROOT; }; F578091204CED1970194ADB8 /* FreeStmt.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = FreeStmt.c; path = ../../iodbc/trace/FreeStmt.c; sourceTree = SOURCE_ROOT; }; F578091304CED1970194ADB8 /* GetConnectAttr.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GetConnectAttr.c; path = ../../iodbc/trace/GetConnectAttr.c; sourceTree = SOURCE_ROOT; }; F578091404CED1970194ADB8 /* GetConnectOption.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GetConnectOption.c; path = ../../iodbc/trace/GetConnectOption.c; sourceTree = SOURCE_ROOT; }; F578091504CED1970194ADB8 /* GetCursorName.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GetCursorName.c; path = ../../iodbc/trace/GetCursorName.c; sourceTree = SOURCE_ROOT; }; F578091604CED1970194ADB8 /* GetData.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GetData.c; path = ../../iodbc/trace/GetData.c; sourceTree = SOURCE_ROOT; }; F578091704CED1970194ADB8 /* GetDescField.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GetDescField.c; path = ../../iodbc/trace/GetDescField.c; sourceTree = SOURCE_ROOT; }; F578091804CED1970194ADB8 /* GetDescRec.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GetDescRec.c; path = ../../iodbc/trace/GetDescRec.c; sourceTree = SOURCE_ROOT; }; F578091904CED1970194ADB8 /* GetDiagField.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GetDiagField.c; path = ../../iodbc/trace/GetDiagField.c; sourceTree = SOURCE_ROOT; }; F578091A04CED1970194ADB8 /* GetDiagRec.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GetDiagRec.c; path = ../../iodbc/trace/GetDiagRec.c; sourceTree = SOURCE_ROOT; }; F578091B04CED1970194ADB8 /* GetEnvAttr.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GetEnvAttr.c; path = ../../iodbc/trace/GetEnvAttr.c; sourceTree = SOURCE_ROOT; }; F578091C04CED1970194ADB8 /* GetFunctions.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GetFunctions.c; path = ../../iodbc/trace/GetFunctions.c; sourceTree = SOURCE_ROOT; }; F578091D04CED1970194ADB8 /* GetStmtAttr.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GetStmtAttr.c; path = ../../iodbc/trace/GetStmtAttr.c; sourceTree = SOURCE_ROOT; }; F578091E04CED1970194ADB8 /* GetStmtOption.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GetStmtOption.c; path = ../../iodbc/trace/GetStmtOption.c; sourceTree = SOURCE_ROOT; }; F578091F04CED1970194ADB8 /* GetTypeInfo.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GetTypeInfo.c; path = ../../iodbc/trace/GetTypeInfo.c; sourceTree = SOURCE_ROOT; }; F578092004CED1970194ADB8 /* Info.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Info.c; path = ../../iodbc/trace/Info.c; sourceTree = SOURCE_ROOT; }; F578092104CED1970194ADB8 /* MoreResults.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = MoreResults.c; path = ../../iodbc/trace/MoreResults.c; sourceTree = SOURCE_ROOT; }; F578092204CED1970194ADB8 /* NativeSql.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = NativeSql.c; path = ../../iodbc/trace/NativeSql.c; sourceTree = SOURCE_ROOT; }; F578092304CED1970194ADB8 /* NumParams.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = NumParams.c; path = ../../iodbc/trace/NumParams.c; sourceTree = SOURCE_ROOT; }; F578092404CED1970194ADB8 /* NumResultCols.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = NumResultCols.c; path = ../../iodbc/trace/NumResultCols.c; sourceTree = SOURCE_ROOT; }; F578092504CED1970194ADB8 /* ParamData.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ParamData.c; path = ../../iodbc/trace/ParamData.c; sourceTree = SOURCE_ROOT; }; F578092604CED1970194ADB8 /* ParamOptions.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ParamOptions.c; path = ../../iodbc/trace/ParamOptions.c; sourceTree = SOURCE_ROOT; }; F578092704CED1970194ADB8 /* Prepare.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Prepare.c; path = ../../iodbc/trace/Prepare.c; sourceTree = SOURCE_ROOT; }; F578092804CED1970194ADB8 /* PrimaryKeys.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = PrimaryKeys.c; path = ../../iodbc/trace/PrimaryKeys.c; sourceTree = SOURCE_ROOT; }; F578092904CED1970194ADB8 /* ProcedureColumns.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ProcedureColumns.c; path = ../../iodbc/trace/ProcedureColumns.c; sourceTree = SOURCE_ROOT; }; F578092A04CED1970194ADB8 /* Procedures.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Procedures.c; path = ../../iodbc/trace/Procedures.c; sourceTree = SOURCE_ROOT; }; F578092B04CED1970194ADB8 /* proto.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = proto.h; path = ../../iodbc/trace/proto.h; sourceTree = SOURCE_ROOT; }; F578092C04CED1970194ADB8 /* PutData.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = PutData.c; path = ../../iodbc/trace/PutData.c; sourceTree = SOURCE_ROOT; }; F578092D04CED1970194ADB8 /* RowCount.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = RowCount.c; path = ../../iodbc/trace/RowCount.c; sourceTree = SOURCE_ROOT; }; F578092E04CED1970194ADB8 /* SetConnectAttr.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SetConnectAttr.c; path = ../../iodbc/trace/SetConnectAttr.c; sourceTree = SOURCE_ROOT; }; F578092F04CED1970194ADB8 /* SetConnectOption.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SetConnectOption.c; path = ../../iodbc/trace/SetConnectOption.c; sourceTree = SOURCE_ROOT; }; F578093004CED1970194ADB8 /* SetCursorName.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SetCursorName.c; path = ../../iodbc/trace/SetCursorName.c; sourceTree = SOURCE_ROOT; }; F578093104CED1970194ADB8 /* SetEnvAttr.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SetEnvAttr.c; path = ../../iodbc/trace/SetEnvAttr.c; sourceTree = SOURCE_ROOT; }; F578093204CED1970194ADB8 /* SetPos.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SetPos.c; path = ../../iodbc/trace/SetPos.c; sourceTree = SOURCE_ROOT; }; F578093304CED1970194ADB8 /* SetScrollOptions.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SetScrollOptions.c; path = ../../iodbc/trace/SetScrollOptions.c; sourceTree = SOURCE_ROOT; }; F578093404CED1970194ADB8 /* SetStmtAttr.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SetStmtAttr.c; path = ../../iodbc/trace/SetStmtAttr.c; sourceTree = SOURCE_ROOT; }; F578093504CED1970194ADB8 /* SetStmtOption.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SetStmtOption.c; path = ../../iodbc/trace/SetStmtOption.c; sourceTree = SOURCE_ROOT; }; F578093604CED1970194ADB8 /* SpecialColumns.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SpecialColumns.c; path = ../../iodbc/trace/SpecialColumns.c; sourceTree = SOURCE_ROOT; }; F578093704CED1970194ADB8 /* Statistics.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Statistics.c; path = ../../iodbc/trace/Statistics.c; sourceTree = SOURCE_ROOT; }; F578093804CED1970194ADB8 /* TablePrivileges.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = TablePrivileges.c; path = ../../iodbc/trace/TablePrivileges.c; sourceTree = SOURCE_ROOT; }; F578093904CED1970194ADB8 /* Tables.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Tables.c; path = ../../iodbc/trace/Tables.c; sourceTree = SOURCE_ROOT; }; F578093A04CED1970194ADB8 /* trace.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = trace.c; path = ../../iodbc/trace/trace.c; sourceTree = SOURCE_ROOT; }; F578093B04CED1970194ADB8 /* trace.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = trace.h; path = ../../iodbc/trace/trace.h; sourceTree = SOURCE_ROOT; }; F578093C04CED1970194ADB8 /* Transact.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Transact.c; path = ../../iodbc/trace/Transact.c; sourceTree = SOURCE_ROOT; }; F586819204949B4701000FFE /* iodbcext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = iodbcext.h; path = ../include/iodbcext.h; sourceTree = SOURCE_ROOT; }; F586819404949C2101000FFE /* unicode.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = unicode.c; path = ../../iodbcinst/unicode.c; sourceTree = SOURCE_ROOT; }; F586819504949C2101000FFE /* unicode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = unicode.h; path = ../../iodbcinst/unicode.h; sourceTree = SOURCE_ROOT; }; F5C609C304D1703401237589 /* SetDescField.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SetDescField.c; path = ../../iodbc/trace/SetDescField.c; sourceTree = SOURCE_ROOT; }; F5EC325104D01DC50121CDE8 /* iODBCinst.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iODBCinst.framework; path = ../iODBCinst/build/iODBCinst.framework; sourceTree = SOURCE_ROOT; }; F5EC325904D0397D0121CDE8 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ CDAE3AA90987CB86003250F8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CDAE3AAA0987CB86003250F8 /* iODBCinst.framework in Frameworks */, CDAE3AAB0987CB86003250F8 /* Carbon.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 034768DDFF38A45A11DB9C8B /* Products */ = { isa = PBXGroup; children = ( CDAE3AB20987CB86003250F8 /* iODBC.framework */, ); name = Products; sourceTree = ""; }; 0867D691FE84028FC02AAC07 /* iODBC */ = { isa = PBXGroup; children = ( CD0056F708B12B6C006E73DA /* Headers */, 08FB77ACFE841707C02AAC07 /* Source */, 089C1665FE841158C02AAC07 /* Resources */, 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, 034768DDFF38A45A11DB9C8B /* Products */, CDAE3AB10987CB86003250F8 /* Info-iODBC.plist */, ); name = iODBC; sourceTree = ""; }; 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( F5EC325104D01DC50121CDE8 /* iODBCinst.framework */, F5EC325904D0397D0121CDE8 /* Carbon.framework */, ); name = "External Frameworks and Libraries"; sourceTree = ""; }; 089C1665FE841158C02AAC07 /* Resources */ = { isa = PBXGroup; children = ( 089C1666FE841158C02AAC07 /* InfoPlist.strings */, ); name = Resources; sourceTree = ""; }; 08FB77ACFE841707C02AAC07 /* Source */ = { isa = PBXGroup; children = ( F535B3150277FB3501A801DE /* iODBC */, ); name = Source; sourceTree = ""; }; CD0056F708B12B6C006E73DA /* Headers */ = { isa = PBXGroup; children = ( F535B34F0277FC2E01A801DE /* isqltypes.h */, F535B3510277FC2E01A801DE /* isqlext.h */, F535B3520277FC2E01A801DE /* sql.h */, F535B3500277FC2E01A801DE /* isql.h */, F535B3530277FC2E01A801DE /* sqlext.h */, F535B3540277FC2E01A801DE /* sqltypes.h */, 71DF011C06A3E1DD007AF56B /* iodbcunix.h */, ); name = Headers; sourceTree = ""; }; F535B3150277FB3501A801DE /* iODBC */ = { isa = PBXGroup; children = ( F57808F104CED1010194ADB8 /* trace */, F535B3160277FBC601A801DE /* odbc3.c */, F535B3170277FBC601A801DE /* catalog.c */, F535B3180277FBC601A801DE /* connect.c */, F535B3190277FBC601A801DE /* dlf.c */, F535B31A0277FBC601A801DE /* dlf.h */, F535B31B0277FBC601A801DE /* dlproc.c */, F535B31C0277FBC601A801DE /* dlproc.h */, F535B31D0277FBC601A801DE /* execute.c */, F535B31E0277FBC601A801DE /* fetch.c */, F535B31F0277FBC601A801DE /* hdbc.c */, F535B3200277FBC601A801DE /* hdbc.h */, F535B3210277FBC601A801DE /* hdesc.h */, F535B3220277FBC601A801DE /* henv.c */, F535B3230277FBC601A801DE /* henv.ci */, F535B3240277FBC601A801DE /* henv.h */, F535B3250277FBC601A801DE /* herr.c */, F535B3260277FBC601A801DE /* herr.ci */, F535B3270277FBC601A801DE /* herr.h */, F535B3280277FBC601A801DE /* hstmt.c */, F535B3290277FBC601A801DE /* hstmt.h */, F535B32A0277FBC601A801DE /* info.c */, F535B32C0277FBC601A801DE /* iodbc.h */, F535B32D0277FBC601A801DE /* ithread.h */, F535B32F0277FBC601A801DE /* itrace.h */, F535B3300277FBC601A801DE /* main.c */, F535B3310277FBC601A801DE /* misc.c */, F535B3320277FBC601A801DE /* prepare.c */, F535B3330277FBC601A801DE /* result.c */, F54DA8D70279592201A801DE /* iodbc.exp */, F55DDABC04949A6001000FFE /* sqlucode.h */, F586819204949B4701000FFE /* iodbcext.h */, F586819404949C2101000FFE /* unicode.c */, F586819504949C2101000FFE /* unicode.h */, ); name = iODBC; sourceTree = ""; }; F57808F104CED1010194ADB8 /* trace */ = { isa = PBXGroup; children = ( 71C53C2905E39D1F00D95EFB /* SetDescRec.c */, F57808F204CED1970194ADB8 /* AllocConnect.c */, F57808F304CED1970194ADB8 /* AllocEnv.c */, F57808F404CED1970194ADB8 /* AllocHandle.c */, F57808F504CED1970194ADB8 /* AllocStmt.c */, F57808F604CED1970194ADB8 /* BindCol.c */, F57808F704CED1970194ADB8 /* BindParameter.c */, F57808F804CED1970194ADB8 /* BrowseConnect.c */, F57808F904CED1970194ADB8 /* BulkOperations.c */, F57808FA04CED1970194ADB8 /* Cancel.c */, F57808FB04CED1970194ADB8 /* CloseCursor.c */, F57808FC04CED1970194ADB8 /* ColAttribute.c */, F57808FD04CED1970194ADB8 /* ColumnPrivileges.c */, F57808FE04CED1970194ADB8 /* Columns.c */, F57808FF04CED1970194ADB8 /* Connect.c */, F578090004CED1970194ADB8 /* CopyDesc.c */, F578090104CED1970194ADB8 /* DataSources.c */, F578090204CED1970194ADB8 /* DescribeCol.c */, F578090304CED1970194ADB8 /* DescribeParam.c */, F578090404CED1970194ADB8 /* Disconnect.c */, F578090504CED1970194ADB8 /* DriverConnect.c */, F578090604CED1970194ADB8 /* Drivers.c */, F578090704CED1970194ADB8 /* EndTran.c */, F578090804CED1970194ADB8 /* Error.c */, F578090904CED1970194ADB8 /* ExecDirect.c */, F578090A04CED1970194ADB8 /* Execute.c */, F578090B04CED1970194ADB8 /* ExtendedFetch.c */, F578090C04CED1970194ADB8 /* Fetch.c */, F578090D04CED1970194ADB8 /* FetchScroll.c */, F578090E04CED1970194ADB8 /* ForeignKeys.c */, F578090F04CED1970194ADB8 /* FreeConnect.c */, F578091004CED1970194ADB8 /* FreeEnv.c */, F578091104CED1970194ADB8 /* FreeHandle.c */, F578091204CED1970194ADB8 /* FreeStmt.c */, F578091304CED1970194ADB8 /* GetConnectAttr.c */, F578091404CED1970194ADB8 /* GetConnectOption.c */, F578091504CED1970194ADB8 /* GetCursorName.c */, F578091604CED1970194ADB8 /* GetData.c */, F578091704CED1970194ADB8 /* GetDescField.c */, F578091804CED1970194ADB8 /* GetDescRec.c */, F578091904CED1970194ADB8 /* GetDiagField.c */, F578091A04CED1970194ADB8 /* GetDiagRec.c */, F578091B04CED1970194ADB8 /* GetEnvAttr.c */, F578091C04CED1970194ADB8 /* GetFunctions.c */, F578091D04CED1970194ADB8 /* GetStmtAttr.c */, F578091E04CED1970194ADB8 /* GetStmtOption.c */, F578091F04CED1970194ADB8 /* GetTypeInfo.c */, F578092004CED1970194ADB8 /* Info.c */, F578092104CED1970194ADB8 /* MoreResults.c */, F578092204CED1970194ADB8 /* NativeSql.c */, F578092304CED1970194ADB8 /* NumParams.c */, F578092404CED1970194ADB8 /* NumResultCols.c */, F578092504CED1970194ADB8 /* ParamData.c */, F578092604CED1970194ADB8 /* ParamOptions.c */, F578092704CED1970194ADB8 /* Prepare.c */, F578092804CED1970194ADB8 /* PrimaryKeys.c */, F578092904CED1970194ADB8 /* ProcedureColumns.c */, F578092A04CED1970194ADB8 /* Procedures.c */, F578092B04CED1970194ADB8 /* proto.h */, F578092C04CED1970194ADB8 /* PutData.c */, F578092D04CED1970194ADB8 /* RowCount.c */, F578092E04CED1970194ADB8 /* SetConnectAttr.c */, F578092F04CED1970194ADB8 /* SetConnectOption.c */, F578093004CED1970194ADB8 /* SetCursorName.c */, F5C609C304D1703401237589 /* SetDescField.c */, F578093104CED1970194ADB8 /* SetEnvAttr.c */, F578093204CED1970194ADB8 /* SetPos.c */, F578093304CED1970194ADB8 /* SetScrollOptions.c */, F578093404CED1970194ADB8 /* SetStmtAttr.c */, F578093504CED1970194ADB8 /* SetStmtOption.c */, F578093604CED1970194ADB8 /* SpecialColumns.c */, F578093704CED1970194ADB8 /* Statistics.c */, F578093804CED1970194ADB8 /* TablePrivileges.c */, F578093904CED1970194ADB8 /* Tables.c */, F578093A04CED1970194ADB8 /* trace.c */, F578093B04CED1970194ADB8 /* trace.h */, F578093C04CED1970194ADB8 /* Transact.c */, ); name = trace; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ CDAE3A330987CB86003250F8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( CDAE3A340987CB86003250F8 /* dlf.h in Headers */, CDAE3A350987CB86003250F8 /* dlproc.h in Headers */, CDAE3A360987CB86003250F8 /* hdbc.h in Headers */, CDAE3A370987CB86003250F8 /* hdesc.h in Headers */, CDAE3A380987CB86003250F8 /* henv.h in Headers */, CDAE3A390987CB86003250F8 /* herr.h in Headers */, CDAE3A3A0987CB86003250F8 /* hstmt.h in Headers */, CDAE3A3B0987CB86003250F8 /* iodbc.h in Headers */, CDAE3A3C0987CB86003250F8 /* ithread.h in Headers */, CDAE3A3D0987CB86003250F8 /* itrace.h in Headers */, CDAE3A3E0987CB86003250F8 /* isqltypes.h in Headers */, CDAE3A3F0987CB86003250F8 /* isql.h in Headers */, CDAE3A400987CB86003250F8 /* isqlext.h in Headers */, CDAE3A410987CB86003250F8 /* sql.h in Headers */, CDAE3A420987CB86003250F8 /* sqlext.h in Headers */, CDAE3A430987CB86003250F8 /* sqltypes.h in Headers */, CDAE3A440987CB86003250F8 /* sqlucode.h in Headers */, CDAE3A450987CB86003250F8 /* iodbcext.h in Headers */, CDAE3A460987CB86003250F8 /* unicode.h in Headers */, CDAE3A470987CB86003250F8 /* proto.h in Headers */, CDAE3A480987CB86003250F8 /* trace.h in Headers */, CDAE3A490987CB86003250F8 /* iodbcunix.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ CDAE3A320987CB86003250F8 /* iODBC */ = { isa = PBXNativeTarget; buildConfigurationList = CDAE3AAD0987CB86003250F8 /* Build configuration list for PBXNativeTarget "iODBC" */; buildPhases = ( CDAE3A330987CB86003250F8 /* Headers */, CDAE3A4A0987CB86003250F8 /* Resources */, CDAE3A4C0987CB86003250F8 /* Sources */, CDAE3AA90987CB86003250F8 /* Frameworks */, CDAE3AAC0987CB86003250F8 /* Rez */, ); buildRules = ( ); buildSettings = { DEBUGGING_SYMBOLS = NO; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; EXPORTED_SYMBOLS_FILE = ../../mac/iodbc.exp; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; HEADER_SEARCH_PATHS = ( ../../include, ../../iodbc, ../../iodbcinst, ); INSTALL_PATH = /Library/Frameworks; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = ( "-D_REENTRANT", "-DWITH_PTHREADS", "-D_MACX", "-DDLDAPI_MACX", ); PREBINDING = NO; PRODUCT_NAME = iODBC; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = framework; }; dependencies = ( ); name = iODBC; productInstallPath = /Library/Frameworks; productName = iODBC; productReference = CDAE3AB20987CB86003250F8 /* iODBC.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = CDAE3AB30987CB87003250F8 /* Build configuration list for PBXProject "iODBC" */; buildSettings = { }; buildStyles = ( 4F0BB7EC011F40E904CA0E50 /* Development */, 4F0BB7ED011F40E904CA0E50 /* Deployment */, ); hasScannedForEncodings = 1; mainGroup = 0867D691FE84028FC02AAC07 /* iODBC */; productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; projectDirPath = ""; targets = ( CDAE3A320987CB86003250F8 /* iODBC */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ CDAE3A4A0987CB86003250F8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( CDAE3A4B0987CB86003250F8 /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXRezBuildPhase section */ CDAE3AAC0987CB86003250F8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ CDAE3A4C0987CB86003250F8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CDAE3A4D0987CB86003250F8 /* odbc3.c in Sources */, CDAE3A4E0987CB86003250F8 /* catalog.c in Sources */, CDAE3A4F0987CB86003250F8 /* connect.c in Sources */, CDAE3A500987CB86003250F8 /* dlf.c in Sources */, CDAE3A510987CB86003250F8 /* dlproc.c in Sources */, CDAE3A520987CB86003250F8 /* execute.c in Sources */, CDAE3A530987CB86003250F8 /* fetch.c in Sources */, CDAE3A540987CB86003250F8 /* hdbc.c in Sources */, CDAE3A550987CB86003250F8 /* henv.c in Sources */, CDAE3A560987CB86003250F8 /* herr.c in Sources */, CDAE3A570987CB86003250F8 /* hstmt.c in Sources */, CDAE3A580987CB86003250F8 /* info.c in Sources */, CDAE3A590987CB86003250F8 /* misc.c in Sources */, CDAE3A5A0987CB86003250F8 /* prepare.c in Sources */, CDAE3A5B0987CB86003250F8 /* result.c in Sources */, CDAE3A5C0987CB86003250F8 /* iodbc.exp in Sources */, CDAE3A5D0987CB86003250F8 /* unicode.c in Sources */, CDAE3A5E0987CB86003250F8 /* AllocConnect.c in Sources */, CDAE3A5F0987CB86003250F8 /* AllocEnv.c in Sources */, CDAE3A600987CB86003250F8 /* AllocHandle.c in Sources */, CDAE3A610987CB86003250F8 /* AllocStmt.c in Sources */, CDAE3A620987CB86003250F8 /* BindCol.c in Sources */, CDAE3A630987CB86003250F8 /* BindParameter.c in Sources */, CDAE3A640987CB86003250F8 /* BrowseConnect.c in Sources */, CDAE3A650987CB86003250F8 /* BulkOperations.c in Sources */, CDAE3A660987CB86003250F8 /* Cancel.c in Sources */, CDAE3A670987CB86003250F8 /* CloseCursor.c in Sources */, CDAE3A680987CB86003250F8 /* ColAttribute.c in Sources */, CDAE3A690987CB86003250F8 /* ColumnPrivileges.c in Sources */, CDAE3A6A0987CB86003250F8 /* Columns.c in Sources */, CDAE3A6B0987CB86003250F8 /* Connect.c in Sources */, CDAE3A6C0987CB86003250F8 /* CopyDesc.c in Sources */, CDAE3A6D0987CB86003250F8 /* DataSources.c in Sources */, CDAE3A6E0987CB86003250F8 /* DescribeCol.c in Sources */, CDAE3A6F0987CB86003250F8 /* DescribeParam.c in Sources */, CDAE3A700987CB86003250F8 /* Disconnect.c in Sources */, CDAE3A710987CB86003250F8 /* DriverConnect.c in Sources */, CDAE3A720987CB86003250F8 /* Drivers.c in Sources */, CDAE3A730987CB86003250F8 /* EndTran.c in Sources */, CDAE3A740987CB86003250F8 /* Error.c in Sources */, CDAE3A750987CB86003250F8 /* ExecDirect.c in Sources */, CDAE3A760987CB86003250F8 /* Execute.c in Sources */, CDAE3A770987CB86003250F8 /* ExtendedFetch.c in Sources */, CDAE3A780987CB86003250F8 /* Fetch.c in Sources */, CDAE3A790987CB86003250F8 /* FetchScroll.c in Sources */, CDAE3A7A0987CB86003250F8 /* ForeignKeys.c in Sources */, CDAE3A7B0987CB86003250F8 /* FreeConnect.c in Sources */, CDAE3A7C0987CB86003250F8 /* FreeEnv.c in Sources */, CDAE3A7D0987CB86003250F8 /* FreeHandle.c in Sources */, CDAE3A7E0987CB86003250F8 /* FreeStmt.c in Sources */, CDAE3A7F0987CB86003250F8 /* GetConnectAttr.c in Sources */, CDAE3A800987CB86003250F8 /* GetConnectOption.c in Sources */, CDAE3A810987CB86003250F8 /* GetCursorName.c in Sources */, CDAE3A820987CB86003250F8 /* GetData.c in Sources */, CDAE3A830987CB86003250F8 /* GetDescField.c in Sources */, CDAE3A840987CB86003250F8 /* GetDescRec.c in Sources */, CDAE3A850987CB86003250F8 /* GetDiagField.c in Sources */, CDAE3A860987CB86003250F8 /* GetDiagRec.c in Sources */, CDAE3A870987CB86003250F8 /* GetEnvAttr.c in Sources */, CDAE3A880987CB86003250F8 /* GetFunctions.c in Sources */, CDAE3A890987CB86003250F8 /* GetStmtAttr.c in Sources */, CDAE3A8A0987CB86003250F8 /* GetStmtOption.c in Sources */, CDAE3A8B0987CB86003250F8 /* GetTypeInfo.c in Sources */, CDAE3A8C0987CB86003250F8 /* Info.c in Sources */, CDAE3A8D0987CB86003250F8 /* MoreResults.c in Sources */, CDAE3A8E0987CB86003250F8 /* NativeSql.c in Sources */, CDAE3A8F0987CB86003250F8 /* NumParams.c in Sources */, CDAE3A900987CB86003250F8 /* NumResultCols.c in Sources */, CDAE3A910987CB86003250F8 /* ParamData.c in Sources */, CDAE3A920987CB86003250F8 /* ParamOptions.c in Sources */, CDAE3A930987CB86003250F8 /* Prepare.c in Sources */, CDAE3A940987CB86003250F8 /* PrimaryKeys.c in Sources */, CDAE3A950987CB86003250F8 /* ProcedureColumns.c in Sources */, CDAE3A960987CB86003250F8 /* Procedures.c in Sources */, CDAE3A970987CB86003250F8 /* PutData.c in Sources */, CDAE3A980987CB86003250F8 /* RowCount.c in Sources */, CDAE3A990987CB86003250F8 /* SetConnectAttr.c in Sources */, CDAE3A9A0987CB86003250F8 /* SetConnectOption.c in Sources */, CDAE3A9B0987CB86003250F8 /* SetCursorName.c in Sources */, CDAE3A9C0987CB86003250F8 /* SetEnvAttr.c in Sources */, CDAE3A9D0987CB86003250F8 /* SetPos.c in Sources */, CDAE3A9E0987CB86003250F8 /* SetScrollOptions.c in Sources */, CDAE3A9F0987CB86003250F8 /* SetStmtAttr.c in Sources */, CDAE3AA00987CB86003250F8 /* SetStmtOption.c in Sources */, CDAE3AA10987CB86003250F8 /* SpecialColumns.c in Sources */, CDAE3AA20987CB86003250F8 /* Statistics.c in Sources */, CDAE3AA30987CB86003250F8 /* TablePrivileges.c in Sources */, CDAE3AA40987CB86003250F8 /* Tables.c in Sources */, CDAE3AA50987CB86003250F8 /* trace.c in Sources */, CDAE3AA60987CB86003250F8 /* Transact.c in Sources */, CDAE3AA70987CB86003250F8 /* SetDescField.c in Sources */, CDAE3AA80987CB86003250F8 /* SetDescRec.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 089C1666FE841158C02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 089C1667FE841158C02AAC07 /* English */, ); name = InfoPlist.strings; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ CDAE3AAE0987CB86003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ""; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBCinst/build/Development, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( _REENTRANT, WITH_PTHREADS, _MACX, DLDAPI_MACX, ); HEADER_SEARCH_PATHS = ( ../../include, ../../iodbcinst, ../../iodbc, ); INFOPLIST_FILE = "Info-iODBC.plist"; INSTALL_PATH = /Library/Frameworks; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iODBC; RESMERGER_SOURCES_FORK = data; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = framework; ZERO_LINK = NO; }; name = Development; }; CDAE3AAF0987CB86003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 3.52.8; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 3.52.8; EXPORTED_SYMBOLS_FILE = ../../mac/iodbc.exp; FRAMEWORK_SEARCH_PATHS = ( ../../mac/iODBCinst/build/Deployment, ../../mac/iODBCinst/build, ); FRAMEWORK_VERSION = 3.52; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 2; GCC_PREPROCESSOR_DEFINITIONS = ( _REENTRANT, WITH_PTHREADS, _MACX, DLDAPI_MACX, ); HEADER_SEARCH_PATHS = ( ../../include, ../../iodbc, ../../iodbcinst, ); INFOPLIST_FILE = "Info-iODBC.plist"; INSTALL_PATH = /Library/Frameworks; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = iODBC; RESMERGER_SOURCES_FORK = data; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = framework; ZERO_LINK = NO; }; name = Deployment; }; CDAE3AB40987CB87003250F8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, x86_64 ); MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; }; name = Development; }; CDAE3AB50987CB87003250F8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, x86_64 ); MACOSX_DEPLOYMENT_TARGET = $IODBC_TARGET; SDKROOT = $IODBC_SDK; }; name = Deployment; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ CDAE3AAD0987CB86003250F8 /* Build configuration list for PBXNativeTarget "iODBC" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3AAE0987CB86003250F8 /* Development */, CDAE3AAF0987CB86003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; CDAE3AB30987CB87003250F8 /* Build configuration list for PBXProject "iODBC" */ = { isa = XCConfigurationList; buildConfigurations = ( CDAE3AB40987CB87003250F8 /* Development */, CDAE3AB50987CB87003250F8 /* Deployment */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Deployment; }; /* End XCConfigurationList section */ }; rootObject = 0867D690FE84028FC02AAC07 /* Project object */; } libiodbc-3.52.9/NEWS0000644000076400007640000003230712323210535011012 00000000000000Apr 15 2014, V3.52.9: * Added support for building on recent versions of Mac OS X * Fixed warnings from autoconf/automake * Fixed infinite loop in connection pool * Fixed compiler warnings * Fixed build dependency for make -jX * Fixed check for Unicode driver * Fixed issue calling SQLCancel from other thread * Fixed SQLInstallDriverEx when driver is readonly Mar 27 2012, V3.52.8: * Converted from CVS to GIT * Added build support for Mac OS X 10.5, 10.6 and 10.7 * Converted old Mac OS X .nib format to newer .xib format * Fixed issue with using buffer after free * Fixed use ssize_t where appropriate * Fixed issue with strlen if param can be NULL * Fixed use ssize_t for length of string * Fixed tracing SQLGetData using multiple chunks * Fixed problem tracing on big-endian machines * Fixed wrong type label * Fixed compiler warnings Sep 10 2009, V3.52.7: * Added iODBC Graphical Administrator for Mac OS X * Added iODBC CFM Bridge * Added resizable windows and dialogs for GTK+ * Added option in tracefile for sequence number ($S) * Added additional translations between ANSI and Unicode * Fixed if tracefile gets too big, continue in new tracefile * Fixed unload bug due to wrong pointer deref * Fixed Connection Pooling UI * Fixed checking odbc_ver on connect handle * Fixed packaging of runtime only libraries * Fixed porting issues * Fixed documentation Oct 08 2007, V3.52.6: * Added support for GTK+ 2.x * Fixed long mutex lock on connect * Fixed problems with SQLBrowseConnect * Fixed missing functions in export list * Fixed core dump when checking for driver odbc version * Fixed allocation error in SQLDescribeCol * Fixed rpm specification for RedHat * Fixed porting problems on FreeBSD, OpenBSD and OSF * Use SQLFetchScroll in iodbctest Jan 05 2007, V3.52.5: * Added support for FileDSN * Added support for Connection Pooling * Added check for tracefile size * Call ODBC 2.x functions in driver if application uses ODBC 2.x only calls * Fixed problem parsing driver result in SQLSetStmtAttr * Fixed source code readability * Fixed bug in overwriting driver name * Fixed check for /Library/ODBC for Mac OS X * Fixed prototypes * Rewrote bootstrap script and configure summary * Use localtime_r in tracing when available * Fixed build issues with Mac OS X * Small code cleanups and fixes Jan 26 2006, V3.52.4: * Added support for Mac OS X 10.4 Universal kit (ppc, ppc64 and i386) * Removed dependency between iodbc and iodbcinst shared libraries * Cleanup Mac OS X build process * Clarify LGPL license conditions * Fixed problem with error on subsequent SQLExecute statements * Fixed problem building 64bit GUI components * Fixed compiler warnings * Fixed problem determining which compiler to use on AIX * Enabled SHLIB_PATH on HP/UX * Fixed problem using # as comment in odbc.ini file * Disabled --disable-odbc3 flag * Small code cleanups and fixes Nov 04 2005, V3.52.3: * Added support for DSN-less connections * Added timestamp to ENTER/EXIT lines in trace file * Added build support for AIX 5.x, HP/UX 11.23 Itanium * Added build support for Mac OS X 10.3 (32bit) and 10.4 (32bit+64bit) * Fixed problem with certain compilers hating lvalue casting * Fixed problem with truncated messages in iodbctest * Fixed problem calling setup dialog multiple times * Fixed problem with ODBC_BOTH_DSN * Fixed problem with tracing SQLGetInfo * Fixed problem with NUL termination on setup dialog * Fixed problem building on Mac OS X 10.4 64bit * Fixed problem calculating buffer length after calling setup dialog * Fixed problem with SQLDriverConnect (SQL_DRIVER_PROMPT) if no setup dialog had been registered * Fixed symbol clash between Oracle Instant client and iODBC on Mac OS X * Fixed problem building iODBCadm and drvproxy on Mac OS X * Fixed problem building on machines with older iODBC installation Feb 04 2005, V3.52.2: * Added tracing option for root without overwriting existing files * Added PORT.OpenLink script * Added special iodbc-config script for Mac OS X framework build * Fixed problem starting/stopping tracing * Fixed SQLSetConnectAttr to return SQL_SUCCESS_WITH_INFO if driver cannot handle option set before connect time * Fixed SQLInfo to use pcbInfoValue if present * Fixed NULL pointer problem in GTK choose driver dialog * Fixed problem with C++ prototypes with older 32bit code * Fixed locking problem with SQLAllocEnv/SQLAllocHandle * Fixed tracefile name expansion * Fixed problem running bootstrap.sh on machines without GTK * Fixed problem installing code in temp directory for packaging * Fixed problem calling SQLGetDiagRec on uninitialized handles in iodbctest program * Link iodbctest program with static iodbc libraries Sep 29 2004, V3.52.1: * Added support for new ODBC 3.52 specification for 64bit environments * Added support for SQLGetEnvAttr(SQL_ATTR_WCHAR_SIZE extension * Added missing Mac OS X build files * Added script to symlink Mac OS X framework into /usr/local/iODBC to allow traditional GNU configurable packages to use the same version of iODBC * Added new layer to driver loading to prevent memory leaks when drivers cannot be physically unloaded * Added man pages for iodbc-config, iodbctest and iodbcadm-gtk * Added header file iodbcunix.h for portability * Enhanced tracing for SQLGetFunctions, SQLColAttribute * Fixed NULL pointer problem when connection failed * Fixed initialization problem with SQLGetPrivateProfileString * Fixed export Unicode and ANSI names of ODBC functions in libiodbc * Fixed SQLSetScrollOption emulation * Fixed tracing for SQLSetDescRec * Fixed rpm build issue with RedHat 9 * Fixed MAC OS X install problem * Fixed Mac OS X build dependency on Carbon libraries * Fixed HP/UX shared library name handling * Fixed handling of UTF-8 sequences * Fixed compiler warnings * Small code cleanups and fixes Feb 24 2004, V3.51.2: * Added support for installation layouts for different distributions e.g. --with-layout=RedHat * Added support for Mac OS X 10.3 (panther) * Added support for creating libodbc.so symlink * Added more ODBC 3.x calls to iodbctest.c program * Added SQLRowCount for SQL UPDATE/DELETE statements in iodbctest.c * Fixed build problem with older make programs * Fixed bug in state handling SQLCloseCursor * Fixed driver statement allocation problem * Fixed double free in statement handle * Fixed problem tracing variable length strings and binary data * Use snprintf when available to guard against buffer overruns * Small documentation fixes Sept 08 2003, V3.51.1: * Fixed library dependency for PHP and other open source packages * Fixed build problems on Mac OS X * Fixed default compiler and flags for threaded builds * Small bugfixes Aug 22 2003, V3.51.0: * Added Unicode support * Added tracing functionality * Minor cleanups and bugfixes Apr 29 2002, V3.0.6: * Added instructions for building MyODBC on Mac OS X * Added support for building iODBC on Mac OS X as a framework * Fixed creating new window handle * Fixed portability issues * Use the latest versions of autoconf, automake and libtool * Updated all comments to reflect the new dual licensing policy * Fixed bug in SQLError/SQLGetDiagRec * Added support for driver specific connect options * Fixed wrong argument to SQLEndTran * Fixed handling statement descriptor * Fixed DSN string handling * Fixed mapping in SQLColumnAttributes * Minor cleanups and bugfixes Jun 7 2001, V3.0.5: * Added new iodbcinst code * Added new drvproxy and iodbcadm GTK frontend * iODBC released under LGPL or BSD license * SQLMoreResults always returned SQL_NO_DATA_FOUND Jun 4 2001, V3.0.4: * Reorganized source tree to use multiple subdirectories in preparation of adding the new iodbcinst code * Use config.h instead of massive CFLAGS * Generate libiodbc.spec with correct version number Jun 1 2001, V3.0.3: * Added support for automake 1.4-p2, autoconf 2.50 and libtool 1.4 * Fixed problems with shl_unload on HP/UX * Added support for MacOS X 1.2 (Darwin) * Disallow root to start a debug session (security risk) * SQLDatasources returns Driver Type instead of DSN Description * Added checks for ODBC 3.x date, time and timestamp defines * Fixed initialization of cip flag Feb 1 2000, V3.0.2: * Fixed deadlock problem in SQLNumResultCols * Small code fix in SQLDatasources Jan 28 2000, V3.0.1: * Added thread support into Driver Manager * Added code to allow Threaded application to call non-threaded driver * Small code fixes and cleanups Dec 16 1999, V3.0.0: * Added initial support for ODBC 3.x API and the ODBC 3.x to 2.x translation layer * Added --disable-odbc3 flag to configure.in for building ODBC 2.x compatible driver manager * Added --enable-maintainer-mode flag to configure.in * Rewrote dlopen and underscore checks in configure.in * Default iodbc-inidir is set to /etc * Clear error stack at the start of each ODBC function * Imported libtool 1.3.4 * Small code cleanups * Created iodbc-config script for other projects to find out how to link with the iodbc libraries. * Fixed bug in SQLDataSources * Added initial support for MacOS X (Rhapsody) * Add some ODBC 3.x API calls to the odbctest program June 25, 1999, V2.50.3: * Renamed public header files to conform to ODBC standard * System wide iodbc.ini can now be set with --with-odbc-inidir=, default is set to $sysconfdir/odbc.ini to comply with GNU standards * Some small bug fixes * Added AutoReqProv flag to RPM .spec file * Changed types for SQLHENV, SQLHDBC, SQLHSTMT April 26, 1999, V2.50.2: * Small code cleanups (pvk) * Wrote new handle validation checks to make the driver manager more resistant to handle misuse (pvk) * Rewrote all function prototypes to conform to ODBC 2.51 standard (pvk) * Use the internal form of the handle instead of the external representation (pvk) * Removed 2 copyright sccs stamps and comments as requested by Ke Jin (pvk) * Added rudementary SQLGetPrivateProfileString call (pvk) * Added support for VMS (ps) January 18, 1999, V2.50: * Added autoconf/automake/libtool support * Licensing moved to LGPL * Added OpenLink code enhancements and bug fixes ------------------------------------------------------------------------ Original Changelog from Ke Jin ------------------------------------------------------------------------ July 30, 1995, v2.00.beta: 0. the first release and beta version. Sep. 11, 1995, v2.10: 1. Porting to AIX 3.x and 4.x, by writing dlopen(), dlsym(), dlclose() interface. 2. Tested on SCO OpenServer 5.x 3. Awared of that, unlike s700/s800, exported function symbols on HP9000 s300/s400 will be prepended with a '_' prefix by compiler(and this '_' prefix is not automatically handled by shl_findsym()). Now, it works fine on s300/s400. 4. Support driver ODBC call tracing. Oct. 12, 1995, v2.11: 5. Driver's SQLNumResultCols() will automatically be invoked in driver manager's SQLExecute(), SQLExecDirect() and SQLParamData() after successfully (i.e. return SQL_SUCCESS or SQL_SUCCESS_WITH_INFO ) calling of their correspondent driver functions. This simplifies the state tracing/checking of the driver manager a lot and allows store procedures to return result set and also make iODBC driver manager work properly with SELECT INTO statements which actually don't return result sets. 6. Memory leaks are cleared. 7. Two bugs in dld.c for AIX are fixed 8. A bug of setting tracing option is fixed. 9. The driver will not be unloaded by SQLDisconnect() but by SQLFreeConnect() or next SQLConnect()/ SQLDriverConnect()/SQLBrowsConnect() on a different driver. This will save driver's loading time if it has been used by a previous connection(even there is no active connection on this driver). 10.Another three platforms are supported: FreeBSD 2.x Concurrent Max/OS SVR4 1.x DG/UX 5.x 11.autoconfig and build -- shell scripts to help modifying Config.mk and building iodbc driver manager Nov. 12, 1995, v2.12 12.I realized that a driver manager doesn't aware of difference between a C5 (i.e. hstmt) and a C6 (i.e. transaction) states. 13.The link flags "-lc" has been droped from Linux ELF section of Config.mk to fix a segment fault problem. Now, it works fine on Slackware 2.3 and Red Hat 2.0 (kernel version are 1.2.xx and 1.3.xx respectively). 14.On FreeBSD 2.x, dlsym() doesn't handle the '_' prefix prepended to an exportting function symbol by compiler. So, CLI_NAME_PREFIX needs to be defined as "_SQL" for FreeBSD 2.x. 15.Some files are renamed dld.c -> dlf.c dld.h -> dlf.h confg.h -> config.h 16. Fix a bug on setting tracing options. libiodbc-3.52.9/Makefile.am0000644000076400007640000002163112323210535012345 00000000000000# # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1995 by Ke Jin # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # AUTOMAKE_OPTIONS = gnu dist-zip 1.9.6 SUBDIRS = admin bin etc man include iodbcinst iodbc iodbcadm drvproxy samples ACLOCAL_AMFLAGS = -I admin EXTRA_DIST = \ $(srcdir)/IAFA-PACKAGE \ $(srcdir)/LICENSE \ $(srcdir)/LICENSE.LGPL \ $(srcdir)/LICENSE.BSD \ $(srcdir)/README.CVS \ $(srcdir)/README.GIT \ $(srcdir)/README.MACOSX \ $(srcdir)/bootstrap.sh \ $(srcdir)/PORT.OpenLink \ $(srcdir)/acinclude.m4 \ $(srcdir)/mac/*.exp \ $(srcdir)/mac/*.sh \ $(srcdir)/mac/iodbc-config.macosx \ $(srcdir)/mac/Makefile \ $(srcdir)/mac/myodbc.configure.diff \ $(srcdir)/mac/README.MYODBC \ $(srcdir)/mac/iODBC/*.plist \ $(srcdir)/mac/iODBC/English.lproj/*.strings \ $(srcdir)/mac/iODBC/iODBC.pbproj/project.pbxproj \ $(srcdir)/mac/iODBC/iODBC.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCadm/*.plist \ $(srcdir)/mac/iODBCadm/*.strings \ $(srcdir)/mac/iODBCadm/English.lproj/confirmation.xib \ $(srcdir)/mac/iODBCadm/English.lproj/connectionpool.xib \ $(srcdir)/mac/iODBCadm/English.lproj/driverremove.xib \ $(srcdir)/mac/iODBCadm/English.lproj/driversetup.xib \ $(srcdir)/mac/iODBCadm/English.lproj/drvchoose.tiff \ $(srcdir)/mac/iODBCadm/English.lproj/dsnchooser.xib \ $(srcdir)/mac/iODBCadm/English.lproj/gensetup.xib \ $(srcdir)/mac/iODBCadm/English.lproj/keyval.xib \ $(srcdir)/mac/iODBCadm/English.lproj/odbcadmin.xib \ $(srcdir)/mac/iODBCadm/English.lproj/odbcdriver.xib \ $(srcdir)/mac/iODBCadm/English.lproj/odbcdriverf.xib \ $(srcdir)/mac/iODBCadm/iODBCadm.pbproj/project.pbxproj \ $(srcdir)/mac/iODBCadm/iODBCadm.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCadministrator/*.plist \ $(srcdir)/mac/iODBCadministrator/English.lproj/*.strings \ $(srcdir)/mac/iODBCadministrator/English.lproj/about.xib \ $(srcdir)/mac/iODBCadministrator/English.lproj/iODBCAdministrator.icns \ $(srcdir)/mac/iODBCadministrator/English.lproj/main.xib \ $(srcdir)/mac/iODBCadministrator/English.lproj/odbcman.tiff \ $(srcdir)/mac/iODBCadministrator/iODBCadministrator.pbproj/project.pbxproj \ $(srcdir)/mac/iODBCadministrator/iODBCadministrator.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCcfmbridge/*.exp \ $(srcdir)/mac/iODBCcfmbridge/Info.c \ $(srcdir)/mac/iODBCcfmbridge/Makefile \ $(srcdir)/mac/iODBCcfmbridge/iODBC_CFM_Bridge \ $(srcdir)/mac/iODBCcfmbridge/iODBC_CFM_Bridge.res \ $(srcdir)/mac/iODBCcfmbridge/iodbccfm.c \ $(srcdir)/mac/iODBCcfmbridge/iodbccfm.h \ $(srcdir)/mac/iODBCcfmbridge/iodbccfm.r \ $(srcdir)/mac/iODBCdemo/*.plist \ $(srcdir)/mac/iODBCdemo/English.lproj/*.strings \ $(srcdir)/mac/iODBCdemo/English.lproj/Credits.rtf \ $(srcdir)/mac/iODBCdemo/English.lproj/ExecSQL.xib \ $(srcdir)/mac/iODBCdemo/English.lproj/MainMenu.xib \ $(srcdir)/mac/iODBCdemo/English.lproj/iODBCdemo.icns \ $(srcdir)/mac/iODBCdemo/ExecController.h \ $(srcdir)/mac/iODBCdemo/ExecController.m \ $(srcdir)/mac/iODBCdemo/NSResWindow.h \ $(srcdir)/mac/iODBCdemo/NSResWindow.m \ $(srcdir)/mac/iODBCdemo/TestController.h \ $(srcdir)/mac/iODBCdemo/TestController.m \ $(srcdir)/mac/iODBCdemo/iodbcdemo.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCdemo/iodbcdemo_Prefix.pch \ $(srcdir)/mac/iODBCdemo/main.m \ $(srcdir)/mac/iODBCdrvproxy/*.plist \ $(srcdir)/mac/iODBCdrvproxy/English.lproj/*.strings \ $(srcdir)/mac/iODBCdrvproxy/English.lproj/confirmation.xib \ $(srcdir)/mac/iODBCdrvproxy/English.lproj/gensetup.xib \ $(srcdir)/mac/iODBCdrvproxy/English.lproj/login.xib \ $(srcdir)/mac/iODBCdrvproxy/iODBCdrvproxy.pbproj/project.pbxproj \ $(srcdir)/mac/iODBCdrvproxy/iODBCdrvproxy.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCinst/*.plist \ $(srcdir)/mac/iODBCinst/English.lproj/*.strings \ $(srcdir)/mac/iODBCinst/iODBCinst.pbproj/project.pbxproj \ $(srcdir)/mac/iODBCinst/iODBCinst.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCtest/iODBCtest.pbproj/project.pbxproj \ $(srcdir)/mac/iODBCtest/iODBCtest.xcodeproj/project.pbxproj \ $(srcdir)/mac/iODBCtestw/iODBCtestw.pbproj/project.pbxproj \ $(srcdir)/mac/iODBCtestw/iODBCtestw.xcodeproj/project.pbxproj \ $(srcdir)/debian/changelog \ $(srcdir)/debian/compat \ $(srcdir)/debian/control \ $(srcdir)/debian/copyright \ $(srcdir)/debian/iodbc.files \ $(srcdir)/debian/iodbc.install \ $(srcdir)/debian/iodbc.lintian-overrides \ $(srcdir)/debian/iodbc.undocumented \ $(srcdir)/debian/libiodbc2-dev.examples \ $(srcdir)/debian/libiodbc2-dev.files \ $(srcdir)/debian/libiodbc2-dev.install \ $(srcdir)/debian/libiodbc2.docs \ $(srcdir)/debian/libiodbc2.examples \ $(srcdir)/debian/libiodbc2.files \ $(srcdir)/debian/libiodbc2.install \ $(srcdir)/debian/libiodbc2.lintian-overrides \ $(srcdir)/debian/libiodbc2.undocumented \ $(srcdir)/debian/README.Debian \ $(srcdir)/debian/rules \ $(srcdir)/debian/watch # ---------------------------------------------------------------------- # # Maintainers only # # ---------------------------------------------------------------------- MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure DISTCLEANFILES = config.nice if MAINTAINER_MODE # # Create Linux RPM's # RPMFLAGS=--define="_topdir `pwd`/distrib" linux-rpm: $(mkinstalldirs) distrib/SOURCES distrib/SRPMS distrib/SPECS $(mkinstalldirs) distrib/BUILD distrib/RPMS/i386 $(MAKE) dist cp $(PACKAGE)-$(VERSION).tar.gz distrib/SOURCES rpmbuild $(RPMFLAGS) -ba admin/libiodbc.spec rpmbuild $(RPMFLAGS) --clean --rmsource admin/libiodbc.spec # # Create a tar file containing the library and include files # binary-tar: -mkdir @build@ $(MAKE) install prefix=`pwd`/@build@ tar cvf @build@.tar @build@ gzip -9vf @build@.tar rm -rf @build@ # # Create a source snapshot package # snapshot: $(MAKE) dist distdir=$(PACKAGE)-`date +"%Y%m%d"` # # Create an official release package # release: $(MAKE) distcheck # # Generate ChangeLog # .PHONY: changelog changelog: git2cl --format='%s%n%n%b%n' --strip-tab --strip-cherry-pick > ChangeLog endif libiodbc-3.52.9/INSTALL0000644000076400007640000002202412323204667011350 00000000000000Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. libiodbc-3.52.9/AUTHORS0000644000076400007640000000173712323204667011377 00000000000000# # $Id$ # # List of Authors/Contributers # # The iODBC driver manager # Original Author: ---------------- Ke Jin (kj) Current Maintainer: ------------------- Patrick van Kleef (pvk) Contributors: ------------- Per Schroder (ps) - Added VMS port George Kodinov (gk) - Added ODBC 3.x support Emmanuel Poitier (ep) - Added iodbcinst support - Added iodbcadm-gtk Christian Hammers (ch) - Maintainer of iODBC packaging for the Debian project Sergei Malinin (sm) - Added Unicode support Tim Haynes (th) - Maintainer iODBC.org web site Max Khon (mk) - iODBC fixes and extentions This list is not complete. If you have contributed to this project and want to appear on this list, please email the current maintainer. libiodbc-3.52.9/configure0000755000076400007640000175205012323210644012230 00000000000000#! /bin/sh # From configure.in Id. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.63 for iODBC Driver Manager 3.52.9. # # Report bugs to . # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do 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 # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do 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 : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do 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 : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell bug-autoconf@gnu.org about your system, echo including any error possibly output before this message. echo This can help us improve future autoconf versions. echo Configuration will now proceed without shell functions. } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac ECHO=${lt_ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF $* _LT_EOF exit 0 fi # 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 if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='iODBC Driver Manager' PACKAGE_TARNAME='libiodbc' PACKAGE_VERSION='3.52.9' PACKAGE_STRING='iODBC Driver Manager 3.52.9' PACKAGE_BUGREPORT='iodbc@openlinksw.com' ac_unique_file="include/isql.h" ac_default_prefix=/usr/local # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS LIBADD_OS DARWIN_FALSE DARWIN_TRUE INSTALL_LIBODBC_FALSE INSTALL_LIBODBC_TRUE filedsnpath inidir lib_version odbcmode LIBADD_DL GTK_FALSE GTK_TRUE GUI_FALSE GUI_TRUE GTK_CONFIG GTK_LIBS GTK_CFLAGS PKG_CONFIG OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL lt_ECHO RANLIB AR OBJDUMP NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL LN_S CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_maintainer_mode with_layout enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld enable_libtool_lock enable_gui enable_gtktest with_gtk_prefix with_gtk_exec_prefix enable_odbc3 with_iodbc_inidir with_iodbc_filedsnpath enable_libodbc with_pthreads enable_pthreads ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { $as_echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { $as_echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 { (exit 1); exit 1; }; } ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { $as_echo "$as_me: error: working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures iODBC Driver Manager 3.52.9 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/libiodbc] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of iODBC Driver Manager 3.52.9:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-gui build GUI applications (default) --disable-gui build GUI applications --disable-gtktest do not try to compile and run a test GTK+ program --disable-gtktest Do not try to compile and run a test GTK program --enable-odbc3 build ODBC 3.x compatible driver manager (default) --disable-odbc3 build ODBC 2.x compatible driver manager --enable-libodbc install extra libodbc.so library (default) --disable-libodbc do not install extra libodbc.so library --enable-pthreads build threaded libraries and applications (default) --disable-pthreads build non-threaded libraries and applications Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-layout=LAYOUT Choose installation layout --with-pic try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-gtk-prefix=PFX Prefix where GTK is installed (optional) --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional) --with-iodbc-inidir=DIR where the system odbc.ini file should be located (default is /etc) --with-iodbc-filedsnpath=DIR default location for FILEDSN data sources (default is $inidir/ODBCDataSources) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF iODBC Driver Manager configure 3.52.9 generated by GNU Autoconf 2.63 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by iODBC Driver Manager $as_me 3.52.9, which was generated by GNU Autoconf 2.63. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` 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 || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test -r "$ac_site_file"; then { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 $as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in admin "$srcdir"/admin; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in admin \"$srcdir\"/admin" >&5 $as_echo "$as_me: error: cannot find install-sh or install.sh in admin \"$srcdir\"/admin" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers include/config.h" am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5 $as_echo "$as_me: error: unsafe absolute working directory name" >&2;} { (exit 1); exit 1; }; };; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5 $as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;} { (exit 1); exit 1; }; };; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 $as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 $as_echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:$LINENO: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 $as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=libiodbc VERSION=3.52.9 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 $as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { $as_echo "$as_me:$LINENO: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 $as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 $as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 $as_echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:$LINENO: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 $as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 $as_echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ########################################################################## ## ## ## Version information ## ## ## ######################################################################### # # Version information for SQLGetInfo(SQL_DM_VER) call # BUILD_MAJOR="8" # last digit of version number BUILD_MINOR="120326" # year/month/day of release BUILD_VER="${BUILD_MAJOR}${BUILD_MINOR}" # # Library version numbers # lib3_version=3:20:1 # ODBC 3.x mode lib2_version=2:55:0 # ODBC 2.x mode (do not change) ########################################################################## ## ## ## Check whether config.cache belongs to this machine ## ## ## ########################################################################## { $as_echo "$as_me:$LINENO: checking cached information" >&5 $as_echo_n "checking cached information... " >&6; } hostcheck="$host" if test "${ac_cv_hostcheck+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_hostcheck="$hostcheck" fi if test "$ac_cv_hostcheck" != "$hostcheck"; then { $as_echo "$as_me:$LINENO: result: changed" >&5 $as_echo "changed" >&6; } { $as_echo "$as_me:$LINENO: WARNING: Running on a different architecture." >&5 $as_echo "$as_me: WARNING: Running on a different architecture." >&2;} { $as_echo "$as_me:$LINENO: WARNING: Can't use cached values." >&5 $as_echo "$as_me: WARNING: Can't use cached values." >&2;} { { $as_echo "$as_me:$LINENO: error: Please remove the invalid config.cache file, then try again." >&5 $as_echo "$as_me: error: Please remove the invalid config.cache file, then try again." >&2;} { (exit 1); exit 1; }; } else { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } fi ########################################################################## ## ## ## Save configuration for later reuse ## ## ## ########################################################################## echo creating config.nice rm -f config.nice cat >config.nice<> config.nice for arg in $ac_configure_args do echo "$arg \\" >> config.nice done echo '"$@"' >> config.nice chmod +x config.nice ########################################################################## ## ## ## Set Layout for iODBC ## ## ## ########################################################################## { $as_echo "$as_me:$LINENO: checking for iODBC installation layout" >&5 $as_echo_n "checking for iODBC installation layout... " >&6; } # Check whether --with-layout was given. if test "${with_layout+set}" = set; then withval=$with_layout; case "${withval}" in yes|no) IODBC_LAYOUT=unset ;; *) IODBC_LAYOUT=${withval} ;; esac else IODBC_LAYOUT=unset fi # # Defaults for Layout # install_libodbc=true case ${IODBC_LAYOUT} in unset) # No Layout set iodbc_layout="default" inidir=/etc ;; [Gg][Nn][Uu]) # GNU iodbc_layout="GNU" test "x$prefix" = xNONE && prefix=/usr/local inidir=${prefix}/etc/iodbc ;; [Dd][Ee][Bb][Ii][Aa][Nn]) # Debian iodbc_layout="Debian" test "x$prefix" = xNONE && prefix=/usr inidir=/etc install_libodbc=false ;; [Gg][Ee][Nn][Tt][Oo][Oo]) # Gentoo iodbc_layout="Gentoo" test "x$prefix" = xNONE && prefix=/usr includedir='${prefix}/include/iodbc' inidir=/etc/iodbc install_libodbc=false ;; [Rr][Ee][Dd][Hh][Aa][Tt]) # RedHat iodbc_layout=RedHat test "x$prefix" = xNONE && prefix=/usr inidir=/etc ;; [Ff][Rr][Ee][Ee][Bb][Ss][Dd]) # FreeBSD iodbc_layout=FreeBSD test "x$prefix" = xNONE && prefix=/usr inidir=/etc ;; [Oo][Pp][Tt]) # /opt iodbc_layout=opt test "x$prefix" = xNONE && prefix=/opt/iodbc inidir=/etc ;; [Oo][Pp][Ee][Nn][Ll][Ii][Nn][Kk]) # OpenLink iodbc_layout=openlink prefix=/usr/local/iODBC inidir=/etc ;; *) # UNKNOWN { $as_echo "$as_me:$LINENO: result: unknown" >&5 $as_echo "unknown" >&6; } echo "" echo "Supported layouts: Debian FreeBSD GNU OpenLink opt RedHat" echo "" { { $as_echo "$as_me:$LINENO: error: unable to continue" >&5 $as_echo "$as_me: error: unable to continue" >&2;} { (exit 1); exit 1; }; } ;; esac { $as_echo "$as_me:$LINENO: result: ${iodbc_layout}" >&5 $as_echo "${iodbc_layout}" >&6; } ########################################################################## ## ## ## Check for C compiler ## ## ## ########################################################################## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 $as_echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { $as_echo "$as_me:$LINENO: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } if test -z "$ac_file"; then $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 $as_echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi fi fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } { $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } { $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest$ac_cv_exeext { $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:$LINENO: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:$LINENO: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:$LINENO: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test "x$CC" != xcc; then { $as_echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $as_echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5 $as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -f conftest2.$ac_objext && { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -f conftest2.$ac_objext && { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } cat >>confdefs.h <<\_ACEOF #define NO_MINUS_C_MINUS_O 1 _ACEOF fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi case $ac_cv_prog_cc_stdc in no) ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; *) { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if test "${ac_cv_prog_cc_c99+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c99=$ac_arg else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:$LINENO: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:$LINENO: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 else { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:$LINENO: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:$LINENO: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 else ac_cv_prog_cc_stdc=no fi fi ;; esac { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO Standard C" >&5 $as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } if test "${ac_cv_prog_cc_stdc+set}" = set; then $as_echo_n "(cached) " >&6 fi case $ac_cv_prog_cc_stdc in no) { $as_echo "$as_me:$LINENO: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; '') { $as_echo "$as_me:$LINENO: result: none needed" >&5 $as_echo "none needed" >&6; } ;; *) { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 $as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:$LINENO: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 $as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if test "${ac_cv_c_const+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_c_const=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const /**/ _ACEOF fi ########################################################################## ## ## ## Check for standard programs ## ## ## ########################################################################## # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi { $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.2.6b' macro_revision='1.3017' ltmain="$ac_aux_dir/ltmain.sh" { $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if test "${ac_cv_path_SED+set}" = set; then $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed $as_unset ac_script || ac_script= if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5 $as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:$LINENO: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:$LINENO: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if test "${ac_cv_path_FGREP+set}" = set; then $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } 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 { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${lt_cv_path_LD+set}" = set; then $as_echo_n "(cached) " >&6 else 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 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 $as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } { $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test "${lt_cv_path_NM+set}" = set; then $as_echo_n "(cached) " >&6 else 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 fi { $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } 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 "$ac_tool_prefix"; then for ac_prog in "dumpbin -symbols" "link -dump -symbols" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DUMPBIN+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in "dumpbin -symbols" "link -dump -symbols" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if test "${lt_cv_nm_interface+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:5592: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:5595: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:5598: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if test "${lt_cv_sys_max_cmd_len+set}" = set; then $as_echo_n "(cached) " >&6 else 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; ;; 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 ;; 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"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$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 fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # 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 { $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if test "${lt_cv_ld_reload_flag+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if test "${lt_cv_deplibs_check_method+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/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 lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' 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 ;; 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]) 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 Linux ELF. linux* | k*bsd*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) 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 fi { $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AR+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:$LINENO: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # 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 \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # 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 # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then $as_echo_n "(cached) " >&6 else # 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};"\ " /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 # 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && 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 #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. */ 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_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 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 fi 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 { $as_echo "$as_me:$LINENO: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } fi # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval=$enable_libtool_lock; fi 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 6792 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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" { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if test "${lt_cv_cc_needs_belf+set}" = set; then $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_cv_cc_needs_belf=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } 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 ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) 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" case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DSYMUTIL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_NMEDIT+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_LIPO+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:$LINENO: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL64+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if test "${lt_cv_apple_cc_single_mod+set}" = set; then $as_echo_n "(cached) " >&6 else 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" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if test "${lt_cv_ld_exported_symbols_list+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_cv_ld_exported_symbols_list=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_ld_exported_symbols_list=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } 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" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac { $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then enableval=$enable_shared; 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 else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then enableval=$enable_static; 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 else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then withval=$with_pic; pic_mode="$withval" else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval=$enable_fast_install; 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 else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:$LINENO: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if test "${lt_cv_objdir+set}" = set; then $as_echo_n "(cached) " >&6 else 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 fi { $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF 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 # Sed substitution that helps us do robust quoting. It backslashifies # 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' # 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 for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # 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 { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then $as_echo_n "(cached) " >&6 else 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 ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" 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 fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:$LINENO: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then $as_echo_n "(cached) " >&6 else 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 ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" 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 fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$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);}' # 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 # 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 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* 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* ## 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_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # 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:8413: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8417: \$? = $ac_status" >&5 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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= { $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-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_prog_compiler_pic='-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 lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; 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_prog_compiler_pic='-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_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-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). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-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_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 $as_echo "$lt_prog_compiler_pic" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test "${lt_cv_prog_compiler_pic_works+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # 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:8752: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8756: \$? = $ac_status" >&5 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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test "${lt_cv_prog_compiler_static_works+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" 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>&5 $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=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:8857: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8861: \$? = $ac_status" >&5 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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $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* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=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:8912: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8916: \$? = $ac_status" >&5 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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $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* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } 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 { $as_echo "$as_me:$LINENO: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # 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'. exclude_expsyms='_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. 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 ;; esac ld_shlibs=yes if test "$with_gnu_ld" = 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 hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${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 whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *\ [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 ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$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)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$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... archive_expsym_cmds='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 ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${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. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='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) 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= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$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 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='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*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld='-rpath $libdir' archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='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 $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $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 ld_shlibs=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 archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=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 hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$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. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=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 if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$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. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${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 hardcode_direct=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 hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= 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 export_dynamic_flag_spec='${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. always_export_symbols=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. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`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 "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`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 "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${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. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$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 archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$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)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-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. hardcode_libdir_flag_spec=' ' allow_undefined_flag=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. archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes allow_undefined_flag="$_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=echo archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="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}" module_expsym_cmds="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}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=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*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$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 hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$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 hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat >conftest.$ac_ext <<_ACEOF int foo(void) {} _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$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' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='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 "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${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='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='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}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='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 hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=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 whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=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. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$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. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds 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. { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 $as_echo "$archive_cmds_need_lc" >&6; } ;; esac fi ;; esac { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # 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 -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # 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; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` 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 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 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=`$ECHO "X$lib" | $Xsed -e '\''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 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,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) 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}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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`' 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 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 ;; freebsd1*) dynamic_linker=no ;; 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[123]*) 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 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 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' ;; interix[3-9]*) 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' 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 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 Linux ELF. linux* | k*bsd*-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' 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 save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then shlibpath_overrides_runpath=yes fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir # 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 # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # 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;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $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' ;; 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 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 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 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 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 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 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 { $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } 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 { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != 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, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = 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 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 { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dl_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) { $as_echo "$as_me:$LINENO: checking for shl_load" >&5 $as_echo_n "checking for shl_load... " >&6; } if test "${ac_cv_func_shl_load+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_shl_load || defined __stub___shl_load choke me #endif int main () { return shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_func_shl_load=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 $as_echo "$ac_cv_func_shl_load" >&6; } if test "x$ac_cv_func_shl_load" = x""yes; then lt_cv_dlopen="shl_load" else { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if test "${ac_cv_lib_dld_shl_load+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dld_shl_load=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = x""yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else { $as_echo "$as_me:$LINENO: checking for dlopen" >&5 $as_echo_n "checking for dlopen... " >&6; } if test "${ac_cv_func_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_dlopen || defined __stub___dlopen choke me #endif int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_func_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 $as_echo "$ac_cv_func_dlopen" >&6; } if test "x$ac_cv_func_dlopen" = x""yes; then lt_cv_dlopen="dlopen" else { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dl_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if test "${ac_cv_lib_svld_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_svld_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = x""yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if test "${ac_cv_lib_dld_dld_link+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dld_dld_link=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = x""yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; 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" { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 11715 "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 void fnord() { int i=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; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self_static+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 11811 "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 void fnord() { int i=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; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } 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 striplib= old_striplib= { $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } 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" { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } 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" { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } 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 { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:$LINENO: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: ########################################################################## ## ## ## Check for standard header files ## ## ## ########################################################################## { $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi { $as_echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if test "${ac_cv_header_time+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_time=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\_ACEOF #define TIME_WITH_SYS_TIME 1 _ACEOF fi for ac_header in wchar.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to iodbc@openlinksw.com ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ########################################################################## ## ## ## Check for specific library functions ## ## ## ########################################################################## for ac_func in strerror setenv asprintf snprintf gettimeofday localtime_r do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 $as_echo_n "checking for $ac_func... " >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "$as_ac_var=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in wcslen wcscpy wcsncpy wcschr wcscat wcscmp towlower wcsncasecmp do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 $as_echo_n "checking for $ac_func... " >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "$as_ac_var=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ########################################################################## ## ## ## Check if we want to build the GUI applications and libraries ## ## ## ########################################################################## # Check whether --enable-gui was given. if test "${enable_gui+set}" = set; then enableval=$enable_gui; case "${enableval}" in yes) USE_GUI=true ;; no) USE_GUI=false ;; *) { { $as_echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-gui" >&5 $as_echo "$as_me: error: bad value ${enableval} for --enable-gui" >&2;} { (exit 1); exit 1; }; } ;; esac else USE_GUI=true fi ########################################################################## ## ## ## Check for GTK library functions ## ## ## ########################################################################## USE_GTK=false if test x$USE_GUI = xtrue then no_gtk="" # Check for GTK+ 2.x # Check whether --enable-gtktest was given. if test "${enable_gtktest+set}" = set; then enableval=$enable_gtktest; else enable_gtktest=yes fi pkg_config_args=gtk+-2.0 for module in . do case "$module" in gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; esac done no_gtk="" # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PKG_CONFIG+set}" = set; then $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test x$PKG_CONFIG != xno ; then if pkg-config --atleast-pkgconfig-version 0.7 ; then : else echo *** pkg-config too old; version 0.7 or better required. no_gtk=yes PKG_CONFIG=no fi else no_gtk=yes fi min_gtk_version=2.0.0 { $as_echo "$as_me:$LINENO: checking for GTK+ - version >= $min_gtk_version" >&5 $as_echo_n "checking for GTK+ - version >= $min_gtk_version... " >&6; } if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH" enable_gtktest=no fi if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then : else no_gtk=yes fi fi if test x"$no_gtk" = x ; then GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags` GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs` gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" rm -f conf.gtktest if test "$cross_compiling" = yes; then echo $ac_n "cross compiling; assumed OK... $ac_c" else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) no_gtk=yes fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then { $as_echo "$as_me:$LINENO: result: yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&5 $as_echo "yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&6; } : else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://pkgconfig.sourceforge.net" else if test -f conf.gtktest ; then : else echo "*** Could not run GTK+ test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK+ or finding the wrong" echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK+ is incorrectly installed." fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" : fi rm -f conf.gtktest if test x$no_gtk != x then # Try GTK 1.2.x instead no_gtk="" # Check whether --with-gtk-prefix was given. if test "${with_gtk_prefix+set}" = set; then withval=$with_gtk_prefix; gtk_config_prefix="$withval" else gtk_config_prefix="" fi # Check whether --with-gtk-exec-prefix was given. if test "${with_gtk_exec_prefix+set}" = set; then withval=$with_gtk_exec_prefix; gtk_config_exec_prefix="$withval" else gtk_config_exec_prefix="" fi # Check whether --enable-gtktest was given. if test "${enable_gtktest+set}" = set; then enableval=$enable_gtktest; else enable_gtktest=yes fi for module in . do case "$module" in gthread) gtk_config_args="$gtk_config_args gthread" ;; esac done if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config fi fi if test x$gtk_config_prefix != x ; then gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_prefix/bin/gtk-config fi fi # Extract the first word of "gtk-config", so it can be a program name with args. set dummy gtk-config; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GTK_CONFIG+set}" = set; then $as_echo_n "(cached) " >&6 else case $GTK_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GTK_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GTK_CONFIG" && ac_cv_path_GTK_CONFIG="no" ;; esac fi GTK_CONFIG=$ac_cv_path_GTK_CONFIG if test -n "$GTK_CONFIG"; then { $as_echo "$as_me:$LINENO: result: $GTK_CONFIG" >&5 $as_echo "$GTK_CONFIG" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi min_gtk_version=1.2.3 { $as_echo "$as_me:$LINENO: checking for GTK - version >= $min_gtk_version" >&5 $as_echo_n "checking for GTK - version >= $min_gtk_version... " >&6; } no_gtk="" if test "$GTK_CONFIG" = "no" ; then no_gtk=yes else GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" rm -f conf.gtktest if test "$cross_compiling" = yes; then echo $ac_n "cross compiling; assumed OK... $ac_c" else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If gtk-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } #if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } #endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); printf("*** correct copy of gtk-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) no_gtk=yes fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } : else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } if test "$GTK_CONFIG" = "no" ; then echo "*** The gtk-config script installed by GTK could not be found" echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GTK_CONFIG environment variable to the" echo "*** full path to gtk-config." else if test -f conf.gtktest ; then : else echo "*** Could not run GTK test program, checking why..." CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK or finding the wrong" echo "*** version of GTK. If it is not finding GTK, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" echo "*** came with the system with the command" echo "***" echo "*** rpm --erase --nodeps gtk gtk-devel" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK was incorrectly installed" echo "*** or that you have moved GTK since it was installed. In the latter case, you" echo "*** may want to edit the gtk-config script: $GTK_CONFIG" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" : fi rm -f conf.gtktest fi if test x$no_gtk = x then USE_GTK=true fi fi ########################################################################## ## ## ## Now make the final checks whether we can use GUI extensions ## ## ## ########################################################################## if test x$USE_GTK = xfalse then USE_GUI=false fi if test x$USE_GUI = xtrue then cat >>confdefs.h <<\_ACEOF #define GUI 1 _ACEOF fi if test x$USE_GUI = xtrue; then GUI_TRUE= GUI_FALSE='#' else GUI_TRUE='#' GUI_FALSE= fi if test x$USE_GTK = xtrue; then GTK_TRUE= GTK_FALSE='#' else GTK_TRUE='#' GTK_FALSE= fi ########################################################################## ## ## ## Check for dynamic load module ## ## ## ########################################################################## for ac_header in dlfcn.h dl.h dld.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to iodbc@openlinksw.com ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done LIBADD_DL="" { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dl_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_LIBDL 1 _ACEOF LIBADD_DL="-ldl" else for ac_func in dlopen _dlopen do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 $as_echo_n "checking for $ac_func... " >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "$as_ac_var=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_LIBDL 1 _ACEOF fi done fi { $as_echo "$as_me:$LINENO: checking for shl_load" >&5 $as_echo_n "checking for shl_load... " >&6; } if test "${ac_cv_func_shl_load+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_shl_load || defined __stub___shl_load choke me #endif int main () { return shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_func_shl_load=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 $as_echo "$ac_cv_func_shl_load" >&6; } if test "x$ac_cv_func_shl_load" = x""yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_SHL_LOAD 1 _ACEOF else { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if test "${ac_cv_lib_dld_shl_load+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dld_shl_load=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = x""yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_SHL_LOAD 1 _ACEOF LIBADD_DL="$LIBADD_DL -ldld" fi fi { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if test "${ac_cv_lib_dld_dld_link+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dld_dld_link=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = x""yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_DLD 1 _ACEOF test "x$ac_cv_lib_dld_shl_load" = yes || LIBADD_DL="$LIBADD_DL -ldld" fi { $as_echo "$as_me:$LINENO: checking for NSCreateObjectFileImageFromFile" >&5 $as_echo_n "checking for NSCreateObjectFileImageFromFile... " >&6; } if test "${ac_cv_func_NSCreateObjectFileImageFromFile+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define NSCreateObjectFileImageFromFile to an innocuous variant, in case declares NSCreateObjectFileImageFromFile. For example, HP-UX 11i declares gettimeofday. */ #define NSCreateObjectFileImageFromFile innocuous_NSCreateObjectFileImageFromFile /* System header to define __stub macros and hopefully few prototypes, which can conflict with char NSCreateObjectFileImageFromFile (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef NSCreateObjectFileImageFromFile /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char NSCreateObjectFileImageFromFile (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_NSCreateObjectFileImageFromFile || defined __stub___NSCreateObjectFileImageFromFile choke me #endif int main () { return NSCreateObjectFileImageFromFile (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_func_NSCreateObjectFileImageFromFile=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_NSCreateObjectFileImageFromFile=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_NSCreateObjectFileImageFromFile" >&5 $as_echo "$ac_cv_func_NSCreateObjectFileImageFromFile" >&6; } if test "x$ac_cv_func_NSCreateObjectFileImageFromFile" = x""yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_DYLD 1 _ACEOF fi { $as_echo "$as_me:$LINENO: checking for underscore before symbols" >&5 $as_echo_n "checking for underscore before symbols... " >&6; } if test "${libltdl_cv_uscore+set}" = set; then $as_echo_n "(cached) " >&6 else echo "int fnord(void){return 42;}int main(void){return fnord();}" > conftest.c ${CC} ${CFLAGS} -c conftest.c > /dev/null 2>&1 if (nm conftest.o | grep _fnord) > /dev/null; then libltdl_cv_uscore=yes else libltdl_cv_uscore=no fi rm -f conftest* fi { $as_echo "$as_me:$LINENO: result: $libltdl_cv_uscore" >&5 $as_echo "$libltdl_cv_uscore" >&6; } if test x"$libltdl_cv_uscore" = xyes; then if test x"$ac_cv_func_dlopen" = xyes || test x"$ac_cv_lib_dl_dlopen" = xyes ; then { $as_echo "$as_me:$LINENO: checking whether we have to add an underscore for dlsym" >&5 $as_echo_n "checking whether we have to add an underscore for dlsym... " >&6; } if test "${libltdl_cv_need_uscore+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then libltdl_cv_need_uscore=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LTDL_GLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LTDL_GLOBAL DL_GLOBAL # else # define LTDL_GLOBAL 0 # endif #endif /* We may have to define LTDL_LAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LTDL_LAZY_OR_NOW # ifdef RTLD_LAZY # define LTDL_LAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LTDL_LAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LTDL_LAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LTDL_LAZY_OR_NOW DL_NOW # else # define LTDL_LAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord () { int i = 42; } int main () { void *self, *ptr1, *ptr2; self = dlopen (0, LTDL_GLOBAL | LTDL_LAZY_OR_NOW); if (self) { ptr1 = dlsym (self, "fnord"); ptr2 = dlsym (self, "_fnord"); if (ptr1 && !ptr2) { dlclose (self); exit (0); } } exit (1); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then libltdl_cv_need_uscore=no else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) libltdl_cv_need_uscore=yes fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:$LINENO: result: $libltdl_cv_need_uscore" >&5 $as_echo "$libltdl_cv_need_uscore" >&6; } fi fi if test x"$libltdl_cv_need_uscore" = xyes; then cat >>confdefs.h <<\_ACEOF #define NEED_USCORE 1 _ACEOF fi ########################################################################## ## ## ## Check if the dl library has the dladdr function ## ## ## ########################################################################## { $as_echo "$as_me:$LINENO: checking for dladdr" >&5 $as_echo_n "checking for dladdr... " >&6; } if test "${ac_cv_func_dladdr+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dladdr to an innocuous variant, in case declares dladdr. For example, HP-UX 11i declares gettimeofday. */ #define dladdr innocuous_dladdr /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dladdr (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dladdr /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dladdr (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_dladdr || defined __stub___dladdr choke me #endif int main () { return dladdr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_func_dladdr=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dladdr=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_dladdr" >&5 $as_echo "$ac_cv_func_dladdr" >&6; } if test "x$ac_cv_func_dladdr" = x""yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_DLADDR 1 _ACEOF else { $as_echo "$as_me:$LINENO: checking for dladdr in -ldl" >&5 $as_echo_n "checking for dladdr in -ldl... " >&6; } if test "${ac_cv_lib_dl_dladdr+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dladdr (); int main () { return dladdr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dl_dladdr=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dladdr=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dladdr" >&5 $as_echo "$ac_cv_lib_dl_dladdr" >&6; } if test "x$ac_cv_lib_dl_dladdr" = x""yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_DLADDR 1 _ACEOF LIBADD_DL="-ldl" fi fi { $as_echo "$as_me:$LINENO: checking for Dl_info" >&5 $as_echo_n "checking for Dl_info... " >&6; } if test "${ac_cv_type_Dl_info+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_type_Dl_info=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { if (sizeof (Dl_info)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { if (sizeof ((Dl_info))) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_Dl_info=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_type_Dl_info" >&5 $as_echo "$ac_cv_type_Dl_info" >&6; } if test "x$ac_cv_type_Dl_info" = x""yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_DL_INFO 1 _ACEOF fi ########################################################################## ## ## ## Set version information ## ## ## ########################################################################## { $as_echo "$as_me:$LINENO: checking for iODBC mode" >&5 $as_echo_n "checking for iODBC mode... " >&6; } # Check whether --enable-odbc3 was given. if test "${enable_odbc3+set}" = set; then enableval=$enable_odbc3; case "${enableval}" in yes) odbcmode=3 ;; no) odbcmode=2 { { $as_echo "$as_me:$LINENO: error: --disable-odbc3 temporarily disabled" >&5 $as_echo "$as_me: error: --disable-odbc3 temporarily disabled" >&2;} { (exit 1); exit 1; }; } ;; *) { { $as_echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-odbc3" >&5 $as_echo "$as_me: error: bad value ${enableval} for --enable-odbc3" >&2;} { (exit 1); exit 1; }; } ;; esac else odbcmode=3 # set default to ODBC 3.x mode fi if test "x$odbcmode" = "x3" then lib_version=$lib3_version CFLAGS="$CFLAGS -DODBCVER=0x0350 -DIODBC_BUILD=$BUILD_VER" { $as_echo "$as_me:$LINENO: result: ODBC 3.x compatible mode" >&5 $as_echo "ODBC 3.x compatible mode" >&6; } else lib_version=$lib2_version CFLAGS="$CFLAGS -DODBCVER=0x0250 -DIODBC_BUILD=$BUILD_VER" { $as_echo "$as_me:$LINENO: result: ODBC 2.x compatible mode" >&5 $as_echo "ODBC 2.x compatible mode" >&6; } fi ########################################################################## ## ## ## Where to find the system odbc.ini file ** ## ## ########################################################################## # # First determine the systemwide default directory according # to GNU specifications # { $as_echo "$as_me:$LINENO: checking system config directory" >&5 $as_echo_n "checking system config directory... " >&6; } sysinidir=`eval echo $sysconfdir` case "$sysinidir" in NONE*) sysinidir=$ac_default_prefix/etc ;; /usr/etc) sysinidir=/etc ;; *) sysinidir=`eval echo $sysconfdir` ;; esac { $as_echo "$as_me:$LINENO: result: $sysinidir" >&5 $as_echo "$sysinidir" >&6; } # # Now allow to overrule this directory with a custom setting # { $as_echo "$as_me:$LINENO: checking for iODBC ini directory" >&5 $as_echo_n "checking for iODBC ini directory... " >&6; } # Check whether --with-iodbc-inidir was given. if test "${with_iodbc_inidir+set}" = set; then withval=$with_iodbc_inidir; case "$withval" in yes|no) inidir=$sysinidir ;; *) inidir=$withval ;; esac fi { $as_echo "$as_me:$LINENO: result: $inidir" >&5 $as_echo "$inidir" >&6; } cat >>confdefs.h <<_ACEOF #define SYS_ODBC_INI "$inidir/odbc.ini" _ACEOF cat >>confdefs.h <<_ACEOF #define SYS_ODBCINST_INI "$inidir/odbcinst.ini" _ACEOF # # Now allow to override default FileDSN directory with a custom setting # filedsnpath=$inidir/ODBCDataSources { $as_echo "$as_me:$LINENO: checking for FILEDSN default directory" >&5 $as_echo_n "checking for FILEDSN default directory... " >&6; } # Check whether --with-iodbc-filedsnpath was given. if test "${with_iodbc_filedsnpath+set}" = set; then withval=$with_iodbc_filedsnpath; case "$withval" in yes|no) filedsnpath=$inidir/ODBCDataSources ;; *) filedsnpath=$withval ;; esac fi { $as_echo "$as_me:$LINENO: result: $filedsnpath" >&5 $as_echo "$filedsnpath" >&6; } cat >>confdefs.h <<_ACEOF #define DEFAULT_FILEDSNPATH "$filedsnpath" _ACEOF ########################################################################## ## ## ## Create libodbc.so if requested ## ## ## ########################################################################## { $as_echo "$as_me:$LINENO: checking for libodbc.so link" >&5 $as_echo_n "checking for libodbc.so link... " >&6; } # Check whether --enable-libodbc was given. if test "${enable_libodbc+set}" = set; then enableval=$enable_libodbc; case "${enableval}" in yes) install_libodbc=true ;; no) install_libodbc=false ;; *) { { $as_echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-libodbc" >&5 $as_echo "$as_me: error: bad value ${enableval} for --enable-libodbc" >&2;} { (exit 1); exit 1; }; } ;; esac fi { $as_echo "$as_me:$LINENO: result: $install_libodbc" >&5 $as_echo "$install_libodbc" >&6; } if test x$install_libodbc = xtrue; then INSTALL_LIBODBC_TRUE= INSTALL_LIBODBC_FALSE='#' else INSTALL_LIBODBC_TRUE='#' INSTALL_LIBODBC_FALSE= fi ########################################################################## ## ## ## Checkout pthread situation ## ## ## ########################################################################## # for backward compatibility # Check whether --with-pthreads was given. if test "${with_pthreads+set}" = set; then withval=$with_pthreads; { $as_echo "$as_me:$LINENO: WARNING: --with-pthreads flag is deprecated, use --enable-pthreads" >&5 $as_echo "$as_me: WARNING: --with-pthreads flag is deprecated, use --enable-pthreads" >&2;} fi { $as_echo "$as_me:$LINENO: checking for thread model" >&5 $as_echo_n "checking for thread model... " >&6; } # Check whether --enable-pthreads was given. if test "${enable_pthreads+set}" = set; then enableval=$enable_pthreads; case "${enableval}" in yes) USE_PTHREADS=true ;; no) USE_PTHREADS=false ;; *) { { $as_echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-pthreads" >&5 $as_echo "$as_me: error: bad value ${enableval} for --enable-pthreads" >&2;} { (exit 1); exit 1; }; } ;; esac else USE_PTHREADS=true fi if test x$USE_PTHREADS = xtrue then { $as_echo "$as_me:$LINENO: result: enabled pthread support" >&5 $as_echo "enabled pthread support" >&6; } CPPFLAGS="$CPPFLAGS -DWITH_PTHREADS -D_REENTRANT" found_lib=false { $as_echo "$as_me:$LINENO: checking for OS dependent thread flags" >&5 $as_echo_n "checking for OS dependent thread flags... " >&6; } case $host in *-aix*) # Unless overruled by the user, we prefer this compiler if test "x$CC" = "xcc" then CC=cc_r7 fi { $as_echo "$as_me:$LINENO: result: using $CC for AIX" >&5 $as_echo "using $CC for AIX" >&6; } ;; *UnixWare*) CFLAGS="$CFLAGS -Kthread" { $as_echo "$as_me:$LINENO: result: use -Kthread for UnixWare" >&5 $as_echo "use -Kthread for UnixWare" >&6; } ;; i345686-dg-dgux*) CFLAGS="$CFLAGS -D_POSIX4A_DRAFT6_SOURCE" LIBS="$LIBS -lthread" { $as_echo "$as_me:$LINENO: result: use -lthread for DG/UX" >&5 $as_echo "use -lthread for DG/UX" >&6; } ;; *-freebsd*) CFLAGS="$CFLAGS -pthread" { $as_echo "$as_me:$LINENO: result: use -pthread for FreeBSD" >&5 $as_echo "use -pthread for FreeBSD" >&6; } ;; *-hpux*) LIBS="$LIBS -lpthread -lcl" { $as_echo "$as_me:$LINENO: result: use -lpthread for HP/UX" >&5 $as_echo "use -lpthread for HP/UX" >&6; } ;; *-osf3.*) CPPFLAGS="$CPPFLAGS -DOLD_PTHREADS" LIBS="$LIBS -lpthreads -lmach -lc_r" { $as_echo "$as_me:$LINENO: result: use -lpthreads for OSF 3.2" >&5 $as_echo "use -lpthreads for OSF 3.2" >&6; } ;; *-osf4.*) LIBS="$LIBS -lpthread" { $as_echo "$as_me:$LINENO: result: use -lpthread for OSF 4.x" >&5 $as_echo "use -lpthread for OSF 4.x" >&6; } ;; *) { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } ;; esac # # Check headers # if test "${ac_cv_header_pthread_h+set}" = set; then { $as_echo "$as_me:$LINENO: checking for pthread.h" >&5 $as_echo_n "checking for pthread.h... " >&6; } if test "${ac_cv_header_pthread_h+set}" = set; then $as_echo_n "(cached) " >&6 fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_pthread_h" >&5 $as_echo "$ac_cv_header_pthread_h" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking pthread.h usability" >&5 $as_echo_n "checking pthread.h usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking pthread.h presence" >&5 $as_echo_n "checking pthread.h presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: pthread.h: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: pthread.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: pthread.h: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: pthread.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: pthread.h: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: pthread.h: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: pthread.h: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: pthread.h: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: pthread.h: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: pthread.h: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: pthread.h: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: pthread.h: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: pthread.h: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: pthread.h: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: pthread.h: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: pthread.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to iodbc@openlinksw.com ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for pthread.h" >&5 $as_echo_n "checking for pthread.h... " >&6; } if test "${ac_cv_header_pthread_h+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_header_pthread_h=$ac_header_preproc fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_pthread_h" >&5 $as_echo "$ac_cv_header_pthread_h" >&6; } fi if test "x$ac_cv_header_pthread_h" = x""yes; then : else { { $as_echo "$as_me:$LINENO: error: pthreads header not found" >&5 $as_echo "$as_me: error: pthreads header not found" >&2;} { (exit 1); exit 1; }; } fi # # If mutex functions are in C library, we should not need to link # with -lpthread # { $as_echo "$as_me:$LINENO: checking for pthread_mutex_lock" >&5 $as_echo_n "checking for pthread_mutex_lock... " >&6; } if test "${ac_cv_func_pthread_mutex_lock+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define pthread_mutex_lock to an innocuous variant, in case declares pthread_mutex_lock. For example, HP-UX 11i declares gettimeofday. */ #define pthread_mutex_lock innocuous_pthread_mutex_lock /* System header to define __stub macros and hopefully few prototypes, which can conflict with char pthread_mutex_lock (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef pthread_mutex_lock /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_lock (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_pthread_mutex_lock || defined __stub___pthread_mutex_lock choke me #endif int main () { return pthread_mutex_lock (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_func_pthread_mutex_lock=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_pthread_mutex_lock=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_pthread_mutex_lock" >&5 $as_echo "$ac_cv_func_pthread_mutex_lock" >&6; } if test "x$ac_cv_func_pthread_mutex_lock" = x""yes; then found_lib=true fi # # Check out the various libraries # if test x$found_lib = xfalse then { $as_echo "$as_me:$LINENO: checking for pthread_mutex_lock in -lpthreads " >&5 $as_echo_n "checking for pthread_mutex_lock in -lpthreads ... " >&6; } ac_save_LIBS="$LIBS" LIBS="-lpthreads $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __cplusplus extern "C" #endif #if defined (HAVE_PTHREAD_H) #include #endif int main () { pthread_mutex_lock(0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "ac_cv_lib_$ac_lib_var=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "ac_cv_lib_$ac_lib_var=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_save_LIBS" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } LIBS="$LIBS -lpthreads" found_lib=true else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test x$found_lib = xfalse then { $as_echo "$as_me:$LINENO: checking for pthread_mutex_lock in -lpthread " >&5 $as_echo_n "checking for pthread_mutex_lock in -lpthread ... " >&6; } ac_save_LIBS="$LIBS" LIBS="-lpthread $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __cplusplus extern "C" #endif #if defined (HAVE_PTHREAD_H) #include #endif int main () { pthread_mutex_lock(0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "ac_cv_lib_$ac_lib_var=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "ac_cv_lib_$ac_lib_var=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_save_LIBS" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } LIBS="$LIBS -lpthread" found_lib=true else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi else { $as_echo "$as_me:$LINENO: result: no thread support" >&5 $as_echo "no thread support" >&6; } fi ########################################################################## ## ## ## OS dependent libraries ## ## ## ########################################################################## LIBADD_OS="" { $as_echo "$as_me:$LINENO: checking for OS dependent libraries and link flags" >&5 $as_echo_n "checking for OS dependent libraries and link flags... " >&6; } if false; then DARWIN_TRUE= DARWIN_FALSE='#' else DARWIN_TRUE='#' DARWIN_FALSE= fi case $host in *-hpux*) LDFLAGS="$LDFLAGS -Wl,+s" { $as_echo "$as_me:$LINENO: result: use -Wl,+s for HP/UX" >&5 $as_echo "use -Wl,+s for HP/UX" >&6; } ;; *-darwin*) if true; then DARWIN_TRUE= DARWIN_FALSE='#' else DARWIN_TRUE='#' DARWIN_FALSE= fi CFLAGS="$CFLAGS -DNO_FRAMEWORKS" LIBADD_OS="-Wl,-framework,Carbon" { $as_echo "$as_me:$LINENO: result: $LIBADD_OS" >&5 $as_echo "$LIBADD_OS" >&6; } ;; *) { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } ;; esac ########################################################################## ## ## ## Generate Makefiles etc. ## ## ## ########################################################################## ac_config_files="$ac_config_files Makefile admin/Makefile admin/libiodbc.spec admin/libiodbc.pc bin/Makefile bin/iodbc-config etc/Makefile man/Makefile man/iodbc-config.1 man/iodbctest.1 man/iodbctestw.1 man/iodbcadm-gtk.1 include/Makefile iodbc/Makefile iodbc/trace/Makefile iodbcinst/Makefile iodbcadm/Makefile iodbcadm/gtk/Makefile drvproxy/Makefile drvproxy/gtk/Makefile samples/Makefile" ac_config_commands="$ac_config_commands default" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${GUI_TRUE}" && test -z "${GUI_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"GUI\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"GUI\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${GTK_TRUE}" && test -z "${GTK_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"GTK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"GTK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${INSTALL_LIBODBC_TRUE}" && test -z "${INSTALL_LIBODBC_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"INSTALL_LIBODBC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"INSTALL_LIBODBC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DARWIN_TRUE}" && test -z "${DARWIN_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DARWIN\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DARWIN\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DARWIN_TRUE}" && test -z "${DARWIN_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DARWIN\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DARWIN\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do 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 # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by iODBC Driver Manager $as_me 3.52.9, which was generated by GNU Autoconf 2.63. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTION]... [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ iODBC Driver Manager config.status 3.52.9 configured by $0, generated by GNU Autoconf 2.63, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2008 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { $as_echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { $as_echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # 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' macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ AR \ AR_FLAGS \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ SHELL \ ECHO \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` ;; esac ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # 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 PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "admin/Makefile") CONFIG_FILES="$CONFIG_FILES admin/Makefile" ;; "admin/libiodbc.spec") CONFIG_FILES="$CONFIG_FILES admin/libiodbc.spec" ;; "admin/libiodbc.pc") CONFIG_FILES="$CONFIG_FILES admin/libiodbc.pc" ;; "bin/Makefile") CONFIG_FILES="$CONFIG_FILES bin/Makefile" ;; "bin/iodbc-config") CONFIG_FILES="$CONFIG_FILES bin/iodbc-config" ;; "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "man/iodbc-config.1") CONFIG_FILES="$CONFIG_FILES man/iodbc-config.1" ;; "man/iodbctest.1") CONFIG_FILES="$CONFIG_FILES man/iodbctest.1" ;; "man/iodbctestw.1") CONFIG_FILES="$CONFIG_FILES man/iodbctestw.1" ;; "man/iodbcadm-gtk.1") CONFIG_FILES="$CONFIG_FILES man/iodbcadm-gtk.1" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "iodbc/Makefile") CONFIG_FILES="$CONFIG_FILES iodbc/Makefile" ;; "iodbc/trace/Makefile") CONFIG_FILES="$CONFIG_FILES iodbc/trace/Makefile" ;; "iodbcinst/Makefile") CONFIG_FILES="$CONFIG_FILES iodbcinst/Makefile" ;; "iodbcadm/Makefile") CONFIG_FILES="$CONFIG_FILES iodbcadm/Makefile" ;; "iodbcadm/gtk/Makefile") CONFIG_FILES="$CONFIG_FILES iodbcadm/gtk/Makefile" ;; "drvproxy/Makefile") CONFIG_FILES="$CONFIG_FILES drvproxy/Makefile" ;; "drvproxy/gtk/Makefile") CONFIG_FILES="$CONFIG_FILES drvproxy/gtk/Makefile" ;; "samples/Makefile") CONFIG_FILES="$CONFIG_FILES samples/Makefile" ;; "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { $as_echo "$as_me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=' ' ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\).*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\).*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 $as_echo "$as_me: error: could not setup config files machinery" >&2;} { (exit 1); exit 1; }; } _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 $as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 $as_echo "$as_me: error: could not setup config headers machinery" >&2;} { (exit 1); exit 1; }; } fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 $as_echo "$as_me: error: invalid tag $ac_tag" >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 $as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac ac_file_inputs="$ac_file_inputs '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 $as_echo "$as_me: error: could not create -" >&2;} { (exit 1); exit 1; }; } fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":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. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 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. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == "file_magic". file_magic_cmd=$lt_file_magic_cmd # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name of the directory that contains temporary libtool files. objdir=$objdir # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that does not interpret backslashes. ECHO=$lt_ECHO # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # 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 library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # 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. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### 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 ltmain="$ac_aux_dir/ltmain.sh" # 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # 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 () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # 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 () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # 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_stripname () { # 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}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # 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 () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -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 file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # 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 "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[^=]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$@"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1+=\$2" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1=\$$1\$2" } _LT_EOF ;; esac sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; "default":C) chmod 755 bin/iodbc-config ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 $as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ########################################################################## ## ## ## Display configuration information ## ## ## ########################################################################## # ---------------------------------------------------------------------- # Color settings # ---------------------------------------------------------------------- B=`tput bold 2>/dev/null` N=`tput sgr0 2>/dev/null` cat < * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ static sqlerrmsg_t sqlerrmsg_tab[] = { { en_00000, "00000", ""}, { en_01000, "01000", "General warning" }, { en_01002, "01002", "Disconnect error" }, { en_01004, "01004", "Data truncated" }, { en_01006, "01006", "Privilege not revoked" }, { en_01S00, "01S00", "Invalid connection string attribute" }, { en_01S01, "01S01", "Error in row" }, { en_01S02, "01S02", "Optional value changed" }, { en_01S03, "01S03", "No rows updated or deleted" }, { en_01S04, "01S04", "More than one row updated or deleted" }, { en_01S08, "01S08", "Error saving file DSN" }, { en_07001, "07001", "Wrong number of parameters" }, { en_07006, "07006", "Restricted data type attribute violation" }, { en_08001, "08001", "Unable to connect to data source" }, { en_08002, "08002", "Connection in use" }, { en_08003, "08003", "Connect not open" }, { en_08004, "08004", "Data source rejected establishment of connection" }, { en_08007, "08007", "Connection failure during transaction" }, { en_08S01, "08S01", "Communication link failure" }, { en_21S01, "21S01", "Insert value list does not match" }, { en_21S02, "21S02", "Degree of derived table does not match column list" }, { en_22001, "22001", "String data right truncation" }, { en_22003, "22003", "Numeric value out of range" }, { en_22005, "22005", "Error in assignment" }, { en_22008, "22008", "Datetime field overflow" }, { en_22012, "22012", "Division by zero" }, { en_22026, "22026", "String data, length mismatch" }, { en_23000, "23000", "Integrity constraint violation" }, { en_24000, "24000", "Invalid cursor state" }, { en_25000, "25000", "Invalid transaction state" }, { en_28000, "28000", "Invalid authorization specification" }, { en_34000, "34000", "Invalid cursor name" }, { en_37000, "37000", "Syntax error or access violation" }, { en_3C000, "3C000", "Duplicate cursor name" }, { en_40001, "40001", "Serialization failure" }, { en_42000, "42000", "Syntax error or access violation" }, { en_70100, "70100", "Operation aborted" }, { en_HY001, "HY001", "Memory allocation error" }, { en_HY009, "HY009", "Invalid use of null pointer" }, { en_HY010, "HY010", "Function sequence error" }, { en_HY017, "HY017", "Invalid use of an automatically allocated descriptor handle" }, { en_HY024, "HY024", "Invalid attribute value" }, { en_HY091, "HY091", "Invalid descriptor field identifier" }, { en_HY092, "HY092", "Invalid attribute/option identifier" }, { en_HY110, "HY110", "Invalid driver completion" }, { en_HYC00, "HYC00", "Optional feature not implemented" }, { en_IM001, "IM001", "Driver does not support this function" }, { en_IM002, "IM002", "Data source name not found and no default " "driver specified. Driver could not be loaded" }, { en_IM003, "IM003", "Specified driver could not be loaded" }, { en_IM004, "IM004", "Driver's SQLAllocEnv() failed" }, { en_IM005, "IM005", "Driver's SQLAllocConnect() failed" }, { en_IM006, "IM006", "Driver's SQLSetConnectOption failed" }, { en_IM007, "IM007", "No data source or driver specified, dialog prohibited" }, { en_IM008, "IM008", "Dialog failed" }, { en_IM009, "IM009", "Unable to load translation DLL" }, { en_IM010, "IM010", "Data source name too long" }, { en_IM011, "IM011", "Driver name too long" }, { en_IM012, "IM012", "DRIVER keyword syntax error" }, { en_IM013, "IM013", "Trace file error" }, { en_IM014, "IM014", "Invalid name of File DSN" }, { en_IM015, "IM015", "Corrupt file data source" }, { en_S0001, "S0001", "Base table or view already exists" }, { en_S0002, "S0002", "Base table not found" }, { en_S0011, "S0011", "Index already exists" }, { en_S0012, "S0012", "Index not found" }, { en_S0021, "S0021", "Column already exists" }, { en_S0022, "S0022", "Column not found" }, { en_S0023, "S0023", "No default for column" }, { en_S1000, "S1000", "General error" }, { en_S1001, "S1001", "Memory allocation failure" }, { en_S1002, "S1002", "Invalid column number" }, { en_S1003, "S1003", "Program type out of range" }, { en_S1004, "S1004", "SQL data type out of range" }, { en_S1008, "S1008", "Operation canceled" }, { en_S1009, "S1009", "Invalid argument value" }, { en_S1010, "S1010", "Function sequence error" }, { en_S1011, "S1011", "Operation invalid at this time" }, { en_S1012, "S1012", "Invalid transaction operation code specified" }, { en_S1015, "S1015", "No cursor name available" }, { en_S1090, "S1090", "Invalid string or buffer length" }, { en_S1091, "S1091", "Descriptor type out of range" }, { en_S1092, "S1092", "Option type out of range" }, { en_S1093, "S1093", "Invalid parameter number" }, { en_S1094, "S1094", "Invalid scale value" }, { en_S1095, "S1095", "Function type out of range" }, { en_S1096, "S1096", "Information type out of range" }, { en_S1097, "S1097", "Column type out of range" }, { en_S1098, "S1098", "Scope type out of range" }, { en_S1099, "S1099", "Nullable type out of range" }, { en_S1100, "S1100", "Uniqueness option type out of range" }, { en_S1101, "S1101", "Accuracy option type out of range" }, { en_S1103, "S1103", "Direction option out of range" }, { en_S1104, "S1104", "Invalid precision value" }, { en_S1105, "S1105", "Invalid parameter type" }, { en_S1106, "S1106", "Fetch type out of range" }, { en_S1107, "S1107", "Row value out of range" }, { en_S1108, "S1108", "Concurrency option out of range" }, { en_S1109, "S1109", "Invalid cursor position" }, { en_S1110, "S1110", "Invalid driver completion" }, { en_S1111, "S1111", "Invalid bookmark value" }, { en_S1C00, "S1C00", "Driver not capable" }, { en_S1T00, "S1T00", "Timeout expired" }, { en_sqlstat_total, NULL, NULL } }; static char * sqlerrhd = "[iODBC][Driver Manager]"; libiodbc-3.52.9/iodbc/herr.h0000644000076400007640000001305512323210535012503 00000000000000/* * herr.h * * $Id$ * * Error stack management functions * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _HERR_H #define _HERR_H typedef enum { en_00000 = 0, en_01000, en_01002, en_01004, en_01006, en_01S00, en_01S01, en_01S02, en_01S03, en_01S04, en_01S08, en_07001, en_07006, en_08001, en_08002, en_08003, en_08004, en_08007, en_08S01, en_21S01, en_21S02, en_22001, en_22003, en_22005, en_22008, en_22012, en_22026, en_23000, en_24000, en_25000, en_28000, en_34000, en_37000, en_3C000, en_40001, en_42000, en_70100, en_HY001, en_HY009, en_HY010, en_HY017, en_HY024, en_HY091, en_HY092, en_HY110, en_HYC00, en_IM001, en_IM002, en_IM003, en_IM004, en_IM005, en_IM006, en_IM007, en_IM008, en_IM009, en_IM010, en_IM011, en_IM012, en_IM013, en_IM014, en_IM015, en_S0001, en_S0002, en_S0011, en_S0012, en_S0021, en_S0022, en_S0023, en_S1000, en_S1001, en_S1002, en_S1003, en_S1004, en_S1008, en_S1009, en_S1010, en_S1011, en_S1012, en_S1015, en_S1090, en_S1091, en_S1092, en_S1093, en_S1094, en_S1095, en_S1096, en_S1097, en_S1098, en_S1099, en_S1100, en_S1101, en_S1103, en_S1104, en_S1105, en_S1106, en_S1107, en_S1108, en_S1109, en_S1110, en_S1111, en_S1C00, en_S1T00, en_sqlstat_total } sqlstcode_t; typedef void *HERR; #define SQL_NULL_HERR ((HERR)NULL) typedef struct { sqlstcode_t code; char *stat; char *msg; } sqlerrmsg_t; typedef struct sqlerr { sqlstcode_t code; int idx; char *msg; struct sqlerr *next; } sqlerr_t; extern void _iodbcdm_freesqlerrlist (HERR herr); extern HERR _iodbcdm_pushsqlerr (HERR list, sqlstcode_t code, void *sysmsg); #define PUSHSYSERR(list, msg) \ list = (HERR) _iodbcdm_pushsqlerr ((HERR)(list), en_00000, msg) #define PUSHSQLERR(list, code) \ list = (HERR) _iodbcdm_pushsqlerr ((HERR)(list), (code), NULL) #define CLEAR_ERRORS(_handle) \ { \ _iodbcdm_freesqlerrlist ((_handle)->herr); \ (_handle)->herr = SQL_NULL_HERR; \ (_handle)->rc = SQL_SUCCESS; \ (_handle)->err_rec = 0; \ } #endif /* _SQLERR_H */ libiodbc-3.52.9/iodbc/execute.c0000644000076400007640000005525112323210535013204 00000000000000/* * execute.c * * $Id$ * * Invoke a query * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include #include #include void _iodbcdm_do_cursoropen (STMT_t * pstmt) { SQLRETURN retcode; SWORD ncol; pstmt->state = en_stmt_executed; retcode = _iodbcdm_NumResultCols ((SQLHSTMT) pstmt, &ncol); if (SQL_SUCCEEDED (retcode)) { if (ncol) { pstmt->state = en_stmt_cursoropen; pstmt->cursor_state = en_stmt_cursor_opened; } else { pstmt->state = en_stmt_executed; pstmt->cursor_state = en_stmt_cursor_no; } } } #if (ODBCVER >= 0x0300) static SQLLEN GetElementSize (PPARM pparm) { SQLLEN elementSize; if (pparm->pm_c_type == SQL_C_CHAR || pparm->pm_c_type == SQL_C_BINARY) elementSize = pparm->pm_cbValueMax == 0 ? pparm->pm_precision : pparm->pm_cbValueMax; else if (pparm->pm_c_type == SQL_C_WCHAR) elementSize = pparm->pm_cbValueMax == 0 ? pparm->pm_precision * sizeof(wchar_t) : pparm->pm_cbValueMax; else /* fixed length types */ elementSize = pparm->pm_size; return elementSize; } static void _Conv_W2A(wchar_t *wdata, SQLLEN *pInd, UDWORD size) { char *data = (char *) wdata; if (*pInd != SQL_NULL_DATA) { char *buf = (char *)dm_SQL_W2A ((SQLWCHAR *) wdata, (ssize_t)*pInd); if (buf != NULL) strcpy(data, buf); MEM_FREE (buf); if (pInd && *pInd != SQL_NTS) *pInd /= sizeof (wchar_t); } } static void _Conv_A2W(char *data, SQLLEN *pInd, UDWORD size) { wchar_t *wdata = (wchar_t *) data; if (*pInd != SQL_NULL_DATA) { wchar_t *buf = (wchar_t *)dm_SQL_A2W ((SQLCHAR *) data, (ssize_t)*pInd); if (buf != NULL) WCSCPY (wdata, buf); MEM_FREE (buf); } } static SQLLEN _ConvParam (STMT_t *pstmt, PPARM pparm, SQLULEN row, BOOL bOutput) { SQLLEN octetLen; void *value; SQLLEN *pInd = NULL; SQLLEN elementSize = 0; if (pparm->pm_c_type != SQL_C_WCHAR) return 0; elementSize = GetElementSize (pparm); if (pstmt->bind_type) { /* row-wise binding of parameters in force */ if (pparm->pm_pOctetLength) octetLen = *(SQLLEN *) ((char *) pparm->pm_pOctetLength + row * pstmt->bind_type); else octetLen = pparm->pm_size; if (pparm->pm_pInd) pInd = (SQLLEN *) ((char *) pparm->pm_pInd + row * pstmt->bind_type); } else { octetLen = pparm->pm_pOctetLength ? pparm->pm_pOctetLength[row] : pparm->pm_size; if (pparm->pm_pInd) pInd = pparm->pm_pInd + row; } if (!pInd || (pInd && *pInd == SQL_NULL_DATA)) return 0; if (octetLen == SQL_DATA_AT_EXEC || octetLen <= SQL_LEN_DATA_AT_EXEC_OFFSET) { value = NULL; } else value = pparm->pm_data; if (value == NULL) return 0; if (pstmt->bind_type) /* row-wise binding of parameters in force */ value = (char *) pparm->pm_data + row * pstmt->bind_type; else value = (char *) pparm->pm_data + row * elementSize; if (bOutput) _Conv_A2W(value, pInd, elementSize); else _Conv_W2A(value, pInd, elementSize); return octetLen; } static SQLRETURN _SQLExecute_ConvParams (SQLHSTMT hstmt, BOOL bOutput) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); PPARM pparm; int maxpar; int i; SQLULEN j; SQLULEN cRows = pstmt->paramset_size; if (penv->unicode_driver) return SQL_SUCCESS; if (cRows == 0) cRows = 1; maxpar = pstmt->st_nparam; pparm = pstmt->st_pparam; for (i = 0; i < maxpar; i++, pparm++) { if (pparm->pm_data == NULL) continue; if (bOutput && (pparm->pm_usage == SQL_PARAM_OUTPUT || pparm->pm_usage == SQL_PARAM_INPUT_OUTPUT)) { if (pparm->pm_c_type_orig != SQL_C_WCHAR) continue; for (j = 0; j < cRows; j++) _ConvParam(pstmt, pparm, j, bOutput); } else if (!bOutput && (pparm->pm_usage == SQL_PARAM_INPUT || pparm->pm_usage == SQL_PARAM_INPUT_OUTPUT)) { if (pparm->pm_c_type != SQL_C_WCHAR) continue; for (j = 0; j < cRows; j++) _ConvParam(pstmt, pparm, j, bOutput); pparm->pm_c_type = SQL_C_CHAR; } } /* next column */ return SQL_SUCCESS; } #endif static SQLRETURN SQLExecute_Internal (SQLHSTMT hstmt) { STMT (pstmt, hstmt); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode; sqlstcode_t sqlstat = en_00000; /* check state */ if (pstmt->asyn_on == en_NullProc) { switch (pstmt->state) { case en_stmt_allocated: sqlstat = en_S1010; break; case en_stmt_executed_with_info: case en_stmt_executed: if (!pstmt->prep_state) { sqlstat = en_S1010; } break; case en_stmt_cursoropen: if (!pstmt->prep_state) { sqlstat = en_S1010; } break; case en_stmt_fetched: case en_stmt_xfetched: if (!pstmt->prep_state) { sqlstat = en_S1010; } else { sqlstat = en_24000; } break; case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: sqlstat = en_S1010; break; default: break; } } else if (pstmt->asyn_on != en_Execute) { sqlstat = en_S1010; } if (sqlstat == en_00000) { hproc = _iodbcdm_getproc (pstmt->hdbc, en_Execute); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM001; } } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } if ((retcode = _SQLExecute_ConvParams(hstmt, FALSE)) != SQL_SUCCESS) return retcode; CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt)); /* stmt state transition */ if (pstmt->asyn_on == en_Execute) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_NEED_DATA: case SQL_ERROR: pstmt->asyn_on = en_NullProc; break; case SQL_STILL_EXECUTING: default: return retcode; } } if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) retcode = _SQLExecute_ConvParams(hstmt, TRUE); switch (pstmt->state) { case en_stmt_prepared: switch (retcode) { case SQL_SUCCESS: _iodbcdm_do_cursoropen (pstmt); break; case SQL_SUCCESS_WITH_INFO: pstmt->state = en_stmt_executed_with_info; break; case SQL_NEED_DATA: pstmt->state = en_stmt_needdata; pstmt->need_on = en_Execute; break; case SQL_STILL_EXECUTING: pstmt->asyn_on = en_Execute; break; default: break; } break; case en_stmt_executed: switch (retcode) { case SQL_ERROR: pstmt->state = en_stmt_prepared; pstmt->cursor_state = en_stmt_cursor_no; break; case SQL_NEED_DATA: pstmt->state = en_stmt_needdata; pstmt->need_on = en_Execute; break; case SQL_STILL_EXECUTING: pstmt->asyn_on = en_Execute; break; default: break; } break; default: break; } return retcode; } SQLRETURN SQL_API SQLExecute (SQLHSTMT hstmt) { ENTER_STMT (hstmt, trace_SQLExecute (TRACE_ENTER, hstmt)); retcode = SQLExecute_Internal (hstmt); LEAVE_STMT (hstmt, trace_SQLExecute (TRACE_LEAVE, hstmt)); } SQLRETURN SQL_API SQLExecDirect_Internal (SQLHSTMT hstmt, SQLPOINTER szSqlStr, SQLINTEGER cbSqlStr, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _SqlStr = NULL; /* check arguments */ if (szSqlStr == NULL) { sqlstat = en_S1009; } else if (cbSqlStr < 0 && cbSqlStr != SQL_NTS) { sqlstat = en_S1090; } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } /* check state */ if (pstmt->asyn_on == en_NullProc) { switch (pstmt->state) { case en_stmt_fetched: case en_stmt_xfetched: sqlstat = en_24000; break; case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: sqlstat = en_S1010; break; default: break; } } else if (pstmt->asyn_on != en_ExecDirect) { sqlstat = en_S1010; } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _SqlStr = _iodbcdm_conv_var_A2W(pstmt, 0, (SQLCHAR *) szSqlStr, cbSqlStr); } else { /* unicode=>ansi*/ _SqlStr = _iodbcdm_conv_var_W2A(pstmt, 0, (SQLWCHAR *) szSqlStr, cbSqlStr); } szSqlStr = _SqlStr; cbSqlStr = SQL_NTS; } if ((retcode = _SQLExecute_ConvParams(hstmt, FALSE)) != SQL_SUCCESS) return retcode; CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_ExecDirect, ( pstmt->dhstmt, szSqlStr, cbSqlStr)); if (hproc == SQL_NULL_HPROC) { _iodbcdm_FreeStmtVars(pstmt); PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); /* stmt state transition */ if (pstmt->asyn_on == en_ExecDirect) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_NEED_DATA: case SQL_ERROR: pstmt->asyn_on = en_NullProc; break; case SQL_STILL_EXECUTING: default: return retcode; } } if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) retcode = _SQLExecute_ConvParams(hstmt, TRUE); if (pstmt->state <= en_stmt_executed) { switch (retcode) { case SQL_SUCCESS: _iodbcdm_do_cursoropen (pstmt); pstmt->prep_state = 1; break; case SQL_SUCCESS_WITH_INFO: pstmt->state = en_stmt_executed_with_info; pstmt->prep_state = 1; break; case SQL_NEED_DATA: pstmt->state = en_stmt_needdata; pstmt->need_on = en_ExecDirect; break; case SQL_STILL_EXECUTING: pstmt->asyn_on = en_ExecDirect; break; case SQL_ERROR: pstmt->state = en_stmt_allocated; pstmt->cursor_state = en_stmt_cursor_no; pstmt->prep_state = 0; break; default: break; } } return retcode; } SQLRETURN SQL_API SQLExecDirect (SQLHSTMT hstmt, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStr) { ENTER_STMT (hstmt, trace_SQLExecDirect (TRACE_ENTER, hstmt, szSqlStr, cbSqlStr)); retcode = SQLExecDirect_Internal(hstmt, szSqlStr, cbSqlStr, 'A'); LEAVE_STMT (hstmt, trace_SQLExecDirect (TRACE_LEAVE, hstmt, szSqlStr, cbSqlStr)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLExecDirectA (SQLHSTMT hstmt, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStr) { ENTER_STMT (hstmt, trace_SQLExecDirect (TRACE_ENTER, hstmt, szSqlStr, cbSqlStr)); retcode = SQLExecDirect_Internal(hstmt, szSqlStr, cbSqlStr, 'A'); LEAVE_STMT (hstmt, trace_SQLExecDirect (TRACE_LEAVE, hstmt, szSqlStr, cbSqlStr)); } SQLRETURN SQL_API SQLExecDirectW (SQLHSTMT hstmt, SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStr) { ENTER_STMT (hstmt, trace_SQLExecDirectW (TRACE_ENTER, hstmt, szSqlStr, cbSqlStr)); retcode = SQLExecDirect_Internal(hstmt, szSqlStr, cbSqlStr, 'W'); LEAVE_STMT (hstmt, trace_SQLExecDirectW (TRACE_LEAVE, hstmt, szSqlStr, cbSqlStr)); } #endif static SQLRETURN SQLPutData_Internal ( SQLHSTMT hstmt, SQLPOINTER rgbValue, SQLLEN cbValue) { STMT (pstmt, hstmt); HPROC hproc; SQLRETURN retcode; /* check argument value */ if (rgbValue == NULL && (cbValue != SQL_DEFAULT_PARAM && cbValue != SQL_NULL_DATA)) { PUSHSQLERR (pstmt->herr, en_S1009); return SQL_ERROR; } /* check state */ if (pstmt->asyn_on == en_NullProc) { if (pstmt->state <= en_stmt_xfetched) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } } else if (pstmt->asyn_on != en_PutData) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } /* call driver */ hproc = _iodbcdm_getproc (pstmt->hdbc, en_PutData); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, rgbValue, cbValue)); /* state transition */ if (pstmt->asyn_on == en_PutData) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_ERROR: pstmt->asyn_on = en_NullProc; break; case SQL_STILL_EXECUTING: default: return retcode; } } /* must in mustput or canput states */ switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: pstmt->state = en_stmt_canput; break; case SQL_ERROR: switch (pstmt->need_on) { case en_ExecDirect: pstmt->state = en_stmt_allocated; pstmt->need_on = en_NullProc; break; case en_Execute: if (pstmt->prep_state) { pstmt->state = en_stmt_prepared; pstmt->need_on = en_NullProc; } break; case en_SetPos: /* Is this possible ???? */ pstmt->state = en_stmt_xfetched; break; default: break; } break; case SQL_STILL_EXECUTING: pstmt->asyn_on = en_PutData; break; default: break; } return retcode; } SQLRETURN SQL_API SQLPutData ( SQLHSTMT hstmt, SQLPOINTER rgbValue, SQLLEN cbValue) { ENTER_STMT (hstmt, trace_SQLPutData (TRACE_ENTER, hstmt, rgbValue, cbValue)); retcode = SQLPutData_Internal (hstmt, rgbValue, cbValue); LEAVE_STMT (hstmt, trace_SQLPutData (TRACE_LEAVE, hstmt, rgbValue, cbValue)); } static SQLRETURN SQLParamData_Internal (SQLHSTMT hstmt, SQLPOINTER * prgbValue) { STMT (pstmt, hstmt); HPROC hproc; SQLRETURN retcode; /* check argument */ /* check state */ if (pstmt->asyn_on == en_NullProc) { if (pstmt->state <= en_stmt_xfetched) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } } else if (pstmt->asyn_on != en_ParamData) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } /* call driver */ hproc = _iodbcdm_getproc (pstmt->hdbc, en_ParamData); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, prgbValue)); /* state transition */ if (pstmt->asyn_on == en_ParamData) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_ERROR: pstmt->asyn_on = en_NullProc; break; case SQL_STILL_EXECUTING: default: return retcode; } } if (pstmt->state < en_stmt_needdata) { return retcode; } switch (retcode) { case SQL_ERROR: switch (pstmt->need_on) { case en_ExecDirect: pstmt->state = en_stmt_allocated; break; case en_Execute: pstmt->state = en_stmt_prepared; break; case en_SetPos: pstmt->state = en_stmt_xfetched; pstmt->cursor_state = en_stmt_cursor_xfetched; break; default: break; } pstmt->need_on = en_NullProc; break; case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: switch (pstmt->state) { case en_stmt_needdata: pstmt->state = en_stmt_mustput; break; case en_stmt_canput: switch (pstmt->need_on) { case en_SetPos: pstmt->state = en_stmt_xfetched; pstmt->cursor_state = en_stmt_cursor_xfetched; break; case en_ExecDirect: case en_Execute: _iodbcdm_do_cursoropen (pstmt); break; default: break; } break; default: break; } pstmt->need_on = en_NullProc; break; case SQL_NEED_DATA: pstmt->state = en_stmt_mustput; break; default: break; } return retcode; } SQLRETURN SQL_API SQLParamData (SQLHSTMT hstmt, SQLPOINTER * prgbValue) { ENTER_STMT (hstmt, trace_SQLParamData (TRACE_ENTER, hstmt, prgbValue)); retcode = SQLParamData_Internal (hstmt, prgbValue); LEAVE_STMT (hstmt, trace_SQLParamData (TRACE_LEAVE, hstmt, prgbValue)); } static SQLRETURN SQLNumParams_Internal (SQLHSTMT hstmt, SQLSMALLINT * pcpar) { STMT (pstmt, hstmt); HPROC hproc; SQLRETURN retcode; /* check argument */ if (!pcpar) { return SQL_SUCCESS; } /* check state */ if (pstmt->asyn_on == en_NullProc) { switch (pstmt->state) { case en_stmt_allocated: case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; default: break; } } else if (pstmt->asyn_on != en_NumParams) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } /* call driver */ hproc = _iodbcdm_getproc (pstmt->hdbc, en_NumParams); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, pcpar)); /* state transition */ if (pstmt->asyn_on == en_NumParams) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_ERROR: break; default: return retcode; } } if (retcode == SQL_STILL_EXECUTING) { pstmt->asyn_on = en_NumParams; } return retcode; } SQLRETURN SQL_API SQLNumParams (SQLHSTMT hstmt, SQLSMALLINT * pcpar) { ENTER_STMT (hstmt, trace_SQLNumParams (TRACE_ENTER, hstmt, pcpar)); retcode = SQLNumParams_Internal (hstmt, pcpar); LEAVE_STMT (hstmt, trace_SQLNumParams (TRACE_LEAVE, hstmt, pcpar)); } static SQLRETURN SQLDescribeParam_Internal ( SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT * pfSqlType, SQLULEN * pcbColDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); GENV (genv, pdbc->genv); HPROC hproc; SQLRETURN retcode; /* check argument */ if (ipar == 0) { PUSHSQLERR (pstmt->herr, en_S1093); return SQL_ERROR; } /* check state */ if (pstmt->asyn_on == en_NullProc) { switch (pstmt->state) { case en_stmt_allocated: case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; default: break; } } else if (pstmt->asyn_on != en_DescribeParam) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } /* call driver */ hproc = _iodbcdm_getproc (pstmt->hdbc, en_DescribeParam); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, ipar, pfSqlType, pcbColDef, pibScale, pfNullable)); /* * Convert sql type to ODBC version of application */ if (SQL_SUCCEEDED(retcode) && pfSqlType) *pfSqlType = _iodbcdm_map_sql_type (*pfSqlType, genv->odbc_ver); /* state transition */ if (pstmt->asyn_on == en_DescribeParam) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_ERROR: break; default: return retcode; } } if (retcode == SQL_STILL_EXECUTING) { pstmt->asyn_on = en_DescribeParam; } return retcode; } SQLRETURN SQL_API SQLDescribeParam ( SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT * pfSqlType, SQLULEN * pcbColDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable) { ENTER_STMT (hstmt, trace_SQLDescribeParam (TRACE_ENTER, hstmt, ipar, pfSqlType, pcbColDef, pibScale, pfNullable)); retcode = SQLDescribeParam_Internal ( hstmt, ipar, pfSqlType, pcbColDef, pibScale, pfNullable); LEAVE_STMT (hstmt, trace_SQLDescribeParam (TRACE_LEAVE, hstmt, ipar, pfSqlType, pcbColDef, pibScale, pfNullable)); } libiodbc-3.52.9/iodbc/henv.ci0000644000076400007640000003661012323210535012651 00000000000000/* * henv.ci * * $Id$ * * Function names * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ /* There are some exceptions : * on FreeBSD 2.x CLI is defined in Config.mk as "_SQL" * on HP/UX s300/s400, CLI is defined in Config.mk as "_SQL" * on AIX 3.x 4.x, CLI is defined in Config.mk as ".SQL" */ #ifndef CLI # if defined(NEED_USCORE) || defined (DLDAPI_DYLD) # define CLI "_SQL" # else # define CLI "SQL" # endif #endif FUNCDEF (SQL_API_SQLALLOCENV, en_AllocEnv, CLI "AllocEnv") FUNCDEF (SQL_API_SQLALLOCCONNECT, en_AllocConnect, CLI "AllocConnect") FUNCDEF (SQL_API_SQLCONNECT, en_Connect, CLI "Connect") FUNCDEF (SQL_API_SQLDRIVERCONNECT, en_DriverConnect, CLI "DriverConnect") FUNCDEF (SQL_API_SQLBROWSECONNECT, en_BrowseConnect, CLI "BrowseConnect") FUNCDEF (SQL_API_SQLDATASOURCES, en_DataSources, CLI "DataSources") FUNCDEF (SQL_API_SQLDRIVERS, en_Drivers, CLI "Drivers") FUNCDEF (SQL_API_SQLGETINFO, en_GetInfo, CLI "GetInfo") FUNCDEF (SQL_API_SQLGETFUNCTIONS, en_GetFunctions, CLI "GetFunctions") FUNCDEF (SQL_API_SQLGETTYPEINFO, en_GetTypeInfo, CLI "GetTypeInfo") FUNCDEF (SQL_API_SQLSETCONNECTOPTION, en_SetConnectOption, CLI "SetConnectOption") FUNCDEF (SQL_API_SQLGETCONNECTOPTION, en_GetConnectOption, CLI "GetConnectOption") FUNCDEF (SQL_API_SQLSETSTMTOPTION, en_SetStmtOption, CLI "SetStmtOption") FUNCDEF (SQL_API_SQLGETSTMTOPTION, en_GetStmtOption, CLI "GetStmtOption") FUNCDEF (SQL_API_SQLALLOCSTMT, en_AllocStmt, CLI "AllocStmt") FUNCDEF (SQL_API_SQLPREPARE, en_Prepare, CLI "Prepare") FUNCDEF (SQL_API_SQLBINDPARAMETER, en_BindParameter, CLI "BindParameter") FUNCDEF (SQL_API_SQLPARAMOPTIONS, en_ParamOptions, CLI "ParamOptions") FUNCDEF (SQL_API_SQLGETCURSORNAME, en_GetCursorName, CLI "GetCursorName") FUNCDEF (SQL_API_SQLSETCURSORNAME, en_SetCursorName, CLI "SetCursorName") FUNCDEF (SQL_API_SQLSETSCROLLOPTIONS, en_SetScrollOptions, CLI "SetScrollOptions") FUNCDEF (SQL_API_SQLSETPARAM, en_SetParam, CLI "SetParam") FUNCDEF (SQL_API_SQLEXECUTE, en_Execute, CLI "Execute") FUNCDEF (SQL_API_SQLEXECDIRECT, en_ExecDirect, CLI "ExecDirect") FUNCDEF (SQL_API_SQLNATIVESQL, en_NativeSql, CLI "NativeSql") FUNCDEF (SQL_API_SQLDESCRIBEPARAM, en_DescribeParam, CLI "DescribeParam") FUNCDEF (SQL_API_SQLNUMPARAMS, en_NumParams, CLI "NumParams") FUNCDEF (SQL_API_SQLPARAMDATA, en_ParamData, CLI "ParamData") FUNCDEF (SQL_API_SQLPUTDATA, en_PutData, CLI "PutData") FUNCDEF (SQL_API_SQLROWCOUNT, en_RowCount, CLI "RowCount") FUNCDEF (SQL_API_SQLNUMRESULTCOLS, en_NumResultCols, CLI "NumResultCols") FUNCDEF (SQL_API_SQLDESCRIBECOL, en_DescribeCol, CLI "DescribeCol") FUNCDEF (SQL_API_SQLCOLATTRIBUTES, en_ColAttributes, CLI "ColAttributes") FUNCDEF (SQL_API_SQLBINDCOL, en_BindCol, CLI "BindCol") FUNCDEF (SQL_API_SQLFETCH, en_Fetch, CLI "Fetch") FUNCDEF (SQL_API_SQLEXTENDEDFETCH, en_ExtendedFetch, CLI "ExtendedFetch") FUNCDEF (SQL_API_SQLGETDATA, en_GetData, CLI "GetData") FUNCDEF (SQL_API_SQLSETPOS, en_SetPos, CLI "SetPos") FUNCDEF (SQL_API_SQLMORERESULTS, en_MoreResults, CLI "MoreResults") FUNCDEF (SQL_API_SQLERROR, en_Error, CLI "Error") FUNCDEF (SQL_API_SQLCOLUMNPRIVILEGES, en_ColumnPrivileges, CLI "ColumnPrivileges") FUNCDEF (SQL_API_SQLCOLUMNS, en_Columns, CLI "Columns") FUNCDEF (SQL_API_SQLFOREIGNKEYS, en_ForeignKeys, CLI "ForeignKeys") FUNCDEF (SQL_API_SQLPRIMARYKEYS, en_PrimaryKeys, CLI "PrimaryKeys") FUNCDEF (SQL_API_SQLPROCEDURECOLUMNS, en_ProcedureColumns, CLI "ProcedureColumns") FUNCDEF (SQL_API_SQLPROCEDURES, en_Procedures, CLI "Procedures") FUNCDEF (SQL_API_SQLSPECIALCOLUMNS, en_SpecialColumns, CLI "SpecialColumns") FUNCDEF (SQL_API_SQLSTATISTICS, en_Statistics, CLI "Statistics") FUNCDEF (SQL_API_SQLTABLEPRIVILEGES, en_TablePrivileges, CLI "TablePrivileges") FUNCDEF (SQL_API_SQLTABLES, en_Tables, CLI "Tables") FUNCDEF (SQL_API_SQLFREESTMT, en_FreeStmt, CLI "FreeStmt") FUNCDEF (SQL_API_SQLCANCEL, en_Cancel, CLI "Cancel") FUNCDEF (SQL_API_SQLTRANSACT, en_Transact, CLI "Transact") FUNCDEF (SQL_API_SQLDISCONNECT, en_Disconnect, CLI "Disconnect") FUNCDEF (SQL_API_SQLFREECONNECT, en_FreeConnect, CLI "FreeConnect") FUNCDEF (SQL_API_SQLFREEENV, en_FreeEnv, CLI "FreeEnv") #if (ODBCVER >= 0x0300) FUNCDEF (SQL_API_SQLALLOCHANDLE, en_AllocHandle, CLI "AllocHandle") FUNCDEF (SQL_API_SQLBINDPARAM, en_BindParam, CLI "BindParam") FUNCDEF (SQL_API_SQLBULKOPERATIONS, en_BulkOperations, CLI "BulkOperations") FUNCDEF (SQL_API_SQLCLOSECURSOR, en_CloseCursor, CLI "CloseCursor") FUNCDEF (SQL_API_SQLCOLATTRIBUTE, en_ColAttribute, CLI "ColAttribute") FUNCDEF (SQL_API_SQLCOPYDESC, en_CopyDesc, CLI "CopyDesc") FUNCDEF (SQL_API_SQLENDTRAN, en_EndTran, CLI "EndTran") FUNCDEF (SQL_API_SQLFETCHSCROLL, en_FetchScroll, CLI "FetchScroll") FUNCDEF (SQL_API_SQLFREEHANDLE, en_FreeHandle, CLI "FreeHandle") FUNCDEF (SQL_API_SQLGETCONNECTATTR, en_GetConnectAttr, CLI "GetConnectAttr") FUNCDEF (SQL_API_SQLGETDESCFIELD, en_GetDescField, CLI "GetDescField") FUNCDEF (SQL_API_SQLGETDESCREC, en_GetDescRec, CLI "GetDescRec") FUNCDEF (SQL_API_SQLGETDIAGFIELD, en_GetDiagField, CLI "GetDiagField") FUNCDEF (SQL_API_SQLGETDIAGREC, en_GetDiagRec, CLI "GetDiagRec") FUNCDEF (SQL_API_SQLGETENVATTR, en_GetEnvAttr, CLI "GetEnvAttr") FUNCDEF (SQL_API_SQLGETSTMTATTR, en_GetStmtAttr, CLI "GetStmtAttr") FUNCDEF (SQL_API_SQLSETCONNECTATTR, en_SetConnectAttr, CLI "SetConnectAttr") FUNCDEF (SQL_API_SQLSETDESCFIELD, en_SetDescField, CLI "SetDescField") FUNCDEF (SQL_API_SQLSETDESCREC, en_SetDescRec, CLI "SetDescRec") FUNCDEF (SQL_API_SQLSETENVATTR, en_SetEnvAttr, CLI "SetEnvAttr") FUNCDEF (SQL_API_SQLSETSTMTATTR, en_SetStmtAttr, CLI "SetStmtAttr") #endif /* Unicode function set API */ #if (ODBCVER >= 0x0300) FUNCDEF (SQL_API_SQLCONNECT, en_ConnectW, CLI "ConnectW") FUNCDEF (SQL_API_SQLDRIVERCONNECT, en_DriverConnectW, CLI "DriverConnectW") FUNCDEF (SQL_API_SQLBROWSECONNECT, en_BrowseConnectW, CLI "BrowseConnectW") FUNCDEF (SQL_API_SQLDATASOURCES, en_DataSourcesW, CLI "DataSourcesW") FUNCDEF (SQL_API_SQLDRIVERS, en_DriversW, CLI "DriversW") FUNCDEF (SQL_API_SQLGETINFO, en_GetInfoW, CLI "GetInfoW") FUNCDEF (SQL_API_SQLGETTYPEINFO, en_GetTypeInfoW, CLI "GetTypeInfoW") FUNCDEF (SQL_API_SQLSETCONNECTOPTION, en_SetConnectOptionW, CLI "SetConnectOptionW") FUNCDEF (SQL_API_SQLGETCONNECTOPTION, en_GetConnectOptionW, CLI "GetConnectOptionW") FUNCDEF (SQL_API_SQLPREPARE, en_PrepareW, CLI "PrepareW") FUNCDEF (SQL_API_SQLGETCURSORNAME, en_GetCursorNameW, CLI "GetCursorNameW") FUNCDEF (SQL_API_SQLSETCURSORNAME, en_SetCursorNameW, CLI "SetCursorNameW") FUNCDEF (SQL_API_SQLEXECDIRECT, en_ExecDirectW, CLI "ExecDirectW") FUNCDEF (SQL_API_SQLNATIVESQL, en_NativeSqlW, CLI "NativeSqlW") FUNCDEF (SQL_API_SQLDESCRIBECOL, en_DescribeColW, CLI "DescribeColW") FUNCDEF (SQL_API_SQLCOLATTRIBUTES, en_ColAttributesW, CLI "ColAttributesW") FUNCDEF (SQL_API_SQLERROR, en_ErrorW, CLI "ErrorW") FUNCDEF (SQL_API_SQLCOLUMNPRIVILEGES, en_ColumnPrivilegesW, CLI "ColumnPrivilegesW") FUNCDEF (SQL_API_SQLCOLUMNS, en_ColumnsW, CLI "ColumnsW") FUNCDEF (SQL_API_SQLFOREIGNKEYS, en_ForeignKeysW, CLI "ForeignKeysW") FUNCDEF (SQL_API_SQLPRIMARYKEYS, en_PrimaryKeysW, CLI "PrimaryKeysW") FUNCDEF (SQL_API_SQLPROCEDURECOLUMNS, en_ProcedureColumnsW, CLI "ProcedureColumnsW") FUNCDEF (SQL_API_SQLPROCEDURES, en_ProceduresW, CLI "ProceduresW") FUNCDEF (SQL_API_SQLSPECIALCOLUMNS, en_SpecialColumnsW, CLI "SpecialColumnsW") FUNCDEF (SQL_API_SQLSTATISTICS, en_StatisticsW, CLI "StatisticsW") FUNCDEF (SQL_API_SQLTABLEPRIVILEGES, en_TablePrivilegesW, CLI "TablePrivilegesW") FUNCDEF (SQL_API_SQLTABLES, en_TablesW, CLI "TablesW") FUNCDEF (SQL_API_SQLCOLATTRIBUTE, en_ColAttributeW, CLI "ColAttributeW") FUNCDEF (SQL_API_SQLGETCONNECTATTR, en_GetConnectAttrW, CLI "GetConnectAttrW") FUNCDEF (SQL_API_SQLGETDESCFIELD, en_GetDescFieldW, CLI "GetDescFieldW") FUNCDEF (SQL_API_SQLGETDESCREC, en_GetDescRecW, CLI "GetDescRecW") FUNCDEF (SQL_API_SQLGETDIAGFIELD, en_GetDiagFieldW, CLI "GetDiagFieldW") FUNCDEF (SQL_API_SQLGETDIAGREC, en_GetDiagRecW, CLI "GetDiagRecW") FUNCDEF (SQL_API_SQLGETSTMTATTR, en_GetStmtAttrW, CLI "GetStmtAttrW") FUNCDEF (SQL_API_SQLSETCONNECTATTR, en_SetConnectAttrW, CLI "SetConnectAttrW") FUNCDEF (SQL_API_SQLSETDESCFIELD, en_SetDescFieldW, CLI "SetDescFieldW") FUNCDEF (SQL_API_SQLSETSTMTATTR, en_SetStmtAttrW, CLI "SetStmtAttrW") /* Ansi function set API */ FUNCDEF (SQL_API_SQLSETSTMTOPTION, en_SetStmtOptionA, CLI "SetStmtOptionA") FUNCDEF (SQL_API_SQLGETSTMTOPTION, en_GetStmtOptionA, CLI "GetStmtOptionA") FUNCDEF (SQL_API_SQLCONNECT, en_ConnectA, CLI "ConnectA") FUNCDEF (SQL_API_SQLDRIVERCONNECT, en_DriverConnectA, CLI "DriverConnectA") FUNCDEF (SQL_API_SQLBROWSECONNECT, en_BrowseConnectA, CLI "BrowseConnectA") FUNCDEF (SQL_API_SQLDATASOURCES, en_DataSourcesA, CLI "DataSourcesA") FUNCDEF (SQL_API_SQLDRIVERS, en_DriversA, CLI "DriversA") FUNCDEF (SQL_API_SQLGETINFO, en_GetInfoA, CLI "GetInfoA") FUNCDEF (SQL_API_SQLGETTYPEINFO, en_GetTypeInfoA, CLI "GetTypeInfoA") FUNCDEF (SQL_API_SQLSETCONNECTOPTION, en_SetConnectOptionA, CLI "SetConnectOptionA") FUNCDEF (SQL_API_SQLGETCONNECTOPTION, en_GetConnectOptionA, CLI "GetConnectOptionA") FUNCDEF (SQL_API_SQLPREPARE, en_PrepareA, CLI "PrepareA") FUNCDEF (SQL_API_SQLGETCURSORNAME, en_GetCursorNameA, CLI "GetCursorNameA") FUNCDEF (SQL_API_SQLSETCURSORNAME, en_SetCursorNameA, CLI "SetCursorNameA") FUNCDEF (SQL_API_SQLEXECDIRECT, en_ExecDirectA, CLI "ExecDirectA") FUNCDEF (SQL_API_SQLNATIVESQL, en_NativeSqlA, CLI "NativeSqlA") FUNCDEF (SQL_API_SQLDESCRIBECOL, en_DescribeColA, CLI "DescribeColA") FUNCDEF (SQL_API_SQLCOLATTRIBUTES, en_ColAttributesA, CLI "ColAttributesA") FUNCDEF (SQL_API_SQLERROR, en_ErrorA, CLI "ErrorA") FUNCDEF (SQL_API_SQLCOLUMNPRIVILEGES, en_ColumnPrivilegesA, CLI "ColumnPrivilegesA") FUNCDEF (SQL_API_SQLCOLUMNS, en_ColumnsA, CLI "ColumnsA") FUNCDEF (SQL_API_SQLFOREIGNKEYS, en_ForeignKeysA, CLI "ForeignKeysA") FUNCDEF (SQL_API_SQLPRIMARYKEYS, en_PrimaryKeysA, CLI "PrimaryKeysA") FUNCDEF (SQL_API_SQLPROCEDURECOLUMNS, en_ProcedureColumnsA, CLI "ProcedureColumnsA") FUNCDEF (SQL_API_SQLPROCEDURES, en_ProceduresA, CLI "ProceduresA") FUNCDEF (SQL_API_SQLSPECIALCOLUMNS, en_SpecialColumnsA, CLI "SpecialColumnsA") FUNCDEF (SQL_API_SQLSTATISTICS, en_StatisticsA, CLI "StatisticsA") FUNCDEF (SQL_API_SQLTABLEPRIVILEGES, en_TablePrivilegesA, CLI "TablePrivilegesA") FUNCDEF (SQL_API_SQLTABLES, en_TablesA, CLI "TablesA") FUNCDEF (SQL_API_SQLCOLATTRIBUTE, en_ColAttributeA, CLI "ColAttributeA") FUNCDEF (SQL_API_SQLGETCONNECTATTR, en_GetConnectAttrA, CLI "GetConnectAttrA") FUNCDEF (SQL_API_SQLGETDESCFIELD, en_GetDescFieldA, CLI "GetDescFieldA") FUNCDEF (SQL_API_SQLGETDESCREC, en_GetDescRecA, CLI "GetDescRecA") FUNCDEF (SQL_API_SQLGETDIAGFIELD, en_GetDiagFieldA, CLI "GetDiagFieldA") FUNCDEF (SQL_API_SQLGETDIAGREC, en_GetDiagRecA, CLI "GetDiagRecA") FUNCDEF (SQL_API_SQLGETSTMTATTR, en_GetStmtAttrA, CLI "GetStmtAttrA") FUNCDEF (SQL_API_SQLSETCONNECTATTR, en_SetConnectAttrA, CLI "SetConnectAttrA") FUNCDEF (SQL_API_SQLSETDESCFIELD, en_SetDescFieldA, CLI "SetDescFieldA") FUNCDEF (SQL_API_SQLSETSTMTATTR, en_SetStmtAttrA, CLI "SetStmtAttrA") #endif #undef CLI libiodbc-3.52.9/iodbc/result.c0000644000076400007640000007171012323210535013056 00000000000000/* * result.c * * $Id$ * * Prepare for getting query result * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include #include #include static SQLRETURN SQLBindCol_Internal ( SQLHSTMT hstmt, SQLUSMALLINT icol, SQLSMALLINT fCType, SQLPOINTER rgbValue, SQLLEN cbValueMax, SQLLEN *pcbValue) { STMT(pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLSMALLINT nCType; SQLRETURN retcode; /* check argument */ switch (fCType) { case SQL_C_DEFAULT: case SQL_C_BIT: case SQL_C_BINARY: case SQL_C_CHAR: case SQL_C_DATE: case SQL_C_DOUBLE: case SQL_C_FLOAT: case SQL_C_LONG: case SQL_C_SHORT: case SQL_C_SLONG: case SQL_C_SSHORT: case SQL_C_STINYINT: case SQL_C_TIME: case SQL_C_TIMESTAMP: case SQL_C_TINYINT: case SQL_C_ULONG: case SQL_C_USHORT: case SQL_C_UTINYINT: #if (ODBCVER >= 0x0300) case SQL_C_GUID: case SQL_C_INTERVAL_DAY: case SQL_C_INTERVAL_DAY_TO_HOUR: case SQL_C_INTERVAL_DAY_TO_MINUTE: case SQL_C_INTERVAL_DAY_TO_SECOND: case SQL_C_INTERVAL_HOUR: case SQL_C_INTERVAL_HOUR_TO_MINUTE: case SQL_C_INTERVAL_HOUR_TO_SECOND: case SQL_C_INTERVAL_MINUTE: case SQL_C_INTERVAL_MINUTE_TO_SECOND: case SQL_C_INTERVAL_MONTH: case SQL_C_INTERVAL_SECOND: case SQL_C_INTERVAL_YEAR: case SQL_C_INTERVAL_YEAR_TO_MONTH: case SQL_C_NUMERIC: case SQL_C_SBIGINT: case SQL_C_TYPE_DATE: case SQL_C_TYPE_TIME: case SQL_C_TYPE_TIMESTAMP: case SQL_C_UBIGINT: case SQL_C_WCHAR: #endif break; default: PUSHSQLERR (pstmt->herr, en_S1003); return SQL_ERROR; } if (cbValueMax < 0) { PUSHSQLERR (pstmt->herr, en_S1090); return SQL_ERROR; } /* check state */ if (pstmt->state > en_stmt_needdata || pstmt->asyn_on != en_NullProc) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } /* * Convert C type to ODBC version of driver */ nCType = _iodbcdm_map_c_type (fCType, penv->dodbc_ver); /* call driver's function */ hproc = _iodbcdm_getproc (pstmt->hdbc, en_BindCol); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } if (icol != 0 && !penv->unicode_driver && nCType == SQL_C_WCHAR) { CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, icol, SQL_C_CHAR, rgbValue, cbValueMax, pcbValue)); } else CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, icol, nCType, rgbValue, cbValueMax, pcbValue)); if (icol != 0 && !penv->unicode_driver && nCType == SQL_C_WCHAR && SQL_SUCCEEDED (retcode)) { BIND_t tbind; tbind.bn_col = icol; tbind.bn_type = nCType; tbind.bn_data = rgbValue; tbind.bn_size = cbValueMax; tbind.bn_pInd = pcbValue; if (rgbValue) _iodbcdm_BindColumn (pstmt, &tbind); else _iodbcdm_UnBindColumn (pstmt, &tbind); } return retcode; } SQLRETURN SQL_API SQLBindCol ( SQLHSTMT hstmt, SQLUSMALLINT icol, SQLSMALLINT fCType, SQLPOINTER rgbValue, SQLLEN cbValueMax, SQLLEN *pcbValue) { ENTER_STMT (hstmt, trace_SQLBindCol (TRACE_ENTER, hstmt, icol, fCType, rgbValue, cbValueMax, pcbValue)); retcode = SQLBindCol_Internal ( hstmt, icol, fCType, rgbValue, cbValueMax, pcbValue); LEAVE_STMT (hstmt, trace_SQLBindCol (TRACE_LEAVE, hstmt, icol, fCType, rgbValue, cbValueMax, pcbValue)); } SQLRETURN SQL_API SQLGetCursorName_Internal ( SQLHSTMT hstmt, SQLCHAR * szCursor, SQLSMALLINT cbCursorMax, SQLSMALLINT * pcbCursor, char waMode) { STMT(pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; void * cursorOut = szCursor; void * _Cursor = NULL; /* check argument */ if (cbCursorMax < (SWORD) 0) { PUSHSQLERR (pstmt->herr, en_S1090); return SQL_ERROR; } /* check state */ if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } if (pstmt->state < en_stmt_cursoropen && pstmt->cursor_state == en_stmt_cursor_no) { PUSHSQLERR (pstmt->herr, en_S1015); return SQL_ERROR; } /* call driver's function */ if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ if ((_Cursor = malloc((cbCursorMax + 1) * sizeof(wchar_t))) == NULL) { PUSHSQLERR (pstmt->herr, en_HY001); return SQL_ERROR; } } else { /* unicode=>ansi*/ if ((_Cursor = malloc(cbCursorMax + 1)) == NULL) { PUSHSQLERR (pstmt->herr, en_HY001); return SQL_ERROR; } } cursorOut = _Cursor; } /* call driver */ CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_GetCursorName, ( pstmt->dhstmt, cursorOut, cbCursorMax, pcbCursor)); if (hproc == SQL_NULL_HPROC) { MEM_FREE(_Cursor); PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } if (szCursor && SQL_SUCCEEDED (retcode) && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W'))) { if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *) cursorOut, (SQLCHAR *) szCursor, cbCursorMax, NULL); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *) cursorOut, (SQLWCHAR *) szCursor, cbCursorMax, NULL); } } MEM_FREE(_Cursor); return retcode; } SQLRETURN SQL_API SQLGetCursorName ( SQLHSTMT hstmt, SQLCHAR * szCursor, SQLSMALLINT cbCursorMax, SQLSMALLINT * pcbCursor) { ENTER_STMT (hstmt, trace_SQLGetCursorName (TRACE_ENTER, hstmt, szCursor, cbCursorMax, pcbCursor)); retcode = SQLGetCursorName_Internal( hstmt, szCursor, cbCursorMax, pcbCursor, 'A'); LEAVE_STMT (hstmt, trace_SQLGetCursorName (TRACE_LEAVE, hstmt, szCursor, cbCursorMax, pcbCursor)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLGetCursorNameA ( SQLHSTMT hstmt, SQLCHAR * szCursor, SQLSMALLINT cbCursorMax, SQLSMALLINT * pcbCursor) { ENTER_STMT (hstmt, trace_SQLGetCursorName (TRACE_ENTER, hstmt, szCursor, cbCursorMax, pcbCursor)); retcode = SQLGetCursorName_Internal( hstmt, szCursor, cbCursorMax, pcbCursor, 'A'); LEAVE_STMT (hstmt, trace_SQLGetCursorName (TRACE_LEAVE, hstmt, szCursor, cbCursorMax, pcbCursor)); } SQLRETURN SQL_API SQLGetCursorNameW (SQLHSTMT hstmt, SQLWCHAR * szCursor, SQLSMALLINT cbCursorMax, SQLSMALLINT * pcbCursor) { ENTER_STMT (hstmt, trace_SQLGetCursorNameW (TRACE_ENTER, hstmt, szCursor, cbCursorMax, pcbCursor)); retcode = SQLGetCursorName_Internal( hstmt, (SQLCHAR *) szCursor, cbCursorMax, pcbCursor, 'W'); LEAVE_STMT (hstmt, trace_SQLGetCursorNameW (TRACE_LEAVE, hstmt, szCursor, cbCursorMax, pcbCursor)); } #endif static SQLRETURN SQLRowCount_Internal ( SQLHSTMT hstmt, SQLLEN * pcrow) { STMT(pstmt, hstmt); HPROC hproc; SQLRETURN retcode; /* check state */ if (pstmt->state >= en_stmt_needdata || pstmt->state <= en_stmt_prepared || pstmt->asyn_on != en_NullProc) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } /* call driver */ hproc = _iodbcdm_getproc (pstmt->hdbc, en_RowCount); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, pcrow)); return retcode; } SQLRETURN SQL_API SQLRowCount ( SQLHSTMT hstmt, SQLLEN * pcrow) { ENTER_STMT (hstmt, trace_SQLRowCount (TRACE_ENTER, hstmt, pcrow)); retcode = SQLRowCount_Internal (hstmt, pcrow); LEAVE_STMT (hstmt, trace_SQLRowCount (TRACE_LEAVE, hstmt, pcrow)); } SQLRETURN SQL_API _iodbcdm_NumResultCols ( SQLHSTMT hstmt, SQLSMALLINT * pccol) { STMT (pstmt, hstmt); HPROC hproc; SQLRETURN retcode; SWORD ccol; /* check state */ if (pstmt->asyn_on == en_NullProc) { if (pstmt->state == en_stmt_allocated || pstmt->state >= en_stmt_needdata) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } } else if (pstmt->asyn_on != en_NumResultCols) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } /* call driver */ hproc = _iodbcdm_getproc (pstmt->hdbc, en_NumResultCols); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, &ccol)); /* state transition */ if (pstmt->asyn_on == en_NumResultCols) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_ERROR: pstmt->asyn_on = en_NullProc; case SQL_STILL_EXECUTING: default: break; } } switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: break; case SQL_STILL_EXECUTING: ccol = 0; pstmt->asyn_on = en_NumResultCols; break; default: ccol = 0; break; } if (pccol) { *pccol = ccol; } return retcode; } SQLRETURN SQL_API SQLNumResultCols ( SQLHSTMT hstmt, SQLSMALLINT * pccol) { ENTER_STMT (hstmt, trace_SQLNumResultCols (TRACE_ENTER, hstmt, pccol)); retcode = _iodbcdm_NumResultCols (hstmt, pccol); LEAVE_STMT (hstmt, trace_SQLNumResultCols (TRACE_LEAVE, hstmt, pccol)); } SQLSMALLINT _iodbcdm_map_sql_type (int type, int odbcver) { switch (type) { case SQL_DATE: case SQL_TYPE_DATE: return (odbcver == SQL_OV_ODBC3) ? SQL_TYPE_DATE : SQL_DATE; case SQL_TIME: case SQL_TYPE_TIME: return (odbcver == SQL_OV_ODBC3) ? SQL_TYPE_TIME : SQL_TIME; case SQL_TIMESTAMP: case SQL_TYPE_TIMESTAMP: return (odbcver == SQL_OV_ODBC3) ? SQL_TYPE_TIMESTAMP : SQL_TIMESTAMP; } return type; } SQLSMALLINT _iodbcdm_map_c_type (int type, int odbcver) { switch (type) { case SQL_C_DATE: case SQL_C_TYPE_DATE: return (odbcver == SQL_OV_ODBC3) ? SQL_C_TYPE_DATE : SQL_C_DATE; case SQL_C_TIME: case SQL_C_TYPE_TIME: return (odbcver == SQL_OV_ODBC3) ? SQL_C_TYPE_TIME : SQL_C_TIME; case SQL_C_TIMESTAMP: case SQL_C_TYPE_TIMESTAMP: return (odbcver == SQL_OV_ODBC3) ? SQL_C_TYPE_TIMESTAMP : SQL_C_TIMESTAMP; } return type; } SQLRETURN SQL_API SQLDescribeCol_Internal ( SQLHSTMT hstmt, SQLUSMALLINT icol, SQLPOINTER szColName, SQLSMALLINT cbColNameMax, SQLSMALLINT * pcbColName, SQLSMALLINT * pfSqlType, SQLULEN * pcbColDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable, SQLCHAR waMode) { STMT(pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); GENV (genv, pdbc->genv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; void * _ColName = NULL; void * colNameOut = szColName; sqlstcode_t sqlstat = en_00000; /* check arguments */ if (icol == 0) { sqlstat = en_S1002; } else if (cbColNameMax < 0) { sqlstat = en_S1090; } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } #if (ODBCVER < 0x0300) /* check state */ if (pstmt->asyn_on == en_NullProc) { if (pstmt->state == en_stmt_allocated || pstmt->state >= en_stmt_needdata) { sqlstat = en_S1010; } } else if (pstmt->asyn_on != en_DescribeCol) { sqlstat = en_S1010; } #endif if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } /* call driver */ if (szColName != NULL && cbColNameMax > 0 && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) ) { if (waMode != 'W') { /* ansi=>unicode*/ if ((_ColName = _iodbcdm_alloc_var(pstmt, 0, cbColNameMax * sizeof(wchar_t))) == NULL) { PUSHSQLERR (pstmt->herr, en_HY001); return SQL_ERROR; } } else { /* unicode=>ansi*/ if ((_ColName = _iodbcdm_alloc_var(pstmt, 0, cbColNameMax)) == NULL) { PUSHSQLERR (pstmt->herr, en_HY001); return SQL_ERROR; } } colNameOut = _ColName; } /* call driver */ CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_DescribeCol, ( pstmt->dhstmt, icol, colNameOut, cbColNameMax, pcbColName, pfSqlType, pcbColDef, pibScale, pfNullable)); if (hproc == SQL_NULL_HPROC) { _iodbcdm_FreeStmtVars(pstmt); PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } /* * Convert sql type to ODBC version of application */ if (SQL_SUCCEEDED(retcode) && pfSqlType) *pfSqlType = _iodbcdm_map_sql_type (*pfSqlType, genv->odbc_ver); if (szColName && SQL_SUCCEEDED (retcode) && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W'))) { if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *) colNameOut, (SQLCHAR *) szColName, cbColNameMax, NULL); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *) colNameOut, (SQLWCHAR *) szColName, cbColNameMax, NULL); } } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); /* state transition */ if (pstmt->asyn_on == en_DescribeCol) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_ERROR: pstmt->asyn_on = en_NullProc; break; default: return retcode; } } switch (pstmt->state) { case en_stmt_prepared: case en_stmt_cursoropen: case en_stmt_fetched: case en_stmt_xfetched: if (retcode == SQL_STILL_EXECUTING) { pstmt->asyn_on = en_DescribeCol; } break; default: break; } return retcode; } SQLRETURN SQL_API SQLDescribeCol (SQLHSTMT hstmt, SQLUSMALLINT icol, SQLCHAR * szColName, SQLSMALLINT cbColNameMax, SQLSMALLINT * pcbColName, SQLSMALLINT * pfSqlType, SQLULEN * pcbColDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable) { ENTER_STMT (hstmt, trace_SQLDescribeCol (TRACE_ENTER, hstmt, icol, szColName, cbColNameMax, pcbColName, pfSqlType, pcbColDef, pibScale, pfNullable)); retcode = SQLDescribeCol_Internal ( hstmt, icol, szColName, cbColNameMax, pcbColName, pfSqlType, pcbColDef, pibScale, pfNullable, 'A'); LEAVE_STMT (hstmt, trace_SQLDescribeCol (TRACE_LEAVE, hstmt, icol, szColName, cbColNameMax, pcbColName, pfSqlType, pcbColDef, pibScale, pfNullable)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLDescribeColA (SQLHSTMT hstmt, SQLUSMALLINT icol, SQLCHAR * szColName, SQLSMALLINT cbColNameMax, SQLSMALLINT * pcbColName, SQLSMALLINT * pfSqlType, SQLULEN * pcbColDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable) { ENTER_STMT (hstmt, trace_SQLDescribeCol (TRACE_ENTER, hstmt, icol, szColName, cbColNameMax, pcbColName, pfSqlType, pcbColDef, pibScale, pfNullable)); retcode = SQLDescribeCol_Internal ( hstmt, icol, szColName, cbColNameMax, pcbColName, pfSqlType, pcbColDef, pibScale, pfNullable, 'A'); LEAVE_STMT (hstmt, trace_SQLDescribeCol (TRACE_LEAVE, hstmt, icol, szColName, cbColNameMax, pcbColName, pfSqlType, pcbColDef, pibScale, pfNullable)); } SQLRETURN SQL_API SQLDescribeColW ( SQLHSTMT hstmt, SQLUSMALLINT icol, SQLWCHAR * szColName, SQLSMALLINT cbColNameMax, SQLSMALLINT * pcbColName, SQLSMALLINT * pfSqlType, SQLULEN * pcbColDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable) { ENTER_STMT (hstmt, trace_SQLDescribeColW (TRACE_ENTER, hstmt, icol, szColName, cbColNameMax, pcbColName, pfSqlType, pcbColDef, pibScale, pfNullable)); retcode = SQLDescribeCol_Internal ( hstmt, icol, szColName, cbColNameMax, pcbColName, pfSqlType, pcbColDef, pibScale, pfNullable, 'W'); LEAVE_STMT (hstmt, trace_SQLDescribeColW (TRACE_LEAVE, hstmt, icol, szColName, cbColNameMax, pcbColName, pfSqlType, pcbColDef, pibScale, pfNullable)); } #endif SQLRETURN SQL_API SQLColAttributes_Internal ( SQLHSTMT hstmt, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLLEN * pfDesc, SQLCHAR waMode) { STMT(pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc2 = SQL_NULL_HPROC; HPROC hproc3 = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; void * _Desc = NULL; void * descOut = rgbDesc; sqlstcode_t sqlstat = en_00000; SQLUSMALLINT new_attr = fDescType; SQLUINTEGER odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; SQLUINTEGER dodbc_ver = ((ENV_t *) pdbc->henv)->dodbc_ver; /* check arguments */ if (icol == 0 && fDescType != SQL_COLUMN_COUNT) { sqlstat = en_S1002; } else if (cbDescMax < 0) { sqlstat = en_S1090; } #if (ODBCVER < 0x0300) else if ( /* fDescType < SQL_COLATT_OPT_MIN || *//* turnoff warning */ (fDescType > SQL_COLATT_OPT_MAX && fDescType < SQL_COLUMN_DRIVER_START)) { sqlstat = en_S1091; } #endif /* ODBCVER < 0x0300 */ if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } /* check state */ if (pstmt->asyn_on == en_NullProc) { if (pstmt->state == en_stmt_allocated || pstmt->state >= en_stmt_needdata) { sqlstat = en_S1010; } } else if (pstmt->asyn_on != en_ColAttributes) { sqlstat = en_S1010; } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } /* call driver */ if (rgbDesc != NULL && cbDescMax > 0 && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W'))) { switch(fDescType) { case SQL_COLUMN_QUALIFIER_NAME: case SQL_COLUMN_NAME: case SQL_COLUMN_LABEL: case SQL_COLUMN_OWNER_NAME: case SQL_COLUMN_TABLE_NAME: case SQL_COLUMN_TYPE_NAME: if (waMode != 'W') { /* ansi=>unicode*/ cbDescMax *= sizeof(wchar_t); if ((_Desc = _iodbcdm_alloc_var(pstmt, 0, cbDescMax)) == NULL) { PUSHSQLERR (pstmt->herr, en_HY001); return SQL_ERROR; } } else { /* unicode=>ansi*/ cbDescMax /= sizeof(wchar_t); if ((_Desc = _iodbcdm_alloc_var(pstmt, 0, cbDescMax)) == NULL) { PUSHSQLERR (pstmt->herr, en_HY001); return SQL_ERROR; } } descOut = _Desc; break; } } #if (ODBCVER >= 0x0300) switch (new_attr) { case SQL_COLUMN_NAME: new_attr = SQL_DESC_NAME; break; case SQL_COLUMN_NULLABLE: new_attr = SQL_DESC_NULLABLE; break; case SQL_COLUMN_COUNT: new_attr = SQL_DESC_COUNT; break; } #endif if (penv->unicode_driver) { hproc2 = _iodbcdm_getproc (pdbc, en_ColAttributesW); #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pdbc, en_ColAttributeW); #endif if (odbc_ver == SQL_OV_ODBC2 && ( dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x0300) if (hproc3 != SQL_NULL_HPROC) { CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc3, ( pstmt->dhstmt, icol, new_attr, descOut, cbDescMax, pcbDesc, pfDesc)); } else #endif { if (hproc2 == SQL_NULL_HPROC) { _iodbcdm_FreeStmtVars(pstmt); PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc2, ( pstmt->dhstmt, icol, fDescType, descOut, cbDescMax, pcbDesc, pfDesc)); } } else { /* SQL_XXX */ /* SQL_XXX_A */ hproc2 = _iodbcdm_getproc (pdbc, en_ColAttributes); if (hproc2 == SQL_NULL_HPROC) hproc2 = _iodbcdm_getproc (pdbc, en_ColAttributesA); #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pdbc, en_ColAttribute); if (hproc3 == SQL_NULL_HPROC) hproc3 = _iodbcdm_getproc (pdbc, en_ColAttributeA); #endif if (odbc_ver == SQL_OV_ODBC2 && ( dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x0300) if (hproc3 != SQL_NULL_HPROC) { CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc3, ( pstmt->dhstmt, icol, new_attr, descOut, cbDescMax, pcbDesc, pfDesc)); } else #endif { if (hproc2 == SQL_NULL_HPROC) { _iodbcdm_FreeStmtVars(pstmt); PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc2, ( pstmt->dhstmt, icol, fDescType, descOut, cbDescMax, pcbDesc, pfDesc)); } } if (rgbDesc && SQL_SUCCEEDED (retcode) && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W'))) { switch(fDescType) { case SQL_COLUMN_QUALIFIER_NAME: case SQL_COLUMN_NAME: case SQL_COLUMN_LABEL: case SQL_COLUMN_OWNER_NAME: case SQL_COLUMN_TABLE_NAME: case SQL_COLUMN_TYPE_NAME: if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *) descOut, (SQLCHAR *) rgbDesc, cbDescMax / sizeof(wchar_t), pcbDesc); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *) descOut, (SQLWCHAR *) rgbDesc, cbDescMax, pcbDesc); if (pcbDesc) *pcbDesc = *pcbDesc * sizeof(wchar_t); } } } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); /* state transition */ if (pstmt->asyn_on == en_ColAttributes) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_ERROR: pstmt->asyn_on = en_NullProc; break; default: return retcode; } } switch (pstmt->state) { case en_stmt_prepared: case en_stmt_cursoropen: case en_stmt_fetched: case en_stmt_xfetched: if (retcode == SQL_STILL_EXECUTING) { pstmt->asyn_on = en_ColAttributes; } break; default: break; } return retcode; } RETCODE SQL_API SQLColAttributes ( SQLHSTMT statementHandle, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLLEN * pfDesc) { ENTER_STMT (statementHandle, trace_SQLColAttributes (TRACE_ENTER, statementHandle, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc)); retcode = SQLColAttributes_Internal ( statementHandle, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc, 'A'); LEAVE_STMT (statementHandle, trace_SQLColAttributes (TRACE_LEAVE, statementHandle, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc)); } #if ODBCVER >= 0x0300 RETCODE SQL_API SQLColAttributesA ( SQLHSTMT statementHandle, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLLEN * pfDesc) { ENTER_STMT (statementHandle, trace_SQLColAttributes (TRACE_ENTER, statementHandle, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc)); retcode = SQLColAttributes_Internal ( statementHandle, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc, 'A'); LEAVE_STMT (statementHandle, trace_SQLColAttributes (TRACE_LEAVE, statementHandle, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc)); } RETCODE SQL_API SQLColAttributesW ( SQLHSTMT statementHandle, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLLEN * pfDesc) { ENTER_STMT (statementHandle, trace_SQLColAttributesW (TRACE_ENTER, statementHandle, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc)); retcode = SQLColAttributes_Internal ( statementHandle, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc, 'W'); LEAVE_STMT (statementHandle, trace_SQLColAttributesW (TRACE_LEAVE, statementHandle, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc)); } #endif libiodbc-3.52.9/iodbc/connect.c0000644000076400007640000025670612323210535013203 00000000000000/* * connect.c * * $Id$ * * Connect (load) driver * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) #include #endif #include "misc.h" #include "iodbc_misc.h" /* * Identification strings */ static char sccsid[] = "@(#)iODBC driver manager " VERSION "\n"; char *iodbc_version = VERSION; /* * Prototypes */ extern SQLRETURN _iodbcdm_driverunload (HDBC hdbc, int ver); extern SQLRETURN SQL_API _iodbcdm_SetConnectOption (SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam, SQLCHAR waMode); #define CHECK_DRVCONN_DIALBOX(path) \ { \ if ((handle = DLL_OPEN(path)) != NULL) \ { \ if (DLL_PROC(handle, "_iodbcdm_drvconn_dialboxw") != NULL) \ { \ DLL_CLOSE(handle); \ retVal = TRUE; \ goto quit; \ } \ else \ { \ if (DLL_PROC(handle, "_iodbcdm_drvconn_dialbox") != NULL) \ { \ DLL_CLOSE(handle); \ retVal = TRUE; \ goto quit; \ } \ } \ DLL_CLOSE(handle); \ } \ } static BOOL _iodbcdm_CheckDriverLoginDlg ( LPSTR drv, LPSTR dsn ) { char tokenstr[4096]; char drvbuf[4096] = { L'\0'}; HDLL handle; BOOL retVal = FALSE; /* Check if the driver is provided */ if (drv == NULL) { SQLSetConfigMode (ODBC_BOTH_DSN); SQLGetPrivateProfileString ("ODBC Data Sources", dsn && dsn[0] != '\0' ? dsn : "Default", "", tokenstr, sizeof (tokenstr), NULL); drv = tokenstr; } /* Call the iodbcdm_drvconn_dialbox */ SQLSetConfigMode (ODBC_USER_DSN); if (!access (drv, X_OK)) { CHECK_DRVCONN_DIALBOX (drv); } if (SQLGetPrivateProfileString (drv, "Driver", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } if (SQLGetPrivateProfileString (drv, "Setup", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } if (SQLGetPrivateProfileString ("Default", "Driver", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } if (SQLGetPrivateProfileString ("Default", "Setup", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } SQLSetConfigMode (ODBC_SYSTEM_DSN); if (!access (drv, X_OK)) { CHECK_DRVCONN_DIALBOX (drv); } if (SQLGetPrivateProfileString (drv, "Driver", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } if (SQLGetPrivateProfileString (drv, "Setup", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } if (SQLGetPrivateProfileString ("Default", "Driver", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } if (SQLGetPrivateProfileString ("Default", "Setup", "", drvbuf, sizeof (drvbuf), "odbcinst.ini")) { CHECK_DRVCONN_DIALBOX (drvbuf); } quit: return retVal; } #define RETURN(_ret) \ do { \ retcode = _ret; \ goto end; \ } while (0) #if 0 #define DPRINTF(a) fprintf a #else #define DPRINTF(a) #endif static SQLRETURN _iodbcdm_SetConnectOption_init ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam, UCHAR waMode) { CONN (pdbc, hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; int retinfo = 0; SQLINTEGER strLength = 0; void *ptr = (void *) vParam; void *_vParam = NULL; if (fOption >= 1000) { retinfo = 1; /* Change SQL_ERROR -> SQL_SUCCESS_WITH_INFO */ } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { switch (fOption) { case SQL_ATTR_TRACEFILE: case SQL_CURRENT_QUALIFIER: case SQL_TRANSLATE_DLL: case SQL_APPLICATION_NAME: case SQL_COPT_SS_ENLIST_IN_DTC: case SQL_COPT_SS_PERF_QUERY_LOG: case SQL_COPT_SS_PERF_DATA_LOG: case SQL_CURRENT_SCHEMA: if (waMode != 'W') { /* ansi=>unicode*/ _vParam = dm_SQL_A2W((SQLCHAR *)vParam, SQL_NTS); } else { /* unicode=>ansi*/ _vParam = dm_SQL_W2A((SQLWCHAR *)vParam, SQL_NTS); } ptr = _vParam; strLength = SQL_NTS; break; } } if (penv->unicode_driver) { /* SQL_XXX_W */ if ((hproc = _iodbcdm_getproc (pdbc, en_SetConnectOptionW)) != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, pdbc, retcode, hproc, (pdbc->dhdbc, fOption, ptr)); } #if (ODBCVER >= 0x300) else if ((hproc = _iodbcdm_getproc (pdbc, en_SetConnectAttrW)) != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, pdbc, retcode, hproc, (pdbc->dhdbc, fOption, ptr, strLength)); } #endif } else { /* SQL_XXX */ /* SQL_XXX_A */ if ((hproc = _iodbcdm_getproc (pdbc, en_SetConnectOption)) != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, pdbc, retcode, hproc, (pdbc->dhdbc, fOption, vParam)); } else if ((hproc = _iodbcdm_getproc (pdbc, en_SetConnectOptionA)) != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, pdbc, retcode, hproc, (pdbc->dhdbc, fOption, vParam)); } #if (ODBCVER >= 0x300) else if ((hproc = _iodbcdm_getproc (pdbc, en_SetConnectAttr)) != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, pdbc, retcode, hproc, (pdbc->dhdbc, fOption, vParam, strLength)); } else if ((hproc = _iodbcdm_getproc (pdbc, en_SetConnectAttrA)) != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, pdbc, retcode, hproc, (pdbc->dhdbc, fOption, vParam, strLength)); } #endif } MEM_FREE(_vParam); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pdbc->herr, en_IM004); return SQL_SUCCESS_WITH_INFO; } if (retcode != SQL_SUCCESS && retinfo) return SQL_SUCCESS_WITH_INFO; return retcode; } static SQLRETURN _iodbcdm_getInfo_init (SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue, SQLCHAR waMode) { CONN (pdbc, hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; waMode = waMode; /*UNUSED*/ switch(fInfoType) { case SQL_CURSOR_COMMIT_BEHAVIOR: case SQL_CURSOR_ROLLBACK_BEHAVIOR: break; default: return SQL_ERROR; } CALL_UDRIVER(hdbc, pdbc, retcode, hproc, penv->unicode_driver, en_GetInfo, ( pdbc->dhdbc, fInfoType, rgbInfoValue, cbInfoValueMax, pcbInfoValue)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pdbc->herr, en_IM004); return SQL_SUCCESS_WITH_INFO; } return retcode; } static SQLRETURN _iodbcdm_finish_disconnect (HDBC hdbc, BOOL driver_disconnect) { CONN (pdbc, hdbc); HPROC hproc = SQL_NULL_HPROC; DPRINTF ((stderr, "DEBUG: _iodbcdm_finish_disconnect (conn %p, driver_disconnect %d)\n", hdbc, driver_disconnect)); if (driver_disconnect) { SQLRETURN retcode; hproc = _iodbcdm_getproc (pdbc, en_Disconnect); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pdbc->herr, en_IM001); return SQL_ERROR; } ODBC_UNLOCK (); CALL_DRIVER (hdbc, pdbc, retcode, hproc, (pdbc->dhdbc)); ODBC_LOCK (); if (!SQL_SUCCEEDED (retcode)) { /* diff from MS specs. We disallow * driver SQLDisconnect() return * SQL_SUCCESS_WITH_INFO and post * error message. */ return retcode; } } /* free all statement handle(s) on this connection */ while (pdbc->hstmt != NULL) _iodbcdm_dropstmt (pdbc->hstmt); /* state transition */ pdbc->state = en_dbc_allocated; return SQL_SUCCESS; } #if (ODBCVER >= 0x300) /* * Set Retry Wait timeout */ static void _iodbcdm_pool_set_retry_wait (HDBC hdbc) { CONN (pdbc, hdbc); int retry_wait = 0; char buf[1024]; /* Get the "Retry Wait" keyword value from the Pooling section */ SQLSetConfigMode (ODBC_BOTH_DSN); if (SQLGetPrivateProfileString ("ODBC Connection Pooling", "Retry Wait", "", buf, sizeof (buf), "odbcinst.ini") != 0 && buf[0] != '\0') retry_wait = atoi(buf); DPRINTF ((stderr, "DEBUG: setting RetryWait %d (conn %p)\n", retry_wait, hdbc)); pdbc->cp_retry_wait = time(NULL) + retry_wait; } extern SQLRETURN SQLFreeConnect_Internal (SQLHDBC hdbc); /* * Drop connection from the pool */ void _iodbcdm_pool_drop_conn (HDBC hdbc, HDBC hdbc_prev) { CONN (pdbc, hdbc); CONN (pdbc_prev, hdbc_prev); assert (!pdbc->cp_in_use); DPRINTF ((stderr, "DEBUG: dropping connection %p (prev %p) from the pool\n", hdbc, hdbc_prev)); /* remove from pool */ if (pdbc_prev != NULL) pdbc_prev->next = pdbc->next; else { GENV (genv, pdbc->genv); genv->pdbc_pool = pdbc->next; } /* finish disconnect and free connection */ _iodbcdm_finish_disconnect (hdbc, TRUE); SQLFreeConnect_Internal (hdbc); MEM_FREE (hdbc); } /* * Copy connection parameters from src to dst and reset src parameters * so that src can be correctly freed by SQLDisconnect. */ static void _iodbcdm_pool_copy_conn (HDBC hdbc_dst, HDBC hdbc_src) { CONN (pdbc_dst, hdbc_dst); CONN (pdbc_src, hdbc_src); HDBC next; time_t cp_timeout, cp_expiry_time; /* Preserve `next', `cp_timeout' and `cp_expiry_time' */ next = pdbc_dst->next; cp_timeout = pdbc_dst->cp_timeout; cp_expiry_time = pdbc_dst->cp_expiry_time; *pdbc_dst = *pdbc_src; pdbc_dst->next = next; pdbc_dst->cp_timeout = cp_timeout; pdbc_dst->cp_expiry_time = cp_expiry_time; /* Reset parameters of source connection */ pdbc_src->herr = SQL_NULL_HERR; pdbc_src->dhdbc = SQL_NULL_HDBC; pdbc_src->henv = SQL_NULL_HENV; pdbc_src->hstmt = SQL_NULL_HSTMT; pdbc_src->hdesc = SQL_NULL_HDESC; pdbc_src->current_qualifier = NULL; pdbc_src->drvopt = NULL; pdbc_src->cp_probe = NULL; pdbc_src->cp_dsn = NULL; pdbc_src->cp_uid = NULL; pdbc_src->cp_pwd = NULL; pdbc_src->cp_connstr = NULL; } /* * Check if attributes of two connections match */ static BOOL _iodbcdm_pool_check_attr_match (HDBC hdbc, HDBC cp_hdbc) { CONN (pdbc, hdbc); GENV (genv, pdbc->genv); CONN (cp_pdbc, cp_hdbc); BOOL strict_match = (genv->cp_match == SQL_CP_STRICT_MATCH); DPRINTF ((stderr, "DEBUG: check attr match (conn %p, cp_conn %p)\n", hdbc, cp_hdbc)); /* * Check attrs that must be set before connection has been made: * - SQL_ATTR_PACKET_SIZE (packet_size) * - SQL_ATTR_ODBC_CURSORS (odbc_cursors) * * SQL_ATTR_PACKET_SIZE can be different if !strict_match. * The value of SQL_ATTR_LOGIN_TIMEOUT is not examined. */ if (strict_match && pdbc->packet_size != cp_pdbc->packet_size) { DPRINTF ((stderr, "DEBUG: packet_size does not match (conn %p, cp_conn %p, strict_match %d)", hdbc, cp_hdbc, strict_match)); return FALSE; } if (pdbc->odbc_cursors != cp_pdbc->odbc_cursors) { DPRINTF ((stderr, "DEBUG: odbc_cursors does not match (conn %p, cp_conn %p, strict_match %d)", hdbc, cp_hdbc, strict_match)); return FALSE; } /* * Check attrs that must be set either before or after the connection * has been made: * - SQL_ATTR_ACCESS_MODE (access_mode, default SQL_MODE_DEFAULT) * - SQL_ATTR_AUTOCOMMIT (autocommit, default SQL_AUTOCOMMIT_DEFAULT) * - SQL_ATTR_CURRENT_CATALOG (current_qualifier) * - SQL_ATTR_QUIET_MODE (quiet_mode) * - SQL_ATTR_TXN_ISOLATION (txn_isolation, default SQL_TXN_READ_UNCOMMITTED) * * If an attr is not set by the application but set in the pool: * - if there is a default, an attr is reset to the default value * (see _iodbcdm_pool_reset_conn_attrs()). * - if there is no default value, pooled connection is not considered * a match * * If an attr is set by the application, this value overrides the * value from the pool. */ if (pdbc->current_qualifier == NULL && cp_pdbc->current_qualifier != NULL) { /* has not been set by application, but set in the pool */ DPRINTF ((stderr, "DEBUG: current_qualifier has not been set by application, but is set in the pool (conn %p, cp_conn %p)", hdbc, cp_hdbc)); return FALSE; } if (pdbc->quiet_mode == 0 && cp_pdbc->quiet_mode != 0) { /* has not been set by application, but set in the pool */ DPRINTF ((stderr, "DEBUG: quiet_mode has not been set by application, but is set in the pool (conn %p, cp_conn %p)", hdbc, cp_hdbc)); return FALSE; } return TRUE; } /* * Reset connection attributes to the default values (if an attr is not set * by application and there is a default) or to the value set by application. */ SQLRETURN _iodbcdm_pool_reset_conn_attrs (SQLHDBC hdbc, SQLHDBC cp_hdbc) { CONN (pdbc, hdbc); CONN (cp_pdbc, cp_hdbc); SQLRETURN retcode = SQL_SUCCESS; SQLRETURN ret; if (pdbc->access_mode != cp_pdbc->access_mode) { cp_pdbc->access_mode = pdbc->access_mode; ret = _iodbcdm_SetConnectOption_init ( cp_pdbc, SQL_ACCESS_MODE, cp_pdbc->access_mode, 'A'); retcode |= ret; } if (pdbc->autocommit != cp_pdbc->autocommit) { cp_pdbc->autocommit = pdbc->autocommit; ret = _iodbcdm_SetConnectOption_init ( cp_pdbc, SQL_AUTOCOMMIT, cp_pdbc->autocommit, 'A'); retcode |= ret; } if (pdbc->current_qualifier != NULL) { if (cp_pdbc->current_qualifier != NULL) MEM_FREE (cp_pdbc->current_qualifier); cp_pdbc->current_qualifier = pdbc->current_qualifier; pdbc->current_qualifier = NULL; cp_pdbc->current_qualifier_WA = pdbc->current_qualifier_WA; ret = _iodbcdm_SetConnectOption_init ( cp_pdbc, SQL_CURRENT_QUALIFIER, (SQLULEN) cp_pdbc->current_qualifier, cp_pdbc->current_qualifier_WA); retcode |= ret; } if (cp_pdbc->quiet_mode != pdbc->quiet_mode) { cp_pdbc->quiet_mode = pdbc->quiet_mode; ret = _iodbcdm_SetConnectOption_init ( cp_pdbc, SQL_QUIET_MODE, cp_pdbc->quiet_mode, 'A'); retcode |= ret; } if (pdbc->txn_isolation != cp_pdbc->txn_isolation) { cp_pdbc->txn_isolation = pdbc->txn_isolation; ret = _iodbcdm_SetConnectOption_init ( cp_pdbc, SQL_TXN_ISOLATION, cp_pdbc->txn_isolation, 'A'); retcode |= ret; } return retcode; } extern SQLRETURN SQLAllocStmt_Internal (SQLHDBC hdbc, SQLHSTMT *phstmt); extern SQLRETURN SQLFreeStmt_Internal (SQLHSTMT hstmt, SQLUSMALLINT fOption); extern SQLRETURN SQL_API SQLExecDirect_Internal (SQLHSTMT hstmt, SQLPOINTER szSqlStr, SQLINTEGER cbSqlStr, SQLCHAR waMode); extern SQLRETURN SQLFetch_Internal (SQLHSTMT hstmt); /* * Execute CPProbe statement to check if connection is dead */ static SQLRETURN _iodbcdm_pool_exec_cpprobe (HDBC hdbc, char *cp_probe) { HSTMT hstmt = SQL_NULL_HSTMT; SQLRETURN retcode; SQLSMALLINT num_cols; DPRINTF ((stderr, "DEBUG: executing CPProbe (conn %p, stmt [%s])\n", hdbc, cp_probe)); /* allocate statement handle */ retcode = SQLAllocStmt_Internal (hdbc, &hstmt); if (!SQL_SUCCEEDED (retcode)) RETURN (retcode); /* execute statement */ retcode = SQLExecDirect_Internal (hstmt, cp_probe, SQL_NTS, 'A'); if (!SQL_SUCCEEDED (retcode)) RETURN (retcode); /* check that there is a result set */ retcode = _iodbcdm_NumResultCols (hstmt, &num_cols); if (!SQL_SUCCEEDED (retcode)) RETURN (retcode); /* if there was no result set -- success */ if (num_cols == 0) RETURN (SQL_SUCCESS); /* fetch results */ do { retcode = SQLFetch_Internal (hstmt); if (!SQL_SUCCEEDED (retcode)) RETURN (retcode); } while (retcode != SQL_NO_DATA); /* success */ RETURN (SQL_SUCCESS); end: if (hstmt != SQL_NULL_HSTMT) SQLFreeStmt_Internal (hstmt, SQL_DROP); return retcode; } /* * Check if connection is dead */ static BOOL _iodbcdm_pool_conn_dead (HDBC hdbc) { CONN (pdbc, hdbc); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode; SQLINTEGER attr_dead; DPRINTF ((stderr, "DEBUG: checking if connection is dead (conn %p)\n", hdbc)); /* first try SQLGetConnectAttr */ CALL_UDRIVER(pdbc, pdbc, retcode, hproc, 'A', en_GetConnectAttr, (pdbc->dhdbc, SQL_ATTR_CONNECTION_DEAD, &attr_dead, 0, NULL)); if (hproc != SQL_NULL_HPROC && SQL_SUCCEEDED (retcode)) { DPRINTF ((stderr, "DEBUG: GetConnectAttr: attr_dead = %ld (conn %p)\n", attr_dead, hdbc)); return attr_dead == SQL_CD_TRUE; } /* try SQLGetConnectOption */ CALL_UDRIVER(pdbc, pdbc, retcode, hproc, 'A', en_GetConnectOption, (pdbc->dhdbc, SQL_ATTR_CONNECTION_DEAD, &attr_dead)); if (hproc != SQL_NULL_HPROC && SQL_SUCCEEDED (retcode)) { DPRINTF ((stderr, "DEBUG: GetConnectOption: attr_dead = %ld (conn %p)\n", attr_dead, hdbc)); return attr_dead == SQL_CD_TRUE; } /* try CPProbe statement */ if (pdbc->cp_probe != NULL && STRLEN(pdbc->cp_probe) > 0) { retcode = _iodbcdm_pool_exec_cpprobe (pdbc, pdbc->cp_probe); return SQL_SUCCEEDED (retcode); } /* don't know, assume it is alive */ return FALSE; } /* * Get the connection from to the pool * * Returns 0 if the connection was put successfully * Returns -1 otherwise */ static SQLRETURN _iodbcdm_pool_get_conn ( HDBC hdbc, char *dsn, char *uid, char *pwd, char *connstr) { CONN (pdbc, hdbc); GENV (genv, pdbc->genv); DBC_t *cp_pdbc, *cp_pdbc_next, *cp_pdbc_prev = NULL; time_t current_time; DPRINTF ((stderr, "DEBUG: getting connection %p from the pool (dsn [%s], uid [%s], pwd [%s], connstr [%s])\n", hdbc, dsn, uid, pwd, connstr)); current_time = time(NULL); for (cp_pdbc = genv->pdbc_pool; cp_pdbc != NULL; cp_pdbc_prev = cp_pdbc, cp_pdbc = cp_pdbc_next) { SQLRETURN retcode; cp_pdbc_next = cp_pdbc->next; /* skip connections in use */ if (cp_pdbc->cp_in_use) { DPRINTF ((stderr, "DEBUG: skipping connection %p (in use)\n", cp_pdbc)); continue; } /* * Check that pooled connection timeout has not expired */ if (current_time >= cp_pdbc->cp_expiry_time) { DPRINTF ((stderr, "DEBUG: connection %p expired (cp_expiry_time %d, current_time %d)\n", cp_pdbc, cp_pdbc->cp_expiry_time, current_time)); _iodbcdm_pool_drop_conn (cp_pdbc, cp_pdbc_prev); cp_pdbc = cp_pdbc_prev; continue; } /* * Check that requested dsn, uid, pwd and connstr match * pooled connection */ if (dsn != NULL) { if (cp_pdbc->cp_dsn == NULL || strcmp (dsn, cp_pdbc->cp_dsn) != 0) continue; } else if (cp_pdbc->cp_dsn != NULL) continue; if (uid != NULL) { if (cp_pdbc->cp_uid == NULL || strcmp (uid, cp_pdbc->cp_uid) != 0) continue; } else if (cp_pdbc->cp_uid != NULL) continue; if (pwd != NULL) { if (cp_pdbc->cp_pwd == NULL || strcmp (pwd, cp_pdbc->cp_pwd) != 0) continue; } else if (cp_pdbc->cp_pwd != NULL) continue; if (connstr != NULL) { if (cp_pdbc->cp_connstr == NULL || strcmp (connstr, cp_pdbc->cp_connstr) != 0) continue; } else if (cp_pdbc->cp_connstr != NULL) continue; DPRINTF ((stderr, "DEBUG: found matching pooled connection %p\n", cp_pdbc)); /* check that connection attributes match */ if (!_iodbcdm_pool_check_attr_match (pdbc, cp_pdbc)) continue; /* * Match found! */ /* * Check Retry Wait timeout */ if (cp_pdbc->cp_retry_wait != 0) { if (current_time < cp_pdbc->cp_retry_wait) { /* Retry Wait timeout has not expired yet */ DPRINTF ((stderr, "DEBUG: RetryWait timeout has not expired yet (cp_pdbc %p, cp_retry_wait %d, current_time %d)\n", cp_pdbc, cp_pdbc->cp_retry_wait, current_time)); /* remember matching pooled connection */ pdbc->cp_pdbc = cp_pdbc; return SQL_ERROR; } DPRINTF ((stderr, "DEBUG: RetryWait timeout reset (cp_pdbc %p)\n", cp_pdbc)); /* reset Retry Wait timeout */ cp_pdbc->cp_retry_wait = 0; } /* * Check if connection is dead */ if (_iodbcdm_pool_conn_dead (cp_pdbc)) { /* Connection is dead -- try to reconnect */ DPRINTF ((stderr, "DEBUG: pooled connection is dead (cp_pdbc %p)\n", cp_pdbc)); /* remember matching pooled connection */ pdbc->cp_pdbc = cp_pdbc; cp_pdbc->cp_in_use = TRUE; return SQL_ERROR; } /* reset connection attrs */ retcode = _iodbcdm_pool_reset_conn_attrs (pdbc, cp_pdbc); if (retcode != SQL_SUCCESS) retcode = SQL_SUCCESS_WITH_INFO; /* copy parameters */ _iodbcdm_pool_copy_conn (pdbc, cp_pdbc); /* remember matching pooled connection */ pdbc->cp_pdbc = cp_pdbc; cp_pdbc->cp_in_use = TRUE; DPRINTF ((stderr, "DEBUG: got connection from the pool (cp_pdbc %p)\n", cp_pdbc)); /* found a connection in a pool */ return retcode; } DPRINTF ((stderr, "DEBUG: no matching connection in the pool\n")); /* can't find a connection in a pool */ return SQL_ERROR; } /* * Put the connection back to the pool * * Return 0 if the connection was put successfully * Return -1 otherwise */ static int _iodbcdm_pool_put_conn (HDBC hdbc) { CONN (pdbc, hdbc); GENV (genv, NULL); DBC_t *cp_pdbc = pdbc->cp_pdbc; DPRINTF ((stderr, "DEBUG: putting connection back to the pool (conn %p, dsn [%s], uid [%s], pwd [%s], connstr [%s])\n", hdbc, pdbc->cp_dsn, pdbc->cp_uid, pdbc->cp_pwd, pdbc->cp_connstr)); if (cp_pdbc == NULL) { cp_pdbc = (DBC_t *) MEM_ALLOC (sizeof (DBC_t)); if (cp_pdbc == NULL) { return -1; } /* put to the pool */ genv = (GENV_t *) pdbc->genv; cp_pdbc->next = genv->pdbc_pool; genv->pdbc_pool = cp_pdbc; cp_pdbc->cp_timeout = pdbc->cp_timeout; DPRINTF ((stderr, "DEBUG: new pooled connection %p\n", cp_pdbc)); } /* copy out parameters */ _iodbcdm_pool_copy_conn(cp_pdbc, pdbc); pdbc->cp_pdbc = NULL; /* free all statement handle(s) on connection in pool */ while (cp_pdbc->hstmt != NULL) _iodbcdm_dropstmt (cp_pdbc->hstmt); /* set expiration time and other parameters for connection in pool */ cp_pdbc->cp_pdbc = NULL; if (cp_pdbc->cp_retry_wait == 0) { /* set new expiry time only if we are not returning the connection to the pool after unsuccessful reconnect attempt */ cp_pdbc->cp_expiry_time = time(NULL) + cp_pdbc->cp_timeout; } cp_pdbc->cp_in_use = FALSE; DPRINTF ((stderr, "DEBUG: connection %p put back to the pool (cp_pdbc %p, cp_timeout %d)\n", hdbc, cp_pdbc, cp_pdbc->cp_timeout)); return 0; } #endif /* (ODBCVER >= 0x300) */ /* - Load driver share library( or increase its reference count * if it has already been loaded by another active connection) * - Call driver's SQLAllocEnv() (for the first reference only) * - Call driver's SQLAllocConnect() * - Call driver's SQLSetConnectOption() (set login time out) * - Increase the bookkeeping reference count */ SQLRETURN _iodbcdm_driverload ( char * dsn, char * drv, HDBC hdbc, SWORD thread_safe, SWORD unload_safe, UCHAR waMode) { CONN (pdbc, hdbc); ENVR (penv, NULL); GENV (genv, NULL); HDLL hdll = SQL_NULL_HDLL; HPROC hproc; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; char buf[1024]; char path_tmp[1024]; char *path = drv; char cp_probe[1024] = {""}; int cp_timeout = 0; void *pfaux; if (drv == NULL || ((char*)drv)[0] == '\0') { PUSHSQLERR (pdbc->herr, en_IM002); return SQL_ERROR; } if (!IS_VALID_HDBC (pdbc) || pdbc->genv == SQL_NULL_HENV) { return SQL_INVALID_HANDLE; } /* * If drv does not start with / or ., we may have a symbolic driver name */ if (!(drv[0] == '/' || drv[0] == '.')) { char *tmp_drv = NULL; /* * Remove curly braces */ if (drv[0] == '{') { tmp_drv = strdup (drv); if (tmp_drv[strlen (drv) - 1] == '}') tmp_drv[strlen (drv) - 1] = '\0'; drv = &tmp_drv[1]; } /* * Hopefully the driver was registered under that name in the * odbcinst.ini file */ if (SQLGetPrivateProfileString ((char *) drv, "Driver", "", path_tmp, sizeof (path_tmp), "odbcinst.ini") && path_tmp[0]) path = path_tmp; /* * Get CPTimeout value */ SQLSetConfigMode (ODBC_BOTH_DSN); if (SQLGetPrivateProfileString (drv, "CPTimeout", "", buf, sizeof(buf), "odbcinst.ini") && buf[0]) cp_timeout = atoi(buf); /* * Get CPProbe value */ SQLGetPrivateProfileString (drv, "CPProbe", "", cp_probe, sizeof(cp_probe), "odbcinst.ini"); if (tmp_drv) free (tmp_drv); } else if (dsn != NULL && *dsn != '\0') { char tmp_drv[1024] = {""}; SQLSetConfigMode (ODBC_BOTH_DSN); if (SQLGetPrivateProfileString ("ODBC Data Sources", dsn, "", tmp_drv, sizeof(tmp_drv), NULL) && tmp_drv[0]) { /* * Get CPTimeout value */ if (SQLGetPrivateProfileString (tmp_drv, "CPTimeout", "", buf, sizeof(buf), "odbcinst.ini") && buf[0]) cp_timeout = atoi(buf); /* * Get CPProbe value */ SQLGetPrivateProfileString (tmp_drv, "CPProbe", "", cp_probe, sizeof(cp_probe), "odbcinst.ini"); } } genv = (GENV_t *) pdbc->genv; /* This will either load the driver dll or increase its reference count */ hdll = _iodbcdm_dllopen ((char *) path); /* Set flag if it is safe to unload the driver after use */ if (unload_safe) _iodbcdm_safe_unload (hdll); if (hdll == SQL_NULL_HDLL) { PUSHSYSERR (pdbc->herr, _iodbcdm_dllerror ()); PUSHSQLERR (pdbc->herr, en_IM003); return SQL_ERROR; } penv = (ENV_t *) (pdbc->henv); if (penv != NULL) { if (penv->hdll != hdll) { _iodbcdm_driverunload (hdbc, 3); penv->hdll = hdll; } else { /* * this will not unload the driver but only decrease its internal * reference count */ _iodbcdm_dllclose (hdll); } } if (penv == NULL) { /* * find out whether this dll has already been loaded on another * connection */ for (penv = (ENV_t *) genv->henv; penv != NULL; penv = (ENV_t *) penv->next) { if (penv->hdll == hdll) { /* * this will not unload the driver but only decrease its internal * reference count */ _iodbcdm_dllclose (hdll); break; } } if (penv == NULL) /* no connection attaching with this dll */ { int i; /* create a new dll env instance */ penv = (ENV_t *) MEM_ALLOC (sizeof (ENV_t)); if (penv == NULL) { _iodbcdm_dllclose (hdll); PUSHSQLERR (pdbc->herr, en_S1001); return SQL_ERROR; } /* * Initialize array of ODBC functions */ for (i = 0; i < __LAST_API_FUNCTION__; i++) { #if 1 (penv->dllproc_tab)[i] = SQL_NULL_HPROC; #else (penv->dllproc_tab)[i] = _iodbcdm_getproc(pdbc, i); #endif } pdbc->henv = penv; penv->hdll = hdll; /* * If the driver appears not to be thread safe, use a * driver mutex to serialize all calls to this driver */ penv->thread_safe = thread_safe; if (!penv->thread_safe) MUTEX_INIT (penv->drv_lock); penv->unicode_driver = 0; /* * If the driver is Unicode */ pfaux = _iodbcdm_getproc (pdbc, en_ConnectW); if ((pfaux) && (pfaux != (void *)SQLConnectW)) penv->unicode_driver = 1; /* call driver's SQLAllocHandle() or SQLAllocEnv() */ #if (ODBCVER >= 0x0300) hproc = _iodbcdm_getproc (pdbc, en_AllocHandle); if (hproc) { CALL_DRIVER (hdbc, genv, retcode, hproc, (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &(penv->dhenv))); if (SQL_SUCCEEDED (retcode)) { /* * This appears to be an ODBC3 driver * * Try to set the app's requested version */ SQLRETURN save_retcode = retcode; penv->dodbc_ver = SQL_OV_ODBC2; hproc = _iodbcdm_getproc (pdbc, en_SetEnvAttr); if (hproc != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, genv, retcode, hproc, (penv->dhenv, SQL_ATTR_ODBC_VERSION, genv->odbc_ver, 0)); if (retcode == SQL_SUCCESS) penv->dodbc_ver = SQL_OV_ODBC3; } retcode = save_retcode; } } else /* try driver's SQLAllocEnv() */ #endif { hproc = _iodbcdm_getproc (pdbc, en_AllocEnv); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM004; } else { #if (ODBCVER >= 0x0300) penv->dodbc_ver = SQL_OV_ODBC2; #endif CALL_DRIVER (hdbc, genv, retcode, hproc, (&(penv->dhenv))); } } if (retcode == SQL_ERROR) { sqlstat = en_IM004; } if (sqlstat != en_00000) { _iodbcdm_dllclose (hdll); MEM_FREE (penv); PUSHSQLERR (pdbc->herr, en_IM004); return SQL_ERROR; } /* insert into dll env list */ penv->next = (ENV_t *) genv->henv; genv->henv = penv; /* initiate this new env entry */ penv->refcount = 0; /* we will increase it after * driver's SQLAllocConnect() * success */ } pdbc->henv = penv; if (pdbc->dhdbc == SQL_NULL_HDBC) { #if (ODBCVER >= 0x0300) hproc = _iodbcdm_getproc (pdbc, en_AllocHandle); if (hproc) { CALL_DRIVER (hdbc, genv, retcode, hproc, (SQL_HANDLE_DBC, penv->dhenv, &(pdbc->dhdbc))); } else #endif { hproc = _iodbcdm_getproc (pdbc, en_AllocConnect); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM005; } else { CALL_DRIVER (hdbc, genv, retcode, hproc, (penv->dhenv, &(pdbc->dhdbc))); } } if (retcode == SQL_ERROR) { sqlstat = en_IM005; } if (sqlstat != en_00000) { _iodbcdm_driverunload (hdbc, 3); pdbc->dhdbc = SQL_NULL_HDBC; PUSHSQLERR (pdbc->herr, en_IM005); return SQL_ERROR; } } pdbc->henv = penv; penv->refcount++; /* bookkeeping reference count on this driver */ } /* driver's login timeout option must been set before * its SQLConnect() call */ if (pdbc->login_timeout != 0UL) { retcode = _iodbcdm_SetConnectOption_init (hdbc, SQL_LOGIN_TIMEOUT, pdbc->login_timeout, waMode); if (retcode == SQL_ERROR) { PUSHSQLERR (pdbc->herr, en_IM006); return SQL_SUCCESS_WITH_INFO; } } /* * Now set the driver specific options we saved earlier */ if (pdbc->drvopt != NULL) { DRVOPT *popt; for (popt = pdbc->drvopt; popt != NULL; popt = popt->next) { retcode = _iodbcdm_SetConnectOption_init (hdbc, popt->Option, popt->Param, popt->waMode); if (retcode == SQL_ERROR) { PUSHSQLERR (pdbc->herr, en_IM006); return SQL_SUCCESS_WITH_INFO; } } } pdbc->cp_timeout = cp_timeout; pdbc->cp_probe = strdup (cp_probe); return SQL_SUCCESS; } /* - Call driver's SQLFreeConnect() * - Call driver's SQLFreeEnv() ( for the last reference only) * - Unload the share library( or decrease its reference * count if it is not the last reference ) * - decrease bookkeeping reference count * - state transition to allocated */ SQLRETURN _iodbcdm_driverunload (HDBC hdbc, int ver) { CONN (pdbc, hdbc); ENVR (penv, pdbc->henv); GENV (genv, pdbc->genv); ENV_t *tpenv; HPROC hproc2, hproc3; SQLRETURN retcode = SQL_SUCCESS; if (!IS_VALID_HDBC (pdbc)) { return SQL_INVALID_HANDLE; } if (penv == NULL || penv->hdll == SQL_NULL_HDLL || pdbc->dhdbc == SQL_NULL_HDBC) { return SQL_SUCCESS; } /* * When calling from an ODBC 2.x application, we favor the ODBC 2.x call * in the driver if the driver implements both */ hproc2 = _iodbcdm_getproc (pdbc, en_FreeConnect); #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pdbc, en_FreeHandle); if (ver == 3 && hproc2 != SQL_NULL_HPROC && hproc3 != SQL_NULL_HPROC) hproc2 = SQL_NULL_HPROC; #else hproc3 = SQL_NULL_HPROC; #endif if (hproc2 != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, pdbc, retcode, hproc2, (pdbc->dhdbc)); pdbc->dhdbc = SQL_NULL_HDBC; } #if (ODBCVER >= 0x0300) else if (hproc3 != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, pdbc, retcode, hproc3, (SQL_HANDLE_DBC, pdbc->dhdbc)); } #endif penv->refcount--; if (!penv->refcount) /* no other connections still attaching with this driver */ { /* * When calling from an ODBC 2.x application, we favor the ODBC 2.x call * in the driver if the driver implements both */ hproc2 = _iodbcdm_getproc (pdbc, en_FreeEnv); #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pdbc, en_FreeHandle); if (ver == 3 && hproc2 != SQL_NULL_HPROC && hproc3 != SQL_NULL_HPROC) hproc2 = SQL_NULL_HPROC; #else hproc3 = SQL_NULL_HPROC; #endif if (hproc2 != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, genv, retcode, hproc2, (penv->dhenv)); penv->dhenv = SQL_NULL_HENV; } #if (ODBCVER >= 0x0300) else if (hproc3 != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, genv, retcode, hproc3, (SQL_HANDLE_ENV, penv->dhenv)); } #endif _iodbcdm_dllclose (penv->hdll); penv->hdll = SQL_NULL_HDLL; for (tpenv = (ENV_t *) genv->henv; tpenv != NULL; tpenv = (ENV_t *) tpenv->next) { if (tpenv == penv) { genv->henv = penv->next; break; } if (tpenv->next == penv) { tpenv->next = penv->next; break; } } MEM_FREE (penv); } /* pdbc->henv = SQL_NULL_HENV; */ pdbc->hstmt = SQL_NULL_HSTMT; /* pdbc->herr = SQL_NULL_HERR; -- delay to DM's SQLFreeConnect() */ pdbc->dhdbc = SQL_NULL_HDBC; pdbc->state = en_dbc_allocated; /* set connect options to default values */ /********** pdbc->access_mode = SQL_MODE_DEFAULT; pdbc->autocommit = SQL_AUTOCOMMIT_DEFAULT; pdbc->login_timeout = 0UL; **********/ pdbc->odbc_cursors = SQL_CUR_DEFAULT; pdbc->packet_size = 0UL; pdbc->quiet_mode = (UDWORD) NULL; pdbc->txn_isolation = SQL_TXN_READ_UNCOMMITTED; #if (ODBCVER >= 0x0300) if (pdbc->cp_probe != NULL) { MEM_FREE (pdbc->cp_probe); pdbc->cp_probe = NULL; } if (pdbc->cp_dsn != NULL) { MEM_FREE (pdbc->cp_dsn); pdbc->cp_dsn = NULL; } if (pdbc->cp_uid != NULL) { MEM_FREE (pdbc->cp_uid); pdbc->cp_uid = NULL; } if (pdbc->cp_pwd != NULL) { MEM_FREE (pdbc->cp_pwd); pdbc->cp_pwd = NULL; } if (pdbc->cp_connstr != NULL) { MEM_FREE (pdbc->cp_connstr); pdbc->cp_connstr = NULL; } #endif if (pdbc->current_qualifier != NULL) { MEM_FREE (pdbc->current_qualifier); pdbc->current_qualifier = NULL; } return SQL_SUCCESS; } static SQLRETURN _iodbcdm_dbcdelayset (HDBC hdbc, UCHAR waMode) { CONN (pdbc, hdbc); SQLRETURN retcode = SQL_SUCCESS; SQLRETURN ret; if (pdbc->access_mode != SQL_MODE_DEFAULT) { ret = _iodbcdm_SetConnectOption_init (hdbc, SQL_ACCESS_MODE, pdbc->access_mode, waMode); retcode |= ret; } if (pdbc->autocommit != SQL_AUTOCOMMIT_DEFAULT) { ret = _iodbcdm_SetConnectOption_init (hdbc, SQL_AUTOCOMMIT, pdbc->autocommit, waMode); retcode |= ret; } if (pdbc->current_qualifier != NULL) { ret = _iodbcdm_SetConnectOption_init (hdbc, SQL_CURRENT_QUALIFIER, (SQLULEN) pdbc->current_qualifier, pdbc->current_qualifier_WA); retcode |= ret; } if (pdbc->packet_size != 0UL) { ret = _iodbcdm_SetConnectOption_init (hdbc, SQL_PACKET_SIZE, pdbc->packet_size, waMode); retcode |= ret; } if (pdbc->quiet_mode != (UDWORD) NULL) { ret = _iodbcdm_SetConnectOption_init (hdbc, SQL_QUIET_MODE, pdbc->quiet_mode, waMode); retcode |= ret; } if (pdbc->txn_isolation != SQL_TXN_READ_UNCOMMITTED) { ret = _iodbcdm_SetConnectOption_init (hdbc, SQL_TXN_ISOLATION, pdbc->txn_isolation, waMode); retcode |= ret; } /* check error code for driver's SQLSetConnectOption() call */ if (!SQL_SUCCEEDED (retcode)) { PUSHSQLERR (pdbc->herr, en_IM006); retcode = SQL_ERROR; } /* get cursor behavior on transaction commit or rollback */ ret = _iodbcdm_getInfo_init (hdbc, SQL_CURSOR_COMMIT_BEHAVIOR, (PTR) & (pdbc->cb_commit), sizeof (pdbc->cb_commit), NULL, waMode); retcode |= ret; ret = _iodbcdm_getInfo_init (hdbc, SQL_CURSOR_ROLLBACK_BEHAVIOR, (PTR) & (pdbc->cb_rollback), sizeof (pdbc->cb_rollback), NULL, waMode); retcode |= ret; if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) { return SQL_ERROR; } return retcode; } static SQLRETURN _iodbcdm_con_settracing (HDBC hdbc, SQLCHAR *dsn, int dsnlen, UCHAR waMode) { SQLUINTEGER trace = SQL_OPT_TRACE_OFF; char buf[1024]; /* Unused */ hdbc=hdbc; dsnlen=dsnlen; waMode = waMode; /* Get the TraceFile keyword value from the ODBC section */ SQLSetConfigMode (ODBC_BOTH_DSN); if ((SQLGetPrivateProfileString ((char *) dsn, "TraceFile", "", buf, sizeof (buf), "odbc.ini") == 0 || !buf[0])) STRCPY (buf, SQL_OPT_TRACE_FILE_DEFAULT); trace_set_filename (buf); /* UTF-8 */ /* Get the Trace keyword value from the ODBC section */ SQLSetConfigMode (ODBC_BOTH_DSN); if (SQLGetPrivateProfileString ((char *) dsn, "Trace", "", buf, sizeof (buf), "odbc.ini") && (STRCASEEQ (buf, "on") || STRCASEEQ (buf, "yes") || STRCASEEQ (buf, "1"))) { trace = SQL_OPT_TRACE_ON; } /* Set the trace flag now */ if (trace == SQL_OPT_TRACE_ON) trace_start (); return SQL_SUCCESS; } #define CATBUF(buf, str, buf_sz) \ do { \ if (_iodbcdm_strlcat (buf, str, buf_sz) >= buf_sz) \ return -1; \ } while (0) /* * Merge the contents of .dsn file into config */ static int _iodbcdm_cfg_merge_filedsn (PCONFIG pconfig, const char *filedsn, char *buf, size_t buf_sz, int wide) { BOOL override; /* TRUE if params from conn str override params from .dsn file */ WORD len; char *p, *p_next; char entries[1024]; char value[1024]; char drv_value[1024] = {"\0"}; char *tmp = NULL; int rc = 0; /* identify params precedence */ if (SQLReadFileDSN (filedsn, "ODBC", "DRIVER", value, sizeof (value), &len) && len > 0) { /* if DRIVER is the same, then conn str params have precedence */ if (_iodbcdm_cfg_find (pconfig, "ODBC", "DRIVER") == 0 && !strcasecmp (value, pconfig->value)) override = TRUE; else override = FALSE; } else override = TRUE; /* get list of entries in .dsn file */ if (!SQLReadFileDSN (filedsn, "ODBC", NULL, entries, sizeof (entries), &len)) return -1; /* ignore DSN from connection string */ _iodbcdm_cfg_write (pconfig, "ODBC", "DSN", NULL); /* add params from the .dsn file */ for (p = entries; *p != '\0'; p = p_next) { /* get next entry */ p_next = strchr (p, ';'); if (p_next) *p_next++ = '\0'; if ((override || !strcasecmp (p, "DRIVER")) && _iodbcdm_cfg_find (pconfig, "ODBC", p) == 0) { /* skip param because it is specified in connection string */ continue; } if (!SQLReadFileDSN (filedsn, "ODBC", p, value, sizeof(value), &len)) return -1; _iodbcdm_cfg_write (pconfig, "ODBC", p, value); } /* remove FILEDSN from new config */ _iodbcdm_cfg_write (pconfig, "ODBC", "FILEDSN", NULL); if (_iodbcdm_cfg_find (pconfig, "ODBC", "DRIVER") == 0) strncpy(drv_value, pconfig->value, sizeof(drv_value)); /* remove DRIVER from new config */ _iodbcdm_cfg_write (pconfig, "ODBC", "DRIVER", NULL); /* construct new connection string */ if ((rc =_iodbcdm_cfg_to_string (pconfig, "ODBC", buf, buf_sz)) == -1) goto done; tmp = strdup(buf); strncpy(buf, "DRIVER=", buf_sz); CATBUF(buf, drv_value, buf_sz); CATBUF(buf, ";", buf_sz); CATBUF(buf, tmp, buf_sz); MEM_FREE(tmp); if (wide) { SQLWCHAR *_in = dm_SQL_U8toW (buf, SQL_NTS); if (_in == NULL) { rc = -1; goto done; } WCSNCPY (buf, _in, buf_sz / sizeof (SQLWCHAR)); MEM_FREE (_in); } rc = 0; done: if (drv_value[0]) _iodbcdm_cfg_write (pconfig, "ODBC", "DRIVER", drv_value); return rc; } /* * Save connection string into the file */ static int _iodbcdm_cfg_savefile (const char *savefile, void *conn_str, int wide) { int ret = 0; PCONFIG pconfig; BOOL atsection = FALSE; /* parse connection string into pconfig */ if (_iodbcdm_cfg_init_str (&pconfig, conn_str, SQL_NTS, wide) == -1) return -1; /* don't save PWD, FILEDSN and SAVEFILE */ _iodbcdm_cfg_write (pconfig, "ODBC", "PWD", NULL); _iodbcdm_cfg_write (pconfig, "ODBC", "FILEDSN", NULL); _iodbcdm_cfg_write (pconfig, "ODBC", "SAVEFILE", NULL); _iodbcdm_cfg_write (pconfig, "ODBC", "DSN", NULL); /* save the file */ SQLWriteFileDSN (savefile, "ODBC", "DSN", NULL); _iodbcdm_cfg_rewind (pconfig); while (_iodbcdm_cfg_nextentry (pconfig) == 0) { if (atsection) { if (_iodbcdm_cfg_section (pconfig)) { /* found next section -- we're done */ break; } else if (_iodbcdm_cfg_define (pconfig)) { if (!SQLWriteFileDSN (savefile, "ODBC", pconfig->id, pconfig->value)) { ret = -1; break; } } } else if (_iodbcdm_cfg_section (pconfig) && !strcasecmp (pconfig->section, "ODBC")) atsection = TRUE; } _iodbcdm_cfg_done (pconfig); return ret; } static SQLRETURN SQL_API SQLConnect_Internal (SQLHDBC hdbc, SQLPOINTER szDSN, SQLSMALLINT cbDSN, SQLPOINTER szUID, SQLSMALLINT cbUID, SQLPOINTER szAuthStr, SQLSMALLINT cbAuthStr, SQLCHAR waMode) { CONN (pdbc, hdbc); ENVR (penv, NULL); #if (ODBCVER >= 0x300) GENV (genv, NULL); #endif SQLRETURN retcode = SQL_SUCCESS; SQLRETURN setopterr = SQL_SUCCESS; /* MS SDK Guide specifies driver path can't longer than 255. */ char driver[1024] = { '\0' }; char buf[256]; HPROC hproc = SQL_NULL_HPROC; SWORD thread_safe; SWORD unload_safe; void * _szDSN = NULL; void * _szUID = NULL; void * _szAuthStr = NULL; SQLCHAR *_dsn = (SQLCHAR *) szDSN; SQLSMALLINT _dsn_len = cbDSN; /* check arguments */ if ((cbDSN < 0 && cbDSN != SQL_NTS) || (cbUID < 0 && cbUID != SQL_NTS) || (cbAuthStr < 0 && cbAuthStr != SQL_NTS) || (cbDSN > SQL_MAX_DSN_LENGTH)) { PUSHSQLERR (pdbc->herr, en_S1090); RETURN (SQL_ERROR); } if (szDSN == NULL || cbDSN == 0) { PUSHSQLERR (pdbc->herr, en_IM002); RETURN (SQL_ERROR); } /* check state */ if (pdbc->state != en_dbc_allocated) { PUSHSQLERR (pdbc->herr, en_08002); RETURN (SQL_ERROR); } if (waMode == 'W') { _szDSN = (void *) dm_SQL_WtoU8((SQLWCHAR *)szDSN, cbDSN); _dsn = (SQLCHAR *) _szDSN; _dsn_len = SQL_NTS; if (_dsn == NULL) { PUSHSQLERR (pdbc->herr, en_S1001); RETURN (SQL_ERROR); } } /* Get the config mode */ if (_iodbcdm_con_settracing (pdbc, _dsn, _dsn_len, waMode) == SQL_ERROR) RETURN (SQL_ERROR); #if (ODBCVER >= 0x300) genv = (GENV_t *) pdbc->genv; if (genv->connection_pooling != SQL_CP_OFF) { char *_uid = szUID; char *_pwd = szAuthStr; /* * _dsn is already an UTF8 string so * need to convert to UTF8 only szUID and szAuthStr */ if (waMode == 'W') { if (szUID != NULL) { _szUID = (void *) dm_SQL_WtoU8((SQLWCHAR *) szUID, cbUID); if (_szUID == NULL) { PUSHSQLERR (pdbc->herr, en_S1001); RETURN (SQL_ERROR); } } if (szAuthStr != NULL) { _szAuthStr = (void *) dm_SQL_WtoU8( (SQLWCHAR *) szAuthStr, cbAuthStr); if (_szAuthStr == NULL) { PUSHSQLERR (pdbc->herr, en_S1001); RETURN (SQL_ERROR); } } _uid = _szUID; _pwd = _szAuthStr; } retcode = _iodbcdm_pool_get_conn (pdbc, _dsn, _uid, _pwd, NULL); if (SQL_SUCCEEDED (retcode)) { /* * Got connection from the pool */ /* state transition */ pdbc->state = en_dbc_connected; RETURN (retcode); } if (pdbc->cp_pdbc != NULL) { /* * Dead connection was taken from pool */ if (pdbc->cp_pdbc->cp_retry_wait != 0) { /* * Retry Wait timeout has not expired yet */ PUSHSQLERR (pdbc->herr, en_08004); RETURN (SQL_ERROR); } /* * Free connection parameters. */ if (waMode == 'W') { if (_szUID != NULL) { MEM_FREE (_szUID); _szUID = NULL; } if (_szAuthStr != NULL) { MEM_FREE (_szAuthStr); _szAuthStr = NULL; } } } else { /* * Connection was not found in the pool -- * save connection parameters */ if (pdbc->cp_dsn != NULL) MEM_FREE (pdbc->cp_dsn); if (pdbc->cp_uid != NULL) MEM_FREE (pdbc->cp_uid); if (pdbc->cp_pwd != NULL) MEM_FREE (pdbc->cp_pwd); if (waMode == 'W') { pdbc->cp_dsn = _szDSN; _szDSN = NULL; pdbc->cp_uid = _szUID; _szUID = NULL; pdbc->cp_pwd = _szAuthStr; _szAuthStr = NULL; } else { pdbc->cp_dsn = strdup (_dsn); if (pdbc->cp_dsn == NULL) { PUSHSQLERR (pdbc->herr, en_S1001); RETURN (SQL_ERROR); } if (_uid != NULL) { pdbc->cp_uid = strdup (_uid); if (pdbc->cp_uid == NULL) { PUSHSQLERR (pdbc->herr, en_S1001); RETURN (SQL_ERROR); } } if (_pwd != NULL) { pdbc->cp_pwd = strdup (_pwd); if (pdbc->cp_pwd == NULL) { PUSHSQLERR (pdbc->herr, en_S1001); RETURN (SQL_ERROR); } } } } } #endif /* (ODBCVER >= 0x300) */ /* * Check whether driver is thread safe */ thread_safe = 1; /* Assume driver is thread safe */ SQLSetConfigMode (ODBC_BOTH_DSN); if ( SQLGetPrivateProfileString ((char *) _dsn, "ThreadManager", "", buf, sizeof(buf), "odbc.ini") && (STRCASEEQ (buf, "on") || STRCASEEQ (buf, "1"))) { thread_safe = 0; /* Driver needs a thread manager */ } /* * Check if it is safe to unload the driver */ unload_safe = 0; /* Assume driver is not unload safe */ SQLSetConfigMode (ODBC_BOTH_DSN); if ( SQLGetPrivateProfileString ((char *) _dsn, "UnloadSafe", "", buf, sizeof(buf), "odbc.ini") && (STRCASEEQ (buf, "on") || STRCASEEQ (buf, "1"))) { unload_safe = 1; } /* * Get the name of the driver module and load it */ SQLSetConfigMode (ODBC_BOTH_DSN); if ( SQLGetPrivateProfileString ((char *) _dsn, "Driver", "", (char *) driver, sizeof(driver), "odbc.ini") == 0) /* No specified or default dsn section or * no driver specification in this dsn section */ { PUSHSQLERR (pdbc->herr, en_IM002); RETURN (SQL_ERROR); } MEM_FREE(_szDSN); _szDSN = NULL; retcode = _iodbcdm_driverload (_dsn, (char *)driver, pdbc, thread_safe, unload_safe, waMode); switch (retcode) { case SQL_SUCCESS: break; case SQL_SUCCESS_WITH_INFO: #if 0 /* * Unsuccessful in calling driver's SQLSetConnectOption() to set * login timeout. */ setopterr = SQL_ERROR; #endif break; default: return retcode; } penv = (ENV_t *) pdbc->henv; if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _szDSN = dm_SQL_A2W((SQLCHAR *)szDSN, cbDSN); _szUID = dm_SQL_A2W((SQLCHAR *)szUID, cbUID); _szAuthStr = dm_SQL_A2W((SQLCHAR *)szAuthStr, cbAuthStr); } else { /* unicode=>ansi*/ _szDSN = dm_SQL_W2A((SQLWCHAR *)szDSN, cbDSN); _szUID = dm_SQL_W2A((SQLWCHAR *)szUID, cbUID); _szAuthStr = dm_SQL_W2A((SQLWCHAR *)szAuthStr, cbAuthStr); } cbDSN = SQL_NTS; cbUID = SQL_NTS; cbAuthStr = SQL_NTS; szDSN = _szDSN; szUID = _szUID; szAuthStr = _szAuthStr; } ODBC_UNLOCK (); CALL_UDRIVER(hdbc, pdbc, retcode, hproc, penv->unicode_driver, en_Connect, ( pdbc->dhdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr)); ODBC_LOCK (); if (hproc == SQL_NULL_HPROC) { _iodbcdm_driverunload (pdbc, 3); PUSHSQLERR (pdbc->herr, en_IM001); RETURN (SQL_ERROR); } if (!SQL_SUCCEEDED (retcode)) { /* not unload driver for retrieve error * message from driver */ /********* _iodbcdm_driverunload( hdbc , 3); **********/ RETURN (retcode); } /* state transition */ pdbc->state = en_dbc_connected; /* do delayed option setting */ setopterr |= _iodbcdm_dbcdelayset (pdbc, waMode); if (setopterr != SQL_SUCCESS) retcode = SQL_SUCCESS_WITH_INFO; end: #if (ODBCVER >= 0x300) if (!SQL_SUCCEEDED (retcode) && pdbc->cp_pdbc != NULL) { int rc; /* * Dead connection was taken from the pool * but reconnection attempt has failed: * set cp_retry_wait time and return connection to the pool. */ _iodbcdm_pool_set_retry_wait (pdbc); rc = _iodbcdm_pool_put_conn (pdbc); assert (rc == 0); } #endif if (_szDSN != NULL) MEM_FREE(_szDSN); if (_szUID != NULL) MEM_FREE (_szUID); if (_szAuthStr != NULL) MEM_FREE (_szAuthStr); return retcode; } SQLRETURN SQL_API SQLConnect ( SQLHDBC hdbc, SQLCHAR * szDSN, SQLSMALLINT cbDSN, SQLCHAR * szUID, SQLSMALLINT cbUID, SQLCHAR * szAuthStr, SQLSMALLINT cbAuthStr) { ENTER_HDBC (hdbc, 1, trace_SQLConnect (TRACE_ENTER, hdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr)); retcode = SQLConnect_Internal ( hdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr, 'A'); LEAVE_HDBC (hdbc, 1, trace_SQLConnect (TRACE_LEAVE, hdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr)); } SQLRETURN SQL_API SQLConnectA ( SQLHDBC hdbc, SQLCHAR * szDSN, SQLSMALLINT cbDSN, SQLCHAR * szUID, SQLSMALLINT cbUID, SQLCHAR * szAuthStr, SQLSMALLINT cbAuthStr) { ENTER_HDBC (hdbc, 1, trace_SQLConnect (TRACE_ENTER, hdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr)); retcode = SQLConnect_Internal ( hdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr, 'A'); LEAVE_HDBC (hdbc, 1, trace_SQLConnect (TRACE_LEAVE, hdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr)); } SQLRETURN SQL_API SQLConnectW (SQLHDBC hdbc, SQLWCHAR * szDSN, SQLSMALLINT cbDSN, SQLWCHAR * szUID, SQLSMALLINT cbUID, SQLWCHAR * szAuthStr, SQLSMALLINT cbAuthStr) { ENTER_HDBC (hdbc, 1, trace_SQLConnectW (TRACE_ENTER, hdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr)); retcode = SQLConnect_Internal ( hdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr, 'W'); LEAVE_HDBC (hdbc, 1, trace_SQLConnectW (TRACE_LEAVE, hdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr)); } SQLRETURN SQL_API SQLDriverConnect_Internal ( SQLHDBC hdbc, SQLHWND hwnd, SQLPOINTER szConnStrIn, SQLSMALLINT cbConnStrIn, SQLPOINTER szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLPOINTER pcbConnStrOut, SQLUSMALLINT fDriverCompletion, SQLCHAR waMode) { CONN (pdbc, hdbc); ENVR (penv, NULL); #if (ODBCVER >= 0x300) GENV (genv, NULL); #endif HDLL hdll; SQLCHAR *drv = NULL; SQLCHAR drvbuf[1024]; SQLCHAR *dsn = NULL; SQLCHAR dsnbuf[SQL_MAX_DSN_LENGTH + 1]; SQLWCHAR prov[2048]; SWORD thread_safe; SWORD unload_safe; SQLCHAR buf[1024]; HPROC hproc = SQL_NULL_HPROC; void *_ConnStrIn = NULL; void *_ConnStrOut = NULL; void *connStrOut = szConnStrOut; void *connStrIn = szConnStrIn; SQLSMALLINT connStrOutMax = cbConnStrOutMax; SQLWCHAR connStrOut_buf[2048]; SQLWCHAR connStrIn_buf[2048]; UWORD config; PCONFIG pconfig = NULL; BOOL bCallDmDlg = FALSE; #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) CFStringRef libname = NULL; CFBundleRef bundle = NULL; CFURLRef liburl = NULL; char name[1024] = { 0 }; #endif SQLCHAR *filedsn = NULL; SQLCHAR *savefile = NULL; HPROC dialproc = SQL_NULL_HPROC; sqlstcode_t sqlstat = en_00000; SQLRETURN retcode = SQL_SUCCESS; SQLRETURN setopterr = SQL_SUCCESS; /* check arguments */ if ((cbConnStrIn < 0 && cbConnStrIn != SQL_NTS) || (cbConnStrOutMax < 0 && cbConnStrOutMax != SQL_NTS)) { PUSHSQLERR (pdbc->herr, en_S1090); RETURN (SQL_ERROR); } /* check state */ if (pdbc->state != en_dbc_allocated) { PUSHSQLERR (pdbc->herr, en_08002); RETURN (SQL_ERROR); } /* Save config mode */ SQLGetConfigMode (&config); if (_iodbcdm_cfg_init_str (&pconfig, connStrIn, cbConnStrIn, waMode == 'W') == -1) { PUSHSQLERR (pdbc->herr, en_HY001); RETURN (SQL_ERROR); } assert (_iodbcdm_cfg_valid(pconfig)); /* lookup and save original SAVEFILE value */ if (_iodbcdm_cfg_find (pconfig, "ODBC", "SAVEFILE") == 0) { savefile = strdup (pconfig->value); if (savefile == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); RETURN (SQL_ERROR); } } #if (ODBCVER >= 0x300) genv = (GENV_t *) pdbc->genv; /* * Try to find pooled connection. * Pooling is disabled if SAVEFILE is present. */ if (genv->connection_pooling != SQL_CP_OFF && savefile == NULL) { char *_connstr = connStrIn; if (fDriverCompletion != SQL_DRIVER_NOPROMPT) { PUSHSQLERR (pdbc->herr, en_HY110); RETURN (SQL_ERROR); } if (waMode == 'W') { _ConnStrIn = dm_SQL_WtoU8((SQLWCHAR *) connStrIn, cbConnStrIn); if (_ConnStrIn == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); RETURN (SQL_ERROR); } _connstr = _ConnStrIn; } retcode = _iodbcdm_pool_get_conn (pdbc, NULL, NULL, NULL, _connstr); if (SQL_SUCCEEDED (retcode)) { /* * Got connection from the pool */ /* copy out connection string */ if (szConnStrOut != NULL) { if (waMode == 'W') { WCSNCPY (szConnStrOut, szConnStrIn, cbConnStrOutMax); *(SQLSMALLINT *) pcbConnStrOut = WCSLEN (szConnStrOut) * sizeof (SQLWCHAR); } else { _iodbcdm_strlcpy (szConnStrOut, szConnStrIn, cbConnStrOutMax); *(SQLSMALLINT *) pcbConnStrOut = strlen (szConnStrOut); } } /* state transition */ pdbc->state = en_dbc_connected; RETURN (retcode); } if (pdbc->cp_pdbc != NULL) { /* * Dead connection was taken from pool */ if (pdbc->cp_pdbc->cp_retry_wait != 0) { /* * Retry Wait timeout has not expired yet */ PUSHSQLERR (pdbc->herr, en_08004); RETURN (SQL_ERROR); } /* * Free connection parameters. */ if (waMode == 'W') { if (_ConnStrIn != NULL) { MEM_FREE (_ConnStrIn); _ConnStrIn = NULL; } } } else { /* * Connection was not found in the pool -- * save connection parameters */ if (pdbc->cp_connstr != NULL) MEM_FREE (pdbc->cp_connstr); if (waMode == 'W') { pdbc->cp_connstr = _ConnStrIn; _ConnStrIn = NULL; } else { pdbc->cp_connstr = strdup (_connstr); if (pdbc->cp_connstr == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); RETURN (SQL_ERROR); } } } } #endif /* (ODBCVER >= 0x300) */ /* always get (even if not requested) out connection string for SAVEFILE */ if (!connStrOut) { connStrOut = connStrOut_buf; connStrOutMax = sizeof(connStrOut_buf); } /* now look for DSN or FILEDSN, whichever comes first */ _iodbcdm_cfg_rewind (pconfig); while (_iodbcdm_cfg_nextentry (pconfig) == 0) { if (!_iodbcdm_cfg_define (pconfig)) continue; if (!strcasecmp(pconfig->id, "DSN")) { /* not a file dsn */ break; } else if (!strcasecmp(pconfig->id, "FILEDSN")) { /* file dsn */ filedsn = strdup (pconfig->value); if (filedsn == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); RETURN (SQL_ERROR); } break; } } /* get connect parameters from .dsn file if requested */ if (filedsn != NULL) { /* merge params from .dsn file */ if (_iodbcdm_cfg_merge_filedsn (pconfig, filedsn, (char *) connStrIn_buf, sizeof (connStrIn_buf), waMode == 'W') == -1) { PUSHSQLERR (pdbc->herr, en_IM015); RETURN (SQL_ERROR); } /* update connection string and its length */ connStrIn = connStrIn_buf; if (cbConnStrIn != SQL_NTS) { if (waMode != 'W') cbConnStrIn = STRLEN (connStrIn); else cbConnStrIn = WCSLEN (connStrIn); } } if (_iodbcdm_cfg_find (pconfig, "ODBC", "DRIVER") == 0) { /* copy because pconfig can be reinitialized later */ _iodbcdm_strlcpy ((char *) drvbuf, pconfig->value, sizeof (drvbuf)); drv = drvbuf; } if (_iodbcdm_cfg_find (pconfig, "ODBC", "DSN") == 0) { /* copy because pconfig can be reinitialized later */ _iodbcdm_strlcpy ((char *) dsnbuf, pconfig->value, sizeof (dsnbuf)); dsn = dsnbuf; } switch (fDriverCompletion) { case SQL_DRIVER_NOPROMPT: /* Check if there's a DSN or DRIVER */ if (!dsn && !drv) { PUSHSQLERR (pdbc->herr, en_IM007); RETURN (SQL_ERROR); } break; case SQL_DRIVER_COMPLETE: case SQL_DRIVER_COMPLETE_REQUIRED: if (dsn != NULL || drv != NULL) { break; } /* fall to next case */ case SQL_DRIVER_PROMPT: /* Get data source dialog box function from * current executable */ /* Not really sure here, but should load that from the iodbcadm */ if (waMode == 'A') _iodbcdm_strlcpy ((char *) prov, connStrIn, sizeof (prov)); else wcsncpy (prov, connStrIn, sizeof (prov) / sizeof (wchar_t)); #if 0 if (!dsn && !drv) bCallDmDlg = TRUE; else if ( _iodbcdm_CheckDriverLoginDlg(drv, dsn) == FALSE) bCallDmDlg = TRUE; /* not call iODBC function "iodbcdm_drvconn_dialbox", if there is * the function "_iodbcdm_drvconn_dialbox" in the odbc driver, * odbc driver must call its function itself */ if (!bCallDmDlg) break; #endif ODBC_UNLOCK (); #if defined (__APPLE__) && !(defined (NO_FRAMEWORKS) || defined (_LP64)) bundle = CFBundleGetBundleWithIdentifier (CFSTR ("org.iodbc.core")); if (bundle) { /* Search for the drvproxy library */ liburl = CFBundleCopyResourceURL (bundle, CFSTR ("iODBCadm.bundle"), NULL, NULL); if (liburl && (libname = CFURLCopyFileSystemPath (liburl, kCFURLPOSIXPathStyle))) { CFStringGetCString (libname, name, sizeof (name), kCFStringEncodingASCII); _iodbcdm_strlcat (name, "/Contents/MacOS/iODBCadm", sizeof (name)); hdll = _iodbcdm_dllopen (name); } if (liburl) CFRelease (liburl); if (libname) CFRelease (libname); } #else hdll = _iodbcdm_dllopen ("libiodbcadm.so.2"); #endif if (!hdll) break; if (waMode != 'W') dialproc = _iodbcdm_dllproc (hdll, "iodbcdm_drvconn_dialbox"); else dialproc = _iodbcdm_dllproc (hdll, "iodbcdm_drvconn_dialboxw"); if (dialproc == SQL_NULL_HPROC) { sqlstat = en_IM008; break; } retcode = dialproc (hwnd, /* window or display handle */ prov, /* input/output dsn buf */ sizeof (prov) / (waMode == 'A' ? 1 : sizeof (SQLWCHAR)), /* buf size */ &sqlstat, /* error code */ fDriverCompletion, /* type of completion */ &config); /* config mode */ ODBC_LOCK (); fDriverCompletion = SQL_DRIVER_NOPROMPT; if (retcode != SQL_SUCCESS) { if (retcode != SQL_NO_DATA_FOUND) PUSHSQLERR (pdbc->herr, sqlstat); goto end; } connStrIn = prov; /* * Recalculate length of connStrIn if needed, as it may have been * changed by iodbcdm_drvconn_dialbox */ if (cbConnStrIn != SQL_NTS) { if (waMode != 'W') cbConnStrIn = STRLEN (connStrIn); else cbConnStrIn = WCSLEN (connStrIn); } if (_iodbcdm_cfg_parse_str (pconfig, connStrIn, cbConnStrIn, waMode == 'W') == -1) { PUSHSQLERR (pdbc->herr, en_HY001); RETURN (SQL_ERROR); } if (_iodbcdm_cfg_find (pconfig, "ODBC", "DSN") == 0) dsn = pconfig->value; if (_iodbcdm_cfg_find (pconfig, "ODBC", "DRIVER") == 0) { /* copy because pconfig can be reinitialized later */ _iodbcdm_strlcpy ((char *) drvbuf, pconfig->value, sizeof (drvbuf)); drv = drvbuf; } break; default: sqlstat = en_S1110; break; } if (sqlstat != en_00000) { PUSHSQLERR (pdbc->herr, sqlstat); RETURN (SQL_ERROR); } if (dsn == NULL || *(char *) dsn == '\0') { dsn = (void *) "default"; } else /* if you want tracing, you must use a DSN */ { setopterr |= _iodbcdm_con_settracing (pdbc, (SQLCHAR *) dsn, SQL_NTS, waMode); } /* * Check whether driver is thread safe */ thread_safe = 1; /* Assume driver is thread safe */ SQLSetConfigMode (ODBC_BOTH_DSN); if (SQLGetPrivateProfileString ((char *) dsn, "ThreadManager", "", buf, sizeof (buf), "odbc.ini") && (STRCASEEQ (buf, "on") || STRCASEEQ (buf, "1"))) { thread_safe = 0; /* Driver needs a thread manager */ } /* * Check whether driver is unload safe */ unload_safe = 0; /* Assume driver is not unload safe */ SQLSetConfigMode (ODBC_BOTH_DSN); if (SQLGetPrivateProfileString ((char *) dsn, "UnloadSafe", "", buf, sizeof (buf), "odbc.ini") && (STRCASEEQ (buf, "on") || STRCASEEQ (buf, "1"))) { unload_safe = 1; } /* * Get the name of the driver module */ if (drv == NULL || *(char *) drv == '\0') { SQLSetConfigMode (ODBC_BOTH_DSN); if (SQLGetPrivateProfileString ((char *) dsn, "Driver", "", (char *) drvbuf, sizeof (drvbuf), "odbc.ini") != 0) { drv = drvbuf; } } if (drv == NULL) { PUSHSQLERR (pdbc->herr, en_IM002); RETURN (SQL_ERROR); } retcode = _iodbcdm_driverload (dsn, (char *) drv, pdbc, thread_safe, unload_safe, waMode); switch (retcode) { case SQL_SUCCESS: break; case SQL_SUCCESS_WITH_INFO: #if 0 /* * Unsuccessful in calling driver's SQLSetConnectOption() to set * login timeout. */ setopterr = SQL_ERROR; #endif break; default: RETURN (retcode); } #if (ODBCVER >= 0x300) /* * Pooling is disabled if SAVEFILE is present. */ if (savefile != NULL) pdbc->cp_timeout = 0; #endif penv = (ENV_t *) pdbc->henv; if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode */ if ((_ConnStrOut = malloc (connStrOutMax * sizeof (SQLWCHAR) + 1)) == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); RETURN (SQL_ERROR); } _ConnStrIn = dm_SQL_A2W ((SQLCHAR *) connStrIn, cbConnStrIn); } else { /* unicode=>ansi */ if ((_ConnStrOut = malloc (connStrOutMax + 1)) == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); RETURN (SQL_ERROR); } _ConnStrIn = dm_SQL_W2A ((SQLWCHAR *) connStrIn, cbConnStrIn); } connStrOut = _ConnStrOut; connStrIn = _ConnStrIn; cbConnStrIn = SQL_NTS; } /* Restore config mode */ SQLSetConfigMode (config); ODBC_UNLOCK (); CALL_UDRIVER (hdbc, pdbc, retcode, hproc, penv->unicode_driver, en_DriverConnect, (pdbc->dhdbc, hwnd, connStrIn, cbConnStrIn, connStrOut, connStrOutMax, pcbConnStrOut, fDriverCompletion)); ODBC_LOCK (); if (hproc == SQL_NULL_HPROC) { _iodbcdm_driverunload (pdbc, 3); PUSHSQLERR (pdbc->herr, en_IM001); RETURN (SQL_ERROR); } if (szConnStrOut && SQL_SUCCEEDED (retcode) && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W'))) { if (waMode != 'W') { /* ansi<=unicode */ dm_StrCopyOut2_W2A ((SQLWCHAR *) connStrOut, (SQLCHAR *) szConnStrOut, cbConnStrOutMax, NULL); } else { /* unicode<=ansi */ dm_StrCopyOut2_A2W ((SQLCHAR *) connStrOut, (SQLWCHAR *) szConnStrOut, cbConnStrOutMax, NULL); } } if (szConnStrOut != NULL) { if (filedsn != NULL) { /* append FILEDSN to the out connection string */ if (waMode == 'W') { SQLWCHAR *_tmp = dm_SQL_U8toW (filedsn, SQL_NTS); if (_tmp == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); RETURN (SQL_ERROR); } WCSNCAT (szConnStrOut, L";FILEDSN=", cbConnStrOutMax); WCSNCAT (szConnStrOut, _tmp, cbConnStrOutMax); MEM_FREE (_tmp); } else { _iodbcdm_strlcat (szConnStrOut, ";FILEDSN=", cbConnStrOutMax); _iodbcdm_strlcat (szConnStrOut, filedsn, cbConnStrOutMax); } } if (savefile != NULL) { /* append SAVEFILE to the out connection string */ if (waMode == 'W') { SQLWCHAR *_tmp = dm_SQL_U8toW (savefile, SQL_NTS); if (_tmp == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); RETURN (SQL_ERROR); } WCSNCAT (szConnStrOut, L";SAVEFILE=", cbConnStrOutMax); WCSNCAT (szConnStrOut, _tmp, cbConnStrOutMax); MEM_FREE (_tmp); } else { _iodbcdm_strlcat (szConnStrOut, ";SAVEFILE=", cbConnStrOutMax); _iodbcdm_strlcat (szConnStrOut, savefile, cbConnStrOutMax); } } /* fixup pcbConnStrOut */ if (waMode == 'W') { *(SQLSMALLINT *) pcbConnStrOut = WCSLEN (szConnStrOut) * sizeof (SQLWCHAR); } else *(SQLSMALLINT *) pcbConnStrOut = strlen (szConnStrOut); } if (!SQL_SUCCEEDED (retcode)) { /* don't unload driver here for retrieve * error message from driver */ /******** _iodbcdm_driverunload( hdbc , 3); *********/ RETURN (retcode); } /* state transition */ pdbc->state = en_dbc_connected; /* do delayed option setting */ setopterr |= _iodbcdm_dbcdelayset (pdbc, waMode); if (setopterr != SQL_SUCCESS) retcode = SQL_SUCCESS_WITH_INFO; /* save .dsn file if requested */ if (savefile != NULL) { assert (connStrOut != NULL); if (_iodbcdm_cfg_savefile (savefile, connStrOut, penv->unicode_driver) == -1) { PUSHSQLERR (pdbc->herr, en_01S08); retcode = SQL_SUCCESS_WITH_INFO; } } end: #if (ODBCVER >= 0x300) if (!SQL_SUCCEEDED (retcode) && pdbc->cp_pdbc != NULL) { int rc; /* * Dead connection was taken from the pool * but reconnection attempt has failed: * set cp_retry_wait time and return connection to the pool. */ _iodbcdm_pool_set_retry_wait (pdbc); rc = _iodbcdm_pool_put_conn (pdbc); assert (rc == 0); } #endif _iodbcdm_cfg_done (pconfig); if (_ConnStrIn != NULL) MEM_FREE (_ConnStrIn); if (_ConnStrOut != NULL) MEM_FREE (_ConnStrOut); if (savefile != NULL) MEM_FREE (savefile); if (filedsn != NULL) MEM_FREE (filedsn); return retcode; } SQLRETURN SQL_API SQLDriverConnect (SQLHDBC hdbc, SQLHWND hwnd, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion) { ENTER_HDBC (hdbc, 1, trace_SQLDriverConnect (TRACE_ENTER, hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion)); retcode = SQLDriverConnect_Internal( hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion, 'A'); LEAVE_HDBC (hdbc, 1, trace_SQLDriverConnect (TRACE_LEAVE, hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion)); } SQLRETURN SQL_API SQLDriverConnectA (SQLHDBC hdbc, SQLHWND hwnd, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion) { ENTER_HDBC (hdbc, 1, trace_SQLDriverConnect (TRACE_ENTER, hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion)); retcode = SQLDriverConnect_Internal( hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion, 'A'); LEAVE_HDBC (hdbc, 1, trace_SQLDriverConnect (TRACE_LEAVE, hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion)); } SQLRETURN SQL_API SQLDriverConnectW (SQLHDBC hdbc, SQLHWND hwnd, SQLWCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLWCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion) { ENTER_HDBC (hdbc, 1, trace_SQLDriverConnectW (TRACE_ENTER, hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion)); retcode = SQLDriverConnect_Internal( hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion, 'W'); LEAVE_HDBC (hdbc, 1, trace_SQLDriverConnectW (TRACE_LEAVE, hdbc, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion)); } SQLRETURN SQL_API SQLBrowseConnect_Internal (SQLHDBC hdbc, SQLPOINTER szConnStrIn, SQLSMALLINT cbConnStrIn, SQLPOINTER szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLCHAR waMode) { CONN (pdbc, hdbc); ENVR (penv, NULL); char buf[1024]; SWORD thread_safe; SWORD unload_safe; HPROC hproc = SQL_NULL_HPROC; void * _ConnStrIn = NULL; void * _ConnStrOut = NULL; void * connStrOut = szConnStrOut; void * connStrIn = szConnStrIn; SQLRETURN retcode = SQL_SUCCESS; SQLRETURN setopterr = SQL_SUCCESS; /* check arguments */ if ((cbConnStrIn < 0 && cbConnStrIn != SQL_NTS) || cbConnStrOutMax < 0) { PUSHSQLERR (pdbc->herr, en_S1090); return SQL_ERROR; } if (pdbc->state == en_dbc_allocated) { PCONFIG pconfig; void *drv = NULL, *dsn = NULL; if (_iodbcdm_cfg_init_str (&pconfig, szConnStrIn, cbConnStrIn, waMode == 'W') == -1) { PUSHSQLERR (pdbc->herr, en_HY001); return SQL_ERROR; } if (_iodbcdm_cfg_find (pconfig, "ODBC", "DRIVER") == 0) drv = pconfig->value; if (_iodbcdm_cfg_find (pconfig, "ODBC", "DSN") == 0) dsn = pconfig->value; if (dsn == NULL || ((char*)dsn)[0] == '\0') dsn = (void *) "default"; else /* if you want tracing, you must use a DSN */ { if (_iodbcdm_con_settracing (pdbc, (SQLCHAR *) dsn, SQL_NTS, waMode) == SQL_ERROR) { _iodbcdm_cfg_done (pconfig); return SQL_ERROR; } } /* * Check whether driver is thread safe */ thread_safe = 1; /* Assume driver is thread safe */ SQLSetConfigMode (ODBC_BOTH_DSN); if ( SQLGetPrivateProfileString ((char *) dsn, "ThreadManager", "", buf, sizeof(buf), "odbc.ini") && (STRCASEEQ (buf, "on") || STRCASEEQ (buf, "1"))) { thread_safe = 0; /* Driver needs a thread manager */ } /* * Check whether driver is unload safe */ unload_safe = 0; /* Assume driver is not unload safe */ SQLSetConfigMode (ODBC_BOTH_DSN); if ( SQLGetPrivateProfileString ((char *) dsn, "ThreadManager", "", buf, sizeof(buf), "odbc.ini") && (STRCASEEQ (buf, "on") || STRCASEEQ (buf, "1"))) { unload_safe = 1; } /* * Get the name of the driver module and load it */ if (drv == NULL || *(char*)drv == '\0') { SQLSetConfigMode (ODBC_BOTH_DSN); if ( SQLGetPrivateProfileString ((char *) dsn, "Driver", "", buf, sizeof(buf), "odbc.ini") != 0) { drv = buf; } } if (drv == NULL) { PUSHSQLERR (pdbc->herr, en_IM002); _iodbcdm_cfg_done (pconfig); return SQL_ERROR; } retcode = _iodbcdm_driverload (dsn, (char *) drv, pdbc, thread_safe, unload_safe, waMode); _iodbcdm_cfg_done (pconfig); switch (retcode) { case SQL_SUCCESS: break; case SQL_SUCCESS_WITH_INFO: #if 0 /* * Unsuccessful in calling driver's SQLSetConnectOption() to set * login timeout. */ setopterr = SQL_ERROR; #endif break; default: return retcode; } } else if (pdbc->state != en_dbc_needdata) { PUSHSQLERR (pdbc->herr, en_08002); return SQL_ERROR; } penv = (ENV_t *) pdbc->henv; if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ if ((_ConnStrOut = malloc((cbConnStrOutMax + 1) * sizeof(SQLWCHAR))) == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); return SQL_ERROR; } _ConnStrIn = dm_SQL_A2W((SQLCHAR *)szConnStrIn, SQL_NTS); } else { /* unicode=>ansi*/ if ((_ConnStrOut = malloc(cbConnStrOutMax + 1)) == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); return SQL_ERROR; } _ConnStrIn = dm_SQL_W2A((SQLWCHAR *)szConnStrIn, SQL_NTS); } connStrIn = _ConnStrIn; cbConnStrIn = SQL_NTS; connStrOut = _ConnStrOut; } ODBC_UNLOCK (); CALL_UDRIVER(hdbc, pdbc, retcode, hproc, penv->unicode_driver, en_BrowseConnect, ( pdbc->dhdbc, connStrIn, cbConnStrIn, connStrOut, cbConnStrOutMax, pcbConnStrOut)); ODBC_LOCK (); MEM_FREE(_ConnStrIn); if (hproc == SQL_NULL_HPROC) { MEM_FREE(_ConnStrOut); _iodbcdm_driverunload (pdbc, 3); pdbc->state = en_dbc_allocated; PUSHSQLERR (pdbc->herr, en_IM001); return SQL_ERROR; } if (szConnStrOut && SQL_SUCCEEDED (retcode) && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W'))) { if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *) connStrOut, (SQLCHAR *) szConnStrOut, cbConnStrOutMax, NULL); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *) connStrOut, (SQLWCHAR *) szConnStrOut, cbConnStrOutMax, NULL); } } MEM_FREE(_ConnStrOut); switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: pdbc->state = en_dbc_connected; setopterr |= _iodbcdm_dbcdelayset (pdbc, waMode); if (setopterr != SQL_SUCCESS) { retcode = SQL_SUCCESS_WITH_INFO; } break; case SQL_NEED_DATA: pdbc->state = en_dbc_needdata; break; case SQL_ERROR: pdbc->state = en_dbc_allocated; /* but the driver will not unloaded * to allow application retrieve err * message from driver */ break; default: break; } return retcode; } SQLRETURN SQL_API SQLBrowseConnect (SQLHDBC hdbc, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut) { ENTER_HDBC (hdbc, 1, trace_SQLBrowseConnect (TRACE_ENTER, hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut)); retcode = SQLBrowseConnect_Internal ( hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, 'A'); LEAVE_HDBC (hdbc, 1, trace_SQLBrowseConnect (TRACE_LEAVE, hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut)); } SQLRETURN SQL_API SQLBrowseConnectA (SQLHDBC hdbc, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut) { ENTER_HDBC (hdbc, 1, trace_SQLBrowseConnect (TRACE_ENTER, hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut)); retcode = SQLBrowseConnect_Internal ( hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, 'A'); LEAVE_HDBC (hdbc, 1, trace_SQLBrowseConnect (TRACE_LEAVE, hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut)); } SQLRETURN SQL_API SQLBrowseConnectW (SQLHDBC hdbc, SQLWCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLWCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut) { ENTER_HDBC (hdbc, 1, trace_SQLBrowseConnectW (TRACE_ENTER, hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut)); retcode = SQLBrowseConnect_Internal ( hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, 'W'); LEAVE_HDBC (hdbc, 1, trace_SQLBrowseConnectW (TRACE_LEAVE, hdbc, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut)); } static SQLRETURN SQLDisconnect_Internal (SQLHDBC hdbc) { CONN (pdbc, hdbc); #if (ODBCVER >= 0x300) GENV (genv, pdbc->genv); #endif STMT (pstmt, NULL); /* check hdbc state */ if (pdbc->state == en_dbc_allocated) { PUSHSQLERR (pdbc->herr, en_08003); return SQL_ERROR; } /* check stmt(s) state */ for (pstmt = (STMT_t *) pdbc->hstmt; pstmt != NULL; pstmt = (STMT_t *) pstmt->next) { if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc) /* In this case one need to call * SQLCancel() first */ { PUSHSQLERR (pdbc->herr, en_S1010); return SQL_ERROR; } } #if (ODBCVER >= 0x300) /* * Try to return the connected connection to the pool if * - connection was taken from the pool * - pooling is enabled and CPTimeout > 0 */ if ((pdbc->state == en_dbc_connected || pdbc->state == en_dbc_hstmt) && (pdbc->cp_pdbc != NULL || (genv->connection_pooling != SQL_CP_OFF && pdbc->cp_timeout > 0))) { if (_iodbcdm_pool_put_conn (pdbc) == 0) { _iodbcdm_finish_disconnect (pdbc, FALSE); return SQL_SUCCESS; } } #endif /* (ODBCVER >= 0x300) */ return _iodbcdm_finish_disconnect (pdbc, TRUE); } SQLRETURN SQL_API SQLDisconnect (SQLHDBC hdbc) { ENTER_HDBC (hdbc, 1, trace_SQLDisconnect (TRACE_ENTER, hdbc)); retcode = SQLDisconnect_Internal (hdbc); LEAVE_HDBC (hdbc, 1, trace_SQLDisconnect (TRACE_LEAVE, hdbc)); } SQLRETURN SQL_API SQLNativeSql_Internal (SQLHDBC hdbc, SQLPOINTER szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLPOINTER szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER * pcbSqlStr, SQLCHAR waMode) { CONN (pdbc, hdbc); ENVR (penv, pdbc->henv); sqlstcode_t sqlstat = en_00000; SQLRETURN retcode = SQL_SUCCESS; HPROC hproc = SQL_NULL_HPROC; void * _SqlStrIn = NULL; void * _SqlStr = NULL; void * sqlStr = szSqlStr; /* check argument */ if (szSqlStrIn == NULL) { sqlstat = en_S1009; } else if (cbSqlStrIn < 0 && cbSqlStrIn != SQL_NTS) { sqlstat = en_S1090; } if (sqlstat != en_00000) { PUSHSQLERR (pdbc->herr, sqlstat); return SQL_ERROR; } /* check state */ if (pdbc->state <= en_dbc_needdata) { PUSHSQLERR (pdbc->herr, en_08003); return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ if ((_SqlStr = malloc(cbSqlStrMax * sizeof(SQLWCHAR) + 1)) == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); return SQL_ERROR; } _SqlStrIn = dm_SQL_A2W((SQLCHAR *)szSqlStrIn, SQL_NTS); } else { /* unicode=>ansi*/ if ((_SqlStr = malloc(cbSqlStrMax + 1)) == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); return SQL_ERROR; } _SqlStrIn = dm_SQL_W2A((SQLWCHAR *)szSqlStrIn, SQL_NTS); } szSqlStrIn = _SqlStrIn; cbSqlStrIn = SQL_NTS; sqlStr = _SqlStr; } /* call driver */ CALL_UDRIVER(hdbc, pdbc, retcode, hproc, penv->unicode_driver, en_NativeSql, ( pdbc->dhdbc, szSqlStrIn, cbSqlStrIn, sqlStr, cbSqlStrMax, pcbSqlStr)); MEM_FREE(_SqlStrIn); if (hproc == SQL_NULL_HPROC) { MEM_FREE(_SqlStr); PUSHSQLERR (pdbc->herr, en_IM001); return SQL_ERROR; } if (szSqlStr && SQL_SUCCEEDED (retcode) && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W'))) { if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *) sqlStr, (SQLCHAR *) szSqlStr, cbSqlStrMax, NULL); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *) sqlStr, (SQLWCHAR *) szSqlStr, cbSqlStrMax, NULL); } } MEM_FREE(_SqlStr); return retcode; } SQLRETURN SQL_API SQLNativeSql ( SQLHDBC hdbc, SQLCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER * pcbSqlStr) { ENTER_HDBC (hdbc, 0, trace_SQLNativeSql (TRACE_ENTER, hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr)); retcode = SQLNativeSql_Internal ( hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr, 'A'); LEAVE_HDBC (hdbc, 0, trace_SQLNativeSql (TRACE_LEAVE, hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr)); } SQLRETURN SQL_API SQLNativeSqlA ( SQLHDBC hdbc, SQLCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER * pcbSqlStr) { ENTER_HDBC (hdbc, 0, trace_SQLNativeSql (TRACE_ENTER, hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr)); retcode = SQLNativeSql_Internal( hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr, 'A'); LEAVE_HDBC (hdbc, 0, trace_SQLNativeSql (TRACE_LEAVE, hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr)); } SQLRETURN SQL_API SQLNativeSqlW ( SQLHDBC hdbc, SQLWCHAR * szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER * pcbSqlStr) { ENTER_HDBC (hdbc, 0, trace_SQLNativeSqlW (TRACE_ENTER, hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr)); retcode = SQLNativeSql_Internal( hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr, 'W'); LEAVE_HDBC (hdbc, 0, trace_SQLNativeSqlW (TRACE_LEAVE, hdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr)); } libiodbc-3.52.9/iodbc/ithread.h0000644000076400007640000001235512323210535013165 00000000000000/* * ithread.h * * $Id$ * * Macros for locking & multithreading * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _ITHREAD_H #define _ITHREAD_H /* * Threading under windows */ #if defined (WIN32) && !defined (NO_THREADING) # define IODBC_THREADING # define THREAD_IDENT ((unsigned long) GetCurrentThreadId()) # define MUTEX_DECLARE(M) HANDLE M # define MUTEX_INIT(M) M = CreateMutex (NULL, FALSE, NULL) # define MUTEX_DONE(M) CloseHandle (M) # define MUTEX_LOCK(M) WaitForSingleObject (M, INFINITE) # define MUTEX_UNLOCK(M) ReleaseMutex (M) # define SPINLOCK_DECLARE(M) CRITICAL_SECTION M # define SPINLOCK_INIT(M) InitializeCriticalSection (&M) # define SPINLOCK_DONE(M) DeleteCriticalSection (&M) # define SPINLOCK_LOCK(M) EnterCriticalSection (&M) # define SPINLOCK_UNLOCK(M) LeaveCriticalSection (&M) /* * Threading with pthreads */ #elif defined (WITH_PTHREADS) #ifndef _REENTRANT # error Add -D_REENTRANT to your compiler flags #endif #include # define IODBC_THREADING # ifndef OLD_PTHREADS # define THREAD_IDENT ((unsigned long) (pthread_self ())) # else # define THREAD_IDENT 0UL # endif # define MUTEX_DECLARE(M) pthread_mutex_t M # define MUTEX_INIT(M) pthread_mutex_init (&M, NULL) # define MUTEX_DONE(M) pthread_mutex_destroy (&M) # define MUTEX_LOCK(M) pthread_mutex_lock(&M) # define MUTEX_UNLOCK(M) pthread_mutex_unlock(&M) # define SPINLOCK_DECLARE(M) MUTEX_DECLARE(M) # define SPINLOCK_INIT(M) MUTEX_INIT(M) # define SPINLOCK_DONE(M) MUTEX_DONE(M) # define SPINLOCK_LOCK(M) MUTEX_LOCK(M) # define SPINLOCK_UNLOCK(M) MUTEX_UNLOCK(M) /* * No threading */ #else # undef IODBC_THREADING # undef THREAD_IDENT # define MUTEX_DECLARE(M) int M # define MUTEX_INIT(M) M = 1 # define MUTEX_DONE(M) M = 1 # define MUTEX_LOCK(M) M = 1 # define MUTEX_UNLOCK(M) M = 1 # define SPINLOCK_DECLARE(M) MUTEX_DECLARE (M) # define SPINLOCK_INIT(M) MUTEX_INIT (M) # define SPINLOCK_DONE(M) MUTEX_DONE (M) # define SPINLOCK_LOCK(M) MUTEX_LOCK (M) # define SPINLOCK_UNLOCK(M) MUTEX_UNLOCK (M) #endif #endif /* _ITHREAD_H */ libiodbc-3.52.9/iodbc/iodbc.def0000644000076400007640000001112212323210535013123 00000000000000; ; iodbc.def ; ; $Id$ ; ; DLL link script ; ; The iODBC driver manager. ; ; Copyright (C) 1995 by Ke Jin ; Copyright (C) 1996-2014 by OpenLink Software ; All Rights Reserved. ; ; This software is released under the terms of either of the following ; licenses: ; ; - GNU Library General Public License (see LICENSE.LGPL) ; - The BSD License (see LICENSE.BSD). ; ; Note that the only valid version of the LGPL license as far as this ; project is concerned is the original GNU Library General Public License ; Version 2, dated June 1991. ; ; While not mandated by the BSD license, any patches you make to the ; iODBC source code may be contributed back into the iODBC project ; at your discretion. Contributions will benefit the Open Source and ; Data Access community as a whole. Submissions may be made at: ; ; http://www.iodbc.org ; ; ; GNU Library Generic Public License Version 2 ; ============================================ ; This library is free software; you can redistribute it and/or ; modify it under the terms of the GNU Library General Public ; License as published by the Free Software Foundation; only ; Version 2 of the License dated June 1991. ; ; This library 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 ; Library General Public License for more details. ; ; You should have received a copy of the GNU Library General Public ; License along with this library; if not, write to the Free ; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ; ; ; The BSD License ; =============== ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions ; are met: ; ; 1. Redistributions of source code must retain the above copyright ; notice, this list of conditions and the following disclaimer. ; 2. 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. ; 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR ; 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. ; LIBRARY IODBC.DLL DESCRIPTION 'iODBC Driver Manager V2.50 (LGPL)' CODE MOVEABLE DISCARDABLE DATA MOVEABLE MULTIPLE HEAPSIZE 10000 EXPORTS SQLAllocConnect @1 SQLAllocEnv @2 SQLAllocStmt @3 SQLBindCol @4 SQLCancel @5 SQLColAttributes @6 SQLConnect @7 SQLDescribeCol @8 SQLDisconnect @9 SQLError @10 SQLExecDirect @11 SQLExecute @12 SQLFetch @13 SQLFreeConnect @14 SQLFreeEnv @15 SQLFreeStmt @16 SQLGetCursorName @17 SQLNumResultCols @18 SQLPrepare @19 SQLRowCount @20 SQLSetCursorName @21 SQLSetParam @22 SQLTransact @23 SQLColumns @40 SQLDriverConnect @41 SQLGetConnectOption @42 SQLGetData @43 SQLGetFunctions @44 SQLGetInfo @45 SQLGetStmtOption @46 SQLGetTypeInfo @47 SQLParamData @48 SQLPutData @49 SQLSetConnectOption @50 SQLSetStmtOption @51 SQLSpecialColumns @52 SQLStatistics @53 SQLTables @54 SQLBrowseConnect @55 SQLColumnPrivileges @56 SQLDataSources @57 SQLDescribeParam @58 SQLExtendedFetch @59 SQLForeignKeys @60 SQLMoreResults @61 SQLNativeSql @62 SQLNumParams @63 SQLParamOptions @64 SQLPrimaryKeys @65 SQLProcedureColumns @66 SQLProcedures @67 SQLSetPos @68 SQLSetScrollOptions @69 SQLTablePrivileges @70 SQLDrivers @71 SQLBindParameter @72 LoadByOrdinal @199 libiodbc-3.52.9/iodbc/hdbc.h0000644000076400007640000001523212323210535012442 00000000000000/* * hdbc.h * * $Id$ * * Data source connect object management functions * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _HDBC_H #define _HDBC_H #if (ODBCVER >= 0x0300) #include #endif typedef struct _drvopt { SQLUSMALLINT Option; SQLULEN Param; SQLCHAR waMode; struct _drvopt *next; } DRVOPT; typedef struct DBC { int type; /* must be 1st field */ HERR herr; SQLRETURN rc; struct DBC * next; HENV genv; /* back point to global env object */ HDBC dhdbc; /* driver's private dbc */ HENV henv; /* back point to instant env object */ HSTMT hstmt; /* list of statement object handle(s) */ #if (ODBCVER >= 0x300) HDESC hdesc; /* list of connection descriptors */ struct DBC * cp_pdbc; /* pooled connection */ BOOL cp_in_use; /* connection in pool is in use */ time_t cp_timeout; /* CPTimeout parameter */ time_t cp_expiry_time; /* expiration time (abs time value) */ time_t cp_retry_wait; /* timeout before retry (abs time value) */ char *cp_probe; /* CPProbe -- probe SQL statement */ char *cp_dsn; char *cp_uid; char *cp_pwd; char *cp_connstr; #endif int state; /* options */ UDWORD access_mode; UDWORD autocommit; UDWORD login_timeout; UDWORD odbc_cursors; UDWORD packet_size; UDWORD quiet_mode; UDWORD txn_isolation; SWORD cb_commit; SWORD cb_rollback; wchar_t * current_qualifier; char current_qualifier_WA; SWORD dbc_cip; /* Call in Progress flag */ DRVOPT *drvopt; /* Driver specific connect options */ SQLSMALLINT err_rec; } DBC_t; #define IS_VALID_HDBC(x) \ ((x) != SQL_NULL_HDBC && ((DBC_t *)(x))->type == SQL_HANDLE_DBC) #define ENTER_HDBC(hdbc, holdlock, trace) \ CONN(pdbc, hdbc); \ SQLRETURN retcode = SQL_SUCCESS; \ ODBC_LOCK();\ TRACE(trace); \ if (!IS_VALID_HDBC (pdbc)) \ { \ retcode = SQL_INVALID_HANDLE; \ goto done; \ } \ else if (pdbc->dbc_cip) \ { \ PUSHSQLERR (pdbc->herr, en_S1010); \ retcode = SQL_ERROR; \ goto done; \ } \ pdbc->dbc_cip = 1; \ CLEAR_ERRORS (pdbc); \ if (!holdlock) \ ODBC_UNLOCK() #define LEAVE_HDBC(hdbc, holdlock, trace) \ if (!holdlock) \ ODBC_LOCK (); \ pdbc->dbc_cip = 0; \ done: \ TRACE(trace); \ ODBC_UNLOCK (); \ return (retcode) /* * Note: * - ODBC applications can see address of driver manager's * connection object, i.e connection handle -- a void pointer, * but not detail of it. ODBC applications can neither see * detail driver's connection object nor its address. * * - ODBC driver manager knows its own connection objects and * exposes their address to an ODBC application. Driver manager * also knows address of driver's connection objects and keeps * it via dhdbc field in driver manager's connection object. * * - ODBC driver exposes address of its own connection object to * driver manager without detail. * * - Applications can get driver's connection object handle by * SQLGetInfo() with fInfoType equals to SQL_DRIVER_HDBC. */ enum { en_dbc_allocated, en_dbc_needdata, en_dbc_connected, en_dbc_hstmt }; /* * Internal prototypes */ SQLRETURN SQL_API _iodbcdm_SetConnectOption ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam, SQLCHAR waMode); SQLRETURN SQL_API _iodbcdm_GetConnectOption ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLPOINTER pvParam, SQLCHAR waMode); #endif libiodbc-3.52.9/iodbc/itrace.h0000644000076400007640000001216612323210535013014 00000000000000/* * itrace.h * * $Id$ * * Trace functions * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _ITRACE_H #define _ITRACE_H /* * Trace function prototypes */ #include "trace/proto.h" extern int ODBCSharedTraceFlag; /* * Useful macros */ #ifdef NO_TRACING #define TRACE(X) #else #define TRACE(X) if (ODBCSharedTraceFlag) X #endif #define TRACE_ENTER 0, retcode #define TRACE_LEAVE 1, retcode #define CALL_DRIVER(hdbc, errHandle, ret, proc, plist) \ {\ DBC_t * t_pdbc = (DBC_t *)(hdbc);\ ENV_t * t_penv = (ENV_t *)(t_pdbc->henv);\ \ if (!t_penv->thread_safe) MUTEX_LOCK (t_penv->drv_lock); \ \ ret = proc plist; \ if (errHandle) ((GENV_t *)(errHandle))->rc = ret; \ \ if (!t_penv->thread_safe) MUTEX_UNLOCK (t_penv->drv_lock); \ } #define CALL_UDRIVER(hdbc, errHandle, retcode, hproc, unicode_driver, procid, plist) \ { \ if (unicode_driver) \ { \ /* SQL_XXX_W */ \ hproc = _iodbcdm_getproc (hdbc, procid ## W); \ } \ else \ { \ /* SQL_XXX */ \ /* SQL_XXX_A */ \ hproc = _iodbcdm_getproc (hdbc, procid); \ if (hproc == SQL_NULL_HPROC) \ hproc = _iodbcdm_getproc (hdbc, procid ## A); \ } \ if (hproc != SQL_NULL_HPROC) \ { \ CALL_DRIVER (hdbc, errHandle, retcode, hproc, plist) \ } \ } #endif #define GET_HPROC(hdbc, hproc, procid) \ { \ /* SQL_XXX */ \ /* SQL_XXX_A */ \ hproc = _iodbcdm_getproc (hdbc, procid); \ if (hproc == SQL_NULL_HPROC) \ hproc = _iodbcdm_getproc (hdbc, procid ## A); \ } #define GET_UHPROC(hdbc, hproc, procid, unicode_driver) \ { \ if (unicode_driver) \ { \ /* SQL_XXX_W */ \ hproc = _iodbcdm_getproc (hdbc, procid ## W); \ } \ else \ { \ /* SQL_XXX */ \ /* SQL_XXX_A */ \ hproc = _iodbcdm_getproc (hdbc, procid); \ if (hproc == SQL_NULL_HPROC) \ hproc = _iodbcdm_getproc (hdbc, procid ## A); \ } \ } libiodbc-3.52.9/iodbc/hstmt.c0000644000076400007640000007775512323210535012716 00000000000000/* * hstmt.c * * $Id$ * * Query statement object management functions * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #if (ODBCVER >= 0x0300) #include #endif #include #include #include #include #if (ODBCVER >= 0x300) static const SQLINTEGER desc_attrs[4] = { SQL_ATTR_APP_ROW_DESC, SQL_ATTR_APP_PARAM_DESC, SQL_ATTR_IMP_ROW_DESC, SQL_ATTR_IMP_PARAM_DESC }; #endif SQLRETURN SQLAllocStmt_Internal ( SQLHDBC hdbc, SQLHSTMT * phstmt) { CONN (pdbc, hdbc); STMT (pstmt, NULL); HPROC hproc2 = SQL_NULL_HPROC; HPROC hproc3 = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; int i; SQLUINTEGER odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; SQLUINTEGER dodbc_ver = ((ENV_t *) pdbc->henv)->dodbc_ver; if (phstmt == NULL) { PUSHSQLERR (pdbc->herr, en_S1009); return SQL_ERROR; } /* check state */ switch (pdbc->state) { case en_dbc_connected: case en_dbc_hstmt: break; case en_dbc_allocated: case en_dbc_needdata: PUSHSQLERR (pdbc->herr, en_08003); *phstmt = SQL_NULL_HSTMT; return SQL_ERROR; default: return SQL_INVALID_HANDLE; } pstmt = (STMT_t *) MEM_ALLOC (sizeof (STMT_t)); if (pstmt == NULL) { PUSHSQLERR (pdbc->herr, en_S1001); *phstmt = SQL_NULL_HSTMT; return SQL_ERROR; } pstmt->rc = 0; /* * Initialize this handle */ pstmt->type = SQL_HANDLE_STMT; /* initiate the object */ pstmt->herr = SQL_NULL_HERR; pstmt->hdbc = (HSTMT) hdbc; pstmt->state = en_stmt_allocated; pstmt->cursor_state = en_stmt_cursor_no; pstmt->prep_state = 0; pstmt->asyn_on = en_NullProc; pstmt->need_on = en_NullProc; pstmt->stmt_cip = 0; pstmt->err_rec = 0; memset (pstmt->vars, 0, sizeof (VAR_t) * STMT_VARS_MAX); pstmt->vars_inserted = 0; /* call driver's function */ pstmt->rowset_size = 1; pstmt->bind_type = SQL_BIND_BY_COLUMN; pstmt->st_pbinding = NULL; pstmt->st_pparam = NULL; pstmt->st_nparam = 0; #if (ODBCVER >= 0x0300) pstmt->row_array_size = 1; pstmt->fetch_bookmark_ptr = NULL; pstmt->params_processed_ptr = NULL; pstmt->paramset_size = 0; pstmt->rows_fetched_ptr = NULL; if (dodbc_ver == SQL_OV_ODBC2 && odbc_ver == SQL_OV_ODBC3) { /* if it's a odbc3 app calling odbc2 driver */ pstmt->row_status_ptr = MEM_ALLOC (sizeof (SQLUINTEGER) * pstmt->row_array_size); if (!pstmt->row_status_ptr) { PUSHSQLERR (pstmt->herr, en_HY001); *phstmt = SQL_NULL_HSTMT; pstmt->type = 0; MEM_FREE (pstmt); return SQL_ERROR; } pstmt->row_status_allocated = SQL_TRUE; } else { pstmt->row_status_ptr = NULL; pstmt->row_status_allocated = SQL_FALSE; } #endif hproc2 = _iodbcdm_getproc (pdbc, en_AllocStmt); #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pdbc, en_AllocHandle); #endif if (odbc_ver == SQL_OV_ODBC2 && ( dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x0300) if (hproc3) { CALL_DRIVER (pstmt->hdbc, pdbc, retcode, hproc3, (SQL_HANDLE_STMT, pdbc->dhdbc, &(pstmt->dhstmt))); } else #endif { if (hproc2 == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); *phstmt = SQL_NULL_HSTMT; pstmt->type = 0; MEM_FREE (pstmt); return SQL_ERROR; } CALL_DRIVER (hdbc, pdbc, retcode, hproc2, (pdbc->dhdbc, &(pstmt->dhstmt))); } if (!SQL_SUCCEEDED (retcode)) { *phstmt = SQL_NULL_HSTMT; pstmt->type = 0; MEM_FREE (pstmt); return retcode; } #if (ODBCVER >= 0x0300) /* get the descriptors */ memset (&pstmt->imp_desc, 0, sizeof (pstmt->imp_desc)); memset (&pstmt->desc, 0, sizeof (pstmt->desc)); if (dodbc_ver == SQL_OV_ODBC2) { /* * this is an ODBC2 driver - so alloc dummy implicit desc handles * (dhdesc = NULL) */ for (i = 0; i < 4; i++) { pstmt->imp_desc[i] = (DESC_t *) MEM_ALLOC (sizeof (DESC_t)); if (pstmt->imp_desc[i] == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); goto alloc_stmt_failed; } memset (pstmt->imp_desc[i], 0, sizeof (DESC_t)); pstmt->imp_desc[i]->type = SQL_HANDLE_DESC; pstmt->imp_desc[i]->hstmt = pstmt; pstmt->imp_desc[i]->dhdesc = NULL; pstmt->imp_desc[i]->hdbc = hdbc; pstmt->imp_desc[i]->herr = NULL; } } else { /* the ODBC3 driver */ if (((ENV_t *) pdbc->henv)->unicode_driver) hproc3 = _iodbcdm_getproc (pdbc, en_GetStmtAttrW); else { hproc3 = _iodbcdm_getproc (pdbc, en_GetStmtAttr); if (hproc3 == SQL_NULL_HPROC) hproc3 = _iodbcdm_getproc (pdbc, en_GetStmtAttrA); } if (hproc3 == SQL_NULL_HPROC) { /* with no GetStmtAttr ! */ PUSHSQLERR (pdbc->herr, en_HYC00); goto alloc_stmt_failed; } else { /* get the implicit descriptors */ RETCODE rc1; for (i = 0; i < 4; i++) { int desc_type = 0; switch (i) { case APP_ROW_DESC: desc_type = SQL_ATTR_APP_ROW_DESC; break; case APP_PARAM_DESC: desc_type = SQL_ATTR_APP_PARAM_DESC; break; case IMP_ROW_DESC: desc_type = SQL_ATTR_IMP_ROW_DESC; break; case IMP_PARAM_DESC: desc_type = SQL_ATTR_IMP_PARAM_DESC; break; } pstmt->imp_desc[i] = (DESC_t *) MEM_ALLOC (sizeof (DESC_t)); if (pstmt->imp_desc[i] == NULL) { /* memory allocation error */ PUSHSQLERR (pdbc->herr, en_HY001); goto alloc_stmt_failed; } memset (pstmt->imp_desc[i], 0, sizeof (DESC_t)); pstmt->imp_desc[i]->type = SQL_HANDLE_DESC; pstmt->imp_desc[i]->hdbc = hdbc; pstmt->imp_desc[i]->hstmt = *phstmt; pstmt->imp_desc[i]->herr = NULL; CALL_DRIVER (hdbc, pstmt, rc1, hproc3, (pstmt->dhstmt, desc_type, &pstmt->imp_desc[i]->dhdesc, 0, NULL)); if (rc1 != SQL_SUCCESS && rc1 != SQL_SUCCESS_WITH_INFO) { /* no descriptor returned from the driver */ pdbc->rc = SQL_ERROR; goto alloc_stmt_failed; } } } } #endif /* insert into list */ pstmt->next = (STMT_t *) pdbc->hstmt; pdbc->hstmt = pstmt; *phstmt = (SQLHSTMT) pstmt; /* state transition */ pdbc->state = en_dbc_hstmt; return SQL_SUCCESS; /* * If statement allocation has failed, we need to make sure the driver * handle is also destroyed */ alloc_stmt_failed: /* * Deallocate any descriptors */ for (i = 0; i < 4; i++) { if (pstmt->imp_desc[i]) { pstmt->imp_desc[i]->type = 0; MEM_FREE (pstmt->imp_desc[i]); } } /* * Tell the driver to remove the statement handle */ hproc2 = SQL_NULL_HPROC; hproc3 = SQL_NULL_HPROC; hproc2 = _iodbcdm_getproc (pstmt->hdbc, en_FreeStmt); #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pstmt->hdbc, en_FreeHandle); #endif if (odbc_ver == SQL_OV_ODBC2 && ( dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x0300) if (hproc3 != SQL_NULL_HPROC) { CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc3, (SQL_HANDLE_STMT, pstmt->dhstmt)); } else #endif { if (hproc2 == SQL_NULL_HPROC) { PUSHSQLERR (pdbc->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc2, (pstmt->dhstmt, SQL_DROP)); } /* * Invalidate and free the statement handle */ pstmt->type = 0; MEM_FREE (pstmt); return SQL_ERROR; } SQLRETURN SQL_API SQLAllocStmt ( SQLHDBC hdbc, SQLHSTMT * phstmt) { ENTER_HDBC (hdbc, 1, trace_SQLAllocStmt (TRACE_ENTER, hdbc, phstmt)); retcode = SQLAllocStmt_Internal (hdbc, phstmt); LEAVE_HDBC (hdbc, 1, trace_SQLAllocStmt (TRACE_LEAVE, hdbc, phstmt)); } SQLRETURN _iodbcdm_dropstmt (HSTMT hstmt) { STMT (pstmt, hstmt); STMT (tpstmt, NULL); CONN (pdbc, NULL); if (!IS_VALID_HSTMT (pstmt)) { return SQL_INVALID_HANDLE; } CLEAR_ERRORS (pstmt); pdbc = (DBC_t *) (pstmt->hdbc); for (tpstmt = (STMT_t *) pdbc->hstmt; tpstmt != NULL; tpstmt = tpstmt->next) { if (tpstmt == pstmt) { pdbc->hstmt = (HSTMT) pstmt->next; break; } if (tpstmt->next == pstmt) { tpstmt->next = pstmt->next; break; } } if (tpstmt == NULL) { return SQL_INVALID_HANDLE; } #if (ODBCVER >= 0x0300) if (pstmt->row_status_allocated == SQL_TRUE && pstmt->row_status_ptr) MEM_FREE(pstmt->row_status_ptr); /* drop the implicit descriptors */ if (pstmt->imp_desc[0]) { int i; for (i = 0; i < 4; i++) { _iodbcdm_freesqlerrlist (pstmt->imp_desc[i]->herr); pstmt->imp_desc[i]->type = 0; MEM_FREE(pstmt->imp_desc[i]); } } #endif if (pstmt->vars_inserted > 0) _iodbcdm_FreeStmtVars(pstmt); _iodbcdm_FreeStmtParams(pstmt); /* * Invalidate this handle */ pstmt->type = 0; MEM_FREE (pstmt); return SQL_SUCCESS; } SQLRETURN SQLFreeStmt_Internal ( SQLHSTMT hstmt, SQLUSMALLINT fOption) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); HPROC hproc2 = SQL_NULL_HPROC; HPROC hproc3 = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; SQLUINTEGER odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; SQLUINTEGER dodbc_ver = ((ENV_t *) pdbc->henv)->dodbc_ver; /* check option */ switch (fOption) { case SQL_DROP: case SQL_CLOSE: case SQL_UNBIND: case SQL_RESET_PARAMS: break; default: PUSHSQLERR (pstmt->herr, en_S1092); return SQL_ERROR; } /* check state */ if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } hproc2 = _iodbcdm_getproc (pstmt->hdbc, en_FreeStmt); #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pstmt->hdbc, en_FreeHandle); #endif if (odbc_ver == SQL_OV_ODBC2 && ( dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x0300) if (fOption == SQL_DROP && hproc3 != SQL_NULL_HPROC) { CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc3, (SQL_HANDLE_STMT, pstmt->dhstmt)); } #endif else { if (hproc2 == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc2, (pstmt->dhstmt, fOption)); } if (!SQL_SUCCEEDED (retcode)) { return retcode; } /* state transition */ switch (fOption) { case SQL_DROP: /* delete this object (ignore return) */ _iodbcdm_RemoveBind (pstmt); _iodbcdm_FreeStmtParams(pstmt); #if 0 _iodbcdm_dropstmt (pstmt); /* Delayed until last moment */ #endif break; case SQL_CLOSE: pstmt->cursor_state = en_stmt_cursor_no; /* This means cursor name set by * SQLSetCursorName() call will also * be erased. */ switch (pstmt->state) { case en_stmt_allocated: case en_stmt_prepared: break; case en_stmt_executed_with_info: case en_stmt_executed: case en_stmt_cursoropen: case en_stmt_fetched: case en_stmt_xfetched: if (pstmt->prep_state) { pstmt->state = en_stmt_prepared; } else { pstmt->state = en_stmt_allocated; } break; default: break; } break; case SQL_UNBIND: _iodbcdm_RemoveBind (pstmt); break; case SQL_RESET_PARAMS: _iodbcdm_FreeStmtParams(pstmt); break; default: break; } return retcode; } SQLRETURN SQL_API SQLFreeStmt ( SQLHSTMT hstmt, SQLUSMALLINT fOption) { ENTER_STMT (hstmt, trace_SQLFreeStmt (TRACE_ENTER, hstmt, fOption)); retcode = SQLFreeStmt_Internal (hstmt, fOption); LEAVE_STMT (hstmt, trace_SQLFreeStmt (TRACE_LEAVE, hstmt, fOption); if (fOption == SQL_DROP) _iodbcdm_dropstmt (hstmt); ); } static SQLRETURN SQLSetStmtOption_Internal ( SQLHSTMT hstmt, SQLUSMALLINT fOption, SQLUINTEGER vParam) { STMT (pstmt, hstmt); HPROC hproc2 = SQL_NULL_HPROC; HPROC hproc3 = SQL_NULL_HPROC; sqlstcode_t sqlstat = en_00000; SQLRETURN retcode; CONN (pdbc, pstmt->hdbc); SQLUINTEGER odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; SQLUINTEGER dodbc_ver = ((ENV_t *) pdbc->henv)->dodbc_ver; #if (ODBCVER < 0x0300) /* check option */ if ( /* fOption < SQL_STMT_OPT_MIN || */ fOption > SQL_STMT_OPT_MAX) { PUSHSQLERR (pstmt->herr, en_S1092); return SQL_ERROR; } #endif /* ODBCVER < 0x0300 */ if (fOption == SQL_CONCURRENCY || fOption == SQL_CURSOR_TYPE || fOption == SQL_SIMULATE_CURSOR || fOption == SQL_USE_BOOKMARKS) { if (pstmt->asyn_on != en_NullProc) { if (pstmt->prep_state) { sqlstat = en_S1011; } } else { switch (pstmt->state) { case en_stmt_prepared: sqlstat = en_S1011; break; case en_stmt_executed_with_info: case en_stmt_executed: case en_stmt_cursoropen: case en_stmt_fetched: case en_stmt_xfetched: sqlstat = en_24000; break; case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: if (pstmt->prep_state) { sqlstat = en_S1011; } break; default: break; } } } else { if (pstmt->asyn_on != en_NullProc) { if (!pstmt->prep_state) { sqlstat = en_S1010; } } else { if (pstmt->state >= en_stmt_needdata) { sqlstat = en_S1010; } } } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } hproc2 = _iodbcdm_getproc (pstmt->hdbc, en_SetStmtOption); #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pstmt->hdbc, en_SetStmtAttr); #endif if (odbc_ver == SQL_OV_ODBC2 && ( dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x0300) if (hproc3 != SQL_NULL_HPROC) { switch ((int)fOption) { /* ODBC integer attributes */ case SQL_ATTR_ASYNC_ENABLE: case SQL_ATTR_CONCURRENCY: case SQL_ATTR_CURSOR_TYPE: case SQL_ATTR_KEYSET_SIZE: case SQL_ATTR_MAX_LENGTH: case SQL_ATTR_MAX_ROWS: case SQL_ATTR_NOSCAN: case SQL_ATTR_QUERY_TIMEOUT: case SQL_ATTR_RETRIEVE_DATA: case SQL_ATTR_ROW_BIND_TYPE: case SQL_ATTR_ROW_NUMBER: case SQL_ATTR_SIMULATE_CURSOR: case SQL_ATTR_USE_BOOKMARKS: CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc3, (pstmt->dhstmt, fOption, vParam, 0)); break; /* ODBC3 attributes */ case SQL_ATTR_APP_PARAM_DESC: case SQL_ATTR_APP_ROW_DESC: case SQL_ATTR_CURSOR_SCROLLABLE: case SQL_ATTR_CURSOR_SENSITIVITY: case SQL_ATTR_ENABLE_AUTO_IPD: case SQL_ATTR_FETCH_BOOKMARK_PTR: case SQL_ATTR_IMP_PARAM_DESC: case SQL_ATTR_IMP_ROW_DESC: case SQL_ATTR_METADATA_ID: case SQL_ATTR_PARAM_BIND_OFFSET_PTR: case SQL_ATTR_PARAM_BIND_TYPE: case SQL_ATTR_PARAM_STATUS_PTR: case SQL_ATTR_PARAMS_PROCESSED_PTR: case SQL_ATTR_PARAMSET_SIZE: case SQL_ATTR_ROW_ARRAY_SIZE: case SQL_ATTR_ROW_BIND_OFFSET_PTR: case SQL_ATTR_ROW_OPERATION_PTR: case SQL_ATTR_ROW_STATUS_PTR: case SQL_ATTR_ROWS_FETCHED_PTR: PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; default: CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc3, (pstmt->dhstmt, fOption, vParam, SQL_NTS)); } } else #endif { if (hproc2 == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc2, (pstmt->dhstmt, fOption, vParam)); } if (SQL_SUCCEEDED (retcode)) { if (fOption == SQL_ROWSET_SIZE || fOption == SQL_ATTR_ROW_ARRAY_SIZE) { pstmt->rowset_size = vParam; if (retcode == SQL_SUCCESS_WITH_INFO) { SQLUINTEGER data; if (SQLGetStmtOption_Internal (hstmt, SQL_ROWSET_SIZE, &data) == SQL_SUCCESS) pstmt->rowset_size = data; } } if (fOption == SQL_BIND_TYPE) pstmt->bind_type = vParam; } return retcode; } SQLRETURN SQL_API SQLSetStmtOption ( SQLHSTMT hstmt, SQLUSMALLINT fOption, SQLULEN vParam) { ENTER_STMT (hstmt, trace_SQLSetStmtOption (TRACE_ENTER, hstmt, fOption, vParam)); retcode = SQLSetStmtOption_Internal (hstmt, fOption, vParam); LEAVE_STMT (hstmt, trace_SQLSetStmtOption (TRACE_LEAVE, hstmt, fOption, vParam)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLSetStmtOptionA ( SQLHSTMT hstmt, SQLUSMALLINT fOption, SQLULEN vParam) { ENTER_STMT (hstmt, trace_SQLSetStmtOption (TRACE_ENTER, hstmt, fOption, vParam)); retcode = SQLSetStmtOption_Internal (hstmt, fOption, vParam); LEAVE_STMT (hstmt, trace_SQLSetStmtOption (TRACE_LEAVE, hstmt, fOption, vParam)); } #endif SQLRETURN SQLGetStmtOption_Internal ( SQLHSTMT hstmt, SQLUSMALLINT fOption, SQLPOINTER pvParam) { STMT (pstmt, hstmt); HPROC hproc2 = SQL_NULL_HPROC; HPROC hproc3 = SQL_NULL_HPROC; sqlstcode_t sqlstat = en_00000; SQLRETURN retcode; CONN (pdbc, pstmt->hdbc); SQLUINTEGER odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; SQLUINTEGER dodbc_ver = ((ENV_t *) pdbc->henv)->dodbc_ver; #if (ODBCVER < 0x0300) /* check option */ if ( /* fOption < SQL_STMT_OPT_MIN || */ fOption > SQL_STMT_OPT_MAX) { PUSHSQLERR (pstmt->herr, en_S1092); return SQL_ERROR; } #endif /* ODBCVER < 0x0300 */ /* check state */ if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc) { sqlstat = en_S1010; } else { switch (pstmt->state) { case en_stmt_allocated: case en_stmt_prepared: case en_stmt_executed_with_info: case en_stmt_executed: case en_stmt_cursoropen: if (fOption == SQL_ROW_NUMBER || fOption == SQL_GET_BOOKMARK) { sqlstat = en_24000; } break; default: break; } } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } hproc2 = _iodbcdm_getproc (pstmt->hdbc, en_GetStmtOption); #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pstmt->hdbc, en_GetStmtAttr); #endif if (odbc_ver == SQL_OV_ODBC2 && ( dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x0300) if (hproc3 != SQL_NULL_HPROC) { switch ((int)fOption) { /* ODBC integer attributes */ case SQL_ATTR_ASYNC_ENABLE: case SQL_ATTR_CONCURRENCY: case SQL_ATTR_CURSOR_TYPE: case SQL_ATTR_KEYSET_SIZE: case SQL_ATTR_MAX_LENGTH: case SQL_ATTR_MAX_ROWS: case SQL_ATTR_NOSCAN: case SQL_ATTR_QUERY_TIMEOUT: case SQL_ATTR_RETRIEVE_DATA: case SQL_ATTR_ROW_BIND_TYPE: case SQL_ATTR_ROW_NUMBER: case SQL_ATTR_SIMULATE_CURSOR: case SQL_ATTR_USE_BOOKMARKS: CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc3, (pstmt->dhstmt, fOption, pvParam, 0, NULL)); break; /* ODBC3 attributes */ case SQL_ATTR_APP_PARAM_DESC: case SQL_ATTR_APP_ROW_DESC: case SQL_ATTR_CURSOR_SCROLLABLE: case SQL_ATTR_CURSOR_SENSITIVITY: case SQL_ATTR_ENABLE_AUTO_IPD: case SQL_ATTR_FETCH_BOOKMARK_PTR: case SQL_ATTR_IMP_PARAM_DESC: case SQL_ATTR_IMP_ROW_DESC: case SQL_ATTR_METADATA_ID: case SQL_ATTR_PARAM_BIND_OFFSET_PTR: case SQL_ATTR_PARAM_BIND_TYPE: case SQL_ATTR_PARAM_STATUS_PTR: case SQL_ATTR_PARAMS_PROCESSED_PTR: case SQL_ATTR_PARAMSET_SIZE: case SQL_ATTR_ROW_ARRAY_SIZE: case SQL_ATTR_ROW_BIND_OFFSET_PTR: case SQL_ATTR_ROW_OPERATION_PTR: case SQL_ATTR_ROW_STATUS_PTR: case SQL_ATTR_ROWS_FETCHED_PTR: PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; default: CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc3, (pstmt->dhstmt, fOption, pvParam, SQL_MAX_OPTION_STRING_LENGTH, NULL)); break; } } else #endif { if (hproc2 == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc2, (pstmt->dhstmt, fOption, pvParam)); } return retcode; } SQLRETURN SQL_API SQLGetStmtOption ( SQLHSTMT hstmt, SQLUSMALLINT fOption, SQLPOINTER pvParam) { ENTER_STMT (hstmt, trace_SQLGetStmtOption (TRACE_ENTER, hstmt, fOption, pvParam)); retcode = SQLGetStmtOption_Internal (hstmt, fOption, pvParam); LEAVE_STMT (hstmt, trace_SQLGetStmtOption (TRACE_LEAVE, hstmt, fOption, pvParam)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLGetStmtOptionA ( SQLHSTMT hstmt, SQLUSMALLINT fOption, SQLPOINTER pvParam) { ENTER_STMT (hstmt, trace_SQLGetStmtOption (TRACE_ENTER, hstmt, fOption, pvParam)); retcode = SQLGetStmtOption_Internal (hstmt, fOption, pvParam); LEAVE_STMT (hstmt, trace_SQLGetStmtOption (TRACE_LEAVE, hstmt, fOption, pvParam)); } #endif static SQLRETURN SQLCancel_Internal (SQLHSTMT hstmt, int stmt_cip) { STMT (pstmt, hstmt); HPROC hproc; SQLRETURN retcode; /* check argument */ /* check state */ /* call driver */ hproc = _iodbcdm_getproc (pstmt->hdbc, en_Cancel); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt)); /* state transition */ if (!SQL_SUCCEEDED (retcode)) { return retcode; } if (stmt_cip == 0) { ODBC_LOCK(); switch (pstmt->state) { case en_stmt_allocated: case en_stmt_prepared: break; case en_stmt_executed_with_info: case en_stmt_executed: if (pstmt->prep_state) { pstmt->state = en_stmt_prepared; } else { pstmt->state = en_stmt_allocated; } break; case en_stmt_cursoropen: case en_stmt_fetched: case en_stmt_xfetched: if (pstmt->prep_state) { pstmt->state = en_stmt_prepared; } else { pstmt->state = en_stmt_allocated; } break; case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: switch (pstmt->need_on) { case en_ExecDirect: pstmt->state = en_stmt_allocated; break; case en_Execute: pstmt->state = en_stmt_prepared; break; case en_SetPos: pstmt->state = en_stmt_xfetched; break; default: break; } pstmt->need_on = en_NullProc; break; default: break; } ODBC_UNLOCK(); } return retcode; } SQLRETURN SQL_API SQLCancel (SQLHSTMT hstmt) { ENTER_STMT_CANCEL (hstmt, trace_SQLCancel (TRACE_ENTER, hstmt)); retcode = SQLCancel_Internal (hstmt, stmt_cip); LEAVE_STMT_CANCEL (hstmt, trace_SQLCancel (TRACE_LEAVE, hstmt)); } void _iodbcdm_FreeStmtVars(STMT_t *pstmt) { int i; VAR_t *p; for(i= 0; i < STMT_VARS_MAX; i++) { p = &pstmt->vars[i]; if (p->data) { free(p->data); p->data = NULL; } p->length = 0; } pstmt->vars_inserted = 0; } void _iodbcdm_FreeStmtParams(STMT_t *pstmt) { PPARM pparm; int i; pparm = pstmt->st_pparam; if (pstmt->st_pparam) { free (pstmt->st_pparam); pstmt->st_pparam = NULL; } pstmt->st_nparam = 0; } void * _iodbcdm_alloc_var(STMT_t *pstmt, int i, int size) { VAR_t *var; if (i > STMT_VARS_MAX - 1) return NULL; var = &pstmt->vars[i]; pstmt->vars_inserted = 1; if (size == 0) { MEM_FREE(var->data); var->data = NULL; var->length = 0; return NULL; } if (var->data == NULL || var->length < size) { MEM_FREE(var->data); var->length = 0; if ((var->data = MEM_ALLOC(size)) != NULL) var->length = size; } return var->data; } wchar_t * _iodbcdm_conv_var_A2W(STMT_t *pstmt, int i, SQLCHAR *pData, int pDataLength) { VAR_t *var; size_t size = 0; int count_alloc = 0; if (i > STMT_VARS_MAX - 1) return NULL; var = &pstmt->vars[i]; pstmt->vars_inserted = 1; if (pData == NULL) { MEM_FREE(var->data); var->data = NULL; var->length = 0; return NULL; } if (pDataLength == SQL_NTS) size = strlen((char *) pData); else size = pDataLength; count_alloc = (size + 1) * sizeof(wchar_t); if (var->data != NULL && var->length >= count_alloc) { if (size > 0) OPL_A2W(pData, var->data, size); ((wchar_t*)var->data)[size] = L'\0'; } else { MEM_FREE(var->data); var->length = 0; if ((var->data = MEM_ALLOC(count_alloc)) != NULL) { var->length = count_alloc; if (size > 0) OPL_A2W(pData, var->data, size); ((wchar_t*)var->data)[size] = L'\0'; } } return (wchar_t *) var->data; } char * _iodbcdm_conv_var_W2A(STMT_t *pstmt, int i, SQLWCHAR *pData, int pDataLength) { VAR_t *var; size_t size = 0; int count_alloc = 0; if (i > STMT_VARS_MAX - 1) return NULL; var = &pstmt->vars[i]; pstmt->vars_inserted = 1; if (pData == NULL) { MEM_FREE(var->data); var->data = NULL; var->length = 0; return NULL; } if (pDataLength == SQL_NTS) size = WCSLEN(pData); else size = pDataLength; count_alloc = size + 1; if (var->data != NULL && var->length >= count_alloc) { if (size > 0) OPL_W2A(pData, var->data, size); ((char*)var->data)[size] = '\0'; } else { MEM_FREE(var->data); var->length = 0; if ((var->data = MEM_ALLOC(count_alloc)) != NULL) { var->length = count_alloc; if (size > 0) OPL_W2A(pData, var->data, size); ((char*)var->data)[size] = '\0'; } } return (char *) var->data; } SQLRETURN _iodbcdm_BindColumn (STMT_t *pstmt, BIND_t *pbind) { PBLST pblst; PBLST prev; /* * Initialize the cell */ if ((pblst = (PBLST) calloc (1, sizeof (TBLST))) == NULL) { return SQL_ERROR; } pblst->bl_bind = *pbind; /* * First on the list? */ if (pstmt->st_pbinding == NULL) { pstmt->st_pbinding = pblst; return SQL_SUCCESS; } for (prev = pstmt->st_pbinding; ; prev = prev->bl_nextBind) { /* * Column already on the linked list? */ if (prev->bl_bind.bn_col == pbind->bn_col) { prev->bl_bind = *pbind; MEM_FREE (pblst); return SQL_SUCCESS; } if (prev->bl_nextBind == NULL) break; } prev->bl_nextBind = pblst; return SQL_SUCCESS; } /* * Remove a binding from the linked list */ int _iodbcdm_UnBindColumn (STMT_t *pstmt, BIND_t *pbind) { PBLST pNewNextBind; PBLST *pBindHistory; /* * Anything on the list? No? Nothing to do. */ if (pstmt->st_pbinding == NULL) return 0; for (pBindHistory = &pstmt->st_pbinding; (*pBindHistory); pBindHistory = &(*pBindHistory)->bl_nextBind) { /* * Column already on the linked list? */ if ((*pBindHistory)->bl_bind.bn_col == pbind->bn_col) { pNewNextBind = (*pBindHistory)->bl_nextBind; free (*pBindHistory); (*pBindHistory) = pNewNextBind; return 0; } } return 0; } /* * Remove all bindings */ void _iodbcdm_RemoveBind (STMT_t *pstmt) { PBLST pblst, pnext; if (pstmt->st_pbinding) { for (pblst = pstmt->st_pbinding; pblst; pblst = pnext) { pnext = pblst->bl_nextBind; free (pblst); } pstmt->st_pbinding = NULL; } } static void _iodbcdm_bindConv_A2W(char *data, SQLLEN *pInd, UDWORD size) { wchar_t *wdata = (wchar_t *) data; size=size; /*UNUSED TODO*/ if (*pInd != SQL_NULL_DATA) { wchar_t *buf = dm_SQL_A2W ((SQLCHAR *) data, SQL_NTS); if (buf != NULL) WCSCPY (wdata, buf); MEM_FREE (buf); if (pInd && *pInd != SQL_NTS) *pInd *= sizeof (wchar_t); } } void _iodbcdm_ConvBindData (STMT_t *pstmt) { PBLST ptr; BIND_t *col; UDWORD i, size, row_size; SQLLEN *pInd; char *data; /* * Anything on the list? No? Nothing to do. */ if (pstmt->st_pbinding == NULL) return ; for (ptr = pstmt->st_pbinding; ptr; ptr = ptr->bl_nextBind) { col = &(ptr->bl_bind); if (pstmt->bind_type == SQL_BIND_BY_COLUMN) { size = col->bn_size; data = (char *) col->bn_data; pInd = col->bn_pInd; for (i = 0; i < pstmt->rowset_size; i++) { _iodbcdm_bindConv_A2W(data, pInd, size); data += size; pInd++; } } else /* Row Binding*/ { row_size = pstmt->bind_type; size = col->bn_size; data = (char *) col->bn_data; pInd = col->bn_pInd; for (i = 0; i < pstmt->rowset_size; i++) { _iodbcdm_bindConv_A2W(data, pInd, size); data += row_size; pInd += row_size; } } } } libiodbc-3.52.9/iodbc/Makefile.in0000644000076400007640000006644212323210643013447 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1995 by Ke Jin # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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 = iodbc DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = 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__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libiodbc_la_DEPENDENCIES = trace/libiodbctrace.la \ ../iodbcinst/libiodbc_common.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_libiodbc_la_OBJECTS = catalog.lo connect.lo dlproc.lo execute.lo \ fetch.lo hdbc.lo henv.lo herr.lo hstmt.lo info.lo misc.lo \ prepare.lo result.lo odbc3.lo libiodbc_la_OBJECTS = $(am_libiodbc_la_OBJECTS) libiodbc_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libiodbc_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/admin/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 = $(libiodbc_la_SOURCES) DIST_SOURCES = $(libiodbc_la_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 HEADERS = $(noinst_HEADERS) 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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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 = trace . AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/iodbcinst lib_LTLIBRARIES = libiodbc.la libiodbc_la_LDFLAGS = -version-info @lib_version@ \ -export-symbols $(srcdir)/iodbc.exp libiodbc_la_LIBADD = trace/libiodbctrace.la \ ../iodbcinst/libiodbc_common.la \ $(LIBADD_DL) $(LIBADD_OS) libiodbc_la_SOURCES = catalog.c connect.c dlproc.c execute.c \ fetch.c hdbc.c henv.c herr.c hstmt.c info.c \ misc.c prepare.c result.c odbc3.c noinst_HEADERS = dlproc.h hdbc.h henv.h herr.h iodbc_misc.h \ hstmt.h itrace.h henv.ci herr.ci hdesc.h ithread.h EXTRA_DIST = \ $(srcdir)/iodbc.def \ $(srcdir)/iodbc.exp \ $(srcdir)/main.c \ $(srcdir)/vmscompile.com \ $(srcdir)/install_libodbc.sh all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 iodbc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu iodbc/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done @DARWIN_FALSE@libiodbc.la: $(libiodbc_la_OBJECTS) $(libiodbc_la_DEPENDENCIES) @DARWIN_FALSE@ $(libiodbc_la_LINK) -rpath $(libdir) $(libiodbc_la_OBJECTS) $(libiodbc_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/catalog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlproc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/execute.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fetch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdbc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/henv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/herr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hstmt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odbc3.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prepare.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/result.Plo@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 # 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) @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 check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-exec-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ 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-exec-hook install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man 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-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-libLTLIBRARIES @DARWIN_TRUE@libiodbc.la: $(libiodbc_la_OBJECTS) $(libiodbc_la_DEPENDENCIES) @DARWIN_TRUE@ $(LINK) -rpath $(libdir) $(libiodbc_la_LDFLAGS) $(libiodbc_la_OBJECTS) $(libiodbc_la_LIBADD) $(LIBS) @DARWIN_TRUE@ -$(STRIP) -s $(top_srcdir)/mac/iodbc.exp -u .libs/*.dylib # # Add symbolic link for libodbc.so as some apps need this # install-exec-hook: @INSTALL_LIBODBC_TRUE@ $(SHELL) $(srcdir)/install_libodbc.sh $(DESTDIR)$(libdir) # 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: libiodbc-3.52.9/iodbc/misc.c0000644000076400007640000001552512323210535012475 00000000000000/* * misc.c * * $Id$ * * Miscellaneous functions * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include #include #include "herr.h" #include "misc.h" #include "iodbc_misc.h" #ifdef _MAC #include #endif /* _MAC */ /* * Parse a configuration from string (internal) */ int _iodbcdm_cfg_parse_str_Internal (PCONFIG pconfig, char *str) { char *s; int count; /* init image */ _iodbcdm_cfg_freeimage (pconfig); if (str == NULL) { /* NULL string is ok */ return 0; } s = pconfig->image = strdup (str); /* Add [ODBC] section */ if (_iodbcdm_cfg_storeentry (pconfig, "ODBC", NULL, NULL, NULL, 0) == -1) return -1; for (count = 0; *s; count++) { char *keywd = NULL, *value; char *cp, *n; /* * Extract KEY=VALUE upto first ';' */ for (cp = s; *cp && *cp != ';'; cp++) { if (*cp == '{') { for (cp++; *cp && *cp != '}'; cp++) ; } } /* * Store start of next token if available in n and terminate string */ if (*cp) { *cp = 0; n = cp + 1; } else n = cp; /* * Find '=' in string */ for (cp = s; *cp && *cp != '='; cp++) ; if (*cp) { *cp++ = 0; keywd = s; value = cp; } else if (count == 0) { /* * Handle missing DSN=... from the beginning of the string, e.g.: * 'dsn_ora7;UID=scott;PWD=tiger' */ keywd = "DSN"; value = s; } if (keywd != NULL) { /* store entry */ if (_iodbcdm_cfg_storeentry (pconfig, NULL, keywd, value, NULL, 0) == -1) return -1; } /* * Continue with next token */ s = n; } /* we're done */ pconfig->flags |= CFG_VALID; pconfig->dirty = 1; return 0; } /* * Initialize a configuration from string */ int _iodbcdm_cfg_init_str (PCONFIG *ppconf, void *str, int size, int wide) { PCONFIG pconfig; *ppconf = NULL; /* init config */ if ((pconfig = (PCONFIG) calloc (1, sizeof (TCONFIG))) == NULL) return -1; /* parse */ if (_iodbcdm_cfg_parse_str (pconfig, str, size, wide) == -1) { _iodbcdm_cfg_done (pconfig); return -1; } /* we're done */ *ppconf = pconfig; return 0; } /* * Parse a configuration from string */ int _iodbcdm_cfg_parse_str (PCONFIG pconfig, void *str, int size, int wide) { int ret; char *_str; _str = wide ? (char *) dm_SQL_WtoU8 (str, size) : str; ret = _iodbcdm_cfg_parse_str_Internal (pconfig, _str); if (wide) MEM_FREE (_str); return ret; } #define CATBUF(buf, str, buf_sz) \ do { \ if (_iodbcdm_strlcat (buf, str, buf_sz) >= buf_sz) \ return -1; \ } while (0) int _iodbcdm_cfg_to_string (PCONFIG pconfig, char *section, char *buf, size_t buf_sz) { BOOL atsection; if (_iodbcdm_cfg_rewind (pconfig) == -1) return -1; atsection = FALSE; buf[0] = '\0'; while (_iodbcdm_cfg_nextentry (pconfig) == 0) { if (atsection) { if (_iodbcdm_cfg_section (pconfig)) break; else if (_iodbcdm_cfg_define (pconfig)) { if (buf[0] != '\0') CATBUF (buf, ";", buf_sz); CATBUF (buf, pconfig->id, buf_sz); CATBUF (buf, "=", buf_sz); CATBUF (buf, pconfig->value, buf_sz); } } else if (_iodbcdm_cfg_section (pconfig) && !strcasecmp (pconfig->section, section)) atsection = TRUE; } return 0; } libiodbc-3.52.9/iodbc/hstmt.h0000644000076400007640000002203512323210535012700 00000000000000/* * hstmt.h * * $Id$ * * Query statement object management functions * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _HSTMT_H #define _HSTMT_H typedef struct VAR { void *data; int length; } VAR_t; #define STMT_VARS_MAX 8 #define STMT_MAX_PARAM 1024 /* * Binding parameter from SQLBindCol */ typedef struct BIND { UWORD bn_col; /* Column # */ SWORD bn_type; /* ODBC C data type */ void * bn_data; /* Pointer to data */ SDWORD bn_size; /* Size of data area */ SQLLEN *bn_pInd; /* Holds SQL_NULL_DATA | 0. * And length of returned char/bin data */ } BIND_t; typedef struct SBLST TBLST, *PBLST; /* * Binding cell on the linked list */ struct SBLST { PBLST bl_nextBind; /* Next binding */ BIND_t bl_bind; /* Binding information */ }; typedef struct SPARM TPARM, *PPARM; struct SPARM { SQLUSMALLINT pm_par; /* Parameter # */ SQLSMALLINT pm_c_type; /* C Type */ SQLSMALLINT pm_c_type_orig; /* C Type original */ SQLLEN pm_size; /* size assoc. with pm_c_type or SQL_NTS */ SQLSMALLINT pm_sql_type; /* ODBC SQL Type */ SQLULEN pm_precision; /* Precision */ SQLSMALLINT pm_scale; /* Scale */ void *pm_data; /* Value / user handle */ SQLLEN *pm_pOctetLength; /* Length of char/bin parameter data */ SQLLEN *pm_pInd; /* Holds SQL_NULL_DATA | 0. Points to same * location as pm_pOctetLength for ODBC v2 */ SQLLEN pm_cbValueMax; /* cbValueMax */ SQLSMALLINT pm_usage; /* SQL_PARAM_INPUT, SQL_PARAM_OUTPUT etc */ }; typedef struct STMT { int type; /* must be 1st field */ HERR herr; SQLRETURN rc; /* Return code of last function */ struct STMT *next; HDBC hdbc; /* back point to connection object */ HSTMT dhstmt; /* driver's stmt handle */ int state; int cursor_state; int prep_state; int asyn_on; /* async executing which odbc call */ int need_on; /* which call return SQL_NEED_DATA */ int stmt_cip; /* Call in progress on this handle */ SQLUINTEGER rowset_size; SQLUINTEGER bind_type; #if (ODBCVER >= 0x0300) DESC_t * imp_desc[4]; DESC_t * desc[4]; SQLUINTEGER row_array_size; SQLPOINTER fetch_bookmark_ptr, params_processed_ptr; SQLUINTEGER paramset_size; SQLPOINTER row_status_ptr; SQLPOINTER rows_fetched_ptr; SQLUSMALLINT row_status_allocated; #endif SQLSMALLINT err_rec; VAR_t vars[STMT_VARS_MAX]; /* for a conversion parameters ansi<=>unicode*/ int vars_inserted; PBLST st_pbinding; /* API user bindings from SQLBindCol */ /* Binding variables */ PPARM st_pparam; /* API user parameters from SQLSetParam */ SQLUSMALLINT st_nparam; /* # params allocated */ } STMT_t; #define IS_VALID_HSTMT(x) \ ((x) != SQL_NULL_HSTMT && \ ((STMT_t *)(x))->type == SQL_HANDLE_STMT && \ ((STMT_t *)(x))->hdbc != SQL_NULL_HDBC) #define ENTER_STMT(hstmt, trace) \ STMT (pstmt, hstmt); \ SQLRETURN retcode = SQL_SUCCESS; \ ODBC_LOCK(); \ TRACE (trace); \ if (!IS_VALID_HSTMT (pstmt)) \ { \ retcode = SQL_INVALID_HANDLE; \ goto done; \ } \ else if (pstmt->stmt_cip) \ { \ PUSHSQLERR (pstmt->herr, en_S1010); \ retcode = SQL_ERROR; \ goto done; \ } \ pstmt->stmt_cip = 1; \ CLEAR_ERRORS (pstmt); \ if (pstmt->asyn_on == en_NullProc && pstmt->vars_inserted > 0) \ _iodbcdm_FreeStmtVars(pstmt); \ ODBC_UNLOCK() #define ENTER_STMT_CANCEL(hstmt, trace) \ STMT (pstmt, hstmt); \ SQLRETURN retcode = SQL_SUCCESS; \ int stmt_cip = 0; \ ODBC_LOCK(); \ TRACE (trace); \ if (!IS_VALID_HSTMT (pstmt)) \ { \ retcode = SQL_INVALID_HANDLE; \ goto done; \ } \ stmt_cip = pstmt->stmt_cip; \ CLEAR_ERRORS (pstmt); \ ODBC_UNLOCK() #define LEAVE_STMT(hstmt, trace) \ ODBC_LOCK (); \ pstmt->stmt_cip = 0; \ done: \ TRACE(trace); \ ODBC_UNLOCK (); \ return (retcode) #define LEAVE_STMT_CANCEL(hstmt, trace) \ ODBC_LOCK (); \ done: \ TRACE(trace); \ ODBC_UNLOCK (); \ return (retcode) enum { en_stmt_allocated = 0, en_stmt_prepared, en_stmt_executed_with_info, en_stmt_executed, en_stmt_cursoropen, en_stmt_fetched, en_stmt_xfetched, en_stmt_needdata, /* not call SQLParamData() yet */ en_stmt_mustput, /* not call SQLPutData() yet */ en_stmt_canput /* SQLPutData() called */ }; /* for statement handle state */ enum { en_stmt_cursor_no = 0, en_stmt_cursor_named, en_stmt_cursor_opened, en_stmt_cursor_fetched, en_stmt_cursor_xfetched }; /* for statement cursor state */ /* * Internal prototypes */ SQLRETURN _iodbcdm_dropstmt (HSTMT stmt); void _iodbcdm_FreeStmtParams(STMT_t *pstmt); void _iodbcdm_FreeStmtVars(STMT_t *pstmt); void *_iodbcdm_alloc_var(STMT_t *pstmt, int i, int size); wchar_t *_iodbcdm_conv_var_A2W(STMT_t *pstmt, int i, SQLCHAR *pData, int pDataLength); char *_iodbcdm_conv_var_W2A(STMT_t *pstmt, int i, SQLWCHAR *pData, int pDataLength); void _iodbcdm_ConvBindData (STMT_t *pstmt); SQLRETURN _iodbcdm_BindColumn (STMT_t *pstmt, BIND_t *pbind); int _iodbcdm_UnBindColumn (STMT_t *pstmt, BIND_t *pbind); void _iodbcdm_RemoveBind (STMT_t *pstmt); void _iodbcdm_do_cursoropen (STMT_t * pstmt); SQLSMALLINT _iodbcdm_map_sql_type (int type, int odbcver); SQLSMALLINT _iodbcdm_map_c_type (int type, int odbcver); SQLRETURN SQL_API _iodbcdm_ExtendedFetch ( SQLHSTMT hstmt, SQLUSMALLINT fFetchType, SQLLEN irow, SQLULEN * pcrow, SQLUSMALLINT * rgfRowStatus); SQLRETURN SQL_API _iodbcdm_SetPos ( SQLHSTMT hstmt, SQLSETPOSIROW irow, SQLUSMALLINT fOption, SQLUSMALLINT fLock); SQLRETURN SQL_API _iodbcdm_NumResultCols ( SQLHSTMT hstmt, SQLSMALLINT * pccol); SQLRETURN SQLGetStmtOption_Internal ( SQLHSTMT hstmt, SQLUSMALLINT fOption, SQLPOINTER pvParam); #endif libiodbc-3.52.9/iodbc/henv.c0000644000076400007640000001746412323210535012506 00000000000000/* * henv.c * * $Id$ * * Environment object management functions * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include /* * Use static initializer where possible */ #if defined (PTHREAD_MUTEX_INITIALIZER) SPINLOCK_DECLARE (iodbcdm_global_lock) = PTHREAD_MUTEX_INITIALIZER; #else SPINLOCK_DECLARE (iodbcdm_global_lock); #endif static int _iodbcdm_initialized = 0; static void _iodbcdm_env_settracing (GENV_t *genv) { char buf[1024]; genv = genv; /*UNUSED*/ /* * Check TraceFile keyword */ SQLSetConfigMode (ODBC_BOTH_DSN); if( SQLGetPrivateProfileString ("ODBC", "TraceFile", "", buf, sizeof(buf) / sizeof(SQLTCHAR), "odbc.ini") == 0 || !buf[0]) STRCPY (buf, SQL_OPT_TRACE_FILE_DEFAULT); trace_set_filename (buf); /* * Check Trace keyword */ SQLSetConfigMode (ODBC_BOTH_DSN); if ( SQLGetPrivateProfileString ("ODBC", "Trace", "", buf, sizeof(buf) / sizeof(SQLTCHAR), "odbc.ini") && (STRCASEEQ (buf, "on") || STRCASEEQ (buf, "yes") || STRCASEEQ (buf, "1"))) trace_start (); return; } unsigned long _iodbc_env_counter = 0; SQLRETURN SQLAllocEnv_Internal (SQLHENV * phenv, int odbc_ver) { GENV (genv, NULL); int retcode = SQL_SUCCESS; genv = (GENV_t *) MEM_ALLOC (sizeof (GENV_t)); if (genv == NULL) { *phenv = SQL_NULL_HENV; return SQL_ERROR; } genv->rc = 0; /* * Initialize this handle */ genv->type = SQL_HANDLE_ENV; genv->henv = SQL_NULL_HENV; /* driver's env list */ genv->hdbc = SQL_NULL_HDBC; /* driver's dbc list */ genv->herr = SQL_NULL_HERR; /* err list */ #if (ODBCVER >= 0x300) genv->odbc_ver = odbc_ver; genv->connection_pooling = _iodbcdm_attr_connection_pooling; genv->cp_match = SQL_CP_MATCH_DEFAULT; genv->pdbc_pool = NULL; #endif genv->err_rec = 0; *phenv = (SQLHENV) genv; /* * Initialize tracing */ if (++_iodbc_env_counter == 1) _iodbcdm_env_settracing (genv); return retcode; } SQLRETURN SQL_API SQLAllocEnv (SQLHENV * phenv) { GENV (genv, NULL); int retcode = SQL_SUCCESS; /* * One time initialization */ Init_iODBC(); ODBC_LOCK (); retcode = SQLAllocEnv_Internal (phenv, SQL_OV_ODBC2); genv = (GENV_t *) *phenv; /* * Start tracing */ TRACE (trace_SQLAllocEnv (TRACE_ENTER, phenv)); TRACE (trace_SQLAllocEnv (TRACE_LEAVE, phenv)); ODBC_UNLOCK (); return retcode; } extern void _iodbcdm_pool_drop_conn (HDBC hdbc, HDBC hdbc_prev); SQLRETURN SQLFreeEnv_Internal (SQLHENV henv) { GENV (genv, henv); if (!IS_VALID_HENV (genv)) { return SQL_INVALID_HANDLE; } CLEAR_ERRORS (genv); if (genv->hdbc != SQL_NULL_HDBC) { PUSHSQLERR (genv->herr, en_S1010); return SQL_ERROR; } #if (ODBCVER >= 0x300) /* Drop connections from the pool */ while (genv->pdbc_pool != NULL) _iodbcdm_pool_drop_conn (genv->pdbc_pool, NULL); #endif /* * Invalidate this handle */ genv->type = 0; return SQL_SUCCESS; } SQLRETURN SQL_API SQLFreeEnv (SQLHENV henv) { GENV (genv, henv); int retcode = SQL_SUCCESS; ODBC_LOCK (); TRACE (trace_SQLFreeEnv (TRACE_ENTER, henv)); retcode = SQLFreeEnv_Internal (henv); TRACE (trace_SQLFreeEnv (TRACE_LEAVE, henv)); MEM_FREE (genv); /* * Close trace after last environment handle is freed */ if (--_iodbc_env_counter == 0) trace_stop(); ODBC_UNLOCK (); return retcode; } /* * Initialize the system and let everyone wait until we have done so * properly */ void Init_iODBC (void) { #if !defined (PTHREAD_MUTEX_INITIALIZER) || defined (WINDOWS) SPINLOCK_INIT (iodbcdm_global_lock); #endif SPINLOCK_LOCK (iodbcdm_global_lock); if (!_iodbcdm_initialized) { /* * OK, now flag we are not callable anymore */ _iodbcdm_initialized = 1; /* * Other one time initializations can be performed here */ } SPINLOCK_UNLOCK (iodbcdm_global_lock); return; } void Done_iODBC(void) { #if !defined (PTHREAD_MUTEX_INITIALIZER) || defined (WINDOWS) SPINLOCK_DONE (iodbcdm_global_lock); #endif } /* * DLL Entry points for Windows */ #if defined (WINDOWS) static int DLLInit (HINSTANCE hModule) { Init_iODBC (); return TRUE; } static void DLLExit (void) { Done_iODBC (); } #pragma argused BOOL WINAPI DllMain (HINSTANCE hModule, DWORD fdReason, LPVOID lpvReserved) { switch (fdReason) { case DLL_PROCESS_ATTACH: if (!DLLInit (hModule)) return FALSE; break; case DLL_PROCESS_DETACH: DLLExit (); } return TRUE; } #endif libiodbc-3.52.9/iodbc/hdesc.h0000644000076400007640000001112612323210535012626 00000000000000/* * hdesc.h * * $Id$ * * Descriptor object * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef __DESC_H #define __DESC_H #define APP_ROW_DESC 0 #define APP_PARAM_DESC 1 #define IMP_ROW_DESC 2 #define IMP_PARAM_DESC 3 typedef struct DESC_s { int type; HERR herr; /* list of descriptor errors */ SQLRETURN rc; struct DESC_s *next; SQLHDBC hdbc; /* connection associated with the descriptor */ SQLHDESC dhdesc; /* the driver's desc handle */ HSTMT hstmt; /* if not null - the descriptor is implicit to that statement */ SWORD desc_cip; /* Call in Progress flag */ SQLSMALLINT err_rec; } DESC_t; #ifndef HDESC #define HDESC SQLHDESC #endif #define IS_VALID_HDESC(x) \ ((x) != SQL_NULL_HDESC && \ ((DESC_t *)(x))->type == SQL_HANDLE_DESC && \ ((DESC_t *)(x))->hdbc != SQL_NULL_HDBC) #define ENTER_DESC(hdesc, trace) \ DESC (pdesc, hdesc); \ SQLRETURN retcode = SQL_SUCCESS; \ ODBC_LOCK();\ TRACE(trace); \ if (!IS_VALID_HDESC (pdesc)) \ { \ retcode = SQL_INVALID_HANDLE; \ goto done; \ } \ else if (pdesc->desc_cip) \ { \ PUSHSQLERR (pdesc->herr, en_S1010); \ retcode = SQL_ERROR; \ goto done; \ } \ pdesc->desc_cip = 1; \ CLEAR_ERRORS (pdesc); \ ODBC_UNLOCK() #define LEAVE_DESC(hdesc, trace) \ ODBC_LOCK (); \ done: \ TRACE(trace); \ pdesc->desc_cip = 0; \ ODBC_UNLOCK (); \ return (retcode) #endif /* __DESC_H */ libiodbc-3.52.9/iodbc/fetch.c0000644000076400007640000004354512323210535012636 00000000000000/* * fetch.c * * $Id$ * * Fetch query result * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include #include #include SQLRETURN SQLFetch_Internal (SQLHSTMT hstmt) { STMT (pstmt, hstmt); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; /* check state */ if (pstmt->asyn_on == en_NullProc) { switch (pstmt->state) { case en_stmt_allocated: case en_stmt_prepared: case en_stmt_xfetched: case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; case en_stmt_executed_with_info: _iodbcdm_do_cursoropen (pstmt); break; default: break; } } else if (pstmt->asyn_on != en_Fetch) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } #if (ODBCVER >= 0x0300) if (((ENV_t *) ((DBC_t *) pstmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC2 && ((GENV_t *) ((DBC_t *) pstmt->hdbc)->genv)->odbc_ver == SQL_OV_ODBC3) { /* * Try to map SQLFetch to SQLExtendedFetch for ODBC3 app calling * ODBC2 driver * * The rows_status_ptr must not be null because the SQLExtendedFetch * requires it */ hproc = _iodbcdm_getproc (pstmt->hdbc, en_ExtendedFetch); if (hproc) { CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, SQL_FETCH_NEXT, 0, pstmt->rows_fetched_ptr, pstmt->row_status_ptr)); } } #endif if (hproc == SQL_NULL_HPROC) { hproc = _iodbcdm_getproc (pstmt->hdbc, en_Fetch); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt)); } /* state transition */ if (pstmt->asyn_on == en_Fetch) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_NO_DATA_FOUND: case SQL_ERROR: pstmt->asyn_on = en_NullProc; break; case SQL_STILL_EXECUTING: default: return retcode; } } switch (pstmt->state) { case en_stmt_cursoropen: case en_stmt_fetched: switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: pstmt->state = en_stmt_fetched; pstmt->cursor_state = en_stmt_cursor_fetched; break; case SQL_NO_DATA_FOUND: if (pstmt->prep_state) { pstmt->state = en_stmt_fetched; } else { pstmt->state = en_stmt_allocated; } pstmt->cursor_state = en_stmt_cursor_no; break; case SQL_STILL_EXECUTING: pstmt->asyn_on = en_Fetch; break; default: break; } break; default: break; } return retcode; } SQLRETURN SQL_API SQLFetch (SQLHSTMT hstmt) { ENTER_STMT (hstmt, trace_SQLFetch (TRACE_ENTER, hstmt)); retcode = SQLFetch_Internal (hstmt); if (SQL_SUCCEEDED (retcode)) _iodbcdm_ConvBindData (pstmt); LEAVE_STMT (hstmt, trace_SQLFetch (TRACE_LEAVE, hstmt)); } SQLRETURN SQL_API _iodbcdm_ExtendedFetch ( SQLHSTMT hstmt, SQLUSMALLINT fFetchType, SQLLEN irow, SQLULEN * pcrow, SQLUSMALLINT * rgfRowStatus) { STMT (pstmt, hstmt); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode; /* check fetch type */ if (fFetchType < SQL_FETCH_NEXT || fFetchType > SQL_FETCH_BOOKMARK) { /* Unlike MS driver manager(i.e. DM), * we don't check driver's ODBC version * against SQL_FETCH_RESUME (only 1.0) * and SQL_FETCH_BOOKMARK (only 2.0). */ PUSHSQLERR (pstmt->herr, en_S1106); return SQL_ERROR; } /* check state */ if (pstmt->asyn_on == en_NullProc) { switch (pstmt->state) { case en_stmt_allocated: case en_stmt_prepared: case en_stmt_fetched: case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; default: break; } } else if (pstmt->asyn_on != en_ExtendedFetch) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } if (fFetchType == SQL_FETCH_NEXT || fFetchType == SQL_FETCH_PRIOR || fFetchType == SQL_FETCH_FIRST || fFetchType == SQL_FETCH_LAST) { irow = 0; } hproc = _iodbcdm_getproc (pstmt->hdbc, en_ExtendedFetch); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, fFetchType, irow, pcrow, rgfRowStatus)); /* state transition */ if (pstmt->asyn_on == en_ExtendedFetch) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_NO_DATA_FOUND: case SQL_ERROR: pstmt->asyn_on = en_NullProc; break; case SQL_STILL_EXECUTING: default: return retcode; } } switch (pstmt->state) { case en_stmt_cursoropen: case en_stmt_xfetched: switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_NO_DATA_FOUND: pstmt->state = en_stmt_xfetched; pstmt->cursor_state = en_stmt_cursor_xfetched; break; case SQL_STILL_EXECUTING: pstmt->asyn_on = en_ExtendedFetch; break; default: break; } break; default: break; } return retcode; } SQLRETURN SQL_API SQLExtendedFetch ( SQLHSTMT hstmt, SQLUSMALLINT fFetchType, SQLLEN irow, SQLULEN * pcrow, SQLUSMALLINT * rgfRowStatus) { ENTER_STMT (hstmt, trace_SQLExtendedFetch (TRACE_ENTER, hstmt, fFetchType, irow, pcrow, rgfRowStatus)); retcode = _iodbcdm_ExtendedFetch (hstmt, fFetchType, irow, pcrow, rgfRowStatus); if (SQL_SUCCEEDED (retcode)) _iodbcdm_ConvBindData (pstmt); LEAVE_STMT (hstmt, trace_SQLExtendedFetch (TRACE_LEAVE, hstmt, fFetchType, irow, pcrow, rgfRowStatus)); } static SQLRETURN SQLGetData_Internal ( SQLHSTMT hstmt, SQLUSMALLINT icol, SQLSMALLINT fCType, SQLPOINTER rgbValue, SQLLEN cbValueMax, SQLLEN * pcbValue) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; SQLSMALLINT nCType; /* check argument */ if (rgbValue == NULL) { sqlstat = en_S1009; } else if (cbValueMax < 0) { sqlstat = en_S1090; } else { switch (fCType) { case SQL_C_DEFAULT: case SQL_C_BINARY: case SQL_C_BIT: case SQL_C_CHAR: case SQL_C_DATE: case SQL_C_DOUBLE: case SQL_C_FLOAT: case SQL_C_LONG: case SQL_C_SHORT: case SQL_C_SLONG: case SQL_C_SSHORT: case SQL_C_STINYINT: case SQL_C_TIME: case SQL_C_TIMESTAMP: case SQL_C_TINYINT: case SQL_C_ULONG: case SQL_C_USHORT: case SQL_C_UTINYINT: #if (ODBCVER >= 0x0300) case SQL_C_GUID: case SQL_C_INTERVAL_DAY: case SQL_C_INTERVAL_DAY_TO_HOUR: case SQL_C_INTERVAL_DAY_TO_MINUTE: case SQL_C_INTERVAL_DAY_TO_SECOND: case SQL_C_INTERVAL_HOUR: case SQL_C_INTERVAL_HOUR_TO_MINUTE: case SQL_C_INTERVAL_HOUR_TO_SECOND: case SQL_C_INTERVAL_MINUTE: case SQL_C_INTERVAL_MINUTE_TO_SECOND: case SQL_C_INTERVAL_MONTH: case SQL_C_INTERVAL_SECOND: case SQL_C_INTERVAL_YEAR: case SQL_C_INTERVAL_YEAR_TO_MONTH: case SQL_C_NUMERIC: case SQL_C_SBIGINT: case SQL_C_TYPE_DATE: case SQL_C_TYPE_TIME: case SQL_C_TYPE_TIMESTAMP: case SQL_C_UBIGINT: case SQL_C_WCHAR: #endif break; default: sqlstat = en_S1003; break; } } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } /* check state */ if (pstmt->asyn_on == en_NullProc) { switch (pstmt->state) { case en_stmt_allocated: case en_stmt_prepared: case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: sqlstat = en_S1010; break; case en_stmt_executed_with_info: case en_stmt_executed: case en_stmt_cursoropen: sqlstat = en_24000; break; default: break; } } else if (pstmt->asyn_on != en_GetData) { sqlstat = en_S1010; } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } /* * Convert C type to ODBC version of driver */ nCType = _iodbcdm_map_c_type (fCType, penv->dodbc_ver); if (!penv->unicode_driver && nCType == SQL_C_WCHAR) { nCType = SQL_C_CHAR; cbValueMax /= sizeof(wchar_t); } /* call driver */ hproc = _iodbcdm_getproc (pstmt->hdbc, en_GetData); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, icol, nCType, rgbValue, cbValueMax, pcbValue)); /* state transition */ if (pstmt->asyn_on == en_GetData) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_NO_DATA_FOUND: case SQL_ERROR: pstmt->asyn_on = en_NullProc; break; case SQL_STILL_EXECUTING: default: return retcode; } } switch (pstmt->state) { case en_stmt_fetched: case en_stmt_xfetched: if (retcode == SQL_STILL_EXECUTING) { pstmt->asyn_on = en_GetData; break; } break; default: break; } if (!penv->unicode_driver && fCType == SQL_C_WCHAR) { wchar_t *buf = dm_SQL_A2W((SQLCHAR *) rgbValue, SQL_NTS); if (buf != NULL) WCSCPY(rgbValue, buf); MEM_FREE(buf); if (pcbValue) *pcbValue *= sizeof(wchar_t); } return retcode; } SQLRETURN SQL_API SQLGetData ( SQLHSTMT hstmt, SQLUSMALLINT icol, SQLSMALLINT fCType, SQLPOINTER rgbValue, SQLLEN cbValueMax, SQLLEN * pcbValue) { ENTER_STMT (hstmt, trace_SQLGetData (TRACE_ENTER, hstmt, icol, fCType, rgbValue, cbValueMax, pcbValue)); retcode = SQLGetData_Internal ( hstmt, icol, fCType, rgbValue, cbValueMax, pcbValue); LEAVE_STMT (hstmt, trace_SQLGetData (TRACE_LEAVE, hstmt, icol, fCType, rgbValue, cbValueMax, pcbValue)); } static SQLRETURN SQLMoreResults_Internal (SQLHSTMT hstmt) { STMT (pstmt, hstmt); HPROC hproc; SQLRETURN retcode; /* check state */ if (pstmt->asyn_on == en_NullProc) { switch (pstmt->state) { #if 0 case en_stmt_allocated: case en_stmt_prepared: return SQL_NO_DATA_FOUND; #endif case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; default: break; } } else if (pstmt->asyn_on != en_MoreResults) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } /* call driver */ hproc = _iodbcdm_getproc (pstmt->hdbc, en_MoreResults); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt)); /* state transition */ if (pstmt->asyn_on == en_MoreResults) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_NO_DATA_FOUND: case SQL_ERROR: pstmt->asyn_on = en_NullProc; break; case SQL_STILL_EXECUTING: default: return retcode; } } switch (pstmt->state) { case en_stmt_allocated: case en_stmt_prepared: /* driver should return SQL_NO_DATA_FOUND */ if (pstmt->prep_state) { pstmt->state = en_stmt_cursoropen; } else { pstmt->state = en_stmt_prepared; } break; case en_stmt_executed_with_info: _iodbcdm_do_cursoropen (pstmt); /* FALL THROUGH */ case en_stmt_executed: if (retcode == SQL_NO_DATA_FOUND) { if (pstmt->prep_state) { pstmt->state = en_stmt_prepared; } else { pstmt->state = en_stmt_cursoropen; } } else if (retcode == SQL_STILL_EXECUTING) { pstmt->asyn_on = en_MoreResults; } break; case en_stmt_cursoropen: case en_stmt_fetched: case en_stmt_xfetched: if (retcode == SQL_SUCCESS) { break; } else if (retcode == SQL_NO_DATA_FOUND) { if (pstmt->prep_state) { pstmt->state = en_stmt_prepared; } else { pstmt->state = en_stmt_allocated; } } else if (retcode == SQL_STILL_EXECUTING) { pstmt->asyn_on = en_MoreResults; } break; default: break; } return retcode; } SQLRETURN SQL_API SQLMoreResults (SQLHSTMT hstmt) { ENTER_STMT (hstmt, trace_SQLMoreResults (TRACE_ENTER, hstmt)); retcode = SQLMoreResults_Internal (hstmt); LEAVE_STMT (hstmt, trace_SQLMoreResults (TRACE_LEAVE, hstmt)); } SQLRETURN SQL_API _iodbcdm_SetPos ( SQLHSTMT hstmt, SQLSETPOSIROW irow, SQLUSMALLINT fOption, SQLUSMALLINT fLock) { STMT (pstmt, hstmt); HPROC hproc; SQLRETURN retcode; sqlstcode_t sqlstat = en_00000; /* check argument value */ if (fOption > SQL_ADD || fLock > SQL_LOCK_UNLOCK) { PUSHSQLERR (pstmt->herr, en_S1009); return SQL_ERROR; } /* check state */ if (pstmt->asyn_on == en_NullProc) { switch (pstmt->state) { case en_stmt_allocated: case en_stmt_prepared: case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: sqlstat = en_S1010; break; case en_stmt_executed_with_info: case en_stmt_executed: case en_stmt_cursoropen: sqlstat = en_24000; break; default: break; } } else if (pstmt->asyn_on != en_SetPos) { sqlstat = en_S1010; } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } /* call driver */ hproc = _iodbcdm_getproc (pstmt->hdbc, en_SetPos); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, irow, fOption, fLock)); /* state transition */ if (pstmt->asyn_on == en_SetPos) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_NEED_DATA: case SQL_ERROR: pstmt->asyn_on = en_NullProc; break; case SQL_STILL_EXECUTING: default: return retcode; } } /* now, the only possible init state is 'xfetched' */ switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: break; case SQL_NEED_DATA: pstmt->state = en_stmt_needdata; pstmt->need_on = en_SetPos; break; case SQL_STILL_EXECUTING: pstmt->asyn_on = en_SetPos; break; default: break; } return retcode; } SQLRETURN SQL_API SQLSetPos ( SQLHSTMT hstmt, SQLSETPOSIROW irow, SQLUSMALLINT fOption, SQLUSMALLINT fLock) { ENTER_STMT (hstmt, trace_SQLSetPos (TRACE_ENTER, hstmt, irow, fOption, fLock)); retcode = _iodbcdm_SetPos (hstmt, irow, fOption, fLock); LEAVE_STMT (hstmt, trace_SQLSetPos (TRACE_LEAVE, hstmt, irow, fOption, fLock)); } libiodbc-3.52.9/iodbc/install_libodbc.sh0000755000076400007640000001030412323210535015047 00000000000000#!/bin/sh # # install_libodbc.sh # # $Id$ # # The iODBC driver manager. # # Copyright (C) 1995 by Ke Jin # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # PREFIX="$1" MACHINE=`uname` # # Check if base installation completed # if test -z "$MACHINE" then echo "**ERROR: unknown machine type" exit 1 fi if test ! -d "$PREFIX" then echo "**ERROR: installation directory [$PREFIX] does not exist" exit 1 fi cd "$PREFIX" # # Create a dynamic libodbc.so library link (if available) # if test -f libiodbc.la then echo "Creating dynamic library for Generic ODBC driver Manager ..." . ./libiodbc.la for lib in $library_names do case $lib in libiodbc.so.*) rm -f libodbc.so ln -s $lib libodbc.so ;; libiodbc.sl.*) rm -f libodbc.sl ln -s $lib libodbc.sl ;; esac break done fi # # Create a static libodbc.a library link # echo "Creating static library for Generic ODBC driver Manager ..." case "$MACHINE" in AIX) echo "Special handling for AIX ..." rm -f libodbc.so libodbc.a odbc.so cat libiodbc.so.2 > odbc.so ar rv libodbc.a odbc.so rm -f odbc.so ;; *) rm -f libodbc.a ln -s libiodbc.a libodbc.a ;; esac libiodbc-3.52.9/iodbc/prepare.c0000644000076400007640000005633412323210535013203 00000000000000/* * prepare.c * * $Id$ * * Prepare a query * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include #include #include SQLRETURN SQL_API SQLPrepare_Internal ( SQLHSTMT hstmt, SQLPOINTER szSqlStr, SQLINTEGER cbSqlStr, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _SqlStr = NULL; /* check state */ if (pstmt->asyn_on == en_NullProc) { /* not on asyn state */ switch (pstmt->state) { case en_stmt_fetched: case en_stmt_xfetched: sqlstat = en_24000; break; case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: sqlstat = en_S1010; break; default: break; } } else if (pstmt->asyn_on != en_Prepare) { /* asyn on other */ sqlstat = en_S1010; } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } if (szSqlStr == NULL) { PUSHSQLERR (pstmt->herr, en_S1009); return SQL_ERROR; } if (cbSqlStr < 0 && cbSqlStr != SQL_NTS) { PUSHSQLERR (pstmt->herr, en_S1090); return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _SqlStr = _iodbcdm_conv_var_A2W(pstmt, 0, (SQLCHAR *) szSqlStr, cbSqlStr); } else { /* unicode=>ansi*/ _SqlStr = _iodbcdm_conv_var_W2A(pstmt, 0, (SQLWCHAR *) szSqlStr, cbSqlStr); } szSqlStr = _SqlStr; cbSqlStr = SQL_NTS; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_Prepare, ( pstmt->dhstmt, szSqlStr, cbSqlStr)); if (hproc == SQL_NULL_HPROC) { _iodbcdm_FreeStmtVars(pstmt); PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); /* stmt state transition */ if (pstmt->asyn_on == en_Prepare) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_ERROR: pstmt->asyn_on = en_NullProc; return retcode; case SQL_STILL_EXECUTING: default: return retcode; } } switch (retcode) { case SQL_STILL_EXECUTING: pstmt->asyn_on = en_Prepare; break; case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: pstmt->state = en_stmt_prepared; pstmt->prep_state = 1; break; case SQL_ERROR: switch (pstmt->state) { case en_stmt_prepared: case en_stmt_executed_with_info: case en_stmt_executed: pstmt->state = en_stmt_allocated; pstmt->prep_state = 0; break; default: break; } default: break; } return retcode; } SQLRETURN SQL_API SQLPrepare (SQLHSTMT hstmt, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStr) { ENTER_STMT (hstmt, trace_SQLPrepare (TRACE_ENTER, hstmt, szSqlStr, cbSqlStr)); retcode = SQLPrepare_Internal(hstmt, szSqlStr, cbSqlStr, 'A'); LEAVE_STMT (hstmt, trace_SQLPrepare (TRACE_LEAVE, hstmt, szSqlStr, cbSqlStr)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLPrepareA (SQLHSTMT hstmt, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStr) { ENTER_STMT (hstmt, trace_SQLPrepare (TRACE_ENTER, hstmt, szSqlStr, cbSqlStr)); retcode = SQLPrepare_Internal(hstmt, szSqlStr, cbSqlStr, 'A'); LEAVE_STMT (hstmt, trace_SQLPrepare (TRACE_LEAVE, hstmt, szSqlStr, cbSqlStr)); } SQLRETURN SQL_API SQLPrepareW (SQLHSTMT hstmt, SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStr) { ENTER_STMT (hstmt, trace_SQLPrepareW (TRACE_ENTER, hstmt, szSqlStr, cbSqlStr)); retcode = SQLPrepare_Internal(hstmt, szSqlStr, cbSqlStr, 'W'); LEAVE_STMT (hstmt, trace_SQLPrepareW (TRACE_LEAVE, hstmt, szSqlStr, cbSqlStr)); } #endif SQLRETURN SQL_API SQLSetCursorName_Internal ( SQLHSTMT hstmt, SQLPOINTER szCursor, SQLSMALLINT cbCursor, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _Cursor = NULL; if (szCursor == NULL) { PUSHSQLERR (pstmt->herr, en_S1009); return SQL_ERROR; } if (cbCursor < 0 && cbCursor != SQL_NTS) { PUSHSQLERR (pstmt->herr, en_S1090); return SQL_ERROR; } /* check state */ if (pstmt->asyn_on != en_NullProc) { sqlstat = en_S1010; } else { switch (pstmt->state) { case en_stmt_executed_with_info: case en_stmt_executed: case en_stmt_cursoropen: case en_stmt_fetched: case en_stmt_xfetched: sqlstat = en_24000; break; case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: sqlstat = en_S1010; break; default: break; } } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _Cursor = dm_SQL_A2W ((SQLCHAR *) szCursor, cbCursor); } else { /* unicode=>ansi*/ _Cursor = dm_SQL_W2A ((SQLWCHAR *) szCursor, cbCursor); } szCursor = _Cursor; cbCursor = SQL_NTS; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_SetCursorName, ( pstmt->dhstmt, szCursor, cbCursor)); MEM_FREE(_Cursor); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } if (SQL_SUCCEEDED (retcode)) { pstmt->cursor_state = en_stmt_cursor_named; } return retcode; } SQLRETURN SQL_API SQLSetCursorName ( SQLHSTMT hstmt, SQLCHAR * szCursor, SQLSMALLINT cbCursor) { ENTER_STMT (hstmt, trace_SQLSetCursorName (TRACE_ENTER, hstmt, szCursor, cbCursor)); retcode = SQLSetCursorName_Internal(hstmt, szCursor, cbCursor, 'A'); LEAVE_STMT (hstmt, trace_SQLSetCursorName (TRACE_LEAVE, hstmt, szCursor, cbCursor)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLSetCursorNameA ( SQLHSTMT hstmt, SQLCHAR * szCursor, SQLSMALLINT cbCursor) { ENTER_STMT (hstmt, trace_SQLSetCursorName (TRACE_ENTER, hstmt, szCursor, cbCursor)); retcode = SQLSetCursorName_Internal(hstmt, szCursor, cbCursor, 'A'); LEAVE_STMT (hstmt, trace_SQLSetCursorName (TRACE_LEAVE, hstmt, szCursor, cbCursor)); } SQLRETURN SQL_API SQLSetCursorNameW ( SQLHSTMT hstmt, SQLWCHAR * szCursor, SQLSMALLINT cbCursor) { ENTER_STMT (hstmt, trace_SQLSetCursorNameW (TRACE_ENTER, hstmt, szCursor, cbCursor)); retcode = SQLSetCursorName_Internal(hstmt, szCursor, cbCursor, 'W'); LEAVE_STMT (hstmt, trace_SQLSetCursorNameW (TRACE_LEAVE, hstmt, szCursor, cbCursor)); } #endif static SQLRETURN SQLBindParameter_Internal ( SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT fParamType, SQLSMALLINT fCType, SQLSMALLINT fSqlType, SQLULEN cbColDef, SQLSMALLINT ibScale, SQLPOINTER rgbValue, SQLLEN cbValueMax, SQLLEN * pcbValue) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc2 = SQL_NULL_HPROC; HPROC hproc3 = SQL_NULL_HPROC; SQLSMALLINT nCType; SQLSMALLINT nSqlType; sqlstcode_t sqlstat = en_00000; SQLRETURN retcode = SQL_SUCCESS; SQLUINTEGER odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; SQLUINTEGER dodbc_ver = ((ENV_t *) pdbc->henv)->dodbc_ver; PPARM newparam; TPARM parm; int size; #if (ODBCVER >= 0x0300) if (0) #else /* check param */ if (fSqlType > SQL_TYPE_MAX || (fSqlType < SQL_TYPE_MIN && fSqlType > SQL_TYPE_DRIVER_START)) /* Note: SQL_TYPE_DRIVER_START is a negative number * So, we use ">" */ #endif { sqlstat = en_S1004; } else if (ipar < 1) { sqlstat = en_S1093; } else if ((rgbValue == NULL && pcbValue == NULL) && fParamType != SQL_PARAM_OUTPUT) { sqlstat = en_S1009; /* This means, I allow output to nowhere * (i.e. * junk output result). But I can't * allow input from nowhere. */ } /********** else if( cbValueMax < 0L && cbValueMax != SQL_SETPARAM_VALUE_MAX ) { sqlstat = en_S1090; } **********/ else if (fParamType != SQL_PARAM_INPUT && fParamType != SQL_PARAM_OUTPUT && fParamType != SQL_PARAM_INPUT_OUTPUT) { sqlstat = en_S1105; } else { switch (fCType) { case SQL_C_DEFAULT: case SQL_C_BINARY: case SQL_C_BIT: case SQL_C_CHAR: case SQL_C_DATE: case SQL_C_DOUBLE: case SQL_C_FLOAT: case SQL_C_LONG: case SQL_C_SHORT: case SQL_C_SLONG: case SQL_C_SSHORT: case SQL_C_STINYINT: case SQL_C_TIME: case SQL_C_TIMESTAMP: case SQL_C_TINYINT: case SQL_C_ULONG: case SQL_C_USHORT: case SQL_C_UTINYINT: #if (ODBCVER >= 0x0300) case SQL_C_GUID: case SQL_C_INTERVAL_DAY: case SQL_C_INTERVAL_DAY_TO_HOUR: case SQL_C_INTERVAL_DAY_TO_MINUTE: case SQL_C_INTERVAL_DAY_TO_SECOND: case SQL_C_INTERVAL_HOUR: case SQL_C_INTERVAL_HOUR_TO_MINUTE: case SQL_C_INTERVAL_HOUR_TO_SECOND: case SQL_C_INTERVAL_MINUTE: case SQL_C_INTERVAL_MINUTE_TO_SECOND: case SQL_C_INTERVAL_MONTH: case SQL_C_INTERVAL_SECOND: case SQL_C_INTERVAL_YEAR: case SQL_C_INTERVAL_YEAR_TO_MONTH: case SQL_C_NUMERIC: case SQL_C_SBIGINT: case SQL_C_TYPE_DATE: case SQL_C_TYPE_TIME: case SQL_C_TYPE_TIMESTAMP: case SQL_C_UBIGINT: case SQL_C_WCHAR: #endif break; default: sqlstat = en_S1003; break; } } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } /* check state */ if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc) { PUSHSQLERR (pstmt->herr, en_S1010); retcode = SQL_ERROR; } /* * Convert C type to ODBC version of driver */ nCType = _iodbcdm_map_c_type (fCType, penv->dodbc_ver); /* * Convert SQL type to ODBC version of driver */ nSqlType = _iodbcdm_map_sql_type (fSqlType, penv->dodbc_ver); hproc2 = _iodbcdm_getproc (pstmt->hdbc, en_BindParameter); #if (ODBCVER >=0x0300) hproc3 = _iodbcdm_getproc (pstmt->hdbc, en_BindParam); #endif parm.pm_par = ipar; parm.pm_c_type = nCType; parm.pm_c_type_orig = nCType; parm.pm_sql_type = fSqlType; parm.pm_precision = cbColDef; parm.pm_scale = ibScale; parm.pm_data = rgbValue; parm.pm_pOctetLength = pcbValue; parm.pm_pInd = pcbValue; parm.pm_size = size; parm.pm_usage = fParamType; parm.pm_cbValueMax = cbValueMax; #if (ODBCVER >=0x0300) if (fCType == SQL_C_WCHAR && !penv->unicode_driver && pcbValue && *pcbValue != SQL_DATA_AT_EXEC) nCType = SQL_C_CHAR; #endif if (ipar < 1 || ipar > STMT_MAX_PARAM) { PUSHSQLERR (pstmt->herr, en_S1093); return SQL_ERROR; } if (ipar > pstmt->st_nparam) { size_t newsize = ipar + 10; if (newsize > STMT_MAX_PARAM) newsize = STMT_MAX_PARAM; if ((newparam = calloc (newsize, sizeof (TPARM))) == NULL) { PUSHSQLERR (pstmt->herr, en_S1001); return SQL_ERROR; } if (pstmt->st_pparam) { memcpy (newparam, pstmt->st_pparam, pstmt->st_nparam * sizeof (TPARM)); free (pstmt->st_pparam); } pstmt->st_pparam = newparam; pstmt->st_nparam = (u_short) newsize; } pstmt->st_pparam[ipar-1] = parm; if (odbc_ver == SQL_OV_ODBC2 && ( dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >=0x0300) if (fParamType == SQL_PARAM_INPUT && hproc3 != SQL_NULL_HPROC) { CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc3, (pstmt->dhstmt, ipar, nCType, nSqlType, cbColDef, ibScale, rgbValue, pcbValue)); } else #endif { if (hproc2 == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc2, (pstmt->dhstmt, ipar, fParamType, nCType, nSqlType, cbColDef, ibScale, rgbValue, cbValueMax, pcbValue)); } return retcode; } SQLRETURN SQL_API SQLBindParameter ( SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT fParamType, SQLSMALLINT fCType, SQLSMALLINT fSqlType, SQLULEN cbColDef, SQLSMALLINT ibScale, SQLPOINTER rgbValue, SQLLEN cbValueMax, SQLLEN * pcbValue) { ENTER_STMT (hstmt, trace_SQLBindParameter (TRACE_ENTER, hstmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale, rgbValue, cbValueMax, pcbValue)); retcode = SQLBindParameter_Internal ( hstmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale, rgbValue, cbValueMax, pcbValue); LEAVE_STMT (hstmt, trace_SQLBindParameter (TRACE_LEAVE, hstmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale, rgbValue, cbValueMax, pcbValue)); } static SQLRETURN SQLParamOptions_Internal ( SQLHSTMT hstmt, SQLULEN crow, SQLULEN * pirow) { STMT (pstmt, hstmt); HPROC hproc2 = SQL_NULL_HPROC; HPROC hproc3 = SQL_NULL_HPROC; SQLRETURN retcode; CONN (pdbc, pstmt->hdbc); SQLUINTEGER odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; SQLUINTEGER dodbc_ver = ((ENV_t *) pdbc->henv)->dodbc_ver; if (crow == (SQLULEN) 0UL) { PUSHSQLERR (pstmt->herr, en_S1107); return SQL_ERROR; } if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } hproc2 = _iodbcdm_getproc (pstmt->hdbc, en_ParamOptions); #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pstmt->hdbc, en_SetStmtAttr); #endif if (odbc_ver == SQL_OV_ODBC2 && ( dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x0300) if (hproc3 != SQL_NULL_HPROC) { CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc3, (pstmt->dhstmt, SQL_ATTR_PARAMSET_SIZE, crow, 0)); if (SQL_SUCCEEDED (retcode)) { CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc3, (pstmt->dhstmt, SQL_ATTR_PARAMS_PROCESSED_PTR, pirow, 0)); } } else #endif { if (hproc2 == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc2, (pstmt->dhstmt, crow, pirow)); } pstmt->paramset_size = crow; return retcode; } SQLRETURN SQL_API SQLParamOptions( SQLHSTMT hstmt, SQLULEN crow, SQLULEN * pirow) { ENTER_STMT (hstmt, trace_SQLParamOptions (TRACE_ENTER, hstmt, crow, pirow)); retcode = SQLParamOptions_Internal (hstmt, crow, pirow); LEAVE_STMT (hstmt, trace_SQLParamOptions (TRACE_LEAVE, hstmt, crow, pirow)); } static SQLRETURN SQLSetScrollOptions_Internal ( SQLHSTMT hstmt, SQLUSMALLINT fConcurrency, SQLLEN crowKeyset, SQLUSMALLINT crowRowset) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); HPROC hproc = SQL_NULL_HPROC; sqlstcode_t sqlstat = en_00000; SQLRETURN retcode = SQL_SUCCESS; SQLUINTEGER odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; SQLUINTEGER dodbc_ver = ((ENV_t *) pdbc->henv)->dodbc_ver; for (;;) { if (crowRowset == (UWORD) 0) { sqlstat = en_S1107; break; } if (crowKeyset > (SDWORD) 0L && crowKeyset < (SDWORD) crowRowset) { sqlstat = en_S1107; break; } if (crowKeyset < 1) { if (crowKeyset != SQL_SCROLL_FORWARD_ONLY && crowKeyset != SQL_SCROLL_STATIC && crowKeyset != SQL_SCROLL_KEYSET_DRIVEN && crowKeyset != SQL_SCROLL_DYNAMIC) { sqlstat = en_S1107; break; } } if (fConcurrency != SQL_CONCUR_READ_ONLY && fConcurrency != SQL_CONCUR_LOCK && fConcurrency != SQL_CONCUR_ROWVER && fConcurrency != SQL_CONCUR_VALUES) { sqlstat = en_S1108; break; } #if (ODBCVER < 0x0300) if (pstmt->state != en_stmt_allocated) { sqlstat = en_S1010; break; } #endif hproc = _iodbcdm_getproc (pstmt->hdbc, en_SetScrollOptions); if (dodbc_ver == SQL_OV_ODBC3 && odbc_ver == SQL_OV_ODBC3) hproc = SQL_NULL_HPROC; if (hproc != SQL_NULL_HPROC) { CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, fConcurrency, crowKeyset, crowRowset)); } else { #if (ODBCVER >= 0x0300) SQLINTEGER InfoValue, InfoType, Value; HPROC hproc1 = _iodbcdm_getproc (pstmt->hdbc, en_SetStmtAttr); HPROC hproc2 = _iodbcdm_getproc (pstmt->hdbc, en_GetInfo); if (hproc1 == SQL_NULL_HPROC || hproc2 == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } switch (crowKeyset) { case SQL_SCROLL_FORWARD_ONLY: InfoType = SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2; Value = SQL_CURSOR_FORWARD_ONLY; break; case SQL_SCROLL_STATIC: InfoType = SQL_STATIC_CURSOR_ATTRIBUTES2; Value = SQL_CURSOR_STATIC; break; case SQL_SCROLL_DYNAMIC: InfoType = SQL_DYNAMIC_CURSOR_ATTRIBUTES2; Value = SQL_CURSOR_DYNAMIC; break; case SQL_SCROLL_KEYSET_DRIVEN: default: InfoType = SQL_KEYSET_CURSOR_ATTRIBUTES2; Value = SQL_CURSOR_KEYSET_DRIVEN; break; } CALL_DRIVER (pstmt->hdbc, pdbc, retcode, hproc2, (pdbc->dhdbc, InfoType, &InfoValue, 0, NULL)); if (retcode != SQL_SUCCESS) { return retcode; } switch (fConcurrency) { case SQL_CONCUR_READ_ONLY: if (!(InfoValue & SQL_CA2_READ_ONLY_CONCURRENCY)) { PUSHSQLERR (pstmt->herr, en_S1C00); return SQL_ERROR; } break; case SQL_CONCUR_LOCK: if (!(InfoValue & SQL_CA2_LOCK_CONCURRENCY)) { PUSHSQLERR (pstmt->herr, en_S1C00); return SQL_ERROR; } break; case SQL_CONCUR_ROWVER: if (!(InfoValue & SQL_CA2_OPT_ROWVER_CONCURRENCY)) { PUSHSQLERR (pstmt->herr, en_S1C00); return SQL_ERROR; } break; case SQL_CONCUR_VALUES: if (!(InfoValue & SQL_CA2_OPT_VALUES_CONCURRENCY)) { PUSHSQLERR (pstmt->herr, en_S1C00); return SQL_ERROR; } break; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc1, (pstmt->dhstmt, SQL_ATTR_CURSOR_TYPE, Value, 0)); if (retcode != SQL_SUCCESS) return retcode; CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc1, (pstmt->dhstmt, SQL_ATTR_CONCURRENCY, fConcurrency, 0)); if (retcode != SQL_SUCCESS) return retcode; if (crowKeyset > 0) { CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc1, (pstmt->dhstmt, SQL_ATTR_KEYSET_SIZE, crowKeyset, 0)); if (retcode != SQL_SUCCESS) return retcode; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc1, (pstmt->dhstmt, SQL_ROWSET_SIZE, crowRowset, 0)); if (retcode != SQL_SUCCESS) return retcode; #else sqlstat = en_IM001; break; #endif } sqlstat = en_00000; if (1) /* turn off solaris warning message */ break; } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } return retcode; } SQLRETURN SQL_API SQLSetScrollOptions ( SQLHSTMT hstmt, SQLUSMALLINT fConcurrency, SQLLEN crowKeyset, SQLUSMALLINT crowRowset) { ENTER_STMT (hstmt, trace_SQLSetScrollOptions (TRACE_ENTER, hstmt, fConcurrency, crowKeyset, crowRowset)); retcode = SQLSetScrollOptions_Internal ( hstmt, fConcurrency, crowKeyset, crowRowset); LEAVE_STMT (hstmt, trace_SQLSetScrollOptions (TRACE_LEAVE, hstmt, fConcurrency, crowKeyset, crowRowset)); } SQLRETURN SQL_API SQLSetParam ( SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT fCType, SQLSMALLINT fSqlType, SQLULEN cbColDef, SQLSMALLINT ibScale, SQLPOINTER rgbValue, SQLLEN * pcbValue) { return SQLBindParameter (hstmt, ipar, (SWORD) SQL_PARAM_INPUT_OUTPUT, fCType, fSqlType, cbColDef, ibScale, rgbValue, SQL_SETPARAM_VALUE_MAX, pcbValue); } libiodbc-3.52.9/iodbc/info.c0000644000076400007640000010036312323210535012470 00000000000000/* * info.c * * $Id$ * * Information functions * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef WIN32 #define SECT1 "ODBC 32 bit Data Sources" #define SECT2 "ODBC 32 bit Drivers" #else #define SECT1 "ODBC Data Sources" #define SECT2 "ODBC Drivers" #endif #define MAX_ENTRIES 1024 static int stricmp (const char *s1, const char *s2) { int cmp; while (*s1) { if ((cmp = toupper (*s1) - toupper (*s2)) != 0) return cmp; s1++; s2++; } return (*s2) ? -1 : 0; } static int SectSorter (const void *p1, const void *p2) { const char **s1 = (const char **) p1; const char **s2 = (const char **) p2; return stricmp (*s1, *s2); } SQLRETURN SQL_API SQLDataSources_Internal ( SQLHENV henv, SQLUSMALLINT fDir, SQLPOINTER szDSN, SQLSMALLINT cbDSNMax, SQLSMALLINT * pcbDSN, SQLPOINTER szDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLCHAR waMode) { GENV (genv, henv); char buffer[4096], desc[1024], *ptr; int i, j, usernum = 0; static int cur_entry = -1; static int num_entries = 0; static void **sect = NULL; SQLUSMALLINT fDirOld = fDir; waMode = waMode; /*UNUSED*/ /* check argument */ if (cbDSNMax < 0 || cbDescMax < 0) { PUSHSQLERR (genv->herr, en_S1090); return SQL_ERROR; } if (fDir != SQL_FETCH_FIRST && fDir != SQL_FETCH_NEXT && fDir != SQL_FETCH_FIRST_USER && fDir != SQL_FETCH_FIRST_SYSTEM) { PUSHSQLERR (genv->herr, en_S1103); return SQL_ERROR; } if (cur_entry < 0 || fDir == SQL_FETCH_FIRST || fDir == SQL_FETCH_FIRST_USER || fDir == SQL_FETCH_FIRST_SYSTEM) { cur_entry = 0; num_entries = 0; /* * Free old section list */ if (sect) { for (i = 0; i < MAX_ENTRIES; i++) if (sect[i]) free (sect[i]); free (sect); } if ((sect = (void **) calloc (MAX_ENTRIES, sizeof (void *))) == NULL) { PUSHSQLERR (genv->herr, en_S1011); return SQL_ERROR; } if (fDirOld == SQL_FETCH_FIRST) fDir = SQL_FETCH_FIRST_USER; do { SQLSetConfigMode (fDir == SQL_FETCH_FIRST_SYSTEM ? ODBC_SYSTEM_DSN : ODBC_USER_DSN); SQLGetPrivateProfileString (SECT1, NULL, "", buffer, sizeof(buffer) / sizeof(SQLTCHAR), "odbc.ini"); /* For each datasources */ for(ptr = buffer, i = 1 ; *ptr && i ; ptr += STRLEN(ptr) + 1) { /* Add this section to the datasources list */ if (fDirOld == SQL_FETCH_FIRST && fDir == SQL_FETCH_FIRST_SYSTEM) { for(j = 0 ; j= MAX_ENTRIES) { i = 0; break; } /* Skip the rest */ /* Copy the datasource name */ sect[num_entries<<1] = STRDUP (ptr); /* ... and its description */ SQLSetConfigMode (fDir == SQL_FETCH_FIRST_SYSTEM ? ODBC_SYSTEM_DSN : ODBC_USER_DSN); SQLGetPrivateProfileString (SECT1, ptr, "", desc, sizeof(desc) / sizeof(SQLTCHAR), "odbc.ini"); sect[(num_entries++<<1) + 1] = STRDUP (desc); } switch(fDir) { case SQL_FETCH_FIRST_USER: fDir = SQL_FETCH_FIRST_SYSTEM; usernum = num_entries; break; case SQL_FETCH_FIRST_SYSTEM: fDir = SQL_FETCH_FIRST; break; }; } while (fDir!=SQL_FETCH_FIRST && fDirOld==SQL_FETCH_FIRST); fDir = fDirOld; /* * Sort all entries so we can present a nice list */ if (num_entries > 1) { qsort (sect, num_entries, sizeof (char **) + sizeof (char **), SectSorter); } } /* * Try to get to the next item */ if (cur_entry >= num_entries) { cur_entry = 0; /* Next time, start all over again */ return SQL_NO_DATA_FOUND; } /* * Copy DSN information */ STRNCPY (szDSN, sect[cur_entry << 1], cbDSNMax); if (pcbDSN) *pcbDSN = STRLEN (szDSN); /* * And find the description that goes with this entry */ STRNCPY (szDesc, sect[(cur_entry << 1) + 1], cbDescMax); if (pcbDesc) *pcbDesc = STRLEN (szDesc); /* * Next record */ cur_entry++; return SQL_SUCCESS; } SQLRETURN SQL_API SQLDataSources ( SQLHENV henv, SQLUSMALLINT fDir, SQLCHAR * szDSN, SQLSMALLINT cbDSNMax, SQLSMALLINT * pcbDSN, SQLCHAR * szDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc) { ENTER_HENV (henv, trace_SQLDataSources (TRACE_ENTER, henv, fDir, szDSN, cbDSNMax, pcbDSN, szDesc, cbDescMax, pcbDesc)); retcode = SQLDataSources_Internal ( henv, fDir, szDSN, cbDSNMax, pcbDSN, szDesc, cbDescMax, pcbDesc, 'A'); LEAVE_HENV (henv, trace_SQLDataSources (TRACE_LEAVE, henv, fDir, szDSN, cbDSNMax, pcbDSN, szDesc, cbDescMax, pcbDesc)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLDataSourcesA ( SQLHENV henv, SQLUSMALLINT fDir, SQLCHAR * szDSN, SQLSMALLINT cbDSNMax, SQLSMALLINT * pcbDSN, SQLCHAR * szDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc) { ENTER_HENV (henv, trace_SQLDataSources (TRACE_ENTER, henv, fDir, szDSN, cbDSNMax, pcbDSN, szDesc, cbDescMax, pcbDesc)); retcode = SQLDataSources_Internal( henv, fDir, szDSN, cbDSNMax, pcbDSN, szDesc, cbDescMax, pcbDesc, 'A'); LEAVE_HENV (henv, trace_SQLDataSources (TRACE_LEAVE, henv, fDir, szDSN, cbDSNMax, pcbDSN, szDesc, cbDescMax, pcbDesc)); } SQLRETURN SQL_API SQLDataSourcesW ( SQLHENV henv, SQLUSMALLINT fDir, SQLWCHAR * szDSN, SQLSMALLINT cbDSNMax, SQLSMALLINT * pcbDSN, SQLWCHAR * szDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc) { SQLCHAR *_DSN = NULL; SQLCHAR *_Desc = NULL; ENTER_HENV (henv, trace_SQLDataSourcesW (TRACE_ENTER, henv, fDir, szDSN, cbDSNMax, pcbDSN, szDesc, cbDescMax, pcbDesc)); if (cbDSNMax > 0) { if ((_DSN = (SQLCHAR *) malloc (cbDSNMax * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSHSQLERR (genv->herr, en_S1001); return SQL_ERROR; } } if (cbDescMax > 0) { if ((_Desc = (SQLCHAR *) malloc (cbDescMax * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSHSQLERR (genv->herr, en_S1001); return SQL_ERROR; } } retcode = SQLDataSources_Internal ( henv, fDir, _DSN, cbDSNMax * UTF8_MAX_CHAR_LEN, pcbDSN, _Desc, cbDescMax * UTF8_MAX_CHAR_LEN, pcbDesc, 'W'); if (SQL_SUCCEEDED (retcode)) { dm_StrCopyOut2_U8toW (_DSN, szDSN, cbDSNMax, pcbDSN); dm_StrCopyOut2_U8toW (_Desc, szDesc, cbDescMax, pcbDesc); } MEM_FREE (_DSN); MEM_FREE (_Desc); LEAVE_HENV (henv, trace_SQLDataSourcesW (TRACE_LEAVE, henv, fDir, szDSN, cbDSNMax, pcbDSN, szDesc, cbDescMax, pcbDesc)); } #endif SQLRETURN SQL_API SQLDrivers_Internal ( SQLHENV henv, SQLUSMALLINT fDir, SQLPOINTER szDrvDesc, SQLSMALLINT cbDrvDescMax, SQLSMALLINT * pcbDrvDesc, SQLPOINTER szDrvAttr, SQLSMALLINT cbDrvAttrMax, SQLSMALLINT * pcbDrvAttr, SQLCHAR waMode) { GENV (genv, henv); char buffer[4096], desc[1024], *ptr; int i, j, usernum = 0; static int cur_entry = -1; static int num_entries = 0; static void **sect = NULL; SQLUSMALLINT fDirOld = fDir; waMode = waMode; /*UNUSED*/ /* check argument */ if (cbDrvDescMax < 0 || cbDrvAttrMax < 0) { PUSHSQLERR (genv->herr, en_S1090); return SQL_ERROR; } if (fDir != SQL_FETCH_FIRST && fDir != SQL_FETCH_NEXT) { PUSHSQLERR (genv->herr, en_S1103); return SQL_ERROR; } if (cur_entry < 0 || fDir == SQL_FETCH_FIRST) { cur_entry = 0; num_entries = 0; /* * Free old section list */ if (sect) { for (i = 0; i < MAX_ENTRIES; i++) if (sect[i]) free (sect[i]); free (sect); } if ((sect = (void **) calloc (MAX_ENTRIES, sizeof (void *))) == NULL) { PUSHSQLERR (genv->herr, en_S1011); return SQL_ERROR; } if (fDirOld == SQL_FETCH_FIRST) fDir = SQL_FETCH_FIRST_USER; do { SQLSetConfigMode (fDir == SQL_FETCH_FIRST_SYSTEM ? ODBC_SYSTEM_DSN : ODBC_USER_DSN); SQLGetPrivateProfileString (SECT2, NULL, "", buffer, sizeof(buffer) / sizeof(SQLTCHAR), "odbcinst.ini"); /* For each datasources */ for(ptr = buffer, i = 1 ; *ptr && i ; ptr += STRLEN(ptr) + 1) { /* Add this section to the datasources list */ if (fDirOld == SQL_FETCH_FIRST && fDir == SQL_FETCH_FIRST_SYSTEM) { for(j = 0 ; j= MAX_ENTRIES) { i = 0; break; } /* Skip the rest */ /* ... and its description */ SQLSetConfigMode (fDir == SQL_FETCH_FIRST_SYSTEM ? ODBC_SYSTEM_DSN : ODBC_USER_DSN); SQLGetPrivateProfileString (SECT2, ptr, "", desc, sizeof(desc) / sizeof(SQLTCHAR), "odbcinst.ini"); /* Check if the driver is installed */ if(!STRCASEEQ(desc, "Installed")) continue; /* Copy the driver name */ sect[num_entries<<1] = STRDUP (ptr); sect[(num_entries++<<1) + 1] = STRDUP (desc); } switch(fDir) { case SQL_FETCH_FIRST_USER: fDir = SQL_FETCH_FIRST_SYSTEM; usernum = num_entries; break; case SQL_FETCH_FIRST_SYSTEM: fDir = SQL_FETCH_FIRST; break; }; } while (fDir!=SQL_FETCH_FIRST && fDirOld==SQL_FETCH_FIRST); fDir = fDirOld; /* * Sort all entries so we can present a nice list */ if (num_entries > 1) { qsort (sect, num_entries, sizeof (char **) + sizeof (char **), SectSorter); } } /* * Try to get to the next item */ if (cur_entry >= num_entries) { cur_entry = 0; /* Next time, start all over again */ return SQL_NO_DATA_FOUND; } /* * Copy Driver information */ STRNCPY (szDrvDesc, sect[cur_entry << 1], cbDrvDescMax); if (pcbDrvDesc) *pcbDrvDesc = STRLEN (szDrvDesc); /* * And find the description that goes with this entry */ STRNCPY (szDrvAttr, sect[(cur_entry << 1) + 1], cbDrvAttrMax); if (pcbDrvAttr) *pcbDrvAttr = STRLEN (szDrvAttr); /* * Next record */ cur_entry++; return SQL_SUCCESS; } SQLRETURN SQL_API SQLDrivers ( SQLHENV henv, SQLUSMALLINT fDir, SQLCHAR * szDrvDesc, SQLSMALLINT cbDrvDescMax, SQLSMALLINT * pcbDrvDesc, SQLCHAR * szDrvAttr, SQLSMALLINT cbDrvAttrMax, SQLSMALLINT * pcbDrvAttr) { ENTER_HENV (henv, trace_SQLDrivers (TRACE_ENTER, henv, fDir, szDrvDesc, cbDrvDescMax, pcbDrvDesc, szDrvAttr, cbDrvAttrMax, pcbDrvAttr)); retcode = SQLDrivers_Internal( henv, fDir, szDrvDesc, cbDrvDescMax, pcbDrvDesc, szDrvAttr, cbDrvAttrMax, pcbDrvAttr, 'A'); LEAVE_HENV (henv, trace_SQLDrivers (TRACE_LEAVE, henv, fDir, szDrvDesc, cbDrvDescMax, pcbDrvDesc, szDrvAttr, cbDrvAttrMax, pcbDrvAttr)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLDriversA ( SQLHENV henv, SQLUSMALLINT fDir, SQLCHAR * szDrvDesc, SQLSMALLINT cbDrvDescMax, SQLSMALLINT * pcbDrvDesc, SQLCHAR * szDrvAttr, SQLSMALLINT cbDrvAttrMax, SQLSMALLINT * pcbDrvAttr) { ENTER_HENV (henv, trace_SQLDrivers (TRACE_ENTER, henv, fDir, szDrvDesc, cbDrvDescMax, pcbDrvDesc, szDrvAttr, cbDrvAttrMax, pcbDrvAttr)); retcode = SQLDrivers_Internal( henv, fDir, szDrvDesc, cbDrvDescMax, pcbDrvDesc, szDrvAttr, cbDrvAttrMax, pcbDrvAttr, 'A'); LEAVE_HENV (henv, trace_SQLDrivers (TRACE_LEAVE, henv, fDir, szDrvDesc, cbDrvDescMax, pcbDrvDesc, szDrvAttr, cbDrvAttrMax, pcbDrvAttr)); } SQLRETURN SQL_API SQLDriversW (SQLHENV henv, SQLUSMALLINT fDir, SQLWCHAR * szDrvDesc, SQLSMALLINT cbDrvDescMax, SQLSMALLINT * pcbDrvDesc, SQLWCHAR * szDrvAttr, SQLSMALLINT cbDrvAttrMax, SQLSMALLINT * pcbDrvAttr) { SQLCHAR *_Driver = NULL; SQLCHAR *_Attrs = NULL; ENTER_HENV (henv, trace_SQLDriversW (TRACE_ENTER, henv, fDir, szDrvDesc, cbDrvDescMax, pcbDrvDesc, szDrvAttr, cbDrvAttrMax, pcbDrvAttr)); if (cbDrvDescMax > 0) { if ((_Driver = (SQLCHAR *) malloc (cbDrvDescMax * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSHSQLERR (genv->herr, en_S1001); return SQL_ERROR; } } if (cbDrvAttrMax > 0) { if ((_Attrs = (SQLCHAR *) malloc (cbDrvAttrMax * UTF8_MAX_CHAR_LEN + 1)) == NULL) { PUSHSQLERR (genv->herr, en_S1001); return SQL_ERROR; } } retcode = SQLDrivers_Internal ( henv, fDir, _Driver, cbDrvDescMax * UTF8_MAX_CHAR_LEN, pcbDrvDesc, _Attrs, cbDrvAttrMax * UTF8_MAX_CHAR_LEN, pcbDrvAttr, 'W'); if (SQL_SUCCEEDED (retcode)) { dm_StrCopyOut2_U8toW (_Driver, szDrvDesc, cbDrvDescMax, pcbDrvDesc); dm_StrCopyOut2_U8toW (_Attrs, szDrvAttr, cbDrvAttrMax, pcbDrvAttr); } MEM_FREE (_Driver); MEM_FREE (_Attrs); LEAVE_HENV (henv, trace_SQLDriversW (TRACE_LEAVE, henv, fDir, szDrvDesc, cbDrvDescMax, pcbDrvDesc, szDrvAttr, cbDrvAttrMax, pcbDrvAttr)); } #endif SQLRETURN SQL_API SQLGetInfo_Internal ( SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue, SQLCHAR waMode) { CONN (pdbc, hdbc); ENVR (penv, pdbc->henv); STMT (pstmt, NULL); STMT (tpstmt, NULL); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; void * _InfoValue = NULL; void * infoValueOut = rgbInfoValue; SQLPOINTER ptr = 0; int size = 0, len = 0, ret = 0; wchar_t buf[20] = {'\0'}; if (cbInfoValueMax < 0) { PUSHSQLERR (pdbc->herr, en_S1090); return SQL_ERROR; } #if (ODBCVER < 0x0300) if ( /* fInfoType < SQL_INFO_FIRST || */ (fInfoType > SQL_INFO_LAST && fInfoType < SQL_INFO_DRIVER_START)) { PUSHSQLERR (pdbc->herr, en_S1096); return SQL_ERROR; } #endif if (fInfoType == SQL_ODBC_VER #if (ODBCVER >= 0x0300) || fInfoType == SQL_DM_VER #endif ) { #if (ODBCVER >= 0x0300) if (fInfoType == SQL_DM_VER) sprintf ((char*)buf, "%02d.%02d.%04d.%04d", SQL_SPEC_MAJOR, SQL_SPEC_MINOR, IODBC_BUILD / 10000, IODBC_BUILD % 10000); else #endif sprintf ((char*)buf, "%02d.%02d.0000", SQL_SPEC_MAJOR, SQL_SPEC_MINOR); if(waMode == 'W') { SQLWCHAR *prov = dm_SQL_U8toW((SQLCHAR *)buf, SQL_NTS); if(prov) { WCSNCPY(buf, prov, sizeof(buf)/sizeof(wchar_t)); free(prov); } else buf[0] = L'\0'; } if (rgbInfoValue != NULL && cbInfoValueMax > 0) { len = (waMode != 'W' ? STRLEN (buf) : WCSLEN(buf)); if (len > cbInfoValueMax - 1) { len = cbInfoValueMax - 1; PUSHSQLERR (pdbc->herr, en_01004); retcode = SQL_SUCCESS_WITH_INFO; } if (waMode != 'W') { STRNCPY (rgbInfoValue, buf, len); ((char *) rgbInfoValue)[len] = '\0'; } else { WCSNCPY (rgbInfoValue, buf, len); ((wchar_t *) rgbInfoValue)[len] = L'\0'; } } if (pcbInfoValue != NULL) { *pcbInfoValue = (SWORD) len; } return retcode; } if (pdbc->state == en_dbc_allocated || pdbc->state == en_dbc_needdata) { PUSHSQLERR (pdbc->herr, en_08003); return SQL_ERROR; } switch (fInfoType) { case SQL_DRIVER_HDBC: ptr = (SQLPOINTER) (pdbc->dhdbc); size = sizeof (ptr); break; case SQL_DRIVER_HENV: penv = (ENV_t *) (pdbc->henv); ptr = (SQLPOINTER) (penv->dhenv); size = sizeof (ptr); break; case SQL_DRIVER_HLIB: penv = (ENV_t *) (pdbc->henv); ptr = (SQLPOINTER) (penv->hdll); size = sizeof (ptr); break; case SQL_DRIVER_HSTMT: if (rgbInfoValue != NULL) { pstmt = *((STMT_t **) rgbInfoValue); } for (tpstmt = (STMT_t *) (pdbc->hstmt); tpstmt != NULL; tpstmt = tpstmt->next) { if (tpstmt == pstmt) { break; } } if (tpstmt == NULL) { PUSHSQLERR (pdbc->herr, en_S1009); return SQL_ERROR; } ptr = (SQLPOINTER) (pstmt->dhstmt); size = sizeof (ptr); break; case SQL_DRIVER_NAME: case SQL_DRIVER_ODBC_VER: case SQL_DRIVER_VER: case SQL_ODBC_INTERFACE_CONFORMANCE: break; default: /* NOTE : this was before the switch, just move here to let some information going through */ if (pdbc->state == en_dbc_allocated || pdbc->state == en_dbc_needdata) { PUSHSQLERR (pdbc->herr, en_08003); return SQL_ERROR; } } if (size) { if (rgbInfoValue != NULL) { rgbInfoValue = ptr; } if (pcbInfoValue != NULL) { *(pcbInfoValue) = (SWORD) size; } return SQL_SUCCESS; } #if (ODBCVER >= 0x0300) /* * This was a temp value in ODBC 2 */ if (((ENV_t *) pdbc->henv)->dodbc_ver == SQL_OV_ODBC2 && fInfoType == SQL_OJ_CAPABILITIES) fInfoType = 65003; #endif /* ODBCVER >= 0x0300 */ if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { switch(fInfoType) { case SQL_ACCESSIBLE_PROCEDURES: case SQL_ACCESSIBLE_TABLES: case SQL_CATALOG_NAME: case SQL_CATALOG_NAME_SEPARATOR: case SQL_CATALOG_TERM: case SQL_COLLATION_SEQ: case SQL_COLUMN_ALIAS: case SQL_DATA_SOURCE_NAME: case SQL_DATA_SOURCE_READ_ONLY: case SQL_DATABASE_NAME: case SQL_DBMS_NAME: case SQL_DBMS_VER: case SQL_DESCRIBE_PARAMETER: case SQL_DRIVER_NAME: case SQL_DRIVER_ODBC_VER: case SQL_DRIVER_VER: case SQL_ODBC_VER: case SQL_EXPRESSIONS_IN_ORDERBY: case SQL_IDENTIFIER_QUOTE_CHAR: case SQL_INTEGRITY: case SQL_KEYWORDS: case SQL_LIKE_ESCAPE_CLAUSE: case SQL_MAX_ROW_SIZE_INCLUDES_LONG: case SQL_MULT_RESULT_SETS: case SQL_MULTIPLE_ACTIVE_TXN: case SQL_NEED_LONG_DATA_LEN: case SQL_ORDER_BY_COLUMNS_IN_SELECT: case SQL_PROCEDURE_TERM: case SQL_PROCEDURES: case SQL_ROW_UPDATES: case SQL_SCHEMA_TERM: case SQL_SEARCH_PATTERN_ESCAPE: case SQL_SERVER_NAME: case SQL_SPECIAL_CHARACTERS: case SQL_TABLE_TERM: case SQL_USER_NAME: case SQL_XOPEN_CLI_YEAR: case SQL_OUTER_JOINS: if (waMode != 'W') { /* ansi=>unicode*/ if ((_InfoValue = malloc(cbInfoValueMax * sizeof(wchar_t) + 1)) == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); return SQL_ERROR; } cbInfoValueMax *= sizeof(wchar_t); } else { /* unicode=>ansi*/ if ((_InfoValue = malloc(cbInfoValueMax + 1)) == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); return SQL_ERROR; } cbInfoValueMax /= sizeof(wchar_t); } infoValueOut = _InfoValue; break; } } CALL_UDRIVER(hdbc, pdbc, retcode, hproc, penv->unicode_driver, en_GetInfo, (pdbc->dhdbc, fInfoType, infoValueOut, cbInfoValueMax, pcbInfoValue)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pdbc->herr, en_IM001); return SQL_ERROR; } if (retcode == SQL_ERROR && fInfoType == SQL_DRIVER_ODBC_VER) { if (waMode != 'W') { STRCPY (buf, "01.00"); if (rgbInfoValue != NULL && cbInfoValueMax > 0) { len = STRLEN (buf); if (len > cbInfoValueMax - 1) { len = cbInfoValueMax - 1; ret = -1; } else { ret = 0; } STRNCPY (rgbInfoValue, buf, len); ((char *) rgbInfoValue)[len] = '\0'; } if (pcbInfoValue != NULL) *pcbInfoValue = (SWORD) len; } else { ret = dm_StrCopyOut2_A2W ((SQLCHAR *) "01.00", (SQLWCHAR *) rgbInfoValue, cbInfoValueMax / sizeof(wchar_t), pcbInfoValue); if (pcbInfoValue) *pcbInfoValue = *pcbInfoValue * sizeof(wchar_t); } if (ret == -1) { PUSHSQLERR (pdbc->herr, en_01004); retcode = SQL_SUCCESS_WITH_INFO; } else { retcode = SQL_SUCCESS; } } else if (rgbInfoValue && SQL_SUCCEEDED (retcode) && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W'))) { switch(fInfoType) { case SQL_ACCESSIBLE_PROCEDURES: case SQL_ACCESSIBLE_TABLES: case SQL_CATALOG_NAME: case SQL_CATALOG_NAME_SEPARATOR: case SQL_CATALOG_TERM: case SQL_COLLATION_SEQ: case SQL_COLUMN_ALIAS: case SQL_DATA_SOURCE_NAME: case SQL_DATA_SOURCE_READ_ONLY: case SQL_DATABASE_NAME: case SQL_DBMS_NAME: case SQL_DBMS_VER: case SQL_DESCRIBE_PARAMETER: case SQL_DRIVER_NAME: case SQL_DRIVER_ODBC_VER: case SQL_DRIVER_VER: case SQL_ODBC_VER: case SQL_EXPRESSIONS_IN_ORDERBY: case SQL_IDENTIFIER_QUOTE_CHAR: case SQL_INTEGRITY: case SQL_KEYWORDS: case SQL_LIKE_ESCAPE_CLAUSE: case SQL_MAX_ROW_SIZE_INCLUDES_LONG: case SQL_MULT_RESULT_SETS: case SQL_MULTIPLE_ACTIVE_TXN: case SQL_NEED_LONG_DATA_LEN: case SQL_ORDER_BY_COLUMNS_IN_SELECT: case SQL_PROCEDURE_TERM: case SQL_PROCEDURES: case SQL_ROW_UPDATES: case SQL_SCHEMA_TERM: case SQL_SEARCH_PATTERN_ESCAPE: case SQL_SERVER_NAME: case SQL_SPECIAL_CHARACTERS: case SQL_TABLE_TERM: case SQL_USER_NAME: case SQL_XOPEN_CLI_YEAR: case SQL_OUTER_JOINS: if (waMode != 'W') { /* ansi<=unicode*/ ret = dm_StrCopyOut2_W2A ((SQLWCHAR *) infoValueOut, (SQLCHAR *) rgbInfoValue, cbInfoValueMax / sizeof(wchar_t), pcbInfoValue); } else { /* unicode<=ansi*/ ret = dm_StrCopyOut2_A2W ((SQLCHAR *) infoValueOut, (SQLWCHAR *) rgbInfoValue, cbInfoValueMax, pcbInfoValue); if (pcbInfoValue) *pcbInfoValue = *pcbInfoValue * sizeof(wchar_t); } if (ret == -1) { PUSHSQLERR (pdbc->herr, en_01004); retcode = SQL_SUCCESS_WITH_INFO; } break; } } MEM_FREE(_InfoValue); return retcode; } SQLRETURN SQL_API SQLGetInfo (SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue) { ENTER_HDBC (hdbc, 0, trace_SQLGetInfo (TRACE_ENTER, hdbc, fInfoType, rgbInfoValue, cbInfoValueMax, pcbInfoValue)); retcode = SQLGetInfo_Internal( hdbc, fInfoType, rgbInfoValue, cbInfoValueMax, pcbInfoValue, 'A'); LEAVE_HDBC (hdbc, 0, trace_SQLGetInfo (TRACE_LEAVE, hdbc, fInfoType, rgbInfoValue, cbInfoValueMax, pcbInfoValue)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLGetInfoA (SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue) { ENTER_HDBC (hdbc, 0, trace_SQLGetInfo (TRACE_ENTER, hdbc, fInfoType, rgbInfoValue, cbInfoValueMax, pcbInfoValue)); retcode = SQLGetInfo_Internal( hdbc, fInfoType, rgbInfoValue, cbInfoValueMax, pcbInfoValue, 'A'); LEAVE_HDBC (hdbc, 0, trace_SQLGetInfo (TRACE_LEAVE, hdbc, fInfoType, rgbInfoValue, cbInfoValueMax, pcbInfoValue)); } SQLRETURN SQL_API SQLGetInfoW ( SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue) { ENTER_HDBC (hdbc, 0, trace_SQLGetInfoW (TRACE_ENTER, hdbc, fInfoType, rgbInfoValue, cbInfoValueMax, pcbInfoValue)); retcode = SQLGetInfo_Internal ( hdbc, fInfoType, rgbInfoValue, cbInfoValueMax, pcbInfoValue, 'W'); LEAVE_HDBC (hdbc, 0, trace_SQLGetInfoW (TRACE_LEAVE, hdbc, fInfoType, rgbInfoValue, cbInfoValueMax, pcbInfoValue)); } #endif static int FunctionNumbers[] = { 0 #define FUNCDEF(A,B,C) ,A #include "henv.ci" #undef FUNCDEF }; #if (ODBCVER >= 0x0300) #define SQL_ODBC3_SET_FUNC_ON(pfExists, uwAPI) \ *( ((UWORD*) (pfExists)) + ((uwAPI) >> 4) ) |= (1 << ((uwAPI) & 0x000F)) #define SQL_ODBC3_SET_FUNC_OFF(pfExists, uwAPI) \ *( ((UWORD*) (pfExists)) + ((uwAPI) >> 4) ) &= !(1 << ((uwAPI) & 0x000F)) #endif static SQLRETURN SQLGetFunctions_Internal ( SQLHDBC hdbc, SQLUSMALLINT fFunc, SQLUSMALLINT * pfExists) { CONN (pdbc, hdbc); HPROC hproc; SQLRETURN retcode; int i; UWORD functions2[100]; #if (ODBCVER >= 0x0300) UWORD functions3[SQL_API_ODBC3_ALL_FUNCTIONS_SIZE]; #endif if (pdbc->state == en_dbc_allocated || pdbc->state == en_dbc_needdata) { PUSHSQLERR (pdbc->herr, en_S1010); return SQL_ERROR; } if (pfExists == NULL) { return SQL_SUCCESS; } /* * These functions are supported by the iODBC driver manager */ if (fFunc == SQL_API_SQLDATASOURCES || fFunc == SQL_API_SQLDRIVERS #if (ODBCVER >= 0x0300) || fFunc == SQL_API_SQLGETENVATTR || fFunc == SQL_API_SQLSETENVATTR #endif ) { *pfExists = (UWORD) 1; return SQL_SUCCESS; } /* * Check if function number is within ODBC version context */ #if (ODBCVER < 0x0300) if (fFunc > SQL_EXT_API_LAST) { PUSHSQLERR (pdbc->herr, en_S1095); return SQL_ERROR; } #endif /* * In a ODBC 2.x driver context, the ODBC 3.x API calls are * mapped by the driver manager. */ #if (ODBCVER >= 0x0300) if (((ENV_t *) pdbc->henv)->dodbc_ver == SQL_OV_ODBC2) { switch (fFunc) { case SQL_API_ALL_FUNCTIONS: case SQL_API_ODBC3_ALL_FUNCTIONS: break; /* Mapped ODBC3 app -> ODBC2 driver functions */ case SQL_API_SQLALLOCHANDLE: case SQL_API_SQLFREEHANDLE: case SQL_API_SQLSETCONNECTATTR: case SQL_API_SQLGETCONNECTATTR: case SQL_API_SQLGETSTMTATTR: case SQL_API_SQLSETSTMTATTR: case SQL_API_SQLCOLATTRIBUTE: case SQL_API_SQLENDTRAN: case SQL_API_SQLBULKOPERATIONS: case SQL_API_SQLFETCHSCROLL: case SQL_API_SQLGETDIAGREC: case SQL_API_SQLGETDIAGFIELD: *pfExists = SQL_TRUE; return SQL_SUCCESS; case SQL_API_SQLBINDPARAM: fFunc = SQL_API_SQLBINDPARAMETER; break; default: if (fFunc > SQL_API_SQLBINDPARAMETER) { *pfExists = SQL_FALSE; return SQL_SUCCESS; } break; } } #endif /* * If the driver exports a SQLGetFunctions call, use it */ hproc = _iodbcdm_getproc (pdbc, en_GetFunctions); if (hproc != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, pdbc, retcode, hproc, (pdbc->dhdbc, fFunc, pfExists)); return retcode; } /* * Map deprecated functions */ if (fFunc == SQL_API_SQLSETPARAM) { fFunc = SQL_API_SQLBINDPARAMETER; } /* * Initialize intermediate result arrays */ memset (functions2, '\0', sizeof (functions2)); #if (ODBCVER > 0x0300) memset (functions3, '\0', sizeof (functions3)); #endif /* * Build result array by scanning for all API calls */ for (i = 1; i < __LAST_API_FUNCTION__; i++) { int j = FunctionNumbers[i]; hproc = _iodbcdm_getproc (pdbc, i); if (hproc != SQL_NULL_HPROC) { if (j < 100) functions2[j] = 1; #if (ODBCVER >= 0x0300) functions3[j >> 4] |= (1 << (j & 0x000F)); #endif } } /* * Finally return the information */ if (fFunc == SQL_API_ALL_FUNCTIONS) { memcpy (pfExists, &functions2, sizeof (functions2)); } #if (ODBCVER < 0x0300) else { *pfExists = functions2[fFunc]; } #else else if (fFunc == SQL_API_ODBC3_ALL_FUNCTIONS) { memcpy (pfExists, &functions3, sizeof (functions3)); } else { *pfExists = SQL_FUNC_EXISTS (functions3, fFunc); } #endif return SQL_SUCCESS; } SQLRETURN SQL_API SQLGetFunctions ( SQLHDBC hdbc, SQLUSMALLINT fFunc, SQLUSMALLINT * pfExists) { ENTER_HDBC (hdbc, 0, trace_SQLGetFunctions (TRACE_ENTER, hdbc, fFunc, pfExists)); retcode = SQLGetFunctions_Internal ( hdbc, fFunc, pfExists); LEAVE_HDBC (hdbc, 0, trace_SQLGetFunctions (TRACE_LEAVE, hdbc, fFunc, pfExists)); } libiodbc-3.52.9/iodbc/dlproc.c0000644000076400007640000001404312323210535013017 00000000000000/* * dlproc.c * * $Id$ * * Load driver and resolve driver's function entry point * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include char *odbcapi_symtab[] = { "UNKNOWN FUNCTION" #define FUNCDEF(A, B, C) ,C #include "henv.ci" #undef FUNCDEF }; HPROC _iodbcdm_getproc (HDBC hdbc, int idx) { CONN (pdbc, hdbc); ENV_t *penv; HPROC *phproc; if (idx <= 0 || idx >= __LAST_API_FUNCTION__) return SQL_NULL_HPROC; penv = (ENV_t *) (pdbc->henv); if (penv == NULL) return SQL_NULL_HPROC; phproc = penv->dllproc_tab + idx; if (*phproc == SQL_NULL_HPROC) *phproc = _iodbcdm_dllproc (penv->hdll, odbcapi_symtab[idx]); return *phproc; } static dlproc_t *pRoot = NULL; HDLL _iodbcdm_dllopen (char *path) { dlproc_t *pDrv = NULL, *p; /* * Check if we have already loaded the driver */ for (p = pRoot; p; p = p->next) { if (STREQ (p->path, path)) { pDrv = p; break; } } /* * If already loaded, increase ref counter */ if (pDrv) { pDrv->refcount++; /* * If the driver was unloaded, load it again */ if (pDrv->dll == NULL) pDrv->dll = (HDLL) DLL_OPEN (path); return pDrv->dll; } /* * Initialize new structure */ if ((pDrv = calloc (1, sizeof (dlproc_t))) == NULL) return NULL; pDrv->refcount = 1; pDrv->path = STRDUP (path); pDrv->dll = (HDLL) DLL_OPEN (path); /* * Add to linked list */ pDrv->next = pRoot; pRoot = pDrv; return pDrv->dll; } HPROC _iodbcdm_dllproc (HDLL hdll, char *sym) { return (HPROC) DLL_PROC (hdll, sym); } int _iodbcdm_dllclose (HDLL hdll) { dlproc_t *pDrv = NULL, *p; /* * Find loaded driver */ for (p = pRoot; p; p = p->next) { if (p->dll == hdll) { pDrv = p; break; } } /* * Not found */ if (!pDrv) return -1; /* * Decrease reference counter */ pDrv->refcount--; /* * Check if it is possible to unload the driver safely * * NOTE: Some drivers set explicit on_exit hooks, which makes it * impossible for the driver manager to unload the driver * as this would crash the executable at exit. */ if (pDrv->refcount == 0 && pDrv->safe_unload) { DLL_CLOSE (pDrv->dll); pDrv->dll = NULL; } return 0; } char * _iodbcdm_dllerror () { return DLL_ERROR (); } /* * If driver manager determines this driver is safe, flag the driver can * be unloaded if not used. */ void _iodbcdm_safe_unload (HDLL hdll) { dlproc_t *pDrv = NULL, *p; /* * Find loaded driver */ for (p = pRoot; p; p = p->next) { if (p->dll == hdll) { pDrv = p; break; } } /* * Driver not found */ if (!pDrv) return; pDrv->safe_unload = 1; } libiodbc-3.52.9/iodbc/trace/0000755000076400007640000000000012323210721012541 500000000000000libiodbc-3.52.9/iodbc/trace/FetchScroll.c0000644000076400007640000000722712323210535015050 00000000000000/* * FetchScroll.c * * $Id$ * * SQLFetchScroll trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLFetchScroll (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLLEN FetchOffset) { /* Trace function */ _trace_print_function (en_FetchScroll, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_fetchtype (FetchOrientation); _trace_len (FetchOffset); } #endif libiodbc-3.52.9/iodbc/trace/ParamOptions.c0000644000076400007640000000713212323210535015247 00000000000000/* * ParamOptions.c * * $Id$ * * SQLParamOptions trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLParamOptions (int trace_leave, int retcode, SQLHSTMT hstmt, SQLULEN crow, SQLULEN * pirow) { /* Trace function */ _trace_print_function (en_ParamOptions, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_ulen (crow); _trace_ulen_p (pirow, TRACE_OUTPUT_SUCCESS); } libiodbc-3.52.9/iodbc/trace/SpecialColumns.c0000644000076400007640000001367312323210535015563 00000000000000/* * SpecialColumns.c * * $Id$ * * SQLSpecialColumns trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_spcols_type (SQLUSMALLINT type) { char *ptr = "unknown column type"; switch (type) { _S (SQL_BEST_ROWID); _S (SQL_ROWVER); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT ", (int) type, ptr); } void _trace_spcols_scope (SQLUSMALLINT type) { char *ptr = "unknown scope"; switch (type) { _S (SQL_SCOPE_CURROW); _S (SQL_SCOPE_TRANSACTION); _S (SQL_SCOPE_SESSION); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT ", (int) type, ptr); } void _trace_spcols_null (SQLUSMALLINT type) { char *ptr = "unknown option"; switch (type) { _S (SQL_NO_NULLS); _S (SQL_NULLABLE); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT ", (int) type, ptr); } void trace_SQLSpecialColumns (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT fColType, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fScope, SQLUSMALLINT fNullable) { /* Trace function */ _trace_print_function (en_SpecialColumns, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_spcols_type (fColType); _trace_string (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); _trace_spcols_scope (fScope); _trace_spcols_null (fNullable); } #if ODBCVER >= 0x0300 void trace_SQLSpecialColumnsW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT fColType, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fScope, SQLUSMALLINT fNullable) { /* Trace function */ _trace_print_function (en_SpecialColumnsW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_spcols_type (fColType); _trace_string_w (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string_w (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string_w (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); _trace_spcols_scope (fScope); _trace_spcols_null (fNullable); } #endif libiodbc-3.52.9/iodbc/trace/Columns.c0000644000076400007640000001217512323210535014256 00000000000000/* * Columns.c * * $Id$ * * SQLColumns trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLColumns (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName) { /* Trace function */ _trace_print_function (en_Columns, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); _trace_string (szColumnName, cbColumnName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbColumnName); } #if ODBCVER >= 0x0300 void trace_SQLColumnsW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName) { /* Trace function */ _trace_print_function (en_ColumnsW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string_w (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string_w (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string_w (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); _trace_string_w (szColumnName, cbColumnName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbColumnName); } #endif libiodbc-3.52.9/iodbc/trace/SetConnectAttr.c0000644000076400007640000001023312323210535015527 00000000000000/* * SetConnectAttr.c * * $Id$ * * SQLSetConnectAttr trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLSetConnectAttr (int trace_leave, int retcode, SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { /* Trace function */ _trace_print_function (en_SetConnectAttr, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, ConnectionHandle); _trace_connattr_type (Attribute); _trace_pointer (ValuePtr); _trace_bufferlen (StringLength); } void trace_SQLSetConnectAttrW (int trace_leave, int retcode, SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { /* Trace function */ _trace_print_function (en_SetConnectAttrW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, ConnectionHandle); _trace_connattr_type (Attribute); _trace_pointer (ValuePtr); _trace_bufferlen (StringLength); } #endif libiodbc-3.52.9/iodbc/trace/SetPos.c0000644000076400007640000001103412323210535014044 00000000000000/* * SetPos.c * * $Id$ * * SQLSetPos trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_setpos_irow (SQLSETPOSIROW i) { #ifdef _WIN64 trace_emit ("\t\t%-15.15s %I64d\n", "SQLSETPOSIROW", (INT64) i); #else trace_emit ("\t\t%-15.15s %ld\n", "SQLSETPOSIROW", (long) i); #endif } void _trace_setpos_oper (SQLUSMALLINT type) { char *ptr = "unknown operation"; switch (type) { _S (SQL_POSITION); _S (SQL_REFRESH); _S (SQL_UPDATE); _S (SQL_DELETE); _S (SQL_ADD); #if ODBCVER >= 0x0300 _S (SQL_UPDATE_BY_BOOKMARK); _S (SQL_DELETE_BY_BOOKMARK); _S (SQL_FETCH_BY_BOOKMARK); #endif } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", (int) type, ptr); } void _trace_setpos_lock (SQLUSMALLINT type) { char *ptr = "unknown lock type"; switch (type) { _S (SQL_LOCK_NO_CHANGE); _S (SQL_LOCK_EXCLUSIVE); _S (SQL_LOCK_UNLOCK); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", (int) type, ptr); } void trace_SQLSetPos (int trace_leave, int retcode, SQLHSTMT hstmt, SQLSETPOSIROW irow, SQLUSMALLINT fOption, SQLUSMALLINT fLock) { /* Trace function */ _trace_print_function (en_SetPos, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_setpos_irow (irow); _trace_setpos_oper (fOption); _trace_setpos_lock (fLock); } libiodbc-3.52.9/iodbc/trace/GetData.c0000644000076400007640000003071012323210535014142 00000000000000/* * GetData.c * * $Id$ * * SQLGetData trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_data ( SQLSMALLINT fCType, SQLPOINTER rgbValue, SQLLEN cbValueMax, SQLLEN * pcbValue, int output) { char buf[1024]; /* Temp buffer */ if (!rgbValue) { trace_emit ("\t\t%-15.15s 0x0\n", "SQLPOINTER"); return; } trace_emit ("\t\t%-15.15s %p\n", "SQLPOINTER", rgbValue); if (!output) return; /* Only print buffer content on leave */ switch (fCType) { case SQL_C_BINARY: { ssize_t len = cbValueMax; if (pcbValue) len = *pcbValue; if (len > cbValueMax) len = cbValueMax; trace_emit_binary ((unsigned char *) rgbValue, len); } break; case SQL_C_BIT: { int i = (int) *(char *) rgbValue; sprintf (buf, "%d", i > 0 ? 1 : 0); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_CHAR: { ssize_t len = cbValueMax; if (pcbValue) len = (long) *pcbValue; if (len > cbValueMax) len = cbValueMax; trace_emit_string ((SQLCHAR *) rgbValue, len, 0); } break; case SQL_C_DATE: #if ODBCVER >= 0x0300 case SQL_C_TYPE_DATE: #endif { DATE_STRUCT *d = (DATE_STRUCT *) rgbValue; sprintf (buf, "%04d-%02d-%02d", d->year, d->month, d->day); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_DEFAULT: /* * Not enough information to dump the content of the buffer */ return; case SQL_C_DOUBLE: { double d = *(double *) rgbValue; sprintf (buf, "%f", d); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_FLOAT: { float f = *(float *) rgbValue; sprintf (buf, "%f", f); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; #if (ODBCVER >= 0x0350) case SQL_C_GUID: { SQLGUID *g = (SQLGUID *) rgbValue; sprintf (buf, "%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", (unsigned long) g->Data1, g->Data2, g->Data3, g->Data4[0], g->Data4[1], g->Data4[2], g->Data4[3], g->Data4[4], g->Data4[5], g->Data4[6], g->Data4[7]); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; #endif #if ODBCVER >= 0x0300 case SQL_C_INTERVAL_DAY: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu days", (unsigned long) i->intval.day_second.day); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_DAY_TO_HOUR: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu days %lu hours", (unsigned long) i->intval.day_second.day, (unsigned long) i->intval.day_second.hour); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_DAY_TO_MINUTE: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu days %lu hours %lu minutes", (unsigned long) i->intval.day_second.day, (unsigned long) i->intval.day_second.hour, (unsigned long) i->intval.day_second.minute); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_DAY_TO_SECOND: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu days %lu hours %lu minutes %lu seconds", (unsigned long) i->intval.day_second.day, (unsigned long) i->intval.day_second.hour, (unsigned long) i->intval.day_second.minute, (unsigned long) i->intval.day_second.second); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_HOUR: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu hours", (unsigned long) i->intval.day_second.hour); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_HOUR_TO_MINUTE: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu hours %lu minutes", (unsigned long) i->intval.day_second.hour, (unsigned long) i->intval.day_second.minute); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_HOUR_TO_SECOND: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu hours %lu minutes %lu seconds", (unsigned long) i->intval.day_second.hour, (unsigned long) i->intval.day_second.minute, (unsigned long) i->intval.day_second.second); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_MINUTE: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu minutes", (unsigned long) i->intval.day_second.minute); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_MINUTE_TO_SECOND: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu minutes %lu seconds", (unsigned long) i->intval.day_second.minute, (unsigned long) i->intval.day_second.second); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_MONTH: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu months", (unsigned long) i->intval.year_month.month); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_SECOND: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu seconds", (unsigned long) i->intval.day_second.second); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_YEAR: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu years", (unsigned long) i->intval.year_month.year); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_YEAR_TO_MONTH: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu years %lu months", (unsigned long) i->intval.year_month.year, (unsigned long) i->intval.year_month.month); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; #endif case SQL_C_LONG: case SQL_C_SLONG: { long l = *(long *) rgbValue; sprintf (buf, "%ld", l); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_ULONG: { unsigned long l = *(unsigned long *) rgbValue; sprintf (buf, "%lu", l); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; #if ODBCVER >= 0x0300 case SQL_C_NUMERIC: /* NOT YET */ break; #endif #if ODBCVER >= 0x0300 case SQL_C_SBIGINT: #if defined (ODBCINT64) { ODBCINT64 l = *(ODBCINT64 *) rgbValue; sprintf (buf, "%lld", (long long int)l); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } #endif break; case SQL_C_UBIGINT: #if defined (ODBCINT64) { unsigned ODBCINT64 l = *(unsigned ODBCINT64 *) rgbValue; sprintf (buf, "%llu", (long long unsigned int)l); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } #endif break; #endif case SQL_C_SHORT: case SQL_C_SSHORT: { int i = (int) *(short *) rgbValue; sprintf (buf, "%d", i); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_USHORT: { unsigned int i = (unsigned int) *(unsigned short *) rgbValue; sprintf (buf, "%u", i); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_TIME: #if ODBCVER >= 0x0300 case SQL_C_TYPE_TIME: #endif { TIME_STRUCT *t = (TIME_STRUCT *) rgbValue; sprintf (buf, "%02d:%02d:%02d", t->hour, t->minute, t->second); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_TIMESTAMP: #if ODBCVER >= 0x0300 case SQL_C_TYPE_TIMESTAMP: #endif { TIMESTAMP_STRUCT *t = (TIMESTAMP_STRUCT *) rgbValue; sprintf (buf, "%04d-%02d-%02d %02d:%02d:%02d.%06ld", t->year, t->month, t->day, t->hour, t->minute, t->second, (long) t->fraction); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_TINYINT: case SQL_C_STINYINT: { int i = (int) *(char *) rgbValue; sprintf (buf, "%d", i); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_UTINYINT: { unsigned int i = (unsigned int) *(unsigned char *) rgbValue; sprintf (buf, "%u", i); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_WCHAR: { SQLCHAR *wstr; ssize_t len; if (pcbValue) len = (ssize_t) *pcbValue; if (len > cbValueMax) len = cbValueMax; wstr = dm_SQL_W2A ((wchar_t *) rgbValue, len); trace_emit_string (wstr, SQL_NTS, 1); free (wstr); } break; default: /* * Unhandled/Unknown datatype */ break; } return; } void trace_SQLGetData (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT icol, SQLSMALLINT fCType, SQLPOINTER rgbValue, SQLLEN cbValueMax, SQLLEN * pcbValue) { /* Trace function */ _trace_print_function (en_GetData, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_usmallint (icol); _trace_c_type (fCType); _trace_data (fCType, rgbValue, cbValueMax, pcbValue, TRACE_OUTPUT_SUCCESS); _trace_len (cbValueMax); _trace_len_p (pcbValue, TRACE_OUTPUT_SUCCESS); } libiodbc-3.52.9/iodbc/trace/Info.c0000644000076400007640000010660112323210535013527 00000000000000/* * Info.c * * $Id$ * * Decode the SQLGetInfo responses and dump them to the trace log * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" /* * Internal macros to decode the various GetInfo return values */ #define I_STR(T) case T: \ infoname = #T; \ if (output) \ goto print_string; \ break #define I_INT16(T) case T: \ infoname = #T; \ if (output) \ goto print_int16; \ break #define I_INT32(T) case T: \ infoname = #T; \ if (output) \ goto print_int32; \ break #define I_MASK(T) case T: \ infoname = #T; \ mask = _mask_##T; \ elem = NUM_ELEM(_mask_##T); \ if (output) \ goto print_mask; \ break #define I_MASK1(T, O) case T: \ infoname = #T; \ mask = _mask_##O; \ elem = NUM_ELEM(_mask_##O); \ if (output) \ goto print_mask; \ break #define I_SVAL(T) case T: \ infoname = #T; \ mask = _mask_##T; \ elem = NUM_ELEM(_mask_##T); \ if (output) \ goto print_svalue; \ break #define I_SVAL1(T,O) case T: \ infoname = #T; \ mask = _mask_##O; \ elem = NUM_ELEM(_mask_##O); \ if (output) \ goto print_svalue; \ break #define MASK(X) char * _mask_##X[] #define NUM_ELEM(X) (sizeof(X) / sizeof(X[0])) /* * Various bitmask strings */ static MASK (SQL_AGGREGATE_FUNCTIONS) = { "SQL_AF_UNKNOWN", "SQL_AF_AVG", "SQL_AF_COUNT", "SQL_AF_MAX", "SQL_AF_MIN", "SQL_AF_SUM" "SQL_AF_DISTINCT", "SQL_AF_ALL" }; static MASK (SQL_ALTER_DOMAIN) = { "SQL_AD_CONSTRAINT_UNKNOWN", "SQL_AD_CONSTRAINT_NAME_DEFINITION", "SQL_AD_ADD_DOMAIN_CONSTRAINT", "SQL_AD_DROP_DOMAIN_CONSTRAINT", "SQL_AD_ADD_DOMAIN_DEFAULT", "SQL_AD_DROP_DOMAIN_DEFAULT", "SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED", "SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE", "SQL_AD_ADD_CONSTRAINT_DEFERRABLE", "SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE" }; static MASK (SQL_ALTER_TABLE) = { "SQL_AT_UNKNOWN", "SQL_AT_ADD_COLUMN", "SQL_AT_DROP_COLUMN", "SQL_AT_UNKNOWN_BIT_3", "SQL_AT_ADD_CONSTRAINT", "SQL_AT_UNKNOWN_BIT_5", "SQL_AT_ADD_COLUMN_SINGLE", "SQL_AT_ADD_COLUMN_DEFAULT", "SQL_AT_ADD_COLUMN_COLLATION", "SQL_AT_SET_COLUMN_DEFAULT", "SQL_AT_DROP_COLUMN_DEFAULT", "SQL_AT_DROP_COLUMN_CASCADE", "SQL_AT_DROP_COLUMN_RESTRICT", "SQL_AT_ADD_TABLE_CONSTRAINT", "SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE", "SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT", "SQL_AT_CONSTRAINT_NAME_DEFINITION", "SQL_AT_CONSTRAINT_INITIALLY_DEFERRED", "SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE", "SQL_AT_CONSTRAINT_DEFERRABLE", "SQL_AT_CONSTRAINT_NON_DEFERRABLE" }; static MASK (SQL_ASYNC_MODE) = { "SQL_AM_NONE", "SQL_AM_CONNECTION", "SQL_AM_STATEMENT" }; static MASK (SQL_BATCH_ROW_COUNT) = { "SQL_BRC_UNKNOWN", "SQL_BRC_PROCEDURES", "SQL_BRC_EXPLICIT", "SQL_BRC_ROLLED_UP" }; static MASK (SQL_BATCH_SUPPORT) = { "SQL_BS_UNKNOWN", "SQL_BS_SELECT_EXPLICIT", "SQL_BS_ROW_COUNT_EXPLICIT", "SQL_BS_SELECT_PROC", "SQL_BS_ROW_COUNT_PROC" }; static MASK (SQL_BOOKMARK_PERSISTENCE) = { "SQL_BP_UNKNOWN", "SQL_BP_CLOSE", "SQL_BP_DELETE", "SQL_BP_DROP", "SQL_BP_TRANSACTION", "SQL_BP_UPDATE", "SQL_BP_OTHER_HSTMT", "SQL_BP_SCROLL" }; static MASK (SQL_CATALOG_LOCATION) = { "SQL_CL_UNKNOWN", "SQL_CL_START", "SQL_CL_END" }; static MASK (SQL_CATALOG_USAGE) = { "SQL_CU_UNKNOWN", "SQL_CU_DML_STATEMENTS", "SQL_CU_PROCEDURE_INVOCATION", "SQL_CU_TABLE_DEFINITION", "SQL_CU_INDEX_DEFINITION", "SQL_CU_PRIVILEGE_DEFINITION" }; static MASK (SQL_CONCAT_NULL_BEHAVIOR) = { "SQL_CB_NULL", "SQL_CB_NON_NULL" }; static MASK (CONVERT) = { "SQL_CVT_UNKNOWN", "SQL_CVT_CHAR", "SQL_CVT_NUMERIC", "SQL_CVT_DECIMAL", "SQL_CVT_INTEGER", "SQL_CVT_SMALLINT", "SQL_CVT_FLOAT", "SQL_CVT_REAL", "SQL_CVT_DOUBLE", "SQL_CVT_VARCHAR" "SQL_CVT_LONGVARCHAR", "SQL_CVT_BINARY", "SQL_CVT_VARBINARY", "SQL_CVT_BIT", "SQL_CVT_TINYINT", "SQL_CVT_BIGINT", "SQL_CVT_DATE", "SQL_CVT_TIME", "SQL_CVT_TIMESTAMP", "SQL_CVT_LONGVARBINARY", "SQL_CVT_INTERVAL_YEAR_MONTH", "SQL_CVT_INTERVAL_DAY_TIME", "SQL_CVT_WCHAR", "SQL_CVT_WLONGVARCHAR", "SQL_CVT_WVARCHAR" }; static MASK (SQL_CONVERT_FUNCTIONS) = { "SQL_FN_CVT_UNKNOWN", "SQL_FN_CVT_CONVERT", "SQL_FN_CVT_CAST" }; static MASK (SQL_CORRELATION_NAME) = { "SQL_CN_NONE", "SQL_CN_DIFFERENT", "SQL_CN_ANY" }; static MASK (SQL_CREATE_ASSERTION) = { "SQL_CA_UNKNOWN", "SQL_CA_CREATE_ASSERTION", "SQL_CA_UNKNOWN_BIT 2", "SQL_CA_UNKNOWN_BIT 3", "SQL_CA_UNKNOWN_BIT 4", "SQL_CA_CONSTRAINT_INITIALLY_DEFERRED", "SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE", "SQL_CA_CONSTRAINT_DEFERRABLE", "SQL_CA_CONSTRAINT_NON_DEFERRABLE" }; static MASK (SQL_CREATE_CHARACTER_SET) = { "SQL_CSS_UNKNOWN", "SQL_CSS_CREATE_CHARACTER_SET", "SQL_CSS_COLLATE_CLAUSE", "SQL_CSS_LIMITED_COLLATION" }; static MASK (SQL_CREATE_COLLATION) = { "SQL_CCOL_UNKNOWN", "SQL_CCOL_CREATE_COLLATION" }; static MASK (SQL_CREATE_DOMAIN) = { "SQL_CDO_UNKNOWN", "SQL_CDO_CREATE_DOMAIN", "SQL_CDO_DEFAULT", "SQL_CDO_CONSTRAINT", "SQL_CDO_COLLATION", "SQL_CDO_CONSTRAINT_NAME_DEFINITION", "SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED", "SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE", "SQL_CDO_CONSTRAINT_DEFERRABLE", "SQL_CDO_CONSTRAINT_NON_DEFERRABLE" }; static MASK (SQL_CREATE_SCHEMA) = { "SQL_CS_UNKNOWN", "SQL_CS_CREATE_SCHEMA", "SQL_CS_AUTHORIZATION", "SQL_CS_DEFAULT_CHARACTER_SET" }; static MASK (SQL_CREATE_TABLE) = { "SQL_CT_UNKNOWN", "SQL_CT_CREATE_TABLE", "SQL_CT_COMMIT_PRESERVE", "SQL_CT_COMMIT_DELETE", "SQL_CT_GLOBAL_TEMPORARY", "SQL_CT_LOCAL_TEMPORARY", "SQL_CT_CONSTRAINT_INITIALLY_DEFERRED", "SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE", "SQL_CT_CONSTRAINT_DEFERRABLE", "SQL_CT_CONSTRAINT_NON_DEFERRABLE", "SQL_CT_COLUMN_CONSTRAINT", "SQL_CT_COLUMN_DEFAULT", "SQL_CT_COLUMN_COLLATION", "SQL_CT_TABLE_CONSTRAINT", "SQL_CT_CONSTRAINT_NAME_DEFINITION" }; static MASK (SQL_CREATE_TRANSLATION) = { "SQL_CTR_UNKNOWN", "SQL_CTR_CREATE_TRANSLATION" }; static MASK (SQL_CREATE_VIEW) = { "SQL_CV_UNKNOWN", "SQL_CV_CREATE_VIEW", "SQL_CV_CHECK_OPTION", "SQL_CV_CASCADED", "SQL_CV_LOCAL" }; static MASK (CURSOR_BEHAVIOR) = { "SQL_CB_DELETE", "SQL_CB_CLOSE", "SQL_CB_PRESERVE" }; static MASK (SQL_CURSOR_SENSITIVITY) = { "SQL_UNSPECIFIED", "SQL_INSENSITIVE", "SQL_SENSITIVE" }; static MASK (SQL_DATETIME_LITERALS) = { "SQL_DL_SQL92_DATE", "SQL_DL_SQL92_TIME", "SQL_DL_SQL92_TIMESTAMP", "SQL_DL_SQL92_INTERVAL_YEAR", "SQL_DL_SQL92_INTERVAL_MONTH", "SQL_DL_SQL92_INTERVAL_DAY", "SQL_DL_SQL92_INTERVAL_HOUR", "SQL_DL_SQL92_INTERVAL_MINUTE", "SQL_DL_SQL92_INTERVAL_SECOND", "SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH", "SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR", "SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE", "SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND", "SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE", "SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND", "SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND" }; static MASK (SQL_DDL_INDEX) = { "SQL_DI_UNKNOWN", "SQL_DI_CREATE_INDEX", "SQL_DI_DROP_INDEX" }; static MASK (SQL_DROP_ASSERTION) = { "SQL_DA_UNKNOWN", "SQL_DA_DROP_ASSERTION" }; static MASK (SQL_DROP_CHARACTER_SET) = { "SQL_DCS_UNKNOWN", "SQL_DCS_DROP_CHARACTER_SET" }; static MASK (SQL_DROP_COLLATION) = { "SQL_DC_UNKNOWN", "SQL_DC_DROP_COLLATION" }; static MASK (SQL_DROP_DOMAIN) = { "SQL_DD_UNKNOWN", "SQL_DD_DROP_DOMAIN", "SQL_DD_RESTRICT", "SQL_DD_CASCASE" }; static MASK (SQL_DROP_SCHEMA) = { "SQL_DS_UNKNOWN", "SQL_DS_DROP_SCHEMA", "SQL_DS_RESTRICT", "SQL_DS_CASCADE" }; static MASK (SQL_DROP_TABLE) = { "SQL_DT_UNKNOWN", "SQL_DT_DROP_TABLE", "SQL_DT_RESTRICT", "SQL_DT_CASCADE" }; static MASK (SQL_DROP_TRANSLATION) = { "SQL_DTR_UNKNOWN", "SQL_DTR_DROP_TRANSLATION" }; static MASK (SQL_DROP_VIEW) = { "SQL_DV_UNKNOWN", "SQL_DV_DROP_TABLE", "SQL_DV_RESTRICT", "SQL_DV_CASCADE" }; static MASK (CURSOR_ATTRIBUTES1) = { "SQL_CA1_UNKNOWN", "SQL_CA1_NEXT", "SQL_CA1_ABSOLUTE", "SQL_CA1_RELATIVE", "SQL_CA1_BOOKMARK", "SQL_CA1_UNKNOWN_BIT 5", "SQL_CA1_UNKNOWN_BIT 6", "SQL_CA1_LOCK_NO_CHANGE", "SQL_CA1_LOCK_EXCLUSIVE", "SQL_CA1_LOCK_UNLOCK", "SQL_CA1_POS_POSITION", "SQL_CA1_POS_UPDATE", "SQL_CA1_POS_DELETE", "SQL_CA1_POS_REFRESH", "SQL_CA1_POSITIONED_UPDATE", "SQL_CA1_POSITIONED_DELETE", "SQL_CA1_SELECT_FOR_UPDATE", "SQL_CA1_BULK_ADD", "SQL_CA1_BULK_UPDATE_BY_BOOKMARK", "SQL_CA1_BULK_DELETE_BY_BOOKMARK", "SQL_CA1_BULK_FETCH_BY_BOOKMARK" }; static MASK (CURSOR_ATTRIBUTES2) = { "SQL_CA2_UNKNOWN", "SQL_CA2_READ_ONLY_CONCURRENCY", "SQL_CA2_LOCK_CONCURRENCY", "SQL_CA2_OPT_ROWVER_CONCURRENCY", "SQL_CA2_OPT_VALUES_CONCURRENCY", "SQL_CA2_SENSITIVITY_ADDITIONS", "SQL_CA2_SENSITIVITY_DELETIONS", "SQL_CA2_SENSITIVITY_UPDATES", "SQL_CA2_MAX_ROWS_SELECT", "SQL_CA2_MAX_ROWS_INSERT", "SQL_CA2_MAX_ROWS_DELETE", "SQL_CA2_MAX_ROWS_UPDATE", "SQL_CA2_MAX_ROWS_CATALOG", "SQL_CA2_CRC_EXACT", "SQL_CA2_CRC_APPROXIMATE", "SQL_CA2_SIMULATE_NON_UNIQUE", "SQL_CA2_SIMULATE_TRY_UNIQUE", "SQL_CA2_SIMULATE_UNIQUE" }; static MASK (SQL_INDEX_KEYWORDS) = { "SQL_IK_NONE", "SQL_IK_ASC", "SQL_IK_DESC" }; static MASK (SQL_INFO_SCHEMA_VIEWS) = { "SQL_ISV_UNKNOWN", "SQL_ISV_ASSERTIONS", "SQL_ISV_CHARACTER_SETS", "SQL_ISV_CHECK_CONSTRAINTS", "SQL_ISV_COLLATIONS", "SQL_ISV_COLUMN_DOMAIN_USAGE", "SQL_ISV_COLUMN_PRIVILEGES", "SQL_ISV_COLUMNS", "SQL_ISV_CONSTRAINT_COLUMN_USAGE", "SQL_ISV_CONSTRAINT_TABLE_USAGE", "SQL_ISV_DOMAIN_CONSTRAINTS", "SQL_ISV_DOMAINS", "SQL_ISV_KEY_COLUMN_USAGE", "SQL_ISV_REFERENTIAL_CONSTRAINTS", "SQL_ISV_SCHEMATA", "SQL_ISV_SQL_LANGUAGES", "SQL_ISV_TABLE_CONSTRAINTS", "SQL_ISV_TABLE_PRIVILEGES", "SQL_ISV_TABLES", "SQL_ISV_TRANSLATIONS", "SQL_ISV_USAGE_PRIVILEGES", "SQL_ISV_VIEW_COLUMN_USAGE", "SQL_ISV_VIEW_TABLE_USAGE", "SQL_ISV_VIEWS" }; static MASK (SQL_INSERT_STATEMENT) = { "SQL_IS_UNKNOWN", "SQL_IS_INSERT_LITERALS", "SQL_IS_INSERT_SEARCHED", "SQL_IS_SELECT_INTO" }; static MASK (SQL_DTC_TRANSITION_COST) = { "SQL_DTC_UNKNOWN", "SQL_DTC_ENLIST_EXPENSIVE", "SQL_DTC_UNENLIST_EXPENSIVE" }; static MASK (TXN_ISOLATION) = { "SQL_TXN_UNKNOWN", "SQL_TXN_READ_UNCOMMITTED", "SQL_TXN_READ_COMMITTED", "SQL_TXN_REPEATABLE_READ", "SQL_TXN_SERIALIZABLE", "SQL_TXN_VERSIONING" }; static MASK (SQL_FETCH_DIRECTION) = { "SQL_FD_FETCH_UNKNOWN", "SQL_FD_FETCH_NEXT", "SQL_FD_FETCH_FIRST", "SQL_FD_FETCH_LAST", "SQL_FD_FETCH_PRIOR", "SQL_FD_FETCH_ABSOLUTE", "SQL_FD_FETCH_RELATIVE", "SQL_FD_FETCH_RESUME", "SQL_FD_FETCH_BOOKMARK" }; static MASK (SQL_FILE_USAGE) = { "SQL_FILE_NOT_SUPPORTED", "SQL_FILE_TABLE", "SQL_FILE_QUALIFIER" }; static MASK (SQL_GETDATA_EXTENSIONS) = { "SQL_GD_UNKNOWN", "SQL_GD_ANY_COLUMN", "SQL_GD_ANY_ORDER", "SQL_GD_BLOCK", "SQL_GD_BOUND" }; static MASK (SQL_GROUP_BY) = { "SQL_GB_NOT_SUPPORTED", "SQL_GB_GROUP_BY_EQUALS_SELECT", "SQL_GB_GROUP_BY_CONTAINS_SELECT", "SQL_GB_NO_RELATION" }; static MASK (IDENTIFIER_CASE) = { "SQL_IC_UNKNOWN", "SQL_IC_UPPER", "SQL_IC_LOWER", "SQL_IC_SENSITIVE", "SQL_IC_MIXED" }; static MASK (SQL_LOCK_TYPES) = { "SQL_LCK_UNKNOWN", "SQL_LCK_NO_CHANGE", "SQL_LCK_EXCLUSIVE", "SQL_LCK_UNLOCK" }; static MASK (SQL_NON_NULLABLE_COLUMNS) = { "SQL_NNC_NULL", "SQL_NNC_NON_NULL" }; static MASK (SQL_NULL_COLLATION) = { "SQL_NC_HIGH", "SQL_NC_LOW", "SQL_NC_START" "SQL_NC_END", }; static MASK (SQL_NUMERIC_FUNCTIONS) = { "SQL_FN_UNKNOWN", "SQL_FN_NUM_ABS", "SQL_FN_NUM_ACOS", "SQL_FN_NUM_ASIN", "SQL_FN_NUM_ATAN", "SQL_FN_NUM_ATAN2", "SQL_FN_NUM_CEILING", "SQL_FN_NUM_COS", "SQL_FN_NUM_COT", "SQL_FN_NUM_EXP", "SQL_FN_NUM_FLOOR", "SQL_FN_NUM_LOG", "SQL_FN_NUM_MOD", "SQL_FN_NUM_SIGN", "SQL_FN_NUM_SIN", "SQL_FN_NUM_SQRT", "SQL_FN_NUM_TAN", "SQL_FN_NUM_PI", "SQL_FN_NUM_RAND", "SQL_FN_NUM_DEGREES", "SQL_FN_NUM_LOG10", "SQL_FN_NUM_POWER", "SQL_FN_NUM_RADIANS", "SQL_FN_NUM_ROUND", "SQL_FN_NUM_TRUNCATE" }; static MASK (SQL_ODBC_API_CONFORMANCE) = { "SQL_OAC_NONE", "SQL_OAC_LEVEL1", "SQL_OAC_LEVEL2" }; static MASK (SQL_ODBC_INTERFACE_CONFORMANCE) = { "SQL_OIC_UNKNOWN", "SQL_OAC_CORE", "SQL_OAC_LEVEL1", "SQL_OAC_LEVEL2" }; static MASK (SQL_ODBC_SAG_CLI_CONFORMANCE) = { "SQL_OSCC_NOT_COMPLIANT", "SQL_OSCC_COMPLIANT" }; static MASK (SQL_ODBC_SQL_CONFORMANCE) = { "SQL_OSC_MINIMUM", "SQL_OSC_CORE", "SQL_OSC_EXTENDED" }; static MASK (SQL_OJ_CAPABILITIES) = { "SQL_OJ_UNKNOWN", "SQL_OJ_LEFT", "SQL_OJ_RIGHT", "SQL_OJ_FULL", "SQL_OJ_NESTED", "SQL_OJ_NOT_ORDERED", "SQL_OJ_INNER", "SQL_OJ_ALL_COMPARISON_OPS" }; #if (ODBCVER < 0x0300) static MASK (SQL_OWNER_USAGE) = { "SQL_OU_UNKNOWN", "SQL_OU_DML_STATEMENTS", "SQL_OU_PROCEDURE_INVOCATION", "SQL_OU_TABLE_DEFINITION", "SQL_OU_INDEX_DEFINITION", "SQL_OU_PRIVILEGE_DEFINITION" }; #endif static MASK (SQL_PARAM_ARRAY_ROW_COUNTS) = { "SQL_PARC_UNKNOWN", "SQL_PARC_BATCH", "SQL_PARC_NOBATCH" }; static MASK (SQL_PARAM_ARRAY_SELECTS) = { "SQL_PAS_UNKNOWN", "SQL_PAS_BATCH", "SQL_PAS_NO_BATCH", "SQL_PAS_NO_SELECT" }; static MASK (SQL_POSITIONED_STATEMENTS) = { "SQL_PS_UNKNOWN", "SQL_PS_POSITIONED_DELETE", "SQL_PS_POSITIONED_UPDATE", "SQL_PS_SELECT_FOR_UPDATE" }; static MASK (SQL_POS_OPERATIONS) = { "SQL_POS_UNKNOWN", "SQL_POS_POSITION", "SQL_POS_REFRESH", "SQL_POS_UPDATE", "SQL_POS_DELETE", "SQL_POS_ADD" }; #if (ODBCVER < 0x0300) static MASK (SQL_QUALIFIER_LOCATION) = { "SQL_QL_UNKNOWN", "SQL_QL_START", "SQL_QL_END" }; #endif #if (ODBCVER < 0x0300) static MASK (SQL_QUALIFIER_USAGE) = { "SQL_QU_UNKNOWN", "SQL_QU_DML_STATEMENTS", "SQL_QU_PROCEDURE_INVOCATION", "SQL_QU_TABLE_DEFINITION", "SQL_QU_INDEX_DEFINITION", "SQL_QU_PRIVILEGE_DEFINITION" }; #endif static MASK (SQL_SCHEMA_USAGE) = { "SQL_SU_UNKNOWN", "SQL_SU_DML_STATEMENTS", "SQL_SU_PROCEDURE_INVOCATION", "SQL_SU_TABLE_DEFINITION", "SQL_SU_INDEX_DEFINITION", "SQL_SU_PRIVILEGE_DEFINITION" }; static MASK (SQL_SCROLL_CONCURRENCY) = { "SQL_SCCO_UNKNOWN", "SQL_SCCO_READ_ONLY", "SQL_SCCO_LOCK", "SQL_SCCO_OPT_ROWVER", "SQL_SCCO_OPT_VALUES" }; static MASK (SQL_SCROLL_OPTIONS) = { "SQL_SO_UNKNOWN", "SQL_SO_FORWARD_ONLY", "SQL_SO_KEYSET_DRIVEN", "SQL_SO_DYNAMIC", "SQL_SO_MIXED", "SQL_SO_STATIC" }; static MASK (SQL_SQL_CONFORMANCE) = { "SQL_SC_UINKNOWN", "SQL_SC_SQL92_ENTRY", "SQL_SC_FIPS127_2_TRANSITIONAL", "SQL_SC_SQL92_INTERMEDIATE", "SQL_SC_SQL92_FULL" }; static MASK (SQL_SQL92_DATETIME_FUNCTIONS) = { "SQL_SDF_UNKNOWN", "SQL_SDF_CURRENT_DATE", "SQL_SDF_CURRENT_TIME", "SQL_SDF_CURRENT_TIMESTAMP" }; static MASK (SQL_SQL92_FOREIGN_KEY_DELETE_RULE) = { "SQL_SFKD_UNKNOWN", "SQL_SFKD_CASCADE", "SQL_SFKD_NO_ACTION", "SQL_SFKD_SET_DEFAULT", "SQL_SFKD_SET_NULL" }; static MASK (SQL_SQL92_FOREIGN_KEY_UPDATE_RULE) = { "SQL_SFKU_UNKNOWN", "SQL_SFKU_CASCADE", "SQL_SFKU_NO_ACTION", "SQL_SFKU_SET_DEFAULT", "SQL_SFKU_SET_NULL" }; static MASK (SQL_SQL92_GRANT) = { "SQL_SG_UNKNOWN", "SQL_SG_USAGE_ON_DOMAIN", "SQL_SG_USAGE_ON_CHARACTER_SET", "SQL_SG_USAGE_ON_COLLATION", "SQL_SG_USAGE_ON_TRANSLATION", "SQL_SG_WITH_GRANT_OPTION", "SQL_SG_DELETE_TABLE", "SQL_SG_INSERT_TABLE", "SQL_SG_INSERT_COLUMN", "SQL_SG_REFERENCES_TABLE", "SQL_SG_REFERENCES_COLUMN", "SQL_SG_SELECT_TABLE", "SQL_SG_UPDATE_TABLE", "SQL_SG_UPDATE_COLUMN" }; static MASK (SQL_SQL92_NUMERIC_VALUE_FUNCTIONS) = { "SQL_SNVF_UNKNOWN", "SQL_SNVF_BIT_LENGTH", "SQL_SNVF_CHAR_LENGTH", "SQL_SNVF_CHARACTER_LENGTH", "SQL_SNVF_EXTRACT", "SQL_SNVF_OCTET_LENGTH", "SQL_SNVF_POSITION" }; static MASK (SQL_SQL92_PREDICATES) = { "SQL_SP_UNKNOWN", "SQL_SP_EXISTS", "SQL_SP_ISNOTNULL", "SQL_SP_ISNULL", "SQL_SP_MATCH_FULL", "SQL_SP_MATCH_PARTIAL", "SQL_SP_MATCH_UNIQUE_FULL", "SQL_SP_MATCH_UNIQUE_PARTIAL", "SQL_SP_OVERLAPS", "SQL_SP_UNIQUE", "SQL_SP_LIKE", "SQL_SP_IN", "SQL_SP_BETWEEN", "SQL_SP_COMPARISON", "SQL_SP_QUANTIFIED_COMPARISON" }; static MASK (SQL_SQL92_RELATIONAL_JOIN_OPERATORS) = { "SQL_SRJO_UNKOWN", "SQL_SRJO_CORRESPONDING_CLAUSE", "SQL_SRJO_CROSS_JOIN", "SQL_SRJO_EXCEPT_JOIN", "SQL_SRJO_FULL_OUTER_JOIN", "SQL_SRJO_INNER_JOIN", "SQL_SRJO_INTERSECT_JOIN", "SQL_SRJO_LEFT_OUTER_JOIN", "SQL_SRJO_NATURAL_JOIN", "SQL_SRJO_RIGHT_OUTER_JOIN", "SQL_SRJO_UNION_JOIN" }; static MASK (SQL_SQL92_REVOKE) = { "SQL_SR_UNKNOWN", "SQL_SR_USAGE_ON_DOMAIN", "SQL_SR_USAGE_ON_CHARACTER_SET", "SQL_SR_USAGE_ON_COLLATION", "SQL_SR_USAGE_ON_TRANSLATION", "SQL_SR_GRANT_OPTION_FOR", "SQL_SR_CASCADE", "SQL_SR_RESTRICT", "SQL_SR_DELETE_TABLE", "SQL_SR_INSERT_TABLE", "SQL_SR_INSERT_COLUMN", "SQL_SR_REFERENCES_TABLE", "SQL_SR_REFERENCES_COLUMN", "SQL_SR_SELECT_TABLE", "SQL_SR_UPDATE_TABLE", "SQL_SR_UPDATE_COLUMN" }; static MASK (SQL_SQL92_ROW_VALUE_CONSTRUCTOR) = { "SQL_SRVC_UNKOWN", "SQL_SRVC_VALUE_EXPRESSION", "SQL_SRVC_NULL", "SQL_SRVC_DEFAULT", "SQL_SRVC_ROW_SUBQUERY" }; static MASK (SQL_SQL92_STRING_FUNCTIONS) = { "SQL_SSF_UNKNOWN", "SQL_SSF_CONVERT", "SQL_SSF_LOWER", "SQL_SSF_UPPER", "SQL_SSF_SUBSTRING", "SQL_SSF_TRANSLATE", "SQL_SSF_TRIM_BOTH", "SQL_SSF_TRIM_LEADING", "SQL_SSF_TRIM_TRAILING" }; static MASK (SQL_SQL92_VALUE_EXPRESSIONS) = { "SQL_SVE_UNKNOWN", "SQL_SVE_CASE", "SQL_SVE_CAST", "SQL_SVE_COALESCE", "SQL_SVE_NULLIF" }; static MASK (SQL_STANDARD_CLI_CONFORMANCE) = { "SQL_SCC_UNKNOWN", "SQL_SCC_XOPEN_CLI_VERSION1", "SQL_SCC_ISO92_CLI", }; static MASK (SQL_STATIC_SENSITIVITY) = { "SQL_SS_UNKNOWN", "SQL_SS_ADDITIONS", "SQL_SS_DELETIONS", "SQL_SS_UPDATES" }; static MASK (SQL_STRING_FUNCTIONS) = { "SQL_FN_STR_UNKNOWN", "SQL_FN_STR_CONCAT", "SQL_FN_STR_INSERT", "SQL_FN_STR_LEFT", "SQL_FN_STR_LTRIM", "SQL_FN_STR_LENGTH", "SQL_FN_STR_LOCATE", "SQL_FN_STR_LCASE", "SQL_FN_STR_REPEAT", "SQL_FN_STR_REPLACE", "SQL_FN_STR_RIGHT", "SQL_FN_STR_RTRIM", "SQL_FN_STR_SUBSTRING", "SQL_FN_STR_UCASE ", "SQL_FN_STR_ASCII", "SQL_FN_STR_CHAR", "SQL_FN_STR_DIFFERENCE", "SQL_FN_STR_LOCATE_2", "SQL_FN_STR_SOUNDEX", "SQL_FN_STR_SPACE", "SQL_FN_BIT_LENGTH", "SQL_FN_STR_CHAR_LENGTH", "SQL_FN_STR_CARACTER_LENGTH", "SQL_FN_STR_OCTET_LENGTH", "SQL_FN_STR_POSITION" }; static MASK (SQL_SUBQUERIES) = { "SQL_SQ_UNKNOWN", "SQL_SQ_COMPARISON", "SQL_SQ_EXISTS", "SQL_SQ_IN", "SQL_SQ_QUANTIFIED", "SQL_SQ_CORRELATED_SUBQUERIES" }; static MASK (SQL_SYSTEM_FUNCTIONS) = { "SQL_FN_SYS_UNKNOWN", "SQL_FN_SYS_USERNAME", "SQL_FN_SYS_DBNAME", "SQL_FN_SYS_IFNULL" }; static MASK (TIMEDATE_INTERVALS) = { "SQL_FN_TSI_UNKNOWN", "SQL_FN_TSI_FRAC_SECOND", "SQL_FN_TSI_SECOND", "SQL_FN_TSI_MINUTE", "SQL_FN_TSI_HOUR", "SQL_FN_TSI_DAY", "SQL_FN_TSI_WEEK", "SQL_FN_TSI_MONTH", "SQL_FN_TSI_QUARTER", "SQL_FN_TSI_YEAR " }; static MASK (SQL_TIMEDATE_FUNCTIONS) = { "SQL_FN_TD_UNKNOWN", "SQL_FN_TD_NOW", "SQL_FN_TD_CURDATE", "SQL_FN_TD_DAYOFMONTH", "SQL_FN_TD_DAYOFWEEK", "SQL_FN_TD_DAYOFYEAR", "SQL_FN_TD_MONTH", "SQL_FN_TD_QUARTER", "SQL_FN_TD_WEEK", "SQL_FN_TD_YEAR", "SQL_FN_TD_CURTIME", "SQL_FN_TD_HOUR", "SQL_FN_TD_MINUTE", "SQL_FN_TD_SECOND", "SQL_FN_TD_TIMESTAMPADD", "SQL_FN_TD_TIMESTAMPDIFF", "SQL_FN_TD_DAYNAME", "SQL_FN_TD_MONTHNAME", "SQL_FN_TD_CURRENT_DATE", "SQL_FN_TD_CURRENT_TIME", "SQL_FN_TD_CURRENT_TIMESTAMP", "SQL_FN_TD_EXTRACT" }; static MASK (SQL_TXN_CAPABLE) = { "SQL_TC_NONE", "SQL_TC_DML", "SQL_TC_ALL", "SQL_TC_DDL_COMMIT", "SQL_TC_DDL_IGNORE", }; static MASK (SQL_UNION) = { "SQL_U_UNION_UNKNOWN", "SQL_U_UNION", "SQL_U_UNION_ALL" }; /* * Decode the various GetInfo return values and print them into the trace log */ static void _trace_getinfo ( SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue, int output, char waMode) { char *infoname; char **mask; int elem; int i; cbInfoValueMax = cbInfoValueMax; /*UNUSED*/ pcbInfoValue = pcbInfoValue; /*UNUSED*/ /* * If the pointer is NULL, we have no information to decode, so * we just print the generic details. */ if (!rgbInfoValue) output = 0; switch (fInfoType) { /* * ODBC 1.0 */ I_STR (SQL_ACCESSIBLE_TABLES); I_STR (SQL_ACCESSIBLE_PROCEDURES); #if (ODBCVER < 0x0300) I_INT16 (SQL_ACTIVE_CONNECTIONS); /* 3.0: SQL_MAX_DRIVER_CONNECTIONS */ #endif #if (ODBCVER < 0x0300) I_INT16 (SQL_ACTIVE_STATEMENTS); /* 3.0: SQL_MAX_CONCURRENT_ACTIVITIES */ #endif I_SVAL (SQL_CONCAT_NULL_BEHAVIOR); I_MASK (SQL_CONVERT_FUNCTIONS); I_MASK1 (SQL_CONVERT_BIGINT, CONVERT); I_MASK1 (SQL_CONVERT_BINARY, CONVERT); I_MASK1 (SQL_CONVERT_BIT, CONVERT); I_MASK1 (SQL_CONVERT_CHAR, CONVERT); I_MASK1 (SQL_CONVERT_DATE, CONVERT); I_MASK1 (SQL_CONVERT_DECIMAL, CONVERT); I_MASK1 (SQL_CONVERT_DOUBLE, CONVERT); I_MASK1 (SQL_CONVERT_FLOAT, CONVERT); I_MASK1 (SQL_CONVERT_INTEGER, CONVERT); I_MASK1 (SQL_CONVERT_LONGVARBINARY, CONVERT); I_MASK1 (SQL_CONVERT_LONGVARCHAR, CONVERT); I_MASK1 (SQL_CONVERT_NUMERIC, CONVERT); I_MASK1 (SQL_CONVERT_REAL, CONVERT); I_MASK1 (SQL_CONVERT_SMALLINT, CONVERT); I_MASK1 (SQL_CONVERT_TIME, CONVERT); I_MASK1 (SQL_CONVERT_TIMESTAMP, CONVERT); I_MASK1 (SQL_CONVERT_TINYINT, CONVERT); I_MASK1 (SQL_CONVERT_VARBINARY, CONVERT); I_MASK1 (SQL_CONVERT_VARCHAR, CONVERT); I_SVAL1 (SQL_CURSOR_COMMIT_BEHAVIOR, CURSOR_BEHAVIOR); I_SVAL1 (SQL_CURSOR_ROLLBACK_BEHAVIOR, CURSOR_BEHAVIOR); I_STR (SQL_DATA_SOURCE_NAME); I_STR (SQL_DATA_SOURCE_READ_ONLY); I_STR (SQL_DATABASE_NAME); I_STR (SQL_DBMS_NAME); I_STR (SQL_DBMS_VER); I_MASK1 (SQL_DEFAULT_TXN_ISOLATION, TXN_ISOLATION); I_INT32 (SQL_DRIVER_HDBC); I_INT32 (SQL_DRIVER_HENV); I_INT32 (SQL_DRIVER_HSTMT); I_STR (SQL_DRIVER_NAME); I_STR (SQL_DRIVER_VER); I_STR (SQL_EXPRESSIONS_IN_ORDERBY); I_MASK (SQL_FETCH_DIRECTION); I_SVAL1 (SQL_IDENTIFIER_CASE, IDENTIFIER_CASE); I_STR (SQL_IDENTIFIER_QUOTE_CHAR); I_INT16 (SQL_MAX_COLUMN_NAME_LEN); I_INT16 (SQL_MAX_CURSOR_NAME_LEN); #if (ODBCVER < 0x0300) I_INT16 (SQL_MAX_OWNER_NAME_LEN); /* 3.0: SQL_MAX_SCHEMA_NAME_LEN */ #endif I_INT16 (SQL_MAX_PROCEDURE_NAME_LEN); #if (ODBCVER < 0x0300) I_INT16 (SQL_MAX_QUALIFIER_NAME_LEN); /* 3.0: SQL_MAX_CATALOG_NAME_LEN */ #endif I_INT16 (SQL_MAX_TABLE_NAME_LEN); I_STR (SQL_MULT_RESULT_SETS); I_STR (SQL_MULTIPLE_ACTIVE_TXN); I_MASK (SQL_NUMERIC_FUNCTIONS); I_SVAL (SQL_ODBC_API_CONFORMANCE); I_SVAL (SQL_ODBC_SAG_CLI_CONFORMANCE); I_SVAL (SQL_ODBC_SQL_CONFORMANCE); I_STR (SQL_ODBC_VER); #if (ODBCVER < 0x0300) I_STR (SQL_ODBC_SQL_OPT_IEF); /* 3.0: SQL_INTEGRITY */ #endif #if (ODBCVER < 0x0300) I_STR (SQL_OWNER_TERM); /* 3.0: SQL_SCHEMA_TERM */ #endif I_STR (SQL_OUTER_JOINS); I_STR (SQL_PROCEDURE_TERM); I_STR (SQL_PROCEDURES); #if (ODBCVER < 0x0300) I_STR (SQL_QUALIFIER_NAME_SEPARATOR); /* 3.0: SQL_CATALOG_NAME_SEPARATOR */ #endif #if (ODBCVER < 0x0300) I_STR (SQL_QUALIFIER_TERM); /* 3.0: SQL_CATALOG_TERM */ #endif I_STR (SQL_ROW_UPDATES); I_MASK (SQL_SCROLL_CONCURRENCY); I_MASK (SQL_SCROLL_OPTIONS); I_STR (SQL_SEARCH_PATTERN_ESCAPE); I_STR (SQL_SERVER_NAME); I_MASK (SQL_STRING_FUNCTIONS); I_MASK (SQL_SYSTEM_FUNCTIONS); I_STR (SQL_TABLE_TERM); I_MASK (SQL_TIMEDATE_FUNCTIONS); I_SVAL (SQL_TXN_CAPABLE); I_MASK1 (SQL_TXN_ISOLATION_OPTION, TXN_ISOLATION); I_STR (SQL_USER_NAME); /* * ODBC 1.0 Additions */ I_SVAL (SQL_CORRELATION_NAME); I_SVAL (SQL_NON_NULLABLE_COLUMNS); /* * ODBC 2.0 Additions */ I_MASK (SQL_ALTER_TABLE); I_MASK (SQL_BOOKMARK_PERSISTENCE); I_STR (SQL_COLUMN_ALIAS); I_INT32 (SQL_DRIVER_HLIB); I_STR (SQL_DRIVER_ODBC_VER); I_MASK (SQL_GETDATA_EXTENSIONS); I_SVAL (SQL_GROUP_BY); I_SVAL (SQL_FILE_USAGE); I_STR (SQL_KEYWORDS); I_STR (SQL_LIKE_ESCAPE_CLAUSE); I_MASK (SQL_LOCK_TYPES); I_INT32 (SQL_MAX_BINARY_LITERAL_LEN); I_INT32 (SQL_MAX_CHAR_LITERAL_LEN); I_INT16 (SQL_MAX_COLUMNS_IN_GROUP_BY); I_INT16 (SQL_MAX_COLUMNS_IN_INDEX); I_INT16 (SQL_MAX_COLUMNS_IN_ORDER_BY); I_INT16 (SQL_MAX_COLUMNS_IN_SELECT); I_INT16 (SQL_MAX_COLUMNS_IN_TABLE); I_INT32 (SQL_MAX_INDEX_SIZE); I_STR (SQL_MAX_ROW_SIZE_INCLUDES_LONG); I_INT32 (SQL_MAX_ROW_SIZE); I_INT32 (SQL_MAX_STATEMENT_LEN); I_INT16 (SQL_MAX_TABLES_IN_SELECT); I_INT16 (SQL_MAX_USER_NAME_LEN); I_STR (SQL_NEED_LONG_DATA_LEN); I_SVAL (SQL_NULL_COLLATION); I_STR (SQL_ORDER_BY_COLUMNS_IN_SELECT); #if (ODBCVER < 0x0300) I_MASK (SQL_OWNER_USAGE); /* 3.0: SQL_SCHEMA_USAGE */ #endif I_MASK (SQL_OJ_CAPABILITIES); I_MASK (SQL_POS_OPERATIONS); I_MASK (SQL_POSITIONED_STATEMENTS); #if (ODBCVER < 0x0300) I_SVAL (SQL_QUALIFIER_LOCATION); /* 3.0: SQL_CATALOG_LOCATION */ #endif #if (ODBCVER < 0x0300) I_MASK (SQL_QUALIFIER_USAGE); /* 3.0: SQL_CATALOG_USAGE */ #endif I_SVAL1 (SQL_QUOTED_IDENTIFIER_CASE, IDENTIFIER_CASE); I_STR (SQL_SPECIAL_CHARACTERS); I_MASK (SQL_STATIC_SENSITIVITY); I_MASK (SQL_SUBQUERIES); I_MASK1 (SQL_TIMEDATE_ADD_INTERVALS, TIMEDATE_INTERVALS); I_MASK1 (SQL_TIMEDATE_DIFF_INTERVALS, TIMEDATE_INTERVALS); I_MASK (SQL_UNION); /* * ODBC 3.0 */ #if (ODBCVER >= 0x0300) I_INT16 (SQL_ACTIVE_ENVIRONMENTS); I_MASK (SQL_AGGREGATE_FUNCTIONS); I_MASK (SQL_ALTER_DOMAIN); I_SVAL (SQL_ASYNC_MODE); I_MASK (SQL_BATCH_ROW_COUNT); I_MASK (SQL_BATCH_SUPPORT); I_SVAL (SQL_CATALOG_LOCATION); I_STR (SQL_CATALOG_NAME); I_STR (SQL_CATALOG_NAME_SEPARATOR); I_STR (SQL_CATALOG_TERM); I_MASK (SQL_CATALOG_USAGE); I_STR (SQL_COLLATION_SEQ); I_MASK1 (SQL_CONVERT_INTERVAL_YEAR_MONTH, CONVERT); I_MASK1 (SQL_CONVERT_INTERVAL_DAY_TIME, CONVERT); I_MASK1 (SQL_CONVERT_WCHAR, CONVERT); I_MASK1 (SQL_CONVERT_WLONGVARCHAR, CONVERT); I_MASK1 (SQL_CONVERT_WVARCHAR, CONVERT); I_MASK (SQL_CREATE_ASSERTION); I_MASK (SQL_CREATE_CHARACTER_SET); I_MASK (SQL_CREATE_COLLATION); I_MASK (SQL_CREATE_DOMAIN); I_MASK (SQL_CREATE_SCHEMA); I_MASK (SQL_CREATE_TABLE); I_MASK (SQL_CREATE_TRANSLATION); I_MASK (SQL_CREATE_VIEW); I_SVAL (SQL_CURSOR_SENSITIVITY); I_MASK (SQL_DATETIME_LITERALS); I_MASK (SQL_DDL_INDEX); I_STR (SQL_DESCRIBE_PARAMETER); I_STR (SQL_DM_VER); I_MASK (SQL_DTC_TRANSITION_COST); I_MASK (SQL_DROP_ASSERTION); I_MASK (SQL_DROP_CHARACTER_SET); I_MASK (SQL_DROP_COLLATION); I_MASK (SQL_DROP_DOMAIN); I_MASK (SQL_DROP_SCHEMA); I_MASK (SQL_DROP_TABLE); I_MASK (SQL_DROP_TRANSLATION); I_MASK (SQL_DROP_VIEW); I_MASK1 (SQL_DYNAMIC_CURSOR_ATTRIBUTES1, CURSOR_ATTRIBUTES1); I_MASK1 (SQL_DYNAMIC_CURSOR_ATTRIBUTES2, CURSOR_ATTRIBUTES2); I_MASK1 (SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1, CURSOR_ATTRIBUTES1); I_MASK1 (SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, CURSOR_ATTRIBUTES2); I_MASK (SQL_INDEX_KEYWORDS); I_MASK (SQL_INFO_SCHEMA_VIEWS); I_MASK (SQL_INSERT_STATEMENT); I_STR (SQL_INTEGRITY); I_MASK1 (SQL_KEYSET_CURSOR_ATTRIBUTES1, CURSOR_ATTRIBUTES1); I_MASK1 (SQL_KEYSET_CURSOR_ATTRIBUTES2, CURSOR_ATTRIBUTES2); I_INT32 (SQL_MAX_ASYNC_CONCURRENT_STATEMENTS); I_INT16 (SQL_MAX_CATALOG_NAME_LEN); I_INT16 (SQL_MAX_CONCURRENT_ACTIVITIES); I_INT16 (SQL_MAX_DRIVER_CONNECTIONS); I_INT16 (SQL_MAX_IDENTIFIER_LEN); I_INT16 (SQL_MAX_SCHEMA_NAME_LEN); I_SVAL (SQL_ODBC_INTERFACE_CONFORMANCE); I_SVAL (SQL_PARAM_ARRAY_ROW_COUNTS); I_SVAL (SQL_PARAM_ARRAY_SELECTS); I_STR (SQL_SCHEMA_TERM); I_MASK (SQL_SCHEMA_USAGE); I_SVAL (SQL_SQL_CONFORMANCE); I_MASK (SQL_SQL92_DATETIME_FUNCTIONS); I_MASK (SQL_SQL92_FOREIGN_KEY_DELETE_RULE); I_MASK (SQL_SQL92_FOREIGN_KEY_UPDATE_RULE); I_MASK (SQL_SQL92_GRANT); I_MASK (SQL_SQL92_NUMERIC_VALUE_FUNCTIONS); I_MASK (SQL_SQL92_PREDICATES); I_MASK (SQL_SQL92_RELATIONAL_JOIN_OPERATORS); I_MASK (SQL_SQL92_REVOKE); I_MASK (SQL_SQL92_ROW_VALUE_CONSTRUCTOR); I_MASK (SQL_SQL92_STRING_FUNCTIONS); I_MASK (SQL_SQL92_VALUE_EXPRESSIONS); I_MASK (SQL_STANDARD_CLI_CONFORMANCE); I_MASK1 (SQL_STATIC_CURSOR_ATTRIBUTES1, CURSOR_ATTRIBUTES1); I_MASK1 (SQL_STATIC_CURSOR_ATTRIBUTES2, CURSOR_ATTRIBUTES2); I_STR (SQL_XOPEN_CLI_YEAR); #endif default: infoname = "unknown or driver specific"; break; } /* * If we arrive here, just print the generic pointer information */ trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", fInfoType, infoname); if (rgbInfoValue) trace_emit ("\t\t%-15.15s %p\n", "SQLPOINTER", rgbInfoValue); else trace_emit ("\t\t%-15.15s 0x0\n", "SQLPOINTER"); goto print_end; print_int16: trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", fInfoType, infoname); trace_emit ("\t\t%-15.15s %p (%ld)\n", "SQLPOINTER", rgbInfoValue, (long) *((short *) rgbInfoValue)); goto print_end; print_int32: trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", fInfoType, infoname); trace_emit ("\t\t%-15.15s %p (%ld)\n", "SQLPOINTER", rgbInfoValue, (long) *((int *) rgbInfoValue)); goto print_end; print_string: trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", fInfoType, infoname); trace_emit ("\t\t%-15.15s %p\n", "SQLPOINTER", rgbInfoValue); if (waMode == 'A') trace_emit_string ((SQLCHAR *) rgbInfoValue, pcbInfoValue ? *pcbInfoValue : SQL_NTS, 0); else { SQLCHAR *str_u8 = dm_SQL_W2A ((SQLWCHAR *) rgbInfoValue, pcbInfoValue ? *pcbInfoValue : SQL_NTS); trace_emit_string (str_u8, SQL_NTS, 1); free (str_u8); } goto print_end; print_mask: trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", fInfoType, infoname); trace_emit ("\t\t%-15.15s %p (0x%lX)\n", "SQLPOINTER", rgbInfoValue, (unsigned long) *((unsigned int *) rgbInfoValue)); if (*(int *) rgbInfoValue == 0) trace_emit ("\t\t\t\t | %-40.40s |\n", mask[0]); else { register unsigned int val = *(unsigned int *) rgbInfoValue; for (i = 1; i < 32; i++) { if (val & (1 << (i - 1))) { if (i < elem) trace_emit ("\t\t\t\t | %-40.40s |\n", mask[i]); else trace_emit ("\t\t\t\t | %-40.40s |\n", "UNKNOWN"); } } } goto print_end; print_svalue: i = *((short *) rgbInfoValue); trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", fInfoType, infoname); trace_emit ("\t\t%-15.15s %p (%ld)\n", "SQLPOINTER", rgbInfoValue, (long) *((SQLSMALLINT *) rgbInfoValue)); trace_emit ("\t\t\t\t | %-40.40s |\n", (i < elem) ? mask[i] : "UNKNOWN"); goto print_end; /* * All done */ print_end: return; } void trace_SQLGetInfo (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue) { /* Trace function */ _trace_print_function (en_GetInfo, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_getinfo (fInfoType, rgbInfoValue, cbInfoValueMax, pcbInfoValue, TRACE_OUTPUT_SUCCESS, 'A'); _trace_smallint (cbInfoValueMax); _trace_smallint_p (pcbInfoValue, TRACE_OUTPUT_SUCCESS); } #if ODBCVER >= 0x0300 void trace_SQLGetInfoW (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue) { /* Trace function */ _trace_print_function (en_GetInfoW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_getinfo (fInfoType, rgbInfoValue, cbInfoValueMax, pcbInfoValue, TRACE_OUTPUT_SUCCESS, 'W'); _trace_smallint (cbInfoValueMax); _trace_smallint_p (pcbInfoValue, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/SetConnectOption.c0000644000076400007640000000773212323210535016077 00000000000000/* * SetConnectOption.c * * $Id$ * * SQLSetConnectOption trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLSetConnectOption (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam) { /* Trace function */ _trace_print_function (en_SetConnectOption, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_connopt_type (fOption); _trace_ulen (vParam); } #if ODBCVER >= 0x0300 void trace_SQLSetConnectOptionW (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam) { /* Trace function */ _trace_print_function (en_SetConnectOptionW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_connopt_type (fOption); _trace_ulen (vParam); } #endif libiodbc-3.52.9/iodbc/trace/GetConnectAttr.c0000644000076400007640000001225212323210535015516 00000000000000/* * GetConnectAttr.c * * $Id$ * * SQLGetConnectAttr trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void _trace_connattr_type (SQLINTEGER type) { char *ptr = "unknown connection attribute"; switch (type) { _S (SQL_ATTR_ACCESS_MODE); _S (SQL_ATTR_AUTOCOMMIT); _S (SQL_ATTR_AUTO_IPD); _S (SQL_ATTR_CONNECTION_DEAD); _S (SQL_ATTR_CONNECTION_TIMEOUT); _S (SQL_ATTR_CURRENT_CATALOG); _S (SQL_ATTR_DISCONNECT_BEHAVIOR); _S (SQL_ATTR_ENLIST_IN_DTC); _S (SQL_ATTR_ENLIST_IN_XA); _S (SQL_ATTR_LOGIN_TIMEOUT); _S (SQL_ATTR_METADATA_ID); _S (SQL_ATTR_ODBC_CURSORS); _S (SQL_ATTR_PACKET_SIZE); _S (SQL_ATTR_QUIET_MODE); _S (SQL_ATTR_TRACE); _S (SQL_ATTR_TRACEFILE); _S (SQL_ATTR_TRANSLATE_LIB); _S (SQL_ATTR_TRANSLATE_OPTION); _S (SQL_ATTR_TXN_ISOLATION); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLINTEGER ", (int) type, ptr); } void trace_SQLGetConnectAttr (int trace_leave, int retcode, SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { /* Trace function */ _trace_print_function (en_GetConnectAttr, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, ConnectionHandle); _trace_connattr_type (Attribute); _trace_pointer (ValuePtr); _trace_bufferlen (BufferLength); _trace_integer_p (StringLengthPtr, TRACE_OUTPUT_SUCCESS); } void trace_SQLGetConnectAttrW (int trace_leave, int retcode, SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { /* Trace function */ _trace_print_function (en_GetConnectAttrW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, ConnectionHandle); _trace_connattr_type (Attribute); _trace_pointer (ValuePtr); _trace_bufferlen (BufferLength); _trace_integer_p (StringLengthPtr, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/GetCursorName.c0000644000076400007640000001052212323210535015346 00000000000000/* * GetCursorName.c * * $Id$ * * SQLGetCursorName trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLGetCursorName (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLCHAR * CursorName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLengthPtr) { /* Trace function */ _trace_print_function (en_GetCursorName, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_string (CursorName, BufferLength, NameLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength); _trace_smallint_p (NameLengthPtr, trace_leave); } #if ODBCVER >= 0x0300 void trace_SQLGetCursorNameW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLWCHAR * CursorName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLengthPtr) { /* Trace function */ _trace_print_function (en_GetCursorNameW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_string_w (CursorName, BufferLength, NameLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength); _trace_smallint_p (NameLengthPtr, trace_leave); } #endif libiodbc-3.52.9/iodbc/trace/NumResultCols.c0000644000076400007640000000710012323210535015405 00000000000000/* * NumResultCols.c * * $Id$ * * SQLNumResultCols trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLNumResultCols (int trace_leave, int retcode, SQLHSTMT hstmt, SQLSMALLINT * pccol) { /* Trace function */ _trace_print_function (en_NumResultCols, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_smallint_p (pccol, TRACE_OUTPUT_SUCCESS); } libiodbc-3.52.9/iodbc/trace/TablePrivileges.c0000644000076400007640000001151012323210535015707 00000000000000/* * TablePrivileges.c * * $Id$ * * SQLTablePrivileges trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLTablePrivileges (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName) { /* Trace function */ _trace_print_function (en_Tables, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); } #if ODBCVER >= 0x0300 void trace_SQLTablePrivilegesW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName) { /* Trace function */ _trace_print_function (en_TablesW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string_w (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string_w (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string_w (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); } #endif libiodbc-3.52.9/iodbc/trace/SetEnvAttr.c0000644000076400007640000000731312323210535014673 00000000000000/* * SetEnvAttr.c * * $Id$ * * SQLSetEnvAttr trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLSetEnvAttr (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { /* Trace function */ _trace_print_function (en_SetEnvAttr, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_ENV, EnvironmentHandle); _trace_envattr_type (Attribute); _trace_pointer (ValuePtr); _trace_bufferlen (StringLength); } #endif libiodbc-3.52.9/iodbc/trace/FreeStmt.c0000644000076400007640000000746712323210535014377 00000000000000/* * FreeStmt.c * * $Id$ * * SQLFreeStmt trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_freestmt_option (int option) { char *ptr = "invalid option"; switch (option) { _S (SQL_CLOSE); _S (SQL_DROP); _S (SQL_UNBIND); _S (SQL_RESET_PARAMS); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", (int) option, ptr); } void trace_SQLFreeStmt (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT Option) { /* Trace function */ _trace_print_function (en_FreeStmt, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_freestmt_option (Option); } libiodbc-3.52.9/iodbc/trace/BrowseConnect.c0000644000076400007640000001136512323210535015411 00000000000000/* * BrowseConnect.c * * $Id$ * * SQLBrowseConnect trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLBrowseConnect (int trace_leave, int retcode, SQLHDBC ConnectionHandle, SQLCHAR * InConnectionString, SQLSMALLINT StringLength1, SQLCHAR * OutConnectionString, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength2Ptr) { /* Trace function */ _trace_print_function (en_BrowseConnect, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, ConnectionHandle); _trace_string (InConnectionString, StringLength1, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", StringLength1); _trace_string (OutConnectionString, BufferLength, StringLength2Ptr, TRACE_OUTPUT_SUCCESS); _trace_smallint (BufferLength); _trace_smallint_p (StringLength2Ptr, TRACE_OUTPUT_SUCCESS); } #if ODBCVER >= 0x0300 void trace_SQLBrowseConnectW (int trace_leave, int retcode, SQLHDBC ConnectionHandle, SQLWCHAR * InConnectionString, SQLSMALLINT StringLength1, SQLWCHAR * OutConnectionString, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength2Ptr) { /* Trace function */ _trace_print_function (en_BrowseConnectW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, ConnectionHandle); _trace_string_w (InConnectionString, StringLength1, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", StringLength1); _trace_string_w (OutConnectionString, BufferLength, StringLength2Ptr, TRACE_OUTPUT_SUCCESS); _trace_smallint (BufferLength); _trace_smallint_p (StringLength2Ptr, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/proto.h0000644000076400007640000007223612323210535014012 00000000000000/* * proto.h * * $Id$ * * Trace functions prototypes * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ /* AllocConnect.c */ void trace_SQLAllocConnect (int trace_leave, int retcode, SQLHENV henv, SQLHDBC * phdbc); /* AllocEnv.c */ void trace_SQLAllocEnv (int trace_leave, int retcode, SQLHENV * phenv); /* AllocHandle.c */ void trace_SQLAllocHandle (int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE * OutputHandlePtr); /* AllocStmt.c */ void trace_SQLAllocStmt (int trace_leave, int retcode, SQLHDBC hdbc, SQLHSTMT * phstmt); /* BindCol.c */ void trace_SQLBindCol (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLLEN BufferLength, SQLLEN * Strlen_or_IndPtr); /* BindParameter.c */ void trace_SQLBindParameter (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT InputOutputType, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLUINTEGER ColumnSize, SQLSMALLINT DecimalDigits, SQLPOINTER ParameterValuePtr, SQLLEN BufferLength, SQLLEN * Strlen_or_IndPtr); /* BrowseConnect.c */ void trace_SQLBrowseConnect (int trace_leave, int retcode, SQLHDBC ConnectionHandle, SQLCHAR * InConnectionString, SQLSMALLINT StringLength1, SQLCHAR * OutConnectionString, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength2Ptr); void trace_SQLBrowseConnectW (int trace_leave, int retcode, SQLHDBC ConnectionHandle, SQLWCHAR * InConnectionString, SQLSMALLINT StringLength1, SQLWCHAR * OutConnectionString, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength2Ptr); /* BulkOperations.c */ void trace_SQLBulkOperations (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT Operation); /* Cancel.c */ void trace_SQLCancel (int trace_leave, int retcode, SQLHSTMT StatementHandle); /* CloseCursor.c */ void trace_SQLCloseCursor (int trace_leave, int retcode, SQLHSTMT StatementHandle); /* ColAttribute.c */ void _trace_colattr2_type (SQLUSMALLINT type); void _trace_colattr3_type (SQLUSMALLINT type); void trace_SQLColAttribute (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLLEN * NumericAttributePtr); void trace_SQLColAttributeW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLLEN * NumericAttributePtr); void trace_SQLColAttributes (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLLEN * pfDesc); void trace_SQLColAttributesW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLLEN * pfDesc); /* ColumnPrivileges.c */ void trace_SQLColumnPrivileges (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName); void trace_SQLColumnPrivilegesW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName); /* Columns.c */ void trace_SQLColumns (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName); void trace_SQLColumnsW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName); /* Connect.c */ void trace_SQLConnect (int trace_leave, int retcode, SQLHDBC hdbc, SQLCHAR * szDSN, SQLSMALLINT cbDSN, SQLCHAR * szUID, SQLSMALLINT cbUID, SQLCHAR * szAuthStr, SQLSMALLINT cbAuthStr); void trace_SQLConnectW (int trace_leave, int retcode, SQLHDBC hdbc, SQLWCHAR * szDSN, SQLSMALLINT cbDSN, SQLWCHAR * szUID, SQLSMALLINT cbUID, SQLWCHAR * szAuthStr, SQLSMALLINT cbAuthStr); /* CopyDesc.c */ #if (ODBCVER >= 0x0300) void trace_SQLCopyDesc (int trace_leave, int retcode, SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle); #endif /* DataSources.c */ void _trace_direction (SQLUSMALLINT dir); void trace_SQLDataSources (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLCHAR * ServerName, SQLSMALLINT BufferLength1, SQLSMALLINT * NameLength1Ptr, SQLCHAR * Description, SQLSMALLINT BufferLength2, SQLSMALLINT * NameLength2Ptr); void trace_SQLDataSourcesW (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLWCHAR * ServerName, SQLSMALLINT BufferLength1, SQLSMALLINT * NameLength1Ptr, SQLWCHAR * Description, SQLSMALLINT BufferLength2, SQLSMALLINT * NameLength2Ptr); /* DescribeCol.c */ void _trace_desc_null (SQLSMALLINT * p, int output); void trace_SQLDescribeCol (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLSMALLINT ColumnNumber, SQLCHAR * ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLengthPtr, SQLSMALLINT * DataTypePtr, SQLULEN * ColumnSizePtr, SQLSMALLINT * DecimalDigitsPtr, SQLSMALLINT * NullablePtr); void trace_SQLDescribeColW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLSMALLINT ColumnNumber, SQLWCHAR * ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLengthPtr, SQLSMALLINT * DataTypePtr, SQLULEN * ColumnSizePtr, SQLSMALLINT * DecimalDigitsPtr, SQLSMALLINT * NullablePtr); /* DescribeParam.c */ void trace_SQLDescribeParam (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT * pfSqlType, SQLULEN * pcbColDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable); /* Disconnect.c */ void trace_SQLDisconnect (int trace_leave, int retcode, SQLHDBC ConnectionHandle); /* DriverConnect.c */ void trace_SQLDriverConnect (int trace_leave, int retcode, SQLHDBC hdbc, SQLHWND hwnd, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion); void trace_SQLDriverConnectW (int trace_leave, int retcode, SQLHDBC hdbc, SQLHWND hwnd, SQLWCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLWCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion); /* Drivers.c */ void trace_SQLDrivers (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLCHAR * DriverDescription, SQLSMALLINT BufferLength1, SQLSMALLINT * DescriptionLengthPtr, SQLCHAR * DriverAttributes, SQLSMALLINT BufferLength2, SQLSMALLINT * AttributesLengthPtr); void trace_SQLDriversW (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLWCHAR * DriverDescription, SQLSMALLINT BufferLength1, SQLSMALLINT * DescriptionLengthPtr, SQLWCHAR * DriverAttributes, SQLSMALLINT BufferLength2, SQLSMALLINT * AttributesLengthPtr); /* EndTran.c */ void trace_SQLEndTran (int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType); /* Error.c */ void trace_SQLError (int trace_leave, int retcode, SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLCHAR * szSqlstate, SQLINTEGER * pfNativeError, SQLCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg); void trace_SQLErrorW (int trace_leave, int retcode, SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLWCHAR * szSqlstate, SQLINTEGER * pfNativeError, SQLWCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg); /* ExecDirect.c */ void trace_SQLExecDirect (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStr); void trace_SQLExecDirectW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStr); /* Execute.c */ void trace_SQLExecute (int trace_leave, int retcode, SQLHSTMT hstmt); /* ExtendedFetch.c */ void _trace_fetchtype (SQLUSMALLINT type); void trace_SQLExtendedFetch (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT fFetchType, SQLLEN irow, SQLULEN * pcrow, SQLUSMALLINT * rgfRowStatus); /* Fetch.c */ void trace_SQLFetch (int trace_leave, int retcode, SQLHSTMT hstmt); /* FetchScroll.c */ void trace_SQLFetchScroll (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLLEN FetchOffset); /* ForeignKeys.c */ void trace_SQLForeignKeys (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szPkTableQualifier, SQLSMALLINT cbPkTableQualifier, SQLCHAR * szPkTableOwner, SQLSMALLINT cbPkTableOwner, SQLCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLCHAR * szFkTableQualifier, SQLSMALLINT cbFkTableQualifier, SQLCHAR * szFkTableOwner, SQLSMALLINT cbFkTableOwner, SQLCHAR * szFkTableName, SQLSMALLINT cbFkTableName); void trace_SQLForeignKeysW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szPkTableQualifier, SQLSMALLINT cbPkTableQualifier, SQLWCHAR * szPkTableOwner, SQLSMALLINT cbPkTableOwner, SQLWCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLWCHAR * szFkTableQualifier, SQLSMALLINT cbFkTableQualifier, SQLWCHAR * szFkTableOwner, SQLSMALLINT cbFkTableOwner, SQLWCHAR * szFkTableName, SQLSMALLINT cbFkTableName); /* FreeConnect.c */ void trace_SQLFreeConnect (int trace_leave, int retcode, SQLHDBC hdbc); /* FreeEnv.c */ void trace_SQLFreeEnv (int trace_leave, int retcode, SQLHENV henv); /* FreeHandle.c */ void trace_SQLFreeHandle (int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE Handle); /* FreeStmt.c */ void _trace_freestmt_option (int option); void trace_SQLFreeStmt (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT Option); /* GetConnectAttr.c */ void _trace_connattr_type (SQLINTEGER type); void trace_SQLGetConnectAttr (int trace_leave, int retcode, SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr); void trace_SQLGetConnectAttrW (int trace_leave, int retcode, SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr); /* GetConnectOption.c */ void _trace_connopt_type (SQLUSMALLINT type); void trace_SQLGetConnectOption (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fOption, SQLPOINTER pvParam); void trace_SQLGetConnectOptionW (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fOption, SQLPOINTER pvParam); /* GetCursorName.c */ void trace_SQLGetCursorName (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLCHAR * CursorName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLengthPtr); void trace_SQLGetCursorNameW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLWCHAR * CursorName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLengthPtr); /* GetData.c */ void _trace_data (SQLSMALLINT fCType, SQLPOINTER rgbValue, SQLLEN cbValueMax, SQLLEN * pcbValue, int output); void trace_SQLGetData (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT icol, SQLSMALLINT fCType, SQLPOINTER rgbValue, SQLLEN cbValueMax, SQLLEN * pcbValue); /* GetDescField.c */ #if (ODBCVER >= 0x0300) void _trace_descfield_type (SQLSMALLINT type); void trace_SQLGetDescField (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr); void trace_SQLGetDescFieldW (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr); /* GetDescRec.c */ void trace_SQLGetDescRec (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLCHAR * Name, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLSMALLINT * TypePtr, SQLSMALLINT * SubTypePtr, SQLLEN * LengthPtr, SQLSMALLINT * PrecisionPtr, SQLSMALLINT * ScalePtr, SQLSMALLINT * NullablePtr); void trace_SQLGetDescRecW (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLWCHAR * Name, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLSMALLINT * TypePtr, SQLSMALLINT * SubTypePtr, SQLLEN * LengthPtr, SQLSMALLINT * PrecisionPtr, SQLSMALLINT * ScalePtr, SQLSMALLINT * NullablePtr); /* GetDiagField.c */ void _trace_diag_type (SQLSMALLINT type); void trace_SQLGetDiagField (int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER DiagInfoPtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr); void trace_SQLGetDiagFieldW (int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER DiagInfoPtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr); /* GetDiagRec.c */ void trace_SQLGetDiagRec (int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLCHAR * SqlState, SQLINTEGER * NativeErrorPtr, SQLCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLengthPtr); void trace_SQLGetDiagRecW (int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLWCHAR * SqlState, SQLINTEGER * NativeErrorPtr, SQLWCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLengthPtr); #endif /* GetEnvAttr.c */ void _trace_envattr_type (SQLINTEGER type); void trace_SQLGetEnvAttr (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr); /* GetFunctions.c */ void trace_SQLGetFunctions (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fFunc, SQLUSMALLINT * pfExists); /* GetStmtAttr.c */ void _trace_stmtattr_type (SQLINTEGER type); void trace_SQLGetStmtAttr (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr); void trace_SQLGetStmtAttrW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr); /* GetStmtOption.c */ void _trace_stmtopt_type (SQLUSMALLINT type); void trace_SQLGetStmtOption (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT Attribute, SQLPOINTER ValuePtr); /* GetTypeInfo.c */ void _trace_typeinfo (SQLSMALLINT type); void trace_SQLGetTypeInfo (int trace_leave, int retcode, SQLHSTMT hstmt, SQLSMALLINT fSqlType); void trace_SQLGetTypeInfoW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLSMALLINT fSqlType); /* Info.c */ void trace_SQLGetInfo (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue); void trace_SQLGetInfoW (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue); /* MoreResults.c */ void trace_SQLMoreResults (int trace_leave, int retcode, SQLHSTMT hstmt); /* NativeSql.c */ void trace_SQLNativeSql (int trace_leave, int retcode, SQLHDBC hdbc, SQLCHAR * InStatementText, SQLINTEGER TextLength1, SQLCHAR * OutStatementText, SQLINTEGER BufferLength, SQLINTEGER * TextLength2Ptr); void trace_SQLNativeSqlW (int trace_leave, int retcode, SQLHDBC hdbc, SQLWCHAR * InStatementText, SQLINTEGER TextLength1, SQLWCHAR * OutStatementText, SQLINTEGER BufferLength, SQLINTEGER * TextLength2Ptr); /* NumParams.c */ void trace_SQLNumParams (int trace_leave, int retcode, SQLHSTMT hstmt, SQLSMALLINT * pcpar); /* NumResultCols.c */ void trace_SQLNumResultCols (int trace_leave, int retcode, SQLHSTMT hstmt, SQLSMALLINT * pccol); /* ParamData.c */ void trace_SQLParamData (int trace_leave, int retcode, SQLHSTMT hstmt, SQLPOINTER * prgbValue); /* ParamOptions.c */ void trace_SQLParamOptions (int trace_leave, int retcode, SQLHSTMT hstmt, SQLULEN crow, SQLULEN * pirow); /* Prepare.c */ void trace_SQLPrepare (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength); void trace_SQLPrepareW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLWCHAR * StatementText, SQLINTEGER TextLength); /* PrimaryKeys.c */ void trace_SQLPrimaryKeys (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName); void trace_SQLPrimaryKeysW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName); /* ProcedureColumns.c */ void trace_SQLProcedureColumns (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLCHAR * szProcName, SQLSMALLINT cbProcName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName); void trace_SQLProcedureColumnsW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLWCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLWCHAR * szProcName, SQLSMALLINT cbProcName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName); /* Procedures.c */ void trace_SQLProcedures (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLCHAR * szProcName, SQLSMALLINT cbProcName); void trace_SQLProceduresW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLWCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLWCHAR * szProcName, SQLSMALLINT cbProcName); /* PutData.c */ void trace_SQLPutData (int trace_leave, int retcode, SQLHSTMT hstmt, SQLPOINTER rgbValue, SQLLEN cbValue); /* RowCount.c */ void trace_SQLRowCount (int trace_leave, int retcode, SQLHSTMT hstmt, SQLLEN * pcrow); /* SetConnectAttr.c */ void trace_SQLSetConnectAttr (int trace_leave, int retcode, SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength); void trace_SQLSetConnectAttrW (int trace_leave, int retcode, SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength); /* SetConnectOption.c */ void trace_SQLSetConnectOption (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam); void trace_SQLSetConnectOptionW (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam); /* SetCursorName.c */ void trace_SQLSetCursorName (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szCursor, SQLSMALLINT cbCursor); void trace_SQLSetCursorNameW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szCursor, SQLSMALLINT cbCursor); /* SetDescField.c */ #if (ODBCVER >= 0x0300) void trace_SQLSetDescField (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength); void trace_SQLSetDescFieldW (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength); #endif /* SetDescRec.c */ #if (ODBCVER >= 0x0300) void trace_SQLSetDescRec (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT Type, SQLSMALLINT SubType, SQLLEN Length, SQLSMALLINT Precision, SQLSMALLINT Scale, SQLPOINTER Data, SQLLEN * StringLength, SQLLEN * Indicator); #endif /* SetEnvAttr.c */ void trace_SQLSetEnvAttr (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength); /* SetPos.c */ void _trace_setpos_irow (SQLSETPOSIROW i); void _trace_setpos_oper (SQLUSMALLINT type); void _trace_setpos_lock (SQLUSMALLINT type); void trace_SQLSetPos (int trace_leave, int retcode, SQLHSTMT hstmt, SQLSETPOSIROW irow, SQLUSMALLINT fOption, SQLUSMALLINT fLock); /* SetScrollOptions.c */ void _trace_scrollopt_type (SQLUSMALLINT type); void trace_SQLSetScrollOptions (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT fConcurrency, SQLINTEGER crowKeyset, SQLUSMALLINT crowRowset); /* SetStmtAttr.c */ void trace_SQLSetStmtAttr (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength); void trace_SQLSetStmtAttrW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength); /* SetStmtOption.c */ void trace_SQLSetStmtOption (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT fOption, SQLUINTEGER vParam); /* SpecialColumns.c */ void _trace_spcols_type (SQLUSMALLINT type); void _trace_spcols_scope (SQLUSMALLINT type); void _trace_spcols_null (SQLUSMALLINT type); void trace_SQLSpecialColumns (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT fColType, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fScope, SQLUSMALLINT fNullable); void trace_SQLSpecialColumnsW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT fColType, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fScope, SQLUSMALLINT fNullable); /* Statistics.c */ void _trace_stats_unique (SQLUSMALLINT type); void _trace_stats_accuracy (SQLUSMALLINT type); void trace_SQLStatistics (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fUnique, SQLUSMALLINT fAccuracy); void trace_SQLStatisticsW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fUnique, SQLUSMALLINT fAccuracy); /* TablePrivileges.c */ void trace_SQLTablePrivileges (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName); void trace_SQLTablePrivilegesW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName); /* Tables.c */ void trace_SQLTables (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szTableType, SQLSMALLINT cbTableType); void trace_SQLTablesW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szTableType, SQLSMALLINT cbTableType); /* trace.c */ void trace_set_appname (char *appname); char *trace_get_filename (void); void trace_set_filename (char *fname); void trace_start (void); void trace_stop (void); void trace_emitc (char c); void trace_emit (char *fmt, ...); void trace_emit_string (SQLCHAR * str, ssize_t len, int is_utf8); void trace_emit_binary (unsigned char *str, ssize_t len); void _trace_print_function (int func, int trace_leave, int retcode); void _trace_handletype (SQLSMALLINT type); void _trace_handle_p (SQLSMALLINT type, SQLHANDLE * handle, int output); void _trace_handle (SQLSMALLINT type, SQLHANDLE handle); void _trace_smallint (SQLSMALLINT i); void _trace_usmallint (SQLUSMALLINT i); void _trace_integer (SQLINTEGER i); void _trace_uinteger (SQLUINTEGER i); void _trace_pointer (SQLPOINTER p); void _trace_smallint_p (SQLSMALLINT * p, int output); void _trace_usmallint_p (SQLUSMALLINT * p, int output); void _trace_integer_p (SQLINTEGER * p, int output); void _trace_uinteger_p (SQLUINTEGER * p, int output); void _trace_stringlen (char *type, SQLINTEGER len); void _trace_len (SQLLEN i); void _trace_ulen (SQLULEN i); void _trace_len_p (SQLLEN * p, int output); void _trace_ulen_p (SQLULEN * p, int output); void _trace_string (SQLCHAR * str, SQLSMALLINT len, SQLSMALLINT * lenptr, int output); void _trace_string_w (SQLWCHAR * str, SQLSMALLINT len, SQLSMALLINT * lenptr, int output); void _trace_c_type (SQLSMALLINT type); void _trace_inouttype (SQLSMALLINT type); void _trace_sql_type (SQLSMALLINT type); void _trace_sql_type_p (SQLSMALLINT * p, int output); void _trace_sql_subtype (SQLSMALLINT * type, SQLSMALLINT * sub, int output); void _trace_bufferlen (SQLINTEGER length); /* Transact.c */ void _trace_tran_completion (SQLSMALLINT option); void trace_SQLTransact (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLSMALLINT CompletionType); libiodbc-3.52.9/iodbc/trace/EndTran.c0000644000076400007640000000717412323210535014174 00000000000000/* * EndTran.c * * $Id$ * * SQLEndTran trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLEndTran (int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType) { /* Trace function */ _trace_print_function (en_EndTran, trace_leave, retcode); /* Trace Arguments */ _trace_handletype (HandleType); _trace_handle (HandleType, Handle); _trace_tran_completion (CompletionType); } #endif libiodbc-3.52.9/iodbc/trace/GetTypeInfo.c0000644000076400007640000001154312323210535015031 00000000000000/* * GetTypeInfo.c * * $Id$ * * SQLGetTypeInfo trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_typeinfo (SQLSMALLINT type) { char *ptr = "unknown type"; switch (type) { _S (SQL_ALL_TYPES); _S (SQL_BIGINT); _S (SQL_BINARY); _S (SQL_BIT); _S (SQL_CHAR); #if (ODBCVER < 0x0300) _S (SQL_DATE); #else _S (SQL_DATETIME); #endif _S (SQL_DECIMAL); _S (SQL_DOUBLE); _S (SQL_FLOAT); #if (ODBCVER >= 0x0350) _S (SQL_GUID); #endif _S (SQL_INTEGER); _S (SQL_LONGVARBINARY); _S (SQL_LONGVARCHAR); _S (SQL_NUMERIC); _S (SQL_REAL); _S (SQL_SMALLINT); #if (ODBCVER < 0x0300) _S (SQL_TIME); #else _S (SQL_INTERVAL); #endif _S (SQL_TIMESTAMP); _S (SQL_TINYINT); #if ODBCVER >= 0x0300 _S (SQL_TYPE_DATE); _S (SQL_TYPE_TIME); _S (SQL_TYPE_TIMESTAMP); #endif _S (SQL_VARBINARY); _S (SQL_VARCHAR); _S (SQL_WCHAR); _S (SQL_WLONGVARCHAR); _S (SQL_WVARCHAR); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLSMALLINT ", (int) type, ptr); } void trace_SQLGetTypeInfo (int trace_leave, int retcode, SQLHSTMT hstmt, SQLSMALLINT fSqlType) { /* Trace function */ _trace_print_function (en_GetTypeInfo, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_typeinfo (fSqlType); } #if ODBCVER >= 0x0300 void trace_SQLGetTypeInfoW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLSMALLINT fSqlType) { /* Trace function */ _trace_print_function (en_GetTypeInfoW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_typeinfo (fSqlType); } #endif libiodbc-3.52.9/iodbc/trace/Fetch.c0000644000076400007640000000672012323210535013666 00000000000000/* * Fetch.c * * $Id$ * * SQLFetch trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLFetch (int trace_leave, int retcode, SQLHSTMT hstmt) { /* Trace function */ _trace_print_function (en_Fetch, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); } libiodbc-3.52.9/iodbc/trace/Drivers.c0000644000076400007640000001220512323210535014246 00000000000000/* * Drivers.c * * $Id$ * * SQLDrivers trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLDrivers (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLCHAR * DriverDescription, SQLSMALLINT BufferLength1, SQLSMALLINT * DescriptionLengthPtr, SQLCHAR * DriverAttributes, SQLSMALLINT BufferLength2, SQLSMALLINT * AttributesLengthPtr) { /* Trace function */ _trace_print_function (en_Drivers, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_ENV, EnvironmentHandle); _trace_direction (Direction); _trace_string (DriverDescription, BufferLength1, DescriptionLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength1); _trace_smallint_p (DescriptionLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_string (DriverAttributes, BufferLength2, AttributesLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength2); _trace_smallint_p (AttributesLengthPtr, TRACE_OUTPUT_SUCCESS); } #if ODBCVER >= 0x0300 void trace_SQLDriversW (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLWCHAR * DriverDescription, SQLSMALLINT BufferLength1, SQLSMALLINT * DescriptionLengthPtr, SQLWCHAR * DriverAttributes, SQLSMALLINT BufferLength2, SQLSMALLINT * AttributesLengthPtr) { /* Trace function */ _trace_print_function (en_DriversW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_ENV, EnvironmentHandle); _trace_direction (Direction); _trace_string_w (DriverDescription, BufferLength1, DescriptionLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength1); _trace_smallint_p (DescriptionLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_string_w (DriverAttributes, BufferLength2, AttributesLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength2); _trace_smallint_p (AttributesLengthPtr, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/BindCol.c0000644000076400007640000000750512323210535014151 00000000000000/* * BindCol.c * * $Id$ * * SQLBindCol trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLBindCol (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLLEN BufferLength, SQLLEN * Strlen_or_IndPtr) { /* Trace function */ _trace_print_function (en_BindCol, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_usmallint (ColumnNumber); _trace_c_type (TargetType); _trace_pointer (TargetValuePtr); _trace_len (BufferLength); _trace_len_p (Strlen_or_IndPtr, TRACE_OUTPUT_SUCCESS); } libiodbc-3.52.9/iodbc/trace/PutData.c0000644000076400007640000000707212323210535014200 00000000000000/* * PutData.c * * $Id$ * * SQLPutData trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLPutData (int trace_leave, int retcode, SQLHSTMT hstmt, SQLPOINTER rgbValue, SQLLEN cbValue) { /* Trace function */ _trace_print_function (en_PutData, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_pointer (rgbValue); _trace_len (cbValue); } libiodbc-3.52.9/iodbc/trace/Connect.c0000644000076400007640000001132412323210535014222 00000000000000/* * Connect.c * * $Id$ * * SQLConnect trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLConnect (int trace_leave, int retcode, SQLHDBC hdbc, SQLCHAR * szDSN, SQLSMALLINT cbDSN, SQLCHAR * szUID, SQLSMALLINT cbUID, SQLCHAR * szAuthStr, SQLSMALLINT cbAuthStr) { /* Trace function */ _trace_print_function (en_Connect, trace_leave, retcode); /* Hide plaintext passwords */ szAuthStr = (SQLCHAR *) "****"; /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_string (szDSN, cbDSN, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbDSN); _trace_string (szUID, cbUID, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbDSN); _trace_string (szAuthStr, SQL_NTS, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbAuthStr); } #if ODBCVER >= 0x0300 void trace_SQLConnectW (int trace_leave, int retcode, SQLHDBC hdbc, SQLWCHAR * szDSN, SQLSMALLINT cbDSN, SQLWCHAR * szUID, SQLSMALLINT cbUID, SQLWCHAR * szAuthStr, SQLSMALLINT cbAuthStr) { /* Trace function */ _trace_print_function (en_ConnectW, trace_leave, retcode); /* Hide plaintext passwords */ szAuthStr = (SQLWCHAR *) L"****"; /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_string_w (szDSN, cbDSN, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbDSN); _trace_string_w (szUID, cbUID, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbDSN); _trace_string_w (szAuthStr, SQL_NTS, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbAuthStr); } #endif libiodbc-3.52.9/iodbc/trace/MoreResults.c0000644000076400007640000000674712323210535015132 00000000000000/* * MoreResults.c * * $Id$ * * SQLMoreResults trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLMoreResults (int trace_leave, int retcode, SQLHSTMT hstmt) { /* Trace function */ _trace_print_function (en_MoreResults, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); } libiodbc-3.52.9/iodbc/trace/SetStmtOption.c0000644000076400007640000000713712323210535015434 00000000000000/* * SetStmtOption.c * * $Id$ * * SQLSetStmtOption trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLSetStmtOption (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT fOption, SQLUINTEGER vParam) { /* Trace function */ _trace_print_function (en_SetStmtOption, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_stmtopt_type (fOption); _trace_uinteger (vParam); } libiodbc-3.52.9/iodbc/trace/BulkOperations.c0000644000076400007640000000714312323210535015576 00000000000000/* * BulkOperations.c * * $Id$ * * SQLBulkOperations trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLBulkOperations (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT Operation) { /* Trace function */ _trace_print_function (en_BulkOperations, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_setpos_oper (Operation); } #endif libiodbc-3.52.9/iodbc/trace/BindParameter.c0000644000076400007640000001014612323210535015347 00000000000000/* * BindParameter.c * * $Id$ * * SQLBindParameter trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLBindParameter (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT InputOutputType, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLUINTEGER ColumnSize, SQLSMALLINT DecimalDigits, SQLPOINTER ParameterValuePtr, SQLLEN BufferLength, SQLLEN * Strlen_or_IndPtr) { /* Trace function */ _trace_print_function (en_BindParameter, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_smallint (ParameterNumber); _trace_inouttype (InputOutputType); _trace_c_type (ValueType); _trace_sql_type (ParameterType); _trace_uinteger (ColumnSize); _trace_smallint (DecimalDigits); _trace_pointer (ParameterValuePtr); _trace_len (BufferLength); _trace_len_p (Strlen_or_IndPtr, TRACE_OUTPUT_SUCCESS); } libiodbc-3.52.9/iodbc/trace/DriverConnect.c0000644000076400007640000001676312323210535015412 00000000000000/* * DriverConnect.c * * $Id$ * * SQLDriverConnect trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" /* * Never print plaintext passwords * * NOTE: This function modifies the original string * */ static void _trace_connstr_hidepwd (SQLCHAR *str) { SQLCHAR *ptr; int state = 0; for (ptr = str; *ptr;) { switch (state) { case -1: if (strchr ("\'\"}", *ptr)) state = 0; break; case 0: if (toupper(*ptr) == 'P') state = 1; else if (strchr ("\'\"{", *ptr)) state = -1; /* in string */ break; case 1: if (toupper(*ptr) == 'W') state = 2; else state = 0; break; case 2: if (toupper(*ptr) == 'D') state = 3; else state = 0; break; case 3: if (*ptr == '=') state = 4; /* goto password mode */ else state = 0; break; case 4: if (*ptr == ';') { state = 0; /* go back to normal mode */ } else *ptr = '*'; break; } ptr++; } } static void _trace_connstr ( SQLCHAR * str, SQLSMALLINT len, SQLSMALLINT * lenptr, int output) { SQLCHAR *dup; ssize_t length; if (!str) { trace_emit ("\t\t%-15.15s * 0x0\n", "SQLCHAR"); return; } trace_emit ("\t\t%-15.15s * %p\n", "SQLCHAR", str); if (!output) return; /* * Calculate string length */ if (lenptr ) length = *lenptr; else length = len; if (length == SQL_NTS) length = STRLEN (str); /* * Make a copy of the string */ if ((dup = (SQLCHAR *) malloc (length + 1)) == NULL) return; memcpy (dup, str, length); dup[length] = '\0'; /* * Emit the string */ _trace_connstr_hidepwd (dup); trace_emit_string (dup, length, 0); free (dup); } static void _trace_connstr_w ( SQLWCHAR * str, SQLSMALLINT len, SQLSMALLINT * lenptr, int output) { SQLCHAR *dup; long length; if (!str) { trace_emit ("\t\t%-15.15s * 0x0\n", "SQLWCHAR"); return; } trace_emit ("\t\t%-15.15s * %p\n", "SQLWCHAR", str); if (!output) return; /* * Calculate string length */ if (lenptr) length = *lenptr; else length = len; /* * Emit the string */ dup = dm_SQL_W2A (str, length); _trace_connstr_hidepwd (dup); trace_emit_string (dup, SQL_NTS, 1); free (dup); } static void _trace_drvcn_completion(SQLUSMALLINT fDriverCompletion) { char *ptr = "invalid completion value"; switch (fDriverCompletion) { _S (SQL_DRIVER_PROMPT); _S (SQL_DRIVER_COMPLETE); _S (SQL_DRIVER_COMPLETE_REQUIRED); _S (SQL_DRIVER_NOPROMPT); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", (int) fDriverCompletion, ptr); } void trace_SQLDriverConnect (int trace_leave, int retcode, SQLHDBC hdbc, SQLHWND hwnd, SQLCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion) { /* Trace function */ _trace_print_function (en_DriverConnect, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_pointer (hwnd); _trace_connstr (szConnStrIn, cbConnStrIn, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbConnStrIn); _trace_connstr (szConnStrOut, cbConnStrOutMax, pcbConnStrOut, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", cbConnStrOutMax); _trace_smallint_p (pcbConnStrOut, TRACE_OUTPUT_SUCCESS); _trace_drvcn_completion (fDriverCompletion); } #if ODBCVER >= 0x0300 void trace_SQLDriverConnectW (int trace_leave, int retcode, SQLHDBC hdbc, SQLHWND hwnd, SQLWCHAR * szConnStrIn, SQLSMALLINT cbConnStrIn, SQLWCHAR * szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT * pcbConnStrOut, SQLUSMALLINT fDriverCompletion) { /* Trace function */ _trace_print_function (en_DriverConnectW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_pointer (hwnd); _trace_connstr_w (szConnStrIn, cbConnStrIn, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbConnStrIn); _trace_connstr_w (szConnStrOut, cbConnStrOutMax, pcbConnStrOut, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", cbConnStrOutMax); _trace_smallint_p (pcbConnStrOut, TRACE_OUTPUT_SUCCESS); _trace_drvcn_completion (fDriverCompletion); } #endif libiodbc-3.52.9/iodbc/trace/SetDescField.c0000644000076400007640000001044512323210535015132 00000000000000/* * SetDescField.c * * $Id$ * * SQLSetDescField trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLSetDescField (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength) { /* Trace function */ _trace_print_function (en_SetDescField, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DESC, DescriptorHandle); _trace_smallint (RecNumber); _trace_descfield_type (FieldIdentifier); _trace_pointer (ValuePtr); _trace_bufferlen (BufferLength); } void trace_SQLSetDescFieldW (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength) { /* Trace function */ _trace_print_function (en_SetDescFieldW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DESC, DescriptorHandle); _trace_smallint (RecNumber); _trace_descfield_type (FieldIdentifier); _trace_pointer (ValuePtr); _trace_bufferlen (BufferLength); } #endif libiodbc-3.52.9/iodbc/trace/Execute.c0000644000076400007640000000673012323210535014240 00000000000000/* * Execute.c * * $Id$ * * SQLExecute trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLExecute (int trace_leave, int retcode, SQLHSTMT hstmt) { /* Trace function */ _trace_print_function (en_Execute, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); } libiodbc-3.52.9/iodbc/trace/trace.c0000644000076400007640000006436112323210535013740 00000000000000/* * trace.c * * $Id$ * * Trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include #ifdef TIME_WITH_SYS_TIME #include #endif #include #include #include #include "herr.h" #include "henv.h" #include "ithread.h" #include "trace.h" #include "unicode.h" #define NO_CARBON 1 #if defined(macintosh) # include # include # include #elif defined(__APPLE__) && !defined(NO_CARBON) # include #endif /* * Limit the size of the tracefile, to avoid a core dump when the * the RLIMIT_FSIZE is reached. */ #define MAX_TRACEFILE_LEN 1000000000L /* about 1GB */ /* * Global trace flag */ int ODBCSharedTraceFlag = SQL_OPT_TRACE_OFF; static char *trace_appname = NULL; static char *trace_fname = NULL; static char *trace_fname_template = NULL; static FILE *trace_fp = NULL; static int trace_fp_close = 0; void trace_emit (char *fmt, ...); #ifdef HAVE_GETTIMEOFDAY static struct timeval starttime = {0}; #endif /* * Internal functions */ void trace_set_appname (char *appname) { MEM_FREE (trace_appname); trace_appname = STRDUP (appname); } char * trace_get_filename (void) { return STRDUP (trace_fname); } static void trace_strftime_now (char *buf, size_t buflen, char *format) { time_t now; struct tm *timeNow; #ifdef HAVE_LOCALTIME_R struct tm keeptime; #endif tzset (); time (&now); #ifdef HAVE_LOCALTIME_R timeNow = localtime_r (&now, &keeptime); #else timeNow = localtime (&now); #endif strftime (buf, buflen, format, timeNow); } void trace_set_filename (char *template) { char *s, *p; struct passwd *pwd; char *buf; size_t buf_len, buf_pos; char tmp[255]; /* Make copy of template */ if (template) { MEM_FREE (trace_fname_template) trace_fname_template = STRDUP (template); } /* Initialize */ MEM_FREE (trace_fname); trace_fname = NULL; buf = (char *) malloc (buf_len = strlen (trace_fname_template) + sizeof (tmp) + 1); if (!buf) return; /* No more memory */ buf_pos = 0; buf[0] = '\0'; for (s = trace_fname_template; *s;) { /* * Make sure we can fit at least 1 more tmp buffer inside */ if (buf_len - buf_pos < sizeof (tmp)) buf = realloc (buf, buf_len += sizeof (tmp) + 1); if (!buf) return; /* No more memory */ if (*s != '$') { buf[buf_pos++] = *s++; } else { /* Handle Escape sequences */ switch (*(s + 1)) { case '$': { buf[buf_pos++] = '$'; break; } case 'p': case 'P': { #if defined (HAVE_SNPRINTF) snprintf (tmp, sizeof (tmp), "%ld", (long) getpid ()); #else sprintf (tmp, "%ld", (long) getpid ()); #endif strcpy (&buf[buf_pos], tmp); buf_pos += strlen (tmp); break; } case 'u': case 'U': { if ((pwd = getpwuid (getuid ())) != NULL) { #if defined (HAVE_SNPRINTF) snprintf (tmp, sizeof (tmp), "%s", pwd->pw_name); #else sprintf (tmp, "%s", pwd->pw_name); #endif strcpy (&buf[buf_pos], tmp); buf_pos += strlen (tmp); } break; } case 'h': case 'H': { p = NULL; if ((p = getenv ("HOME")) == NULL) { if ((pwd = getpwuid (getuid ())) != NULL) p = pwd->pw_dir; } if (p) { #if defined (HAVE_SNPRINTF) snprintf (tmp, sizeof (tmp), "%s", p); #else sprintf (tmp, "%s", p); #endif strcpy (&buf[buf_pos], tmp); buf_pos += strlen (tmp); } break; } case 't': case 'T': { trace_strftime_now (tmp, sizeof (tmp), "%Y%m%d-%H%M%S"); strcpy (&buf[buf_pos], tmp); buf_pos += strlen (tmp); break; } case 's': case 'S': { static unsigned int counter = 0; #if defined (HAVE_SNPRINTF) snprintf (tmp, sizeof (tmp), "%d", ++counter); #else sprintf (tmp, "%d", ++counter); #endif strcpy (&buf[buf_pos], tmp); buf_pos += strlen (tmp); } default: /* Skip unknown escapes */ break; } s += 2; } } buf[buf_pos] = '\0'; trace_fname = buf; return; } void trace_start(void) { /* * First stop any previous trace */ trace_stop (); #ifdef HAVE_GETTIMEOFDAY gettimeofday (&starttime, NULL); #endif /* * If no trace filename is specified, use the default */ if (!trace_fname) trace_fname = STRDUP (SQL_OPT_TRACE_FILE_DEFAULT); #if defined (stderr) else if (STRCASEEQ (trace_fname, "stderr")) { trace_fp = stderr; } #endif else { int fd; int fd_flags = O_WRONLY | O_CREAT | O_TRUNC; int fd_mode = 0644; #if defined (unix) /* * As this is a security risk, we do not allow root to overwrite a file */ if (geteuid () == 0) { fd_flags |= O_EXCL; } #endif fd = open (trace_fname, fd_flags, fd_mode); if (fd < 0 || (trace_fp = fdopen (fd, "w")) == NULL) { return; /* no tracing */ } trace_fp_close = 1; /* * Set trace stream to line buffered */ setvbuf (trace_fp, NULL, _IOLBF, 0); } /* * Initialize the debug stream */ if (trace_fp == NULL) { return; } else { char mesgBuf[200]; trace_emit ("** iODBC Trace file\n"); /* * Show start time */ trace_strftime_now (mesgBuf, sizeof (mesgBuf), "** Trace started on %a %b %d %H:%M:%S %Y"); trace_emit ("%s\n", mesgBuf); /* * Show Driver Manager version similar to SQLGetInfo (SQL_DM_VER) */ sprintf ((char *) mesgBuf, "%02d.%02d.%04d.%04d", SQL_SPEC_MAJOR, SQL_SPEC_MINOR, IODBC_BUILD / 10000, IODBC_BUILD % 10000); trace_emit ("** Driver Manager: %s\n\n", mesgBuf); } #if defined (linux) { extern char *__progname; trace_set_appname (__progname); } #elif defined(macintosh) || (defined(__APPLE__) && !defined(NO_CARBON)) { ProcessSerialNumber PSN; ProcessInfoRec prec; unsigned char processName[40]; GetCurrentProcess (&PSN); prec.processInfoLength = sizeof (ProcessInfoRec); prec.processName = processName; prec.processAppSpec = NULL; if (GetProcessInformation (&PSN, &prec) == noErr) { processName[processName[0] + 1] = '\0'; trace_set_appname (processName + 1); } else trace_set_appname ("{No Application Name}"); } #elif defined(__APPLE__) #ifdef MACOSX102 { trace_set_appname ("{No Application Name}"); } #else { trace_set_appname ((char *) getprogname ()); } #endif #endif /* * Turn on tracing flag */ ODBCSharedTraceFlag = SQL_OPT_TRACE_ON; return; } void trace_stop(void) { char mesgBuf[200]; if (trace_fp) { /* * Show end time */ trace_strftime_now (mesgBuf, sizeof (mesgBuf), "** Trace finished on %a %b %d %H:%M:%S %Y"); trace_emit ("\n%s\n", mesgBuf); if (trace_fp_close) fclose (trace_fp); } ODBCSharedTraceFlag = SQL_OPT_TRACE_OFF; trace_fp = NULL; trace_fp_close = 0; } void trace_emitc (char c) { /* * Make sure tracing is enabled */ if (!trace_fp) { ODBCSharedTraceFlag = SQL_OPT_TRACE_OFF; return; } fputc (c, trace_fp); } void trace_emit (char *fmt, ...) { va_list ap; /* * Make sure tracing is enabled */ if (!trace_fp) { ODBCSharedTraceFlag = SQL_OPT_TRACE_OFF; return; } va_start (ap, fmt); vfprintf (trace_fp, fmt, ap); va_end (ap); } void trace_emit_string (SQLCHAR *str, ssize_t len, int is_utf8) { ssize_t length = len; int i, j; int col; SQLCHAR *ptr; int bytes; int truncated = 0; if (!str) return; if (len == SQL_NTS) length = STRLEN ((char *) str); if (len <= 0) return; /* * Guard against very long strings */ if (length > MAX_EMIT_STRING) { length = MAX_EMIT_STRING; truncated = 1; } /* * Dump the (optional UTF-8) string in chunks of 40 characters */ ptr = str; col = 0; for (i = 0; i < length; i += bytes) { register int c = *ptr; /* * Assume this is a nul-terminated string */ if (!c) break; /* * Print prefix */ if (col == 0) trace_emit ("\t\t\t\t | "); /* * Take care of UTF-8 encoding */ if (!is_utf8) bytes = 1; else if (c < 128) bytes = 1; else if ((c & 0xE0) == 0xC0) bytes = 2; else if ((c & 0xF0) == 0xE0) bytes = 3; else if ((c & 0xF8) == 0xF0) bytes = 4; else if ((c & 0xFC) == 0xF8) bytes = 5; else if ((c & 0xFE) == 0xFC) bytes = 6; else bytes = -1; /* Wrong UTF8 character */ if (bytes > 0) { /* * Emit the number of bytes calculated */ for (j = 0; j < bytes; j++) trace_emitc (*ptr++); } else { /* * Skip this bogus UTF8 character sequence and emit a single # */ for (bytes = 1, ptr++; (*ptr & 0xC0) == 0x80; bytes++) ptr++; trace_emitc ('#'); } /* * After 40 characters, start a new line */ if (++col >= 40) { trace_emit (" |\n"); col = 0; } } /* * Pad the last part of the string with spaces */ if (col > 0) { for (i = col; i < 40; i++) trace_emitc (' '); trace_emit (" |\n"); } if (truncated) trace_emit ("\t\t\t\t | %-40.40s |\n", "(truncated)"); } void trace_emit_binary (unsigned char *str, ssize_t len) { ssize_t length = len; int i; int col; unsigned char *ptr; int truncated = 0; char buf[80]; char *HEX = "0123456789ABCDEF"; if (!str || len <= 0) return; /* * Guard against very long binary buffers */ if (length > MAX_EMIT_BINARY) { length = MAX_EMIT_BINARY; truncated = 1; } ptr = str; col = 0; memset (buf, ' ', sizeof (buf)); buf[40] = '\0'; for (i = 0; i < length; i++) { unsigned char c = *ptr++; /* * Put data into buffer */ buf[3 * col] = HEX[(c >> 4) & 0xF]; buf[3 * col + 1] = HEX[c & 0xF]; if (isprint (c)) buf[30 + col] = c; else buf[30 + col] = '.'; /* * After 10 bytes, start a new line */ if (++col > 9) { trace_emit_string ((SQLCHAR *) buf, 40, 0); col = 0; memset (buf, ' ', sizeof (buf)); } } /* * Pad the last part of the string with spaces */ if (col > 0) trace_emit_string ((SQLCHAR *) buf, 40, 0); if (truncated) trace_emit ("\t\t\t\t | %-40.40s |\n", "(truncated)"); } void _trace_print_function (int func, int trace_leave, int retcode) { extern char *odbcapi_symtab[]; char *ptr = "invalid retcode"; #ifdef HAVE_GETTIMEOFDAY struct timeval tv; #endif /* * Guard against tracefile getting too big */ if (trace_fp && ftell (trace_fp) > MAX_TRACEFILE_LEN) { trace_emit ("\n*** TRACEFILE LIMIT REACHED ***\n"); trace_stop (); trace_set_filename (NULL); trace_start (); trace_emit ("\n*** TRACEFILE CONTINUED ***\n\n"); return; } /* * Calculate timestamp */ #ifdef HAVE_GETTIMEOFDAY gettimeofday (&tv, NULL); tv.tv_sec -= starttime.tv_sec; tv.tv_usec -= starttime.tv_usec; if (tv.tv_usec < 0) { tv.tv_sec--; tv.tv_usec += 1000000L; } trace_emit ("\n[%06ld.%06ld]\n", tv.tv_sec, tv.tv_usec); #else trace_emit ("\n"); #endif switch (retcode) { _S (SQL_SUCCESS); _S (SQL_SUCCESS_WITH_INFO); _S (SQL_NO_DATA_FOUND); _S (SQL_NEED_DATA); _S (SQL_INVALID_HANDLE); _S (SQL_ERROR); _S (SQL_STILL_EXECUTING); } #ifndef THREAD_IDENT #define THREAD_IDENT 0UL #endif if (trace_leave == TRACE_LEAVE) trace_emit ("%-15.15s %08lX EXIT %s with return code %d (%s)\n", trace_appname ? trace_appname : "Application", THREAD_IDENT, odbcapi_symtab[func], retcode, ptr); else trace_emit ("%-15.15s %08lX ENTER %s\n", trace_appname ? trace_appname : "Application", THREAD_IDENT, odbcapi_symtab[func]); } static char *_trace_sym_handletype[] = { "SQLHANDLE", "SQLHENV", "SQLHDBC", "SQLHSTMT", "SQLDESC", "SQLSENV" }; void _trace_handletype (SQLSMALLINT type) { char *ptr = "invalid handle type"; switch (type) { _S (SQL_HANDLE_ENV); _S (SQL_HANDLE_DBC); _S (SQL_HANDLE_STMT); #if ODBCVER >= 0x0300 _S (SQL_HANDLE_DESC); _S (SQL_HANDLE_SENV); #endif } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLSMALLINT", (int) type, ptr); } void _trace_handle_p (SQLSMALLINT type, SQLHANDLE * handle, int output) { if (!handle) trace_emit ("\t\t%-15.15s * 0x0 (%s)\n", _trace_sym_handletype[type], "SQL_NULL_HANDLE"); else if (output) trace_emit ("\t\t%-15.15s * %p (%p)\n", _trace_sym_handletype[type], handle, *handle); else trace_emit ("\t\t%-15.15s * %p\n", _trace_sym_handletype[type], handle); } void _trace_handle (SQLSMALLINT type, SQLHANDLE handle) { if (!handle) trace_emit ("\t\t%-15.15s 0x0 (%s)\n", _trace_sym_handletype[type], "SQL_NULL_HANDLE"); else trace_emit ("\t\t%-15.15s %p\n", _trace_sym_handletype[type], handle); } /* * Trace basic data types */ void _trace_smallint (SQLSMALLINT i) { trace_emit ("\t\t%-15.15s %ld\n", "SQLSMALLINT", (long) i); } void _trace_usmallint (SQLUSMALLINT i) { trace_emit ("\t\t%-15.15s %lu\n", "SQLUSMALLINT", (unsigned long) i); } void _trace_integer (SQLINTEGER i) { trace_emit ("\t\t%-15.15s %ld\n", "SQLINTEGER", (long) i); } void _trace_uinteger (SQLUINTEGER i) { trace_emit ("\t\t%-15.15s %lu\n", "SQLUINTEGER", (unsigned long) i); } void _trace_pointer (SQLPOINTER p) { if (!p) trace_emit ("\t\t%-15.15s 0x0\n", "SQLPOINTER"); else trace_emit ("\t\t%-15.15s %p\n", "SQLPOINTER", p); } void _trace_smallint_p (SQLSMALLINT *p, int output) { if (!p) trace_emit ("\t\t%-15.15s * 0x0\n", "SQLSMALLINT"); else if (output) trace_emit ("\t\t%-15.15s * %p (%ld)\n", "SQLSMALLINT", p, (long) *p); else trace_emit ("\t\t%-15.15s * %p\n", "SQLSMALLINT", p); } void _trace_usmallint_p (SQLUSMALLINT *p, int output) { if (!p) trace_emit ("\t\t%-15.15s * 0x0\n", "SQLUSMALLINT"); else if (output) trace_emit ("\t\t%-15.15s * %p (%lu)\n", "SQLUSMALLINT", p, (unsigned long) *p); else trace_emit ("\t\t%-15.15s * %p\n", "SQLUSMALLINT", p); } void _trace_integer_p (SQLINTEGER *p, int output) { if (!p) trace_emit ("\t\t%-15.15s * 0x0\n", "SQLINTEGER"); else if (output) trace_emit ("\t\t%-15.15s * %p (%ld)\n", "SQLINTEGER", p, (long) *p); else trace_emit ("\t\t%-15.15s * %p\n", "SQLINTEGER", p); } void _trace_uinteger_p (SQLUINTEGER *p, int output) { if (!p) trace_emit ("\t\t%-15.15s * 0x0\n", "SQLUINTEGER"); else if (output) trace_emit ("\t\t%-15.15s * %p (%lu)\n", "SQLUINTEGER", p, (unsigned long) *p); else trace_emit ("\t\t%-15.15s * %p\n", "SQLUINTEGER", p); } void _trace_stringlen (char *type, SQLINTEGER len) { if (len == SQL_NTS) trace_emit ("\t\t%-15.15s %ld (SQL_NTS)\n", type, (long) len); else trace_emit ("\t\t%-15.15s %ld\n", type, (long) len); } void _trace_len (SQLLEN i) { #ifdef _WIN64 trace_emit ("\t\t%-15.15s %I64d\n", "SQLLEN", (INT64) i); #else trace_emit ("\t\t%-15.15s %ld\n", "SQLLEN", (long) i); #endif } void _trace_ulen (SQLULEN i) { #ifdef _WIN64 trace_emit ("\t\t%-15.15s %I64u\n", "SQLLEN", (UINT64) i); #else trace_emit ("\t\t%-15.15s %ld\n", "SQLLEN", (unsigned long) i); #endif } void _trace_len_p (SQLLEN *p, int output) { if (!p) trace_emit ("\t\t%-15.15s * 0x0\n", "SQLLEN"); else if (output) #ifdef _WIN64 trace_emit ("\t\t%-15.15s * %p (%I64d)\n", "SQLLEN", p, (INT64) *p); #else trace_emit ("\t\t%-15.15s * %p (%ld)\n", "SQLLEN", p, (long) *p); #endif else trace_emit ("\t\t%-15.15s * %p\n", "SQLLEN", p); } void _trace_ulen_p (SQLULEN *p, int output) { if (!p) trace_emit ("\t\t%-15.15s * 0x0\n", "SQLULEN"); else if (output) #ifdef _WIN64 trace_emit ("\t\t%-15.15s * %p (%I64u)\n", "SQLULEN", p, (UINT64) *p); #else trace_emit ("\t\t%-15.15s * %p (%lu)\n", "SQLULEN", p, (unsigned long) *p); #endif else trace_emit ("\t\t%-15.15s * %p\n", "SQLULEN", p); } void _trace_string (SQLCHAR * str, SQLSMALLINT len, SQLSMALLINT * lenptr, int output) { ssize_t length; if (!str) { trace_emit ("\t\t%-15.15s * 0x0\n", "SQLCHAR"); return; } trace_emit ("\t\t%-15.15s * %p\n", "SQLCHAR", str); if (!output) return; /* * Calculate length of string */ if (lenptr) length = *lenptr; else length = len; if (length == SQL_NTS) length = STRLEN (str); if (*str && length) trace_emit_string (str, length, 0); else trace_emit_string ( (SQLCHAR *) "(empty string)", SQL_NTS, 0); return; } void _trace_string_w (SQLWCHAR * str, SQLSMALLINT len, SQLSMALLINT * lenptr, int output) { ssize_t length; if (!str) { trace_emit ("\t\t%-15.15s * 0x0\n", "SQLWCHAR"); return; } trace_emit ("\t\t%-15.15s * %p\n", "SQLWCHAR", str); if (!output) return; /* * Calculate length of string */ if (lenptr) length = *lenptr; else length = len; if (length == SQL_NTS) length = wcslen (str); /* * Translate wide string into UTF-8 format and print it */ if (*str && length) { SQLCHAR *str_u8 = dm_SQL_W2A (str, length); trace_emit_string (str_u8, SQL_NTS, 1); free (str_u8); } else trace_emit_string ((SQLCHAR *)"(empty string)", SQL_NTS, 0); return; } void _trace_c_type (SQLSMALLINT type) { char *ptr = "unknown C type"; switch (type) { _S (SQL_C_BINARY); _S (SQL_C_BIT); /* _S (SQL_C_BOOKMARK); */ _S (SQL_C_CHAR); _S (SQL_C_DATE); _S (SQL_C_DEFAULT); _S (SQL_C_DOUBLE); _S (SQL_C_FLOAT); #if (ODBCVER >= 0x0350) _S (SQL_C_GUID); #endif #if ODBCVER >= 0x0300 _S (SQL_C_INTERVAL_DAY); _S (SQL_C_INTERVAL_DAY_TO_HOUR); _S (SQL_C_INTERVAL_DAY_TO_MINUTE); _S (SQL_C_INTERVAL_DAY_TO_SECOND); _S (SQL_C_INTERVAL_HOUR); _S (SQL_C_INTERVAL_HOUR_TO_MINUTE); _S (SQL_C_INTERVAL_HOUR_TO_SECOND); _S (SQL_C_INTERVAL_MINUTE); _S (SQL_C_INTERVAL_MINUTE_TO_SECOND); _S (SQL_C_INTERVAL_MONTH); _S (SQL_C_INTERVAL_SECOND); _S (SQL_C_INTERVAL_YEAR); _S (SQL_C_INTERVAL_YEAR_TO_MONTH); #endif _S (SQL_C_LONG); #if ODBCVER >= 0x0300 _S (SQL_C_NUMERIC); _S (SQL_C_SBIGINT); #endif _S (SQL_C_SHORT); _S (SQL_C_SLONG); _S (SQL_C_SSHORT); _S (SQL_C_STINYINT); _S (SQL_C_TIME); _S (SQL_C_TIMESTAMP); _S (SQL_C_TINYINT); #if ODBCVER >= 0x0300 _S (SQL_C_TYPE_DATE); _S (SQL_C_TYPE_TIME); _S (SQL_C_TYPE_TIMESTAMP); _S (SQL_C_UBIGINT); #endif _S (SQL_C_ULONG); _S (SQL_C_USHORT); _S (SQL_C_UTINYINT); /* _S (SQL_C_VARBOOKMARK); */ _S (SQL_C_WCHAR); #if ODBCVER >= 0x0300 _S (SQL_ARD_TYPE); #endif } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLSMALLINT ", type, ptr); } void _trace_inouttype (SQLSMALLINT type) { char *ptr = "unknown Input/Output type"; switch (type) { _S (SQL_PARAM_INPUT); _S (SQL_PARAM_OUTPUT); _S (SQL_PARAM_INPUT_OUTPUT); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLSMALLINT ", type, ptr); } void _trace_sql_type (SQLSMALLINT type) { char *ptr = "unknown SQL type"; switch (type) { _S (SQL_UNKNOWN_TYPE); _S (SQL_BIGINT); _S (SQL_BINARY); _S (SQL_BIT); _S (SQL_CHAR); #if (ODBCVER < 0x0300) _S (SQL_DATE); #else _S (SQL_DATETIME); #endif _S (SQL_DECIMAL); _S (SQL_DOUBLE); _S (SQL_FLOAT); #if (ODBCVER >= 0x0350) _S (SQL_GUID); #endif _S (SQL_INTEGER); _S (SQL_LONGVARBINARY); _S (SQL_LONGVARCHAR); _S (SQL_NUMERIC); _S (SQL_REAL); _S (SQL_SMALLINT); #if (ODBCVER < 0x0300) _S (SQL_TIME); #else _S (SQL_INTERVAL); #endif _S (SQL_TIMESTAMP); _S (SQL_TINYINT); #if ODBCVER >= 0x0300 _S (SQL_TYPE_DATE); _S (SQL_TYPE_TIME); _S (SQL_TYPE_TIMESTAMP); #endif _S (SQL_VARBINARY); _S (SQL_VARCHAR); _S (SQL_WCHAR); _S (SQL_WLONGVARCHAR); _S (SQL_WVARCHAR); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLSMALLINT", (int) type, ptr); } void _trace_sql_type_p (SQLSMALLINT *p, int output) { char *ptr = "unknown SQL type"; if (!p) { trace_emit ("\t\t%-15.15s * 0x0\n", "SQLSMALLINT"); return; } if (!output) { trace_emit ("\t\t%-15.15s * %p\n", "SQLSMALLINT", p); return; } switch (*p) { _S (SQL_UNKNOWN_TYPE); _S (SQL_BIGINT); _S (SQL_BINARY); _S (SQL_BIT); _S (SQL_CHAR); #if (ODBCVER < 0x0300) _S (SQL_DATE); #else _S (SQL_DATETIME); #endif _S (SQL_DECIMAL); _S (SQL_DOUBLE); _S (SQL_FLOAT); #if (ODBCVER >= 0x0350) _S (SQL_GUID); #endif _S (SQL_INTEGER); _S (SQL_LONGVARBINARY); _S (SQL_LONGVARCHAR); _S (SQL_NUMERIC); _S (SQL_REAL); _S (SQL_SMALLINT); #if (ODBCVER < 0x0300) _S (SQL_TIME); #else _S (SQL_INTERVAL); #endif _S (SQL_TIMESTAMP); _S (SQL_TINYINT); #if ODBCVER >= 0x0300 _S (SQL_TYPE_DATE); _S (SQL_TYPE_TIME); _S (SQL_TYPE_TIMESTAMP); #endif _S (SQL_VARBINARY); _S (SQL_VARCHAR); _S (SQL_WCHAR); _S (SQL_WLONGVARCHAR); _S (SQL_WVARCHAR); } trace_emit ("\t\t%-15.15s * %p (%s)\n", "SQLSMALLINT", p, ptr); } #if ODBCVER >= 0x0300 void _trace_sql_subtype (SQLSMALLINT *type, SQLSMALLINT *sub, int output) { char *ptr = NULL; if (!type || !sub) { trace_emit ("\t\t%-15.15s * 0x0\n", "SQLSMALLINT"); return; } if (!output) { trace_emit ("\t\t%-15.15s * %p\n", "SQLSMALLINT", sub); return; } if (*type == SQL_DATETIME) { switch (*sub) { _S (SQL_CODE_DATE); _S (SQL_CODE_TIME); _S (SQL_CODE_TIMESTAMP); } } else if (*type == SQL_INTERVAL) { switch (*sub) { _S (SQL_CODE_YEAR); _S (SQL_CODE_MONTH); _S (SQL_CODE_DAY); _S (SQL_CODE_HOUR); _S (SQL_CODE_MINUTE); _S (SQL_CODE_SECOND); _S (SQL_CODE_YEAR_TO_MONTH); _S (SQL_CODE_DAY_TO_HOUR); _S (SQL_CODE_DAY_TO_MINUTE); _S (SQL_CODE_DAY_TO_SECOND); _S (SQL_CODE_HOUR_TO_MINUTE); _S (SQL_CODE_HOUR_TO_SECOND); _S (SQL_CODE_MINUTE_TO_SECOND); } } if (ptr) trace_emit ("\t\t%-15.15s * %p (%s)\n", "SQLSMALLINT", sub, ptr); else trace_emit ("\t\t%-15.15s * %p (%d)\n", "SQLSMALLINT", sub, *sub); } #endif void _trace_bufferlen (SQLINTEGER length) { char buf[255]; char *ptr = NULL; switch (length) { _S (SQL_NTS); #if ODBCVER >= 0x0300 _S (SQL_IS_POINTER); _S (SQL_IS_UINTEGER); _S (SQL_IS_INTEGER); _S (SQL_IS_USMALLINT); _S (SQL_IS_SMALLINT); #endif } /* * Translate binary buffer length */ if (length <= SQL_LEN_BINARY_ATTR_OFFSET) { sprintf (buf, "SQL_LEN_BINARY_ATTR(%ld)", (long) SQL_LEN_BINARY_ATTR(length)); ptr = buf; } if (ptr) trace_emit ("\t\t%-15.15s * %ld (%s)\n", "SQLINTEGER", length, ptr); else trace_emit ("\t\t%-15.15s * %ld\n", "SQLINTEGER", (long) length); } libiodbc-3.52.9/iodbc/trace/FreeConnect.c0000644000076400007640000000673512323210535015036 00000000000000/* * FreeConnect.c * * $Id$ * * SQLFreeConnect trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLFreeConnect (int trace_leave, int retcode, SQLHDBC hdbc) { /* Trace function */ _trace_print_function (en_FreeConnect, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); } libiodbc-3.52.9/iodbc/trace/Makefile.in0000644000076400007640000006272012323210643014540 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # 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 = iodbc/trace DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/admin/gtk-2.0.m4 \ $(top_srcdir)/admin/gtk.m4 $(top_srcdir)/admin/libtool.m4 \ $(top_srcdir)/admin/ltoptions.m4 \ $(top_srcdir)/admin/ltsugar.m4 \ $(top_srcdir)/admin/ltversion.m4 \ $(top_srcdir)/admin/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libiodbctrace_la_LIBADD = am_libiodbctrace_la_OBJECTS = AllocConnect.lo AllocEnv.lo \ AllocHandle.lo AllocStmt.lo BindCol.lo BindParameter.lo \ BrowseConnect.lo BulkOperations.lo Cancel.lo CloseCursor.lo \ ColAttribute.lo ColumnPrivileges.lo Columns.lo Connect.lo \ CopyDesc.lo DataSources.lo DescribeCol.lo DescribeParam.lo \ Disconnect.lo DriverConnect.lo Drivers.lo EndTran.lo Error.lo \ ExecDirect.lo Execute.lo ExtendedFetch.lo Fetch.lo \ FetchScroll.lo ForeignKeys.lo FreeConnect.lo FreeEnv.lo \ FreeHandle.lo FreeStmt.lo GetConnectAttr.lo \ GetConnectOption.lo GetCursorName.lo GetData.lo \ GetDescField.lo GetDescRec.lo GetDiagField.lo GetDiagRec.lo \ GetEnvAttr.lo GetFunctions.lo GetStmtAttr.lo GetStmtOption.lo \ GetTypeInfo.lo Info.lo MoreResults.lo NativeSql.lo \ NumParams.lo NumResultCols.lo ParamData.lo ParamOptions.lo \ Prepare.lo PrimaryKeys.lo ProcedureColumns.lo Procedures.lo \ PutData.lo RowCount.lo SetConnectAttr.lo SetConnectOption.lo \ SetCursorName.lo SetDescField.lo SetDescRec.lo SetEnvAttr.lo \ SetPos.lo SetScrollOptions.lo SetStmtAttr.lo SetStmtOption.lo \ SpecialColumns.lo Statistics.lo TablePrivileges.lo Tables.lo \ Transact.lo trace.lo libiodbctrace_la_OBJECTS = $(am_libiodbctrace_la_OBJECTS) libiodbctrace_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libiodbctrace_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/admin/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 = $(libiodbctrace_la_SOURCES) DIST_SOURCES = $(libiodbctrace_la_SOURCES) HEADERS = $(noinst_HEADERS) 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@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_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@ LIBADD_DL = @LIBADD_DL@ LIBADD_OS = @LIBADD_OS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ 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_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ filedsnpath = @filedsnpath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inidir = @inidir@ install_sh = @install_sh@ lib_version = @lib_version@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ odbcmode = @odbcmode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ 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@ noinst_LTLIBRARIES = libiodbctrace.la AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/iodbc \ -I$(top_srcdir)/iodbcinst libiodbctrace_la_LDFLAGS = #-static libiodbctrace_la_SOURCES = \ AllocConnect.c \ AllocEnv.c \ AllocHandle.c \ AllocStmt.c \ BindCol.c \ BindParameter.c \ BrowseConnect.c \ BulkOperations.c \ Cancel.c \ CloseCursor.c \ ColAttribute.c \ ColumnPrivileges.c \ Columns.c \ Connect.c \ CopyDesc.c \ DataSources.c \ DescribeCol.c \ DescribeParam.c \ Disconnect.c \ DriverConnect.c \ Drivers.c \ EndTran.c \ Error.c \ ExecDirect.c \ Execute.c \ ExtendedFetch.c \ Fetch.c \ FetchScroll.c \ ForeignKeys.c \ FreeConnect.c \ FreeEnv.c \ FreeHandle.c \ FreeStmt.c \ GetConnectAttr.c \ GetConnectOption.c \ GetCursorName.c \ GetData.c \ GetDescField.c \ GetDescRec.c \ GetDiagField.c \ GetDiagRec.c \ GetEnvAttr.c \ GetFunctions.c \ GetStmtAttr.c \ GetStmtOption.c \ GetTypeInfo.c \ Info.c \ MoreResults.c \ NativeSql.c \ NumParams.c \ NumResultCols.c \ ParamData.c \ ParamOptions.c \ Prepare.c \ PrimaryKeys.c \ ProcedureColumns.c \ Procedures.c \ PutData.c \ RowCount.c \ SetConnectAttr.c \ SetConnectOption.c \ SetCursorName.c \ SetDescField.c \ SetDescRec.c \ SetEnvAttr.c \ SetPos.c \ SetScrollOptions.c \ SetStmtAttr.c \ SetStmtOption.c \ SpecialColumns.c \ Statistics.c \ TablePrivileges.c \ Tables.c \ Transact.c \ trace.c noinst_HEADERS = proto.h trace.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 iodbc/trace/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu iodbc/trace/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libiodbctrace.la: $(libiodbctrace_la_OBJECTS) $(libiodbctrace_la_DEPENDENCIES) $(libiodbctrace_la_LINK) $(libiodbctrace_la_OBJECTS) $(libiodbctrace_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AllocConnect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AllocEnv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AllocHandle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AllocStmt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BindCol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BindParameter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BrowseConnect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BulkOperations.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Cancel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CloseCursor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ColAttribute.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ColumnPrivileges.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Columns.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Connect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CopyDesc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DataSources.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DescribeCol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DescribeParam.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Disconnect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DriverConnect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Drivers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EndTran.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ExecDirect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Execute.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ExtendedFetch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Fetch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FetchScroll.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ForeignKeys.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FreeConnect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FreeEnv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FreeHandle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FreeStmt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetConnectAttr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetConnectOption.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetCursorName.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetDescField.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetDescRec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetDiagField.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetDiagRec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetEnvAttr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetFunctions.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetStmtAttr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetStmtOption.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetTypeInfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Info.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MoreResults.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NativeSql.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NumParams.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NumResultCols.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ParamData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ParamOptions.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Prepare.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PrimaryKeys.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProcedureColumns.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Procedures.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PutData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RowCount.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetConnectAttr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetConnectOption.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetCursorName.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetDescField.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetDescRec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetEnvAttr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetPos.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetScrollOptions.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetStmtAttr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetStmtOption.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SpecialColumns.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Statistics.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TablePrivileges.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Tables.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Transact.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trace.Plo@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 $(LTLIBRARIES) $(HEADERS) 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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 clean-noinstLTLIBRARIES \ 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: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags 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 # 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: libiodbc-3.52.9/iodbc/trace/Procedures.c0000644000076400007640000001143612323210535014750 00000000000000/* * Procedures.c * * $Id$ * * SQLProcedures trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLProcedures (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLCHAR * szProcName, SQLSMALLINT cbProcName) { /* Trace function */ _trace_print_function (en_Procedures, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string (szProcQualifier, cbProcQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbProcQualifier); _trace_string (szProcOwner, cbProcOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbProcOwner); _trace_string (szProcName, cbProcName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbProcName); } #if ODBCVER >= 0x0300 void trace_SQLProceduresW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLWCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLWCHAR * szProcName, SQLSMALLINT cbProcName) { /* Trace function */ _trace_print_function (en_ProceduresW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string_w (szProcQualifier, cbProcQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbProcQualifier); _trace_string_w (szProcOwner, cbProcOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbProcOwner); _trace_string_w (szProcName, cbProcName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbProcName); } #endif libiodbc-3.52.9/iodbc/trace/RowCount.c0000644000076400007640000000704112323210535014412 00000000000000/* * RowCount.c * * $Id$ * * SQLRowCount trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLRowCount (int trace_leave, int retcode, SQLHSTMT hstmt, SQLLEN * pcrow) { /* Trace function */ _trace_print_function (en_RowCount, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_len_p (pcrow, TRACE_OUTPUT_SUCCESS); } libiodbc-3.52.9/iodbc/trace/SetStmtAttr.c0000644000076400007640000001020112323210535015060 00000000000000/* * SetStmtAttr.c * * $Id$ * * SQLSetStmtAttr trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLSetStmtAttr (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { /* Trace function */ _trace_print_function (en_SetStmtAttr, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_stmtattr_type (Attribute); _trace_pointer (ValuePtr); _trace_bufferlen (StringLength); } void trace_SQLSetStmtAttrW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { /* Trace function */ _trace_print_function (en_SetStmtAttrW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_stmtattr_type (Attribute); _trace_pointer (ValuePtr); _trace_bufferlen (StringLength); } #endif libiodbc-3.52.9/iodbc/trace/GetEnvAttr.c0000644000076400007640000001013612323210535014654 00000000000000/* * GetEnvAttr.c * * $Id$ * * SQLAllocConnect trace functions * * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void _trace_envattr_type (SQLINTEGER type) { char *ptr = "unknown environment attribute"; switch (type) { _S (SQL_ATTR_CONNECTION_POOLING); _S (SQL_ATTR_CP_MATCH); _S (SQL_ATTR_ODBC_VERSION); _S (SQL_ATTR_OUTPUT_NTS); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLINTEGER ", (int) type, ptr); } void trace_SQLGetEnvAttr (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { /* Trace function */ _trace_print_function (en_GetEnvAttr, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_ENV, EnvironmentHandle); _trace_envattr_type (Attribute); _trace_pointer (ValuePtr); _trace_bufferlen (BufferLength); _trace_integer_p (StringLengthPtr, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/CloseCursor.c0000644000076400007640000000702712323210535015101 00000000000000/* * CloseCursor.c * * $Id$ * * SQLCloseCursor trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLCloseCursor (int trace_leave, int retcode, SQLHSTMT StatementHandle) { /* Trace function */ _trace_print_function (en_CloseCursor, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); } #endif libiodbc-3.52.9/iodbc/trace/trace.h0000644000076400007640000001036512323210535013740 00000000000000/* * trace.h * * $Id$ * * Trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _IODBCDM_TRACE_H #define _IODBCDM_TRACE_H #include #include #include #include #include #include #include #include #include #include "herr.h" #include "henv.h" #include "ithread.h" #include "unicode.h" #ifdef __cplusplus extern "C" { #endif /* * Useful constants and macros */ #define MAX_EMIT_STRING 40000L /* = 1000 lines in output */ #define MAX_EMIT_BINARY 10000L /* = 1000 lines in output */ #define TRACE_ENTER 0 #define TRACE_LEAVE 1 #undef _S #define _S(X) case X: ptr = #X; break /* * Is the argument and input or output parameter or both */ #define TRACE_NEVER (0) #define TRACE_INPUT (trace_leave == TRACE_ENTER) #define TRACE_OUTPUT (trace_leave == TRACE_LEAVE) #define TRACE_INPUT_OUTPUT (1) #define TRACE_OUTPUT_SUCCESS (trace_leave == TRACE_LEAVE && \ (retcode == SQL_SUCCESS || \ retcode == SQL_SUCCESS_WITH_INFO)) /* Prototypes */ #include "proto.h" #ifdef __cplusplus } #endif #endif /*_IODBCDM_TRACE_H */ libiodbc-3.52.9/iodbc/trace/DataSources.c0000644000076400007640000001256612323210535015057 00000000000000/* * DataSources.c * * $Id$ * * SQLDataSources trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_direction (SQLUSMALLINT dir) { char *ptr = "unknown direction"; switch (dir) { _S (SQL_FETCH_FIRST); _S (SQL_FETCH_NEXT); #if ODBCVER >= 0x0300 _S (SQL_FETCH_FIRST_USER); _S (SQL_FETCH_FIRST_SYSTEM); #endif } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT ", (int) dir, ptr); } void trace_SQLDataSources (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLCHAR * ServerName, SQLSMALLINT BufferLength1, SQLSMALLINT * NameLength1Ptr, SQLCHAR * Description, SQLSMALLINT BufferLength2, SQLSMALLINT * NameLength2Ptr) { /* Trace function */ _trace_print_function (en_DataSources, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_ENV, EnvironmentHandle); _trace_direction (Direction); _trace_string (ServerName, BufferLength1, NameLength1Ptr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength1); _trace_smallint_p (NameLength1Ptr, TRACE_OUTPUT_SUCCESS); _trace_string (Description, BufferLength2, NameLength2Ptr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength2); _trace_smallint_p (NameLength2Ptr, TRACE_OUTPUT_SUCCESS); } #if ODBCVER >= 0x0300 void trace_SQLDataSourcesW (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLWCHAR * ServerName, SQLSMALLINT BufferLength1, SQLSMALLINT * NameLength1Ptr, SQLWCHAR * Description, SQLSMALLINT BufferLength2, SQLSMALLINT * NameLength2Ptr) { /* Trace function */ _trace_print_function (en_DataSourcesW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_ENV, EnvironmentHandle); _trace_direction (Direction); _trace_string_w (ServerName, BufferLength1, NameLength1Ptr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength1); _trace_smallint_p (NameLength1Ptr, trace_leave); _trace_string_w (Description, BufferLength2, NameLength2Ptr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength2); _trace_smallint_p (NameLength2Ptr, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/GetDiagRec.c0000644000076400007640000001157412323210535014576 00000000000000/* * GetDiagRec.c * * $Id$ * * SQLGetDiagRec trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLGetDiagRec (int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLCHAR * SqlState, SQLINTEGER * NativeErrorPtr, SQLCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLengthPtr) { /* Trace function */ _trace_print_function (en_GetDiagRec, trace_leave, retcode); /* Trace Arguments */ _trace_handletype (HandleType); _trace_handle (HandleType, Handle); _trace_smallint (RecNumber); _trace_string (SqlState, SQL_NTS, NULL, TRACE_OUTPUT_SUCCESS); _trace_integer_p (NativeErrorPtr, TRACE_OUTPUT_SUCCESS); _trace_string (MessageText, BufferLength, TextLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength); _trace_smallint_p (TextLengthPtr, trace_leave); } void trace_SQLGetDiagRecW (int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLWCHAR * SqlState, SQLINTEGER * NativeErrorPtr, SQLWCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLengthPtr) { /* Trace function */ _trace_print_function (en_GetDiagRecW, trace_leave, retcode); /* Trace Arguments */ _trace_handletype (HandleType); _trace_handle (HandleType, Handle); _trace_smallint (RecNumber); _trace_string_w (SqlState, SQL_NTS, NULL, TRACE_OUTPUT_SUCCESS); _trace_integer_p (NativeErrorPtr, TRACE_OUTPUT_SUCCESS); _trace_string_w (MessageText, BufferLength, TextLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength); _trace_smallint_p (TextLengthPtr, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/FreeHandle.c0000644000076400007640000000707512323210535014636 00000000000000/* * FreeHandle.c * * $Id$ * * SQLFreeHandle trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLFreeHandle (int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE Handle) { /* Trace function */ _trace_print_function (en_FreeHandle, trace_leave, retcode); /* Trace Arguments */ _trace_handletype (HandleType); _trace_handle (HandleType, Handle); } #endif libiodbc-3.52.9/iodbc/trace/Statistics.c0000644000076400007640000001302712323210535014765 00000000000000/* * Statistics.c * * $Id$ * * SQLStatistics trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_stats_unique (SQLUSMALLINT type) { char *ptr = "unknown option"; switch (type) { _S (SQL_INDEX_ALL); _S (SQL_INDEX_UNIQUE); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT ", (int) type, ptr); } void _trace_stats_accuracy (SQLUSMALLINT type) { char *ptr = "unknown option"; switch (type) { _S (SQL_ENSURE); _S (SQL_QUICK); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT ", (int) type, ptr); } void trace_SQLStatistics (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fUnique, SQLUSMALLINT fAccuracy) { /* Trace function */ _trace_print_function (en_Statistics, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); _trace_stats_unique (fUnique); _trace_stats_accuracy (fAccuracy); } #if ODBCVER >= 0x0300 void trace_SQLStatisticsW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fUnique, SQLUSMALLINT fAccuracy) { /* Trace function */ _trace_print_function (en_Statistics, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string_w (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string_w (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string_w (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); _trace_stats_unique (fUnique); _trace_stats_accuracy (fAccuracy); } #endif libiodbc-3.52.9/iodbc/trace/NativeSql.c0000644000076400007640000001140512323210535014537 00000000000000/* * NativeSql.c * * $Id$ * * SQLNativeSql trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLNativeSql (int trace_leave, int retcode, SQLHDBC hdbc, SQLCHAR * InStatementText, SQLINTEGER TextLength1, SQLCHAR * OutStatementText, SQLINTEGER BufferLength, SQLINTEGER * TextLength2Ptr) { SQLSMALLINT len = 0; if (TextLength2Ptr) len = *TextLength2Ptr; /* Trace function */ _trace_print_function (en_NativeSql, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_string (InStatementText, TextLength1, NULL, TRACE_INPUT); _trace_stringlen ("SQLINTEGER", TextLength1); _trace_string (OutStatementText, BufferLength, &len, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLINTEGER", BufferLength); _trace_integer_p (TextLength2Ptr, TRACE_OUTPUT_SUCCESS); } #if ODBCVER >= 0x0300 void trace_SQLNativeSqlW (int trace_leave, int retcode, SQLHDBC hdbc, SQLWCHAR * InStatementText, SQLINTEGER TextLength1, SQLWCHAR * OutStatementText, SQLINTEGER BufferLength, SQLINTEGER * TextLength2Ptr) { SQLSMALLINT len = 0; if (TextLength2Ptr) len = *TextLength2Ptr; /* Trace function */ _trace_print_function (en_NativeSqlW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_string_w (InStatementText, TextLength1, NULL, TRACE_INPUT); _trace_stringlen ("SQLINTEGER", TextLength1); _trace_string_w (OutStatementText, BufferLength, &len, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLINTEGER", BufferLength); _trace_integer_p (TextLength2Ptr, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/GetDescRec.c0000644000076400007640000001264012323210535014603 00000000000000/* * GetDescRec.c * * $Id$ * * SQLGetDescRec trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLGetDescRec (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLCHAR * Name, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLSMALLINT * TypePtr, SQLSMALLINT * SubTypePtr, SQLLEN * LengthPtr, SQLSMALLINT * PrecisionPtr, SQLSMALLINT * ScalePtr, SQLSMALLINT * NullablePtr) { /* Trace function */ _trace_print_function (en_GetDescRec, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DESC, DescriptorHandle); _trace_smallint (RecNumber); _trace_string (Name, BufferLength, StringLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength); _trace_smallint_p (StringLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_sql_type_p (TypePtr, TRACE_OUTPUT_SUCCESS); _trace_sql_subtype (TypePtr, SubTypePtr, TRACE_OUTPUT_SUCCESS); _trace_len_p (LengthPtr, TRACE_OUTPUT_SUCCESS); _trace_smallint_p (PrecisionPtr, TRACE_OUTPUT_SUCCESS); _trace_smallint_p (ScalePtr, TRACE_OUTPUT_SUCCESS); _trace_desc_null (NullablePtr, TRACE_OUTPUT_SUCCESS); } void trace_SQLGetDescRecW (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLWCHAR * Name, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLSMALLINT * TypePtr, SQLSMALLINT * SubTypePtr, SQLLEN * LengthPtr, SQLSMALLINT * PrecisionPtr, SQLSMALLINT * ScalePtr, SQLSMALLINT * NullablePtr) { /* Trace function */ _trace_print_function (en_GetDescRecW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DESC, DescriptorHandle); _trace_smallint (RecNumber); _trace_string_w (Name, BufferLength, StringLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength); _trace_smallint_p (StringLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_sql_type_p (TypePtr, TRACE_OUTPUT_SUCCESS); _trace_sql_subtype (TypePtr, SubTypePtr, TRACE_OUTPUT_SUCCESS); _trace_len_p (LengthPtr, TRACE_OUTPUT_SUCCESS); _trace_smallint_p (PrecisionPtr, TRACE_OUTPUT_SUCCESS); _trace_smallint_p (ScalePtr, TRACE_OUTPUT_SUCCESS); _trace_desc_null (NullablePtr, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/Cancel.c0000644000076400007640000000674712323210535014033 00000000000000/* * Cancel.c * * $Id$ * * SQLCancel trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLCancel (int trace_leave, int retcode, SQLHSTMT StatementHandle) { /* Trace function */ _trace_print_function (en_Cancel, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); } libiodbc-3.52.9/iodbc/trace/ColumnPrivileges.c0000644000076400007640000001226312323210535016123 00000000000000/* * ColumnPrivileges.c * * $Id$ * * SQLColumnPrivileges trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLColumnPrivileges (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName) { /* Trace function */ _trace_print_function (en_ColumnPrivileges, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); _trace_string (szColumnName, cbColumnName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbColumnName); } #if ODBCVER >= 0x0300 void trace_SQLColumnPrivilegesW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName) { /* Trace function */ _trace_print_function (en_ColumnPrivilegesW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string_w (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string_w (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string_w (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); _trace_string_w (szColumnName, cbColumnName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbColumnName); } #endif libiodbc-3.52.9/iodbc/trace/ExtendedFetch.c0000644000076400007640000001015612323210535015345 00000000000000/* * ExtendedFetch.c * * $Id$ * * SQLExtendedFetch trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_fetchtype (SQLUSMALLINT type) { char *ptr = "unknown fetch type"; switch (type) { _S (SQL_FETCH_NEXT); _S (SQL_FETCH_FIRST); _S (SQL_FETCH_LAST); _S (SQL_FETCH_PRIOR); _S (SQL_FETCH_ABSOLUTE); _S (SQL_FETCH_RELATIVE); _S (SQL_FETCH_BOOKMARK); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT ", (int) type, ptr); } void trace_SQLExtendedFetch (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT fFetchType, SQLLEN irow, SQLULEN * pcrow, SQLUSMALLINT * rgfRowStatus) { /* Trace function */ _trace_print_function (en_ExtendedFetch, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_fetchtype (fFetchType); _trace_len (irow); _trace_ulen_p (pcrow, TRACE_OUTPUT_SUCCESS); _trace_usmallint_p (rgfRowStatus, 0); } libiodbc-3.52.9/iodbc/trace/GetDiagField.c0000644000076400007640000001240312323210535015100 00000000000000/* * GetDiagField.c * * $Id$ * * SQLGetDiagField trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void _trace_diag_type (SQLSMALLINT type) { char *ptr = "unknown diag identifier"; switch (type) { _S (SQL_DIAG_CLASS_ORIGIN); _S (SQL_DIAG_COLUMN_NUMBER); _S (SQL_DIAG_CONNECTION_NAME); _S (SQL_DIAG_CURSOR_ROW_COUNT); _S (SQL_DIAG_DYNAMIC_FUNCTION); _S (SQL_DIAG_DYNAMIC_FUNCTION_CODE); _S (SQL_DIAG_MESSAGE_TEXT); _S (SQL_DIAG_NATIVE); _S (SQL_DIAG_NUMBER); _S (SQL_DIAG_RETURNCODE); _S (SQL_DIAG_ROW_COUNT); _S (SQL_DIAG_ROW_NUMBER); _S (SQL_DIAG_SERVER_NAME); _S (SQL_DIAG_SQLSTATE); _S (SQL_DIAG_SUBCLASS_ORIGIN); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT ", (int) type, ptr); } void trace_SQLGetDiagField (int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER DiagInfoPtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr) { /* Trace function */ _trace_print_function (en_GetDiagField, trace_leave, retcode); /* Trace Arguments */ _trace_handletype (HandleType); _trace_handle (HandleType, Handle); _trace_smallint (RecNumber); _trace_diag_type (DiagIdentifier); _trace_pointer (DiagInfoPtr); _trace_bufferlen ((SQLINTEGER) BufferLength); _trace_smallint_p (StringLengthPtr, TRACE_OUTPUT_SUCCESS); } void trace_SQLGetDiagFieldW (int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER DiagInfoPtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr) { /* Trace function */ _trace_print_function (en_GetDiagFieldW, trace_leave, retcode); /* Trace Arguments */ _trace_handletype (HandleType); _trace_handle (HandleType, Handle); _trace_smallint (RecNumber); _trace_diag_type (DiagIdentifier); _trace_pointer (DiagInfoPtr); _trace_bufferlen ((SQLINTEGER) BufferLength); _trace_smallint_p (StringLengthPtr, trace_leave); } #endif libiodbc-3.52.9/iodbc/trace/AllocConnect.c0000644000076400007640000000707612323210535015206 00000000000000/* * AllocConnect.c * * $Id$ * * SQLAllocConnect trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLAllocConnect (int trace_leave, int retcode, SQLHENV henv, SQLHDBC * phdbc) { /* Trace function */ _trace_print_function (en_AllocConnect, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_ENV, henv); _trace_handle_p (SQL_HANDLE_DBC, phdbc, TRACE_OUTPUT_SUCCESS); } libiodbc-3.52.9/iodbc/trace/DescribeParam.c0000644000076400007640000000755712323210535015347 00000000000000/* * DescribeParam.c * * $Id$ * * SQLDescribeParam trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLDescribeParam (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT * pfSqlType, SQLULEN * pcbColDef, SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable) { /* Trace function */ _trace_print_function (en_DescribeParam, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_usmallint (ipar); _trace_sql_type_p (pfSqlType, TRACE_OUTPUT_SUCCESS); _trace_ulen_p (pcbColDef, TRACE_OUTPUT_SUCCESS); _trace_smallint_p (pibScale, TRACE_OUTPUT_SUCCESS); _trace_smallint_p (pfNullable, TRACE_OUTPUT_SUCCESS); } libiodbc-3.52.9/iodbc/trace/GetDescField.c0000644000076400007640000001416212323210535015116 00000000000000/* * GetDescField.c * * $Id$ * * SQLGetDescField trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void _trace_descfield_type (SQLSMALLINT type) { char *ptr = "unknown field identifier"; switch (type) { _S (SQL_DESC_ALLOC_TYPE); _S (SQL_DESC_ARRAY_SIZE); _S (SQL_DESC_ARRAY_STATUS_PTR); _S (SQL_DESC_AUTO_UNIQUE_VALUE); _S (SQL_DESC_BASE_COLUMN_NAME); _S (SQL_DESC_BASE_TABLE_NAME); _S (SQL_DESC_BIND_OFFSET_PTR); _S (SQL_DESC_BIND_TYPE); _S (SQL_DESC_CASE_SENSITIVE); _S (SQL_DESC_CATALOG_NAME); _S (SQL_DESC_CONCISE_TYPE); _S (SQL_DESC_COUNT); _S (SQL_DESC_DATA_PTR); _S (SQL_DESC_DATETIME_INTERVAL_CODE); _S (SQL_DESC_DATETIME_INTERVAL_PRECISION); _S (SQL_DESC_DISPLAY_SIZE); _S (SQL_DESC_FIXED_PREC_SCALE); _S (SQL_DESC_INDICATOR_PTR); _S (SQL_DESC_LABEL); _S (SQL_DESC_LENGTH); _S (SQL_DESC_LITERAL_PREFIX); _S (SQL_DESC_LITERAL_SUFFIX); _S (SQL_DESC_LOCAL_TYPE_NAME); _S (SQL_DESC_MAXIMUM_SCALE); _S (SQL_DESC_MINIMUM_SCALE); _S (SQL_DESC_NAME); _S (SQL_DESC_NULLABLE); _S (SQL_DESC_NUM_PREC_RADIX); _S (SQL_DESC_OCTET_LENGTH); _S (SQL_DESC_OCTET_LENGTH_PTR); _S (SQL_DESC_PARAMETER_TYPE); _S (SQL_DESC_PRECISION); _S (SQL_DESC_ROWS_PROCESSED_PTR); _S (SQL_DESC_SCALE); _S (SQL_DESC_SCHEMA_NAME); _S (SQL_DESC_SEARCHABLE); _S (SQL_DESC_TABLE_NAME); _S (SQL_DESC_TYPE); _S (SQL_DESC_TYPE_NAME); _S (SQL_DESC_UNNAMED); _S (SQL_DESC_UNSIGNED); _S (SQL_DESC_UPDATABLE); #if (ODBCVER >= 0x0350) _S (SQL_DESC_ROWVER); #endif } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT ", (int) type, ptr); } void trace_SQLGetDescField (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { /* Trace function */ _trace_print_function (en_GetDescField, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DESC, DescriptorHandle); _trace_smallint (RecNumber); _trace_descfield_type (FieldIdentifier); _trace_pointer (ValuePtr); _trace_bufferlen (BufferLength); _trace_integer_p (StringLengthPtr, TRACE_OUTPUT_SUCCESS); } void trace_SQLGetDescFieldW (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { /* Trace function */ _trace_print_function (en_GetDescFieldW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DESC, DescriptorHandle); _trace_smallint (RecNumber); _trace_descfield_type (FieldIdentifier); _trace_pointer (ValuePtr); _trace_bufferlen (BufferLength); _trace_integer_p (StringLengthPtr, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/ColAttribute.c0000644000076400007640000002755712323210535015251 00000000000000/* * ColAttribute.c * * $Id$ * * SQLColAttribute trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_colattr2_type (SQLUSMALLINT type) { char *ptr = "unknown option"; switch (type) { _S (SQL_COLUMN_COUNT); _S (SQL_COLUMN_NAME); _S (SQL_COLUMN_TYPE); _S (SQL_COLUMN_LENGTH); _S (SQL_COLUMN_PRECISION); _S (SQL_COLUMN_SCALE); _S (SQL_COLUMN_DISPLAY_SIZE); _S (SQL_COLUMN_NULLABLE); _S (SQL_COLUMN_UNSIGNED); _S (SQL_COLUMN_MONEY); _S (SQL_COLUMN_UPDATABLE); _S (SQL_COLUMN_AUTO_INCREMENT); _S (SQL_COLUMN_CASE_SENSITIVE); _S (SQL_COLUMN_SEARCHABLE); _S (SQL_COLUMN_TYPE_NAME); _S (SQL_COLUMN_TABLE_NAME); _S (SQL_COLUMN_OWNER_NAME); _S (SQL_COLUMN_QUALIFIER_NAME); _S (SQL_COLUMN_LABEL); } trace_emit ("\t\t%-15.15s %ld (%s)\n", "SQLUSMALLINT ", (int) type, ptr); } #if ODBCVER >= 0x0300 void _trace_colattr3_type (SQLUSMALLINT type) { char *ptr = "unknown option"; switch (type) { _S (SQL_DESC_AUTO_UNIQUE_VALUE); _S (SQL_DESC_BASE_COLUMN_NAME); _S (SQL_DESC_BASE_TABLE_NAME); _S (SQL_DESC_CASE_SENSITIVE); _S (SQL_DESC_CATALOG_NAME); _S (SQL_DESC_CONCISE_TYPE); _S (SQL_DESC_COUNT); _S (SQL_DESC_DISPLAY_SIZE); _S (SQL_DESC_FIXED_PREC_SCALE); _S (SQL_DESC_LABEL); _S (SQL_DESC_LENGTH); _S (SQL_DESC_LITERAL_PREFIX); _S (SQL_DESC_LITERAL_SUFFIX); _S (SQL_DESC_LOCAL_TYPE_NAME); _S (SQL_DESC_NAME); _S (SQL_DESC_NULLABLE); _S (SQL_DESC_NUM_PREC_RADIX); _S (SQL_DESC_OCTET_LENGTH); _S (SQL_DESC_PRECISION); _S (SQL_DESC_SCALE); _S (SQL_DESC_SCHEMA_NAME); _S (SQL_DESC_SEARCHABLE); _S (SQL_DESC_TABLE_NAME); _S (SQL_DESC_TYPE); _S (SQL_DESC_TYPE_NAME); _S (SQL_DESC_UNNAMED); _S (SQL_DESC_UNSIGNED); _S (SQL_DESC_UPDATABLE); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT ", (int) type, ptr); } #endif #if ODBCVER >= 0x0300 static void _trace_colattr3_data ( SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLLEN * NumericAttributePtr, int w_mode, int output) { int type = 0; switch (FieldIdentifier) { case SQL_DESC_BASE_COLUMN_NAME: case SQL_DESC_BASE_TABLE_NAME: case SQL_DESC_CATALOG_NAME: case SQL_DESC_LABEL: case SQL_DESC_LITERAL_PREFIX: case SQL_DESC_LITERAL_SUFFIX: case SQL_DESC_LOCAL_TYPE_NAME: case SQL_DESC_NAME: case SQL_DESC_SCHEMA_NAME: case SQL_DESC_TYPE_NAME: case SQL_DESC_TABLE_NAME: type = 1; /* string */ break; case SQL_DESC_CONCISE_TYPE: case SQL_DESC_COUNT: case SQL_DESC_DISPLAY_SIZE: case SQL_DESC_LENGTH: case SQL_DESC_NUM_PREC_RADIX: case SQL_DESC_OCTET_LENGTH: case SQL_DESC_PRECISION: case SQL_DESC_SCALE: case SQL_DESC_TYPE: type = 2; /* integer */ break; case SQL_DESC_AUTO_UNIQUE_VALUE: case SQL_DESC_CASE_SENSITIVE: case SQL_DESC_FIXED_PREC_SCALE: case SQL_DESC_UNSIGNED: type = 3; /* boolean */ break; case SQL_DESC_NULLABLE: type = 4; break; case SQL_DESC_SEARCHABLE: type = 5; break; case SQL_DESC_UNNAMED: type = 6; break; case SQL_DESC_UPDATABLE: type = 7; break; default: type = 0; /* unknown */ break; } /* * If we cannot determine the type or we are entering, just * emit the pointers */ if (type == 0 || !output) { _trace_pointer (CharacterAttributePtr); _trace_bufferlen ((SQLINTEGER) BufferLength); _trace_smallint_p (StringLengthPtr, output); _trace_len_p (NumericAttributePtr, output); return; } if (type == 1) /* string */ { if (w_mode) _trace_string_w (CharacterAttributePtr, BufferLength, StringLengthPtr, output); else _trace_string (CharacterAttributePtr, BufferLength, StringLengthPtr, output); _trace_bufferlen ((SQLINTEGER) BufferLength); _trace_smallint_p (StringLengthPtr, output); _trace_len_p (NumericAttributePtr, 0); /* just display pointer */ } else /* integer */ { _trace_pointer (CharacterAttributePtr); _trace_bufferlen ((SQLINTEGER) BufferLength); _trace_smallint_p (StringLengthPtr, 0); /* just display pointer */ if (!NumericAttributePtr) /* null pointer */ trace_emit ("\t\t%-15.15s * 0x0\n", "SQLLEN"); else if (type == 3) /* boolean */ { trace_emit ("\t\t%-15.15s * %p (%s)\n", "SQLLEN", NumericAttributePtr, *(SQLLEN *) NumericAttributePtr ? "SQL_TRUE" : "SQL_FALSE"); } else if (type == 4) /* nullable */ { char *ptr = "unknown nullable type"; switch (*NumericAttributePtr) { _S (SQL_NULLABLE); _S (SQL_NULLABLE_UNKNOWN); _S (SQL_NO_NULLS); } trace_emit ("\t\t%-15.15s * %p (%s)\n", "SQLLEN", NumericAttributePtr, ptr); } else if (type == 5) /* searchable */ { char *ptr = "unknown searchable type"; switch (*NumericAttributePtr) { _S (SQL_PRED_NONE); _S (SQL_PRED_CHAR); _S (SQL_PRED_BASIC); _S (SQL_PRED_SEARCHABLE); } trace_emit ("\t\t%-15.15s * %p (%s)\n", "SQLLEN", NumericAttributePtr, ptr); } else if (type == 6) /* named */ { char *ptr = "unknown named type"; switch (*NumericAttributePtr) { _S (SQL_NAMED); _S (SQL_UNNAMED); } trace_emit ("\t\t%-15.15s * %p (%s)\n", "SQLLEN", NumericAttributePtr, ptr); } else if (type == 7) /* updatable */ { char *ptr = "unknown updatable type"; switch (*NumericAttributePtr) { _S (SQL_ATTR_READONLY); _S (SQL_ATTR_WRITE); _S (SQL_ATTR_READWRITE_UNKNOWN); } trace_emit ("\t\t%-15.15s * %p (%s)\n", "SQLLEN", NumericAttributePtr, ptr); } else /* just a value */ { _trace_len_p (NumericAttributePtr, output); } } return; } #endif #if ODBCVER >= 0x0300 void trace_SQLColAttribute (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLLEN * NumericAttributePtr ) { /* Trace function */ _trace_print_function (en_ColAttribute, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_usmallint (ColumnNumber); _trace_colattr3_type (FieldIdentifier); _trace_colattr3_data (FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr, NumericAttributePtr, 0, TRACE_OUTPUT_SUCCESS); } #endif #if ODBCVER >= 0x0300 void trace_SQLColAttributeW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLLEN * NumericAttributePtr ) { /* Trace function */ _trace_print_function (en_ColAttributeW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_usmallint (ColumnNumber); _trace_colattr3_type (FieldIdentifier); _trace_colattr3_data (FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr, NumericAttributePtr, 1, TRACE_OUTPUT_SUCCESS); } #endif void trace_SQLColAttributes (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLLEN * pfDesc) { /* Trace function */ _trace_print_function (en_ColAttributes, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_usmallint (icol); _trace_colattr2_type (fDescType); _trace_pointer (rgbDesc); /* TODO */ _trace_smallint (cbDescMax); _trace_smallint_p (pcbDesc, TRACE_OUTPUT_SUCCESS); _trace_len_p (pfDesc, TRACE_OUTPUT_SUCCESS); } #if ODBCVER >= 0x0300 void trace_SQLColAttributesW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLLEN * pfDesc) { /* Trace function */ _trace_print_function (en_ColAttributeW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_usmallint (icol); _trace_colattr2_type (fDescType); _trace_pointer (rgbDesc); /* TODO */ _trace_smallint (cbDescMax); _trace_smallint_p (pcbDesc, TRACE_OUTPUT_SUCCESS); _trace_len_p (pfDesc, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/Transact.c0000644000076400007640000000761312323210535014416 00000000000000/* * Transact.c * * $Id$ * * SQLTransact trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_tran_completion (SQLSMALLINT option) { char *ptr = "invalid completion type"; switch (option) { _S (SQL_COMMIT); _S (SQL_ROLLBACK); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLSMALLINT", (int) option, ptr); } void trace_SQLTransact (int trace_leave, int retcode, SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLSMALLINT CompletionType) { /* Trace function */ _trace_print_function (en_Transact, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_ENV, EnvironmentHandle); _trace_handle (SQL_HANDLE_DBC, ConnectionHandle); _trace_tran_completion (CompletionType); } libiodbc-3.52.9/iodbc/trace/SetScrollOptions.c0000644000076400007640000000777412323210535016135 00000000000000/* * SetScrollOptions.c * * $Id$ * * SQLSetScrollOptions trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_scrollopt_type (SQLUSMALLINT type) { char *ptr = "unknown scroll option"; switch (type) { _S (SQL_CONCUR_READ_ONLY); _S (SQL_CONCUR_LOCK); _S (SQL_CONCUR_ROWVER); _S (SQL_CONCUR_VALUES); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT ", (int) type, ptr); } void trace_SQLSetScrollOptions (int trace_leave, int retcode, SQLHSTMT hstmt, SQLUSMALLINT fConcurrency, SQLINTEGER crowKeyset, SQLUSMALLINT crowRowset) { /* Trace function */ _trace_print_function (en_SetScrollOptions, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_scrollopt_type (fConcurrency); _trace_integer (crowKeyset); _trace_usmallint (crowRowset); } libiodbc-3.52.9/iodbc/trace/AllocEnv.c0000644000076400007640000000676112323210535014345 00000000000000/* * AllocEnv.c * * $Id$ * * SQLAllocEnv trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLAllocEnv(int trace_leave, int retcode, SQLHENV * phenv) { /* Trace function */ _trace_print_function (en_AllocEnv, trace_leave, retcode); /* Trace Arguments */ _trace_handle_p (SQL_HANDLE_ENV, phenv, TRACE_OUTPUT_SUCCESS); } libiodbc-3.52.9/iodbc/trace/GetFunctions.c0000644000076400007640000001662012323210535015245 00000000000000/* * GetFunctions.c * * $Id$ * * SQLGetFunctions trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" static void _trace_func_name (SQLUSMALLINT fFunc, int format) { char *ptr = "unknown function"; switch (fFunc) { /* All ODBC 2.x functions */ _S (SQL_API_ALL_FUNCTIONS); /* ODBC 2.x */ _S (SQL_API_SQLALLOCCONNECT); _S (SQL_API_SQLALLOCENV); _S (SQL_API_SQLALLOCSTMT); _S (SQL_API_SQLBINDCOL); _S (SQL_API_SQLBINDPARAMETER); _S (SQL_API_SQLBROWSECONNECT); _S (SQL_API_SQLCANCEL); #if (ODBCVER < 0x0300) _S (SQL_API_SQLCOLATTRIBUTES); #endif _S (SQL_API_SQLCOLUMNPRIVILEGES); _S (SQL_API_SQLCOLUMNS); _S (SQL_API_SQLCONNECT); _S (SQL_API_SQLDATASOURCES); _S (SQL_API_SQLDESCRIBECOL); _S (SQL_API_SQLDESCRIBEPARAM); _S (SQL_API_SQLDISCONNECT); _S (SQL_API_SQLDRIVERCONNECT); _S (SQL_API_SQLDRIVERS); _S (SQL_API_SQLERROR); _S (SQL_API_SQLEXECDIRECT); _S (SQL_API_SQLEXECUTE); _S (SQL_API_SQLEXTENDEDFETCH); _S (SQL_API_SQLFETCH); _S (SQL_API_SQLFOREIGNKEYS); _S (SQL_API_SQLFREECONNECT); _S (SQL_API_SQLFREEENV); _S (SQL_API_SQLFREESTMT); _S (SQL_API_SQLGETCONNECTOPTION); _S (SQL_API_SQLGETCURSORNAME); _S (SQL_API_SQLGETDATA); _S (SQL_API_SQLGETFUNCTIONS); _S (SQL_API_SQLGETINFO); _S (SQL_API_SQLGETSTMTOPTION); _S (SQL_API_SQLGETTYPEINFO); _S (SQL_API_SQLMORERESULTS); _S (SQL_API_SQLNATIVESQL); _S (SQL_API_SQLNUMPARAMS); _S (SQL_API_SQLNUMRESULTCOLS); _S (SQL_API_SQLPARAMDATA); _S (SQL_API_SQLPARAMOPTIONS); _S (SQL_API_SQLPREPARE); _S (SQL_API_SQLPRIMARYKEYS); _S (SQL_API_SQLPROCEDURECOLUMNS); _S (SQL_API_SQLPROCEDURES); _S (SQL_API_SQLPUTDATA); _S (SQL_API_SQLROWCOUNT); _S (SQL_API_SQLSETCONNECTOPTION); _S (SQL_API_SQLSETCURSORNAME); _S (SQL_API_SQLSETPARAM); _S (SQL_API_SQLSETPOS); _S (SQL_API_SQLSETSCROLLOPTIONS); _S (SQL_API_SQLSETSTMTOPTION); _S (SQL_API_SQLSPECIALCOLUMNS); _S (SQL_API_SQLSTATISTICS); _S (SQL_API_SQLTABLEPRIVILEGES); _S (SQL_API_SQLTABLES); _S (SQL_API_SQLTRANSACT); #if (ODBCVER >= 0x0300) /* All ODBC 2.x functions */ _S (SQL_API_ODBC3_ALL_FUNCTIONS); /* ODBC 3.x */ _S (SQL_API_SQLALLOCHANDLE); _S (SQL_API_SQLALLOCHANDLESTD); _S (SQL_API_SQLBINDPARAM); _S (SQL_API_SQLBULKOPERATIONS); _S (SQL_API_SQLCLOSECURSOR); _S (SQL_API_SQLCOLATTRIBUTE); _S (SQL_API_SQLCOPYDESC); _S (SQL_API_SQLENDTRAN); _S (SQL_API_SQLFETCHSCROLL); _S (SQL_API_SQLFREEHANDLE); _S (SQL_API_SQLGETCONNECTATTR); _S (SQL_API_SQLGETDESCFIELD); _S (SQL_API_SQLGETDESCREC); _S (SQL_API_SQLGETDIAGFIELD); _S (SQL_API_SQLGETDIAGREC); _S (SQL_API_SQLGETENVATTR); _S (SQL_API_SQLGETSTMTATTR); _S (SQL_API_SQLSETCONNECTATTR); _S (SQL_API_SQLSETDESCFIELD); _S (SQL_API_SQLSETDESCREC); _S (SQL_API_SQLSETENVATTR); _S (SQL_API_SQLSETSTMTATTR); #endif } if (format) trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", (int) fFunc, ptr); else trace_emit_string (ptr, SQL_NTS, 0); } void _trace_func_result ( SQLUSMALLINT fFunc, SQLUSMALLINT * pfExists, int output) { int i; if (fFunc == SQL_API_ALL_FUNCTIONS) { _trace_usmallint_p (pfExists, 0); if (!output) return; for (i = 1; i < 100; i++) if (pfExists[i]) _trace_func_name (i, 0); } #if (ODBCVER >= 0x0300) else if (fFunc == SQL_API_ODBC3_ALL_FUNCTIONS) { if (!output) return; _trace_usmallint_p (pfExists, 0); for (i = 1; i < SQL_API_ODBC3_ALL_FUNCTIONS; i++) if (SQL_FUNC_EXISTS (pfExists, i)) _trace_func_name (i, 0); } #endif else { _trace_usmallint_p (pfExists, output); } } void trace_SQLGetFunctions (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fFunc, SQLUSMALLINT * pfExists) { /* Trace function */ _trace_print_function (en_GetFunctions, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_func_name (fFunc, 1); _trace_func_result (fFunc, pfExists, trace_leave); } libiodbc-3.52.9/iodbc/trace/CopyDesc.c0000644000076400007640000000714212323210535014345 00000000000000/* * CopyDesc.c * * $Id$ * * SQLCopyDesc trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLCopyDesc (int trace_leave, int retcode, SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle) { /* Trace function */ _trace_print_function (en_CopyDesc, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DESC, SourceDescHandle); _trace_handle (SQL_HANDLE_DESC, TargetDescHandle); } #endif libiodbc-3.52.9/iodbc/trace/NumParams.c0000644000076400007640000000705512323210535014542 00000000000000/* * NumParams.c * * $Id$ * * SQLNumParams trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLNumParams (int trace_leave, int retcode, SQLHSTMT hstmt, SQLSMALLINT * pcpar) { /* Trace function */ _trace_print_function (en_NumParams, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_smallint_p (pcpar, TRACE_OUTPUT_SUCCESS); } libiodbc-3.52.9/iodbc/trace/Disconnect.c0000644000076400007640000000676712323210535014741 00000000000000/* * Disconnect.c * * $Id$ * * SQLDisconnect trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLDisconnect (int trace_leave, int retcode, SQLHDBC ConnectionHandle) { /* Trace function */ _trace_print_function (en_Disconnect, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, ConnectionHandle); } libiodbc-3.52.9/iodbc/trace/SetCursorName.c0000644000076400007640000001006512323210535015364 00000000000000/* * SetCursorName.c * * $Id$ * * SQLSetCursorName trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLSetCursorName (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szCursor, SQLSMALLINT cbCursor) { /* Trace function */ _trace_print_function (en_SetCursorName, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string (szCursor, cbCursor, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbCursor); } #if ODBCVER >= 0x0300 void trace_SQLSetCursorNameW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szCursor, SQLSMALLINT cbCursor) { /* Trace function */ _trace_print_function (en_SetCursorNameW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string_w (szCursor, cbCursor, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbCursor); } #endif libiodbc-3.52.9/iodbc/trace/SetDescRec.c0000644000076400007640000001003012323210535014606 00000000000000/* * SetDescRec.c * * $Id$ * * SQLSetDescRec trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLSetDescRec (int trace_leave, int retcode, SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT Type, SQLSMALLINT SubType, SQLLEN Length, SQLSMALLINT Precision, SQLSMALLINT Scale, SQLPOINTER Data, SQLLEN * StringLength, SQLLEN * Indicator) { /* Trace function */ _trace_print_function (en_SetDescRec, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DESC, DescriptorHandle); _trace_smallint (RecNumber); _trace_smallint (Type); _trace_smallint (SubType); _trace_len (Length); _trace_smallint (Precision); _trace_smallint (Scale); _trace_pointer (Data); _trace_len_p (StringLength, TRACE_OUTPUT_SUCCESS); _trace_len_p (Indicator, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/FreeEnv.c0000644000076400007640000000672312323210535014172 00000000000000/* * FreeEnv.c * * $Id$ * * SQLFreeEnv trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLFreeEnv(int trace_leave, int retcode, SQLHENV henv) { /* Trace function */ _trace_print_function (en_FreeEnv, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_ENV, henv); } libiodbc-3.52.9/iodbc/trace/DescribeCol.c0000644000076400007640000001315012323210535015006 00000000000000/* * DescribeCol.c * * $Id$ * * SQLDescribeCol trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_desc_null (SQLSMALLINT *p, int output) { char *ptr = "unknown nullable type"; if (!p) { trace_emit ("\t\t%-15.15s * 0x0\n", "SQLSMALLINT"); return; } if (!output) { trace_emit ("\t\t%-15.15s * %p\n", "SQLSMALLINT", p); return; } switch (*p) { _S (SQL_NULLABLE); _S (SQL_NULLABLE_UNKNOWN); _S (SQL_NO_NULLS); } trace_emit ("\t\t%-15.15s * %p (%s)\n", "SQLSMALLINT", p, ptr); } void trace_SQLDescribeCol (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLSMALLINT ColumnNumber, SQLCHAR * ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLengthPtr, SQLSMALLINT * DataTypePtr, SQLULEN * ColumnSizePtr, SQLSMALLINT * DecimalDigitsPtr, SQLSMALLINT * NullablePtr) { /* Trace function */ _trace_print_function (en_DescribeCol, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_usmallint (ColumnNumber); _trace_string (ColumnName, BufferLength, NameLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength); _trace_smallint_p (NameLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_sql_type_p (DataTypePtr, TRACE_OUTPUT_SUCCESS); _trace_ulen_p (ColumnSizePtr, TRACE_OUTPUT_SUCCESS); _trace_smallint_p (DecimalDigitsPtr, TRACE_OUTPUT_SUCCESS); _trace_desc_null (NullablePtr, TRACE_OUTPUT_SUCCESS); } #if ODBCVER >= 0x0300 void trace_SQLDescribeColW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLSMALLINT ColumnNumber, SQLWCHAR * ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLengthPtr, SQLSMALLINT * DataTypePtr, SQLULEN * ColumnSizePtr, SQLSMALLINT * DecimalDigitsPtr, SQLSMALLINT * NullablePtr) { /* Trace function */ _trace_print_function (en_DescribeColW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_usmallint (ColumnNumber); _trace_string_w (ColumnName, BufferLength, NameLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", BufferLength); _trace_smallint_p (NameLengthPtr, TRACE_OUTPUT_SUCCESS); _trace_sql_type_p (DataTypePtr, TRACE_OUTPUT_SUCCESS); _trace_ulen_p (ColumnSizePtr, TRACE_OUTPUT_SUCCESS); _trace_smallint_p (DecimalDigitsPtr, TRACE_OUTPUT_SUCCESS); _trace_desc_null (NullablePtr, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/AllocStmt.c0000644000076400007640000000705112323210535014535 00000000000000/* * AllocStmt.c * * $Id$ * * SQLAllocStmt trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLAllocStmt(int trace_leave, int retcode, SQLHDBC hdbc, SQLHSTMT *phstmt) { /* Trace function */ _trace_print_function (en_AllocStmt, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_handle_p (SQL_HANDLE_STMT, phstmt, TRACE_OUTPUT_SUCCESS); } libiodbc-3.52.9/iodbc/trace/Prepare.c0000644000076400007640000001012612323210535014226 00000000000000/* * Prepare.c * * $Id$ * * SQLPrepare trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLPrepare (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength) { /* Trace function */ _trace_print_function (en_Prepare, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_string (StatementText, TextLength, NULL, TRACE_INPUT); _trace_stringlen ("SQLINTEGER", TextLength); } #if ODBCVER >= 0x0300 void trace_SQLPrepareW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLWCHAR * StatementText, SQLINTEGER TextLength) { /* Trace function */ _trace_print_function (en_PrepareW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_string_w (StatementText, TextLength, NULL, TRACE_INPUT); _trace_stringlen ("SQLINTEGER", TextLength); } #endif libiodbc-3.52.9/iodbc/trace/Makefile.am0000644000076400007640000001104512323210535014521 00000000000000# # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # noinst_LTLIBRARIES = libiodbctrace.la AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/iodbc \ -I$(top_srcdir)/iodbcinst libiodbctrace_la_LDFLAGS = #-static libiodbctrace_la_SOURCES = \ AllocConnect.c \ AllocEnv.c \ AllocHandle.c \ AllocStmt.c \ BindCol.c \ BindParameter.c \ BrowseConnect.c \ BulkOperations.c \ Cancel.c \ CloseCursor.c \ ColAttribute.c \ ColumnPrivileges.c \ Columns.c \ Connect.c \ CopyDesc.c \ DataSources.c \ DescribeCol.c \ DescribeParam.c \ Disconnect.c \ DriverConnect.c \ Drivers.c \ EndTran.c \ Error.c \ ExecDirect.c \ Execute.c \ ExtendedFetch.c \ Fetch.c \ FetchScroll.c \ ForeignKeys.c \ FreeConnect.c \ FreeEnv.c \ FreeHandle.c \ FreeStmt.c \ GetConnectAttr.c \ GetConnectOption.c \ GetCursorName.c \ GetData.c \ GetDescField.c \ GetDescRec.c \ GetDiagField.c \ GetDiagRec.c \ GetEnvAttr.c \ GetFunctions.c \ GetStmtAttr.c \ GetStmtOption.c \ GetTypeInfo.c \ Info.c \ MoreResults.c \ NativeSql.c \ NumParams.c \ NumResultCols.c \ ParamData.c \ ParamOptions.c \ Prepare.c \ PrimaryKeys.c \ ProcedureColumns.c \ Procedures.c \ PutData.c \ RowCount.c \ SetConnectAttr.c \ SetConnectOption.c \ SetCursorName.c \ SetDescField.c \ SetDescRec.c \ SetEnvAttr.c \ SetPos.c \ SetScrollOptions.c \ SetStmtAttr.c \ SetStmtOption.c \ SpecialColumns.c \ Statistics.c \ TablePrivileges.c \ Tables.c \ Transact.c \ trace.c noinst_HEADERS = proto.h trace.h libiodbc-3.52.9/iodbc/trace/ForeignKeys.c0000644000076400007640000001401112323210535015052 00000000000000/* * ForeignKeys.c * * $Id$ * * SQLForeignKeys trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLForeignKeys (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szPkTableQualifier, SQLSMALLINT cbPkTableQualifier, SQLCHAR * szPkTableOwner, SQLSMALLINT cbPkTableOwner, SQLCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLCHAR * szFkTableQualifier, SQLSMALLINT cbFkTableQualifier, SQLCHAR * szFkTableOwner, SQLSMALLINT cbFkTableOwner, SQLCHAR * szFkTableName, SQLSMALLINT cbFkTableName) { /* Trace function */ _trace_print_function (en_ForeignKeys, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string (szPkTableQualifier, cbPkTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbPkTableQualifier); _trace_string (szPkTableOwner, cbPkTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbPkTableOwner); _trace_string (szPkTableName, cbPkTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbPkTableName); _trace_string (szFkTableQualifier, cbFkTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbFkTableQualifier); _trace_string (szFkTableOwner, cbFkTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbFkTableOwner); _trace_string (szFkTableName, cbFkTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbFkTableName); } #if ODBCVER >= 0x0300 void trace_SQLForeignKeysW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szPkTableQualifier, SQLSMALLINT cbPkTableQualifier, SQLWCHAR * szPkTableOwner, SQLSMALLINT cbPkTableOwner, SQLWCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLWCHAR * szFkTableQualifier, SQLSMALLINT cbFkTableQualifier, SQLWCHAR * szFkTableOwner, SQLSMALLINT cbFkTableOwner, SQLWCHAR * szFkTableName, SQLSMALLINT cbFkTableName) { /* Trace function */ _trace_print_function (en_ForeignKeysW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string_w (szPkTableQualifier, cbPkTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbPkTableQualifier); _trace_string_w (szPkTableOwner, cbPkTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbPkTableOwner); _trace_string_w (szPkTableName, cbPkTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbPkTableName); _trace_string_w (szFkTableQualifier, cbFkTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbFkTableQualifier); _trace_string_w (szFkTableOwner, cbFkTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbFkTableOwner); _trace_string_w (szFkTableName, cbFkTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbFkTableName); } #endif libiodbc-3.52.9/iodbc/trace/ParamData.c0000644000076400007640000000703312323210535014465 00000000000000/* * ParamData.c * * $Id$ * * SQLParamData trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLParamData (int trace_leave, int retcode, SQLHSTMT hstmt, SQLPOINTER * prgbValue) { /* Trace function */ _trace_print_function (en_ParamData, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_pointer (prgbValue); } libiodbc-3.52.9/iodbc/trace/Tables.c0000644000076400007640000001217712323210535014052 00000000000000/* * Tables.c * * $Id$ * * SQLTables trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLTables (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szTableType, SQLSMALLINT cbTableType) { /* Trace function */ _trace_print_function (en_Tables, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); _trace_string (szTableType, cbTableType, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableType); } #if ODBCVER >= 0x0300 void trace_SQLTablesW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szTableType, SQLSMALLINT cbTableType) { /* Trace function */ _trace_print_function (en_TablesW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string_w (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string_w (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string_w (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); _trace_string_w (szTableType, cbTableType, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableType); } #endif libiodbc-3.52.9/iodbc/trace/GetConnectOption.c0000644000076400007640000001171712323210535016061 00000000000000/* * GetConnectOption.c * * $Id$ * * SQLGetConnectOption trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_connopt_type (SQLUSMALLINT type) { char *ptr = "unknown connection attribute"; switch (type) { _S (SQL_ACCESS_MODE); _S (SQL_AUTOCOMMIT); _S (SQL_CURRENT_QUALIFIER); _S (SQL_LOGIN_TIMEOUT); _S (SQL_ODBC_CURSORS); _S (SQL_OPT_TRACE); _S (SQL_OPT_TRACEFILE); _S (SQL_PACKET_SIZE); _S (SQL_QUIET_MODE); _S (SQL_TRANSLATE_DLL); _S (SQL_TRANSLATE_OPTION); _S (SQL_TXN_ISOLATION); /* 2.0 Driver Manager also allows statement options at this time */ _S (SQL_ASYNC_ENABLE); _S (SQL_BIND_TYPE); _S (SQL_CONCURRENCY); _S (SQL_CURSOR_TYPE); _S (SQL_KEYSET_SIZE); _S (SQL_MAX_LENGTH); _S (SQL_MAX_ROWS); _S (SQL_NOSCAN); _S (SQL_QUERY_TIMEOUT); _S (SQL_RETRIEVE_DATA); _S (SQL_ROWSET_SIZE); _S (SQL_SIMULATE_CURSOR); _S (SQL_USE_BOOKMARKS); } trace_emit ("\t\t%-15.15s %ld (%s)\n", "SQLUSMALLINT ", (int) type, ptr); } void trace_SQLGetConnectOption (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fOption, SQLPOINTER pvParam) { /* Trace function */ _trace_print_function (en_GetConnectOption, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_connopt_type (fOption); _trace_pointer (pvParam); } #if ODBCVER >= 0x0300 void trace_SQLGetConnectOptionW (int trace_leave, int retcode, SQLHDBC hdbc, SQLUSMALLINT fOption, SQLPOINTER pvParam) { /* Trace function */ _trace_print_function (en_GetConnectOptionW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_connopt_type (fOption); _trace_pointer (pvParam); } #endif libiodbc-3.52.9/iodbc/trace/ExecDirect.c0000644000076400007640000001004412323210535014646 00000000000000/* * ExecDirect.c * * $Id$ * * SQLExecDirect trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLExecDirect (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szSqlStr, SQLINTEGER cbSqlStr) { /* Trace function */ _trace_print_function (en_ExecDirect, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string (szSqlStr, cbSqlStr, NULL, TRACE_INPUT); _trace_stringlen ("SQLINTEGER", cbSqlStr); } #if ODBCVER >= 0x0300 void trace_SQLExecDirectW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szSqlStr, SQLINTEGER cbSqlStr) { /* Trace function */ _trace_print_function (en_ExecDirectW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string_w (szSqlStr, cbSqlStr, NULL, TRACE_INPUT); _trace_stringlen ("SQLINTEGER", cbSqlStr); } #endif libiodbc-3.52.9/iodbc/trace/GetStmtAttr.c0000644000076400007640000001321212323210535015051 00000000000000/* * GetStmtAttr.c * * $Id$ * * SQLGetStmtAttr trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void _trace_stmtattr_type (SQLINTEGER type) { char *ptr = "unknown statement attribute"; switch (type) { _S (SQL_ATTR_APP_PARAM_DESC); _S (SQL_ATTR_APP_ROW_DESC); _S (SQL_ATTR_ASYNC_ENABLE); _S (SQL_ATTR_CONCURRENCY); _S (SQL_ATTR_CURSOR_SCROLLABLE); _S (SQL_ATTR_CURSOR_SENSITIVITY); _S (SQL_ATTR_CURSOR_TYPE); _S (SQL_ATTR_ENABLE_AUTO_IPD); _S (SQL_ATTR_FETCH_BOOKMARK_PTR); _S (SQL_ATTR_IMP_PARAM_DESC); _S (SQL_ATTR_IMP_ROW_DESC); _S (SQL_ATTR_KEYSET_SIZE); _S (SQL_ATTR_MAX_LENGTH); _S (SQL_ATTR_MAX_ROWS); _S (SQL_ATTR_NOSCAN); _S (SQL_ATTR_PARAMSET_SIZE); _S (SQL_ATTR_PARAMS_PROCESSED_PTR); _S (SQL_ATTR_PARAM_BIND_OFFSET_PTR); _S (SQL_ATTR_PARAM_BIND_TYPE); _S (SQL_ATTR_PARAM_OPERATION_PTR); _S (SQL_ATTR_PARAM_STATUS_PTR); _S (SQL_ATTR_QUERY_TIMEOUT); _S (SQL_ATTR_RETRIEVE_DATA); _S (SQL_ATTR_ROWS_FETCHED_PTR); _S (SQL_ATTR_ROW_ARRAY_SIZE); _S (SQL_ATTR_ROW_BIND_OFFSET_PTR); _S (SQL_ATTR_ROW_BIND_TYPE); _S (SQL_ATTR_ROW_NUMBER); _S (SQL_ATTR_ROW_OPERATION_PTR); _S (SQL_ATTR_ROW_STATUS_PTR); _S (SQL_ATTR_SIMULATE_CURSOR); _S (SQL_ATTR_USE_BOOKMARKS); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLINTEGER ", (int) type, ptr); } void trace_SQLGetStmtAttr (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { /* Trace function */ _trace_print_function (en_GetStmtAttr, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_stmtattr_type (Attribute); _trace_pointer (ValuePtr); _trace_bufferlen (BufferLength); _trace_integer_p (StringLengthPtr, TRACE_OUTPUT_SUCCESS); } void trace_SQLGetStmtAttrW (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { /* Trace function */ _trace_print_function (en_GetStmtAttrW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_stmtattr_type (Attribute); _trace_pointer (ValuePtr); _trace_bufferlen (BufferLength); _trace_integer_p (StringLengthPtr, trace_leave); } #endif libiodbc-3.52.9/iodbc/trace/GetStmtOption.c0000644000076400007640000001026312323210535015412 00000000000000/* * GetStmtOption.c * * $Id$ * * SQLGetStmtOption trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void _trace_stmtopt_type (SQLUSMALLINT type) { char *ptr = "unknown statement option"; switch (type) { _S (SQL_ASYNC_ENABLE); _S (SQL_BIND_TYPE); _S (SQL_CONCURRENCY); _S (SQL_CURSOR_TYPE); _S (SQL_KEYSET_SIZE); _S (SQL_MAX_LENGTH); _S (SQL_MAX_ROWS); _S (SQL_NOSCAN); _S (SQL_QUERY_TIMEOUT); _S (SQL_RETRIEVE_DATA); _S (SQL_ROWSET_SIZE); _S (SQL_SIMULATE_CURSOR); _S (SQL_USE_BOOKMARKS); } trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT ", (int) type, ptr); } void trace_SQLGetStmtOption (int trace_leave, int retcode, SQLHSTMT StatementHandle, SQLUSMALLINT Attribute, SQLPOINTER ValuePtr) { /* Trace function */ _trace_print_function (en_GetStmtOption, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, StatementHandle); _trace_stmtopt_type (Attribute); _trace_pointer (ValuePtr); } libiodbc-3.52.9/iodbc/trace/AllocHandle.c0000644000076400007640000000724412323210535015005 00000000000000/* * AllocHandle.c * * $Id$ * * SQLAllocHandle trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" #if ODBCVER >= 0x0300 void trace_SQLAllocHandle(int trace_leave, int retcode, SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE * OutputHandlePtr) { /* Trace function */ _trace_print_function (en_AllocHandle, trace_leave, retcode); /* Trace Arguments */ _trace_handletype (HandleType); _trace_handle (0, InputHandle); _trace_handle_p (0, OutputHandlePtr, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/PrimaryKeys.c0000644000076400007640000001150212323210535015106 00000000000000/* * PrimaryKeys.c * * $Id$ * * SQLPrimaryKeys trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLPrimaryKeys (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName) { /* Trace function */ _trace_print_function (en_PrimaryKeys, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); } #if ODBCVER >= 0x0300 void trace_SQLPrimaryKeysW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName) { /* Trace function */ _trace_print_function (en_PrimaryKeysW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string_w (szTableQualifier, cbTableQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableQualifier); _trace_string_w (szTableOwner, cbTableOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableOwner); _trace_string_w (szTableName, cbTableName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbTableName); } #endif libiodbc-3.52.9/iodbc/trace/Error.c0000644000076400007640000001152712323210535013727 00000000000000/* * Error.c * * $Id$ * * SQLError trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLError (int trace_leave, int retcode, SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLCHAR * szSqlstate, SQLINTEGER * pfNativeError, SQLCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg) { /* Trace function */ _trace_print_function (en_Error, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_ENV, henv); _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string (szSqlstate, SQL_NTS, NULL, TRACE_OUTPUT_SUCCESS); _trace_integer_p (pfNativeError, TRACE_OUTPUT_SUCCESS); _trace_string (szErrorMsg, cbErrorMsgMax, pcbErrorMsg, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", cbErrorMsgMax); _trace_smallint_p (pcbErrorMsg, TRACE_OUTPUT_SUCCESS); } #if ODBCVER >= 0x0300 void trace_SQLErrorW (int trace_leave, int retcode, SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLWCHAR * szSqlstate, SQLINTEGER * pfNativeError, SQLWCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg) { /* Trace function */ _trace_print_function (en_Error, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_ENV, henv); _trace_handle (SQL_HANDLE_DBC, hdbc); _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string_w (szSqlstate, SQL_NTS, NULL, TRACE_OUTPUT_SUCCESS); _trace_integer_p (pfNativeError, trace_leave); _trace_string_w (szErrorMsg, cbErrorMsgMax, pcbErrorMsg, TRACE_OUTPUT_SUCCESS); _trace_stringlen ("SQLSMALLINT", cbErrorMsgMax); _trace_smallint_p (pcbErrorMsg, TRACE_OUTPUT_SUCCESS); } #endif libiodbc-3.52.9/iodbc/trace/ProcedureColumns.c0000644000076400007640000001224712323210535016127 00000000000000/* * ProcedureColumns.c * * $Id$ * * SQLProcedureColumns trace functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "trace.h" void trace_SQLProcedureColumns (int trace_leave, int retcode, SQLHSTMT hstmt, SQLCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLCHAR * szProcName, SQLSMALLINT cbProcName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName) { /* Trace function */ _trace_print_function (en_ProcedureColumns, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string (szProcQualifier, cbProcQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbProcQualifier); _trace_string (szProcOwner, cbProcOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbProcOwner); _trace_string (szProcName, cbProcName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbProcName); _trace_string (szColumnName, cbColumnName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbColumnName); } #if ODBCVER >= 0x0300 void trace_SQLProcedureColumnsW (int trace_leave, int retcode, SQLHSTMT hstmt, SQLWCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLWCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLWCHAR * szProcName, SQLSMALLINT cbProcName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName) { /* Trace function */ _trace_print_function (en_ProcedureColumnsW, trace_leave, retcode); /* Trace Arguments */ _trace_handle (SQL_HANDLE_STMT, hstmt); _trace_string_w (szProcQualifier, cbProcQualifier, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbProcQualifier); _trace_string_w (szProcOwner, cbProcOwner, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbProcOwner); _trace_string_w (szProcName, cbProcName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbProcName); _trace_string_w (szColumnName, cbColumnName, NULL, TRACE_INPUT); _trace_stringlen ("SQLSMALLINT", cbColumnName); } #endif libiodbc-3.52.9/iodbc/vmscompile.com0000644000076400007640000000716212323204667014263 00000000000000$ ! To compile iODBC for VMS, just type $ @VMSCOMPILE or $ @VMSCOMPILE DEBUG $ ! Compile *.c, and remember all object files created. $ ! Create a shared library from all the created object files. $ !--------------------------------------------------------------------------- $ debug=0 $ if p1 .eqs. "DEBUG" then debug=1 $ ! Find version number by searching the configure. file $ search/exact/out=x.tmp configure. "VERSION=" $ version="" $ open/read fi x.tmp $ read/end=CLOSEFILE fi version $ CLOSEFILE: $ close fi $ version=version-"VERSION=" $ if version .eqs. "" $ then $ version="1.1" $ write sys$output "Could not find the version number of iODBC in CONFIGURE." $ endif $ write sys$output "Creating iODBC version ''version'" $ stdopts="/INCLUDE=SYS$DISK:[]/PREFIX=ALL/NOLIS" $ configure="/DEFINE=(""VERSION=""""''version'"""""")" $ debugopt="" $ if debug then debugopt="/DEBUG" $ if debug then stdopts=stdopts+"/NOOPT" $ objects="" $ NEXTFILE: $ file=f$search("*.c") $ if file .eqs. "" then goto LINKIT $ filename=f$parse(file,,,"name") $ objects=objects+filename+"," $ write sys$output "$ cc''debugopt' ''filename'" $ cc'stdopts' 'configure' 'debugopt' 'filename' $ goto NEXTFILE $ LINKIT: $ write sys$output "$ LINK''debugopt' IODBC.EXE" $ open/write fo x.opt $ sversion=version-"." $ write fo "GSMATCH=LEQ,1,"+sversion $ close fo $ link/share=IODBC 'debugopt' 'objects' x/opt,sys$input/opt SYMBOL_VECTOR=(SQLTables=PROCEDURE) SYMBOL_VECTOR=(SQLColumns=PROCEDURE) SYMBOL_VECTOR=(SQLStatistics=PROCEDURE) SYMBOL_VECTOR=(SQLTablePrivileges=PROCEDURE) SYMBOL_VECTOR=(SQLColumnPrivileges=PROCEDURE) SYMBOL_VECTOR=(SQLSpecialColumns=PROCEDURE) SYMBOL_VECTOR=(SQLPrimaryKeys=PROCEDURE) SYMBOL_VECTOR=(SQLForeignKeys=PROCEDURE) SYMBOL_VECTOR=(SQLProcedures=PROCEDURE) SYMBOL_VECTOR=(SQLProcedureColumns=PROCEDURE) SYMBOL_VECTOR=(SQLAllocEnv=PROCEDURE) SYMBOL_VECTOR=(SQLAllocConnect=PROCEDURE) SYMBOL_VECTOR=(SQLConnect=PROCEDURE) SYMBOL_VECTOR=(SQLDriverConnect=PROCEDURE) SYMBOL_VECTOR=(SQLBrowseConnect=PROCEDURE) SYMBOL_VECTOR=(SQLDisconnect=PROCEDURE) SYMBOL_VECTOR=(SQLFreeConnect=PROCEDURE) SYMBOL_VECTOR=(SQLFreeEnv=PROCEDURE) SYMBOL_VECTOR=(SQLExecute=PROCEDURE) SYMBOL_VECTOR=(SQLExecDirect=PROCEDURE) SYMBOL_VECTOR=(SQLNativeSql=PROCEDURE) SYMBOL_VECTOR=(SQLParamData=PROCEDURE) SYMBOL_VECTOR=(SQLPutData=PROCEDURE) SYMBOL_VECTOR=(SQLCancel=PROCEDURE) SYMBOL_VECTOR=(SQLGetFunctions=PROCEDURE) SYMBOL_VECTOR=(SQLGetInfo=PROCEDURE) SYMBOL_VECTOR=(SQLGetTypeInfo=PROCEDURE) SYMBOL_VECTOR=(SQLSetConnectOption=PROCEDURE) SYMBOL_VECTOR=(SQLSetStmtOption=PROCEDURE) SYMBOL_VECTOR=(SQLGetConnectOption=PROCEDURE) SYMBOL_VECTOR=(SQLGetStmtOption=PROCEDURE) SYMBOL_VECTOR=(SQLAllocStmt=PROCEDURE) SYMBOL_VECTOR=(SQLFreeStmt=PROCEDURE) SYMBOL_VECTOR=(SQLPrepare=PROCEDURE) SYMBOL_VECTOR=(SQLSetParam=PROCEDURE) SYMBOL_VECTOR=(SQLBindParameter=PROCEDURE) SYMBOL_VECTOR=(SQLDescribeParam=PROCEDURE) SYMBOL_VECTOR=(SQLParamOptions=PROCEDURE) SYMBOL_VECTOR=(SQLNumParams=PROCEDURE) SYMBOL_VECTOR=(SQLSetScrollOptions=PROCEDURE) SYMBOL_VECTOR=(SQLSetCursorName=PROCEDURE) SYMBOL_VECTOR=(SQLGetCursorName=PROCEDURE) SYMBOL_VECTOR=(SQLNumResultCols=PROCEDURE) SYMBOL_VECTOR=(SQLDescribeCol=PROCEDURE) SYMBOL_VECTOR=(SQLColAttributes=PROCEDURE) SYMBOL_VECTOR=(SQLBindCol=PROCEDURE) SYMBOL_VECTOR=(SQLFetch=PROCEDURE) SYMBOL_VECTOR=(SQLGetData=PROCEDURE) SYMBOL_VECTOR=(SQLMoreResults=PROCEDURE) SYMBOL_VECTOR=(SQLRowCount=PROCEDURE) SYMBOL_VECTOR=(SQLSetPos=PROCEDURE) SYMBOL_VECTOR=(SQLExtendedFetch=PROCEDURE) SYMBOL_VECTOR=(SQLError=PROCEDURE) SYMBOL_VECTOR=(SQLTransact=PROCEDURE) SYMBOL_VECTOR=(SQLDataSources=PROCEDURE) SYMBOL_VECTOR=(SQLDrivers=PROCEDURE) $ delete x.opt.* $ exit libiodbc-3.52.9/iodbc/iodbc.exp0000644000076400007640000000450012323204667013174 00000000000000iodbc_version SQLAllocConnect SQLAllocEnv SQLAllocHandle SQLAllocStmt SQLBindCol SQLBindParam SQLBindParameter SQLBrowseConnect SQLBrowseConnectA SQLBrowseConnectW SQLBulkOperations SQLCancel SQLCloseCursor SQLColAttribute SQLColAttributeA SQLColAttributeW SQLColAttributes SQLColAttributesA SQLColAttributesW SQLColumnPrivileges SQLColumnPrivilegesA SQLColumnPrivilegesW SQLColumns SQLColumnsA SQLColumnsW SQLConnect SQLConnectA SQLConnectW SQLCopyDesc SQLDataSources SQLDataSourcesA SQLDataSourcesW SQLDescribeCol SQLDescribeColA SQLDescribeColW SQLDescribeParam SQLDisconnect SQLDriverConnect SQLDriverConnectA SQLDriverConnectW SQLDrivers SQLDriversA SQLDriversW SQLEndTran SQLError SQLErrorA SQLErrorW SQLExecDirect SQLExecDirectA SQLExecDirectW SQLExecute SQLExtendedFetch SQLFetch SQLFetchScroll SQLForeignKeys SQLForeignKeysA SQLForeignKeysW SQLFreeConnect SQLFreeEnv SQLFreeHandle SQLFreeStmt SQLGetConnectAttr SQLGetConnectAttrA SQLGetConnectAttrW SQLGetConnectOption SQLGetConnectOptionA SQLGetConnectOptionW SQLGetCursorName SQLGetCursorNameA SQLGetCursorNameW SQLGetData SQLGetDescField SQLGetDescFieldA SQLGetDescFieldW SQLGetDescRec SQLGetDescRecA SQLGetDescRecW SQLGetDiagField SQLGetDiagFieldA SQLGetDiagFieldW SQLGetDiagRec SQLGetDiagRecA SQLGetDiagRecW SQLGetEnvAttr SQLGetFunctions SQLGetInfo SQLGetInfoA SQLGetInfoW SQLGetStmtAttr SQLGetStmtAttrA SQLGetStmtAttrW SQLGetStmtOption SQLGetStmtOptionA SQLGetTypeInfo SQLGetTypeInfoA SQLGetTypeInfoW SQLMoreResults SQLNativeSql SQLNativeSqlA SQLNativeSqlW SQLNumParams SQLNumResultCols SQLParamData SQLParamOptions SQLPrepare SQLPrepareA SQLPrepareW SQLPrimaryKeys SQLPrimaryKeysA SQLPrimaryKeysW SQLProcedureColumns SQLProcedureColumnsA SQLProcedureColumnsW SQLProcedures SQLProceduresA SQLProceduresW SQLPutData SQLRowCount SQLSetConnectAttr SQLSetConnectAttrA SQLSetConnectAttrW SQLSetConnectOption SQLSetConnectOptionA SQLSetConnectOptionW SQLSetCursorName SQLSetCursorNameA SQLSetCursorNameW SQLSetDescField SQLSetDescFieldA SQLSetDescFieldW SQLSetDescRec SQLSetEnvAttr SQLSetParam SQLSetPos SQLSetScrollOptions SQLSetStmtAttr SQLSetStmtAttrA SQLSetStmtAttrW SQLSetStmtOption SQLSetStmtOptionA SQLSpecialColumns SQLSpecialColumnsA SQLSpecialColumnsW SQLStatistics SQLStatisticsA SQLStatisticsW SQLTablePrivileges SQLTablePrivilegesA SQLTablePrivilegesW SQLTables SQLTablesA SQLTablesW SQLTransact libiodbc-3.52.9/iodbc/odbc3.c0000644000076400007640000025742212323210535012540 00000000000000/* * odbc3.c * * $Id$ * * ODBC 3.x functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include "iodbc.h" #include #include #include #if (ODBCVER >= 0x300) #include #include #include #include #include #include #include #include #include /* * SQL_ATTR_CONNECTION_POOLING value */ SQLINTEGER _iodbcdm_attr_connection_pooling = SQL_CP_DEFAULT; /* * Externals */ SQLRETURN SQLAllocEnv_Internal (SQLHENV * phenv, int odbc_ver); SQLRETURN SQLFreeEnv_Internal (SQLHENV henv); SQLRETURN SQLAllocConnect_Internal (SQLHENV henv, SQLHDBC * phdbc); SQLRETURN SQLFreeConnect_Internal (SQLHDBC hdbc, int ver); SQLRETURN SQLAllocStmt_Internal (SQLHDBC hdbc, SQLHSTMT * phstmt); SQLRETURN SQLFreeStmt_Internal (SQLHSTMT hstmt, SQLUSMALLINT fOption); SQLRETURN SQLTransact_Internal (SQLHENV henv, SQLHDBC hdbc, SQLUSMALLINT fType); RETCODE SQL_API SQLAllocHandle_Internal ( SQLSMALLINT handleType, SQLHANDLE inputHandle, SQLHANDLE * outputHandlePtr) { switch (handleType) { case SQL_HANDLE_ENV: return SQLAllocEnv_Internal (outputHandlePtr, 0); case SQL_HANDLE_DBC: { GENV (genv, inputHandle); if (!IS_VALID_HENV (genv)) { return SQL_INVALID_HANDLE; } CLEAR_ERRORS (genv); if (genv->odbc_ver == 0) { PUSHSQLERR (genv->herr, en_HY010); return SQL_ERROR; } return SQLAllocConnect_Internal (inputHandle, outputHandlePtr); } case SQL_HANDLE_STMT: { CONN (con, inputHandle); if (!IS_VALID_HDBC (con)) { return SQL_INVALID_HANDLE; } CLEAR_ERRORS (con); return SQLAllocStmt_Internal (inputHandle, outputHandlePtr); } case SQL_HANDLE_DESC: { CONN (con, inputHandle); HPROC hproc = SQL_NULL_HPROC; RETCODE retcode; DESC_t *new_desc; if (!IS_VALID_HDBC (con)) { return SQL_INVALID_HANDLE; } CLEAR_ERRORS (con); if (((ENV_t *)(con->henv))->dodbc_ver == SQL_OV_ODBC2) { PUSHSQLERR (con->herr, en_HYC00); return SQL_ERROR; } if (!outputHandlePtr) { PUSHSQLERR (con->herr, en_HY009); return SQL_ERROR; } hproc = _iodbcdm_getproc (con, en_AllocHandle); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (con->herr, en_IM001); return SQL_ERROR; } new_desc = (DESC_t *) MEM_ALLOC (sizeof (DESC_t)); if (!new_desc) { PUSHSQLERR (con->herr, en_HY001); return SQL_ERROR; } memset (new_desc, 0, sizeof (DESC_t)); CALL_DRIVER (con, con, retcode, hproc, (handleType, con->dhdbc, &new_desc->dhdesc)); if (!SQL_SUCCEEDED (retcode)) { MEM_FREE (new_desc); return SQL_ERROR; } new_desc->type = SQL_HANDLE_DESC; new_desc->hdbc = con; new_desc->hstmt = NULL; new_desc->herr = NULL; new_desc->desc_cip = 0; *outputHandlePtr = new_desc; new_desc->next = (DESC_t *) con->hdesc; con->hdesc = new_desc; return SQL_SUCCESS; } default: if (IS_VALID_HDBC (inputHandle)) { CONN (con, inputHandle); PUSHSQLERR (con->herr, en_HY092); return SQL_ERROR; } else if (IS_VALID_HENV (inputHandle)) { GENV (genv, inputHandle); PUSHSQLERR (genv->herr, en_HY092); return SQL_ERROR; } return SQL_INVALID_HANDLE; } } RETCODE SQL_API SQLAllocHandle ( SQLSMALLINT handleType, SQLHANDLE inputHandle, SQLHANDLE * outputHandlePtr) { int retcode = SQL_SUCCESS; if (handleType == SQL_HANDLE_ENV) { /* * One time initialization */ Init_iODBC(); ODBC_LOCK (); retcode = SQLAllocEnv_Internal (outputHandlePtr, 0); /* * Start tracing */ TRACE (trace_SQLAllocHandle (TRACE_ENTER, handleType, inputHandle, outputHandlePtr)); TRACE (trace_SQLAllocHandle (TRACE_LEAVE, handleType, inputHandle, outputHandlePtr)); ODBC_UNLOCK (); return retcode; } ODBC_LOCK (); TRACE (trace_SQLAllocHandle (TRACE_ENTER, handleType, inputHandle, outputHandlePtr)); retcode = SQLAllocHandle_Internal (handleType, inputHandle, outputHandlePtr); TRACE (trace_SQLAllocHandle (TRACE_LEAVE, handleType, inputHandle, outputHandlePtr)); ODBC_UNLOCK (); return retcode; } RETCODE SQL_API SQLAllocHandleStd ( SQLSMALLINT handleType, SQLHANDLE inputHandle, SQLHANDLE * outputHandlePtr) { int retcode = SQL_SUCCESS; if (handleType == SQL_HANDLE_ENV) { /* * One time initialization */ Init_iODBC(); ODBC_LOCK (); retcode = SQLAllocEnv_Internal (outputHandlePtr, SQL_OV_ODBC3); /* * Start tracing */ TRACE (trace_SQLAllocHandle (TRACE_ENTER, handleType, inputHandle, outputHandlePtr)); TRACE (trace_SQLAllocHandle (TRACE_LEAVE, handleType, inputHandle, outputHandlePtr)); ODBC_UNLOCK (); return retcode; } ODBC_LOCK (); TRACE (trace_SQLAllocHandle (TRACE_ENTER, handleType, inputHandle, outputHandlePtr)); retcode = SQLAllocHandle_Internal (handleType, inputHandle, outputHandlePtr); TRACE (trace_SQLAllocHandle (TRACE_LEAVE, handleType, inputHandle, outputHandlePtr)); ODBC_UNLOCK (); return retcode; } /**** SQLFreeHandle ****/ extern unsigned long _iodbc_env_counter; static RETCODE _SQLFreeHandle_ENV ( SQLSMALLINT handleType, SQLHANDLE handle) { int retcode = SQL_SUCCESS; ODBC_LOCK (); TRACE (trace_SQLFreeHandle (TRACE_ENTER, handleType, handle)); retcode = SQLFreeEnv_Internal ((SQLHENV) handle); TRACE (trace_SQLFreeHandle (TRACE_LEAVE, handleType, handle)); MEM_FREE (handle); /* * Close trace after last environment handle is freed */ if (--_iodbc_env_counter == 0) trace_stop(); ODBC_UNLOCK (); return retcode; } static RETCODE _SQLFreeHandle_DBC ( SQLSMALLINT handleType, SQLHANDLE handle) { ENTER_HDBC ((SQLHDBC) handle, 1, trace_SQLFreeHandle (TRACE_ENTER, handleType, handle)); retcode = SQLFreeConnect_Internal ((SQLHDBC) handle, 3); LEAVE_HDBC ((SQLHDBC) handle, 1, trace_SQLFreeHandle (TRACE_LEAVE, handleType, handle); MEM_FREE (handle) ); } static RETCODE _SQLFreeHandle_STMT ( SQLSMALLINT handleType, SQLHANDLE handle) { ENTER_STMT ((SQLHSTMT) handle, trace_SQLFreeHandle (TRACE_ENTER, handleType, handle)); retcode = SQLFreeStmt_Internal ((SQLHSTMT) handle, SQL_DROP); LEAVE_STMT ((SQLHSTMT) handle, trace_SQLFreeHandle (TRACE_LEAVE, handleType, handle); _iodbcdm_dropstmt ((SQLHSTMT) handle); ); } static RETCODE _SQLFreeHandle_DESC ( SQLSMALLINT handleType, SQLHANDLE handle) { DESC (pdesc, handle); CONN (pdbc, pdesc->hdbc); HPROC hproc; RETCODE retcode = SQL_SUCCESS; DESC_t *curr_desc; if (IS_VALID_HSTMT (pdesc->hstmt)) { /* the desc handle is implicit */ PUSHSQLERR (pdesc->herr, en_HY017); return SQL_ERROR; } CLEAR_ERRORS (pdesc); /* remove it from the dbc's list */ curr_desc = (DESC_t *) pdbc->hdesc; while (curr_desc) { if (curr_desc == pdesc) { pdbc->hdesc = pdesc->next; break; } if (curr_desc->next == pdesc) { curr_desc->next = pdesc->next; break; } curr_desc = curr_desc->next; } if (!curr_desc) return SQL_INVALID_HANDLE; /* and call the driver's function */ hproc = SQL_NULL_HPROC; if (pdesc->dhdesc) { /* the driver has descriptors */ hproc = _iodbcdm_getproc (pdbc, en_FreeHandle); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pdesc->herr, en_IM001); retcode = SQL_ERROR; } else CALL_DRIVER (pdbc, pdesc, retcode, hproc, (handleType, pdesc->dhdesc)); } _iodbcdm_freesqlerrlist (pdesc->herr); /* invalidate the handle */ pdesc->type = 0; return retcode; } RETCODE SQL_API SQLFreeHandle ( SQLSMALLINT handleType, SQLHANDLE handle) { switch (handleType) { case SQL_HANDLE_ENV: return _SQLFreeHandle_ENV (handleType, handle); case SQL_HANDLE_DBC: return _SQLFreeHandle_DBC (handleType, handle); case SQL_HANDLE_STMT: return _SQLFreeHandle_STMT (handleType, handle); case SQL_HANDLE_DESC: { ENTER_DESC ((SQLHDESC) handle, trace_SQLFreeHandle (TRACE_ENTER, handleType, handle)); retcode = _SQLFreeHandle_DESC (handleType, handle); LEAVE_DESC ((SQLHDESC) handle, trace_SQLFreeHandle (TRACE_LEAVE, handleType, handle); MEM_FREE (handle); ); } break; default: if (IS_VALID_HDBC (handle)) { CONN (con, handle); PUSHSQLERR (con->herr, en_HY092); return SQL_ERROR; } else if (IS_VALID_HENV (handle)) { GENV (genv, handle); PUSHSQLERR (genv->herr, en_HY092); return SQL_ERROR; } } return SQL_INVALID_HANDLE; } /**** SQLSetEnvAttr ****/ static RETCODE SQLSetEnvAttr_Internal (SQLHENV environmentHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { GENV (genv, environmentHandle); StringLength = StringLength; /*UNUSED*/ if (genv != NULL && genv->hdbc) { PUSHSQLERR (genv->herr, en_HY010); return SQL_ERROR; } switch (Attribute) { case SQL_ATTR_CONNECTION_POOLING: switch ((SQLINTEGER) (SQLULEN) ValuePtr) { case SQL_CP_OFF: case SQL_CP_ONE_PER_DRIVER: case SQL_CP_ONE_PER_HENV: _iodbcdm_attr_connection_pooling = (SQLINTEGER) (SQLULEN) ValuePtr; return SQL_SUCCESS; default: if (genv) PUSHSQLERR (genv->herr, en_HY024); return SQL_ERROR; } case SQL_ATTR_CP_MATCH: switch ((SQLINTEGER) (SQLULEN) ValuePtr) { case SQL_CP_STRICT_MATCH: case SQL_CP_RELAXED_MATCH: genv->cp_match = (SQLINTEGER) (SQLULEN) ValuePtr; return SQL_SUCCESS; default: PUSHSQLERR (genv->herr, en_HY024); return SQL_ERROR; } case SQL_ATTR_ODBC_VERSION: switch ((SQLINTEGER) (SQLULEN) ValuePtr) { case SQL_OV_ODBC2: case SQL_OV_ODBC3: genv->odbc_ver = (SQLINTEGER) (SQLULEN) ValuePtr; return (SQL_SUCCESS); default: PUSHSQLERR (genv->herr, en_HY024); return SQL_ERROR; } case SQL_ATTR_OUTPUT_NTS: switch ((SQLINTEGER) (SQLULEN) ValuePtr) { case SQL_TRUE: return SQL_SUCCESS; case SQL_FALSE: PUSHSQLERR (genv->herr, en_HYC00); return SQL_ERROR; default: PUSHSQLERR (genv->herr, en_HY024); return SQL_ERROR; } default: PUSHSQLERR (genv->herr, en_HY092); return SQL_ERROR; } } RETCODE SQL_API SQLSetEnvAttr ( SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { if (Attribute == SQL_ATTR_CONNECTION_POOLING) { SQLRETURN retcode = SQL_SUCCESS; /* ENTER_HENV without EnvironmentHandle check */ ODBC_LOCK (); TRACE (trace_SQLSetEnvAttr (TRACE_ENTER, EnvironmentHandle, Attribute, ValuePtr, StringLength)); retcode = SQLSetEnvAttr_Internal ( EnvironmentHandle, Attribute, ValuePtr, StringLength); /* LEAVE_HENV without done: label */ TRACE (trace_SQLSetEnvAttr (TRACE_LEAVE, EnvironmentHandle, Attribute, ValuePtr, StringLength)); ODBC_UNLOCK (); return retcode; } else { ENTER_HENV (EnvironmentHandle, trace_SQLSetEnvAttr (TRACE_ENTER, EnvironmentHandle, Attribute, ValuePtr, StringLength)); retcode = SQLSetEnvAttr_Internal ( EnvironmentHandle, Attribute, ValuePtr, StringLength); LEAVE_HENV (EnvironmentHandle, trace_SQLSetEnvAttr (TRACE_LEAVE, EnvironmentHandle, Attribute, ValuePtr, StringLength)); } } static RETCODE SQLGetEnvAttr_Internal ( SQLHENV environmentHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { GENV (genv, environmentHandle); SQLRETURN retcode = SQL_SUCCESS; if (Attribute != SQL_ATTR_CONNECTION_POOLING && Attribute != SQL_ATTR_CP_MATCH && Attribute != SQL_ATTR_ODBC_VERSION && Attribute != SQL_ATTR_OUTPUT_NTS && Attribute != SQL_ATTR_WCHAR_SIZE) { PUSHSQLERR (genv->herr, en_HY092); return SQL_ERROR; } /* ODBC DM env attributes */ if (Attribute == SQL_ATTR_ODBC_VERSION) { if (ValuePtr) *((SQLINTEGER *) ValuePtr) = genv->odbc_ver; return SQL_SUCCESS; } if (Attribute == SQL_ATTR_CONNECTION_POOLING) { if (ValuePtr) *((SQLUINTEGER *) ValuePtr) = _iodbcdm_attr_connection_pooling; return SQL_SUCCESS; } if (Attribute == SQL_ATTR_CP_MATCH) { if (ValuePtr) *((SQLUINTEGER *) ValuePtr) = genv->cp_match; return SQL_SUCCESS; } if (Attribute == SQL_ATTR_OUTPUT_NTS) { if (ValuePtr) *((SQLINTEGER *) ValuePtr) = SQL_TRUE; return SQL_SUCCESS; } if (Attribute == SQL_ATTR_WCHAR_SIZE) { if (ValuePtr) *((SQLINTEGER *) ValuePtr) = sizeof(wchar_t); return SQL_SUCCESS; } /* fall back to the first driver */ if (IS_VALID_HDBC (genv->hdbc)) { CONN (con, genv->hdbc); HPROC hproc = _iodbcdm_getproc (con, en_GetEnvAttr); if (hproc != SQL_NULL_HPROC) { ENVR (env, con->henv); CALL_DRIVER (con, genv, retcode, hproc, (env->dhenv, Attribute, ValuePtr, BufferLength, StringLengthPtr)); return retcode; } else { /* possibly an ODBC2 driver */ PUSHSQLERR (genv->herr, en_IM001); return SQL_ERROR; } } else { switch ((SQLINTEGER) Attribute) { case SQL_ATTR_CONNECTION_POOLING: if (ValuePtr) *((SQLINTEGER *) ValuePtr) = SQL_CP_OFF; break; case SQL_ATTR_CP_MATCH: if (ValuePtr) *((SQLINTEGER *) ValuePtr) = SQL_CP_STRICT_MATCH; break; case SQL_ATTR_ODBC_VERSION: if (ValuePtr) *((SQLINTEGER *) ValuePtr) = genv->odbc_ver; break; } } return SQL_SUCCESS; } RETCODE SQL_API SQLGetEnvAttr ( SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { if (Attribute == SQL_ATTR_CONNECTION_POOLING) { SQLRETURN retcode = SQL_SUCCESS; /* ENTER_HENV without EnvironmentHandle check */ ODBC_LOCK (); TRACE (trace_SQLGetEnvAttr (TRACE_ENTER, EnvironmentHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr)); retcode = SQLGetEnvAttr_Internal ( EnvironmentHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr); /* LEAVE_HENV without done: label */ TRACE (trace_SQLGetEnvAttr (TRACE_LEAVE, EnvironmentHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr)); ODBC_UNLOCK (); return retcode; } else { ENTER_HENV (EnvironmentHandle, trace_SQLGetEnvAttr (TRACE_ENTER, EnvironmentHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr)); retcode = SQLGetEnvAttr_Internal ( EnvironmentHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr); LEAVE_HENV (EnvironmentHandle, trace_SQLGetEnvAttr (TRACE_LEAVE, EnvironmentHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr)); } } RETCODE SQL_API SQLGetStmtAttr_Internal ( SQLHSTMT statementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr, SQLCHAR waMode) { STMT (stmt, statementHandle); CONN (pdbc, stmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; waMode = waMode; /*UNUSED*/ switch (Attribute) { case SQL_ATTR_IMP_PARAM_DESC: if (ValuePtr) { if (IS_VALID_HDESC (stmt->desc[IMP_PARAM_DESC])) *((SQLHANDLE *) ValuePtr) = (SQLHANDLE *) stmt->desc[IMP_PARAM_DESC]; else if (IS_VALID_HDESC (stmt->imp_desc[IMP_PARAM_DESC])) *((SQLHANDLE *) ValuePtr) = (SQLHANDLE *) stmt->imp_desc[IMP_PARAM_DESC]; else { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } } if (StringLengthPtr) *StringLengthPtr = SQL_IS_POINTER; return SQL_SUCCESS; case SQL_ATTR_APP_PARAM_DESC: if (ValuePtr) { if (IS_VALID_HDESC (stmt->desc[APP_PARAM_DESC])) *((SQLHANDLE *) ValuePtr) = (SQLHANDLE *) stmt->desc[APP_PARAM_DESC]; else if (IS_VALID_HDESC (stmt->imp_desc[APP_PARAM_DESC])) *((SQLHANDLE *) ValuePtr) = (SQLHANDLE *) stmt->imp_desc[APP_PARAM_DESC]; else { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } } if (StringLengthPtr) *StringLengthPtr = SQL_IS_POINTER; return SQL_SUCCESS; case SQL_ATTR_IMP_ROW_DESC: if (ValuePtr) { if (IS_VALID_HDESC (stmt->desc[IMP_ROW_DESC])) *((SQLHANDLE *) ValuePtr) = (SQLHANDLE *) stmt->desc[IMP_ROW_DESC]; else if (IS_VALID_HDESC (stmt->imp_desc[IMP_ROW_DESC])) *((SQLHANDLE *) ValuePtr) = (SQLHANDLE *) stmt->imp_desc[IMP_ROW_DESC]; else { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } } if (StringLengthPtr) *StringLengthPtr = SQL_IS_POINTER; return SQL_SUCCESS; case SQL_ATTR_APP_ROW_DESC: if (ValuePtr) { if (IS_VALID_HDESC (stmt->desc[APP_ROW_DESC])) *((SQLHANDLE *) ValuePtr) = (SQLHANDLE *) stmt->desc[APP_ROW_DESC]; else if (IS_VALID_HDESC (stmt->imp_desc[APP_ROW_DESC])) *((SQLHANDLE *) ValuePtr) = (SQLHANDLE *) stmt->imp_desc[APP_ROW_DESC]; else { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } } if (StringLengthPtr) *StringLengthPtr = SQL_IS_POINTER; return SQL_SUCCESS; case SQL_ATTR_ROW_ARRAY_SIZE: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_GetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, BufferLength, StringLengthPtr)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return retcode; } else { /* an ODBC2 driver */ if (ValuePtr) *((SQLUINTEGER *) ValuePtr) = stmt->row_array_size; return SQL_SUCCESS; } case SQL_ATTR_ENABLE_AUTO_IPD: case SQL_ATTR_CURSOR_SENSITIVITY: case SQL_ATTR_CURSOR_SCROLLABLE: case SQL_ATTR_PARAM_BIND_TYPE: case SQL_ATTR_PARAM_OPERATION_PTR: case SQL_ATTR_PARAM_STATUS_PTR: case SQL_ATTR_PARAM_BIND_OFFSET_PTR: case SQL_ATTR_ROW_BIND_OFFSET_PTR: case SQL_ATTR_ROW_OPERATION_PTR: CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_GetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, BufferLength, StringLengthPtr)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return retcode; case SQL_ATTR_FETCH_BOOKMARK_PTR: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_GetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, BufferLength, StringLengthPtr)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return retcode; } else { /* an ODBC2 driver */ if (ValuePtr) *((SQLPOINTER *) ValuePtr) = stmt->fetch_bookmark_ptr; return SQL_SUCCESS; } case SQL_ATTR_ROWS_FETCHED_PTR: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_GetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, BufferLength, StringLengthPtr)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return retcode; } else { /* an ODBC2 driver */ if (ValuePtr) *((SQLPOINTER *) ValuePtr) = stmt->rows_fetched_ptr; return SQL_SUCCESS; } case SQL_ATTR_METADATA_ID: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_GetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, BufferLength, StringLengthPtr)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return retcode; } else { /* an ODBC2 driver */ if (ValuePtr) *((SQLUINTEGER *) ValuePtr) = SQL_FALSE; return SQL_SUCCESS; } case SQL_ATTR_PARAMS_PROCESSED_PTR: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_GetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, BufferLength, StringLengthPtr)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return retcode; } else { /* an ODBC2 driver */ if (ValuePtr) *((SQLUINTEGER **) ValuePtr) = (SQLUINTEGER *) stmt->params_processed_ptr; return SQL_SUCCESS; } case SQL_ATTR_PARAMSET_SIZE: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_GetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, BufferLength, StringLengthPtr)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } if (ValuePtr) stmt->paramset_size = *((SQLUINTEGER *) ValuePtr); return retcode; } else { /* an ODBC2 driver */ if (ValuePtr) *((SQLUINTEGER *) ValuePtr) = stmt->paramset_size; return SQL_SUCCESS; } case SQL_ATTR_ROW_STATUS_PTR: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_GetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, BufferLength, StringLengthPtr)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return retcode; } else { /* an ODBC2 driver */ if (ValuePtr) *((SQLUINTEGER **) ValuePtr) = stmt->row_status_allocated == SQL_FALSE ? (SQLUINTEGER *) stmt->row_status_ptr : NULL; return SQL_SUCCESS; } case SQL_ATTR_ASYNC_ENABLE: case SQL_ATTR_MAX_ROWS: case SQL_ATTR_QUERY_TIMEOUT: case SQL_ATTR_CONCURRENCY: case SQL_ROWSET_SIZE: case SQL_ATTR_CURSOR_TYPE: case SQL_ATTR_KEYSET_SIZE: case SQL_ATTR_NOSCAN: case SQL_ATTR_RETRIEVE_DATA: case SQL_ATTR_ROW_BIND_TYPE: case SQL_ATTR_ROW_NUMBER: case SQL_ATTR_SIMULATE_CURSOR: case SQL_ATTR_USE_BOOKMARKS: case SQL_ATTR_MAX_LENGTH: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_GetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, BufferLength, StringLengthPtr)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return retcode; } else { /* an ODBC2 driver */ if ((hproc = _iodbcdm_getproc (stmt->hdbc, en_GetStmtOption)) != SQL_NULL_HPROC) { CALL_DRIVER (stmt->hdbc, stmt, retcode, hproc, (stmt->dhstmt, Attribute, ValuePtr)); return retcode; } else if ((hproc = _iodbcdm_getproc (stmt->hdbc, en_GetStmtOptionA)) != SQL_NULL_HPROC) { CALL_DRIVER (stmt->hdbc, stmt, retcode, hproc, (stmt->dhstmt, Attribute, ValuePtr)); return retcode; } else { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } } default: CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_GetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, BufferLength, StringLengthPtr)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return retcode; } return SQL_SUCCESS; } RETCODE SQL_API SQLGetStmtAttr ( SQLHSTMT statementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { ENTER_STMT (statementHandle, trace_SQLGetStmtAttr (TRACE_ENTER, statementHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr)); retcode = SQLGetStmtAttr_Internal(statementHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr, 'A'); LEAVE_STMT (statementHandle, trace_SQLGetStmtAttr (TRACE_LEAVE, statementHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr)); } RETCODE SQL_API SQLGetStmtAttrA ( SQLHSTMT statementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { ENTER_STMT (statementHandle, trace_SQLGetStmtAttr (TRACE_ENTER, statementHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr)); retcode = SQLGetStmtAttr_Internal(statementHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr, 'A'); LEAVE_STMT (statementHandle, trace_SQLGetStmtAttr (TRACE_LEAVE, statementHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr)); } RETCODE SQL_API SQLGetStmtAttrW ( SQLHSTMT statementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { ENTER_STMT (statementHandle, trace_SQLGetStmtAttrW (TRACE_ENTER, statementHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr)); retcode = SQLGetStmtAttr_Internal ( statementHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr, 'W'); LEAVE_STMT (statementHandle, trace_SQLGetStmtAttrW (TRACE_LEAVE, statementHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr)); } /**** SQLSetStmtAttr ****/ RETCODE SQL_API SQLSetStmtAttr_Internal ( SQLHSTMT statementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength, SQLCHAR waMode) { STMT (stmt, statementHandle); CONN (pdbc, stmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; waMode = waMode; /*UNUSED*/ if (stmt->state == en_stmt_needdata) { PUSHSQLERR (stmt->herr, en_HY010); return SQL_ERROR; } switch (Attribute) { case SQL_ATTR_APP_PARAM_DESC: if (ValuePtr == SQL_NULL_HDESC || ValuePtr == stmt->imp_desc[APP_PARAM_DESC]) { HDESC hdesc = ValuePtr == SQL_NULL_HDESC ? ValuePtr : stmt->imp_desc[APP_PARAM_DESC]->dhdesc; CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_SetStmtAttr, (stmt->dhstmt, Attribute, hdesc, StringLength)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } if (!SQL_SUCCEEDED (retcode)) return SQL_ERROR; stmt->desc[APP_PARAM_DESC] = SQL_NULL_HDESC; return SQL_SUCCESS; } if (!IS_VALID_HDESC (ValuePtr)) { PUSHSQLERR (stmt->herr, en_HY024); return SQL_ERROR; } else { DESC (pdesc, ValuePtr); if (pdesc->hdbc != stmt->hdbc || IS_VALID_HSTMT (pdesc->hstmt)) { PUSHSQLERR (stmt->herr, en_HY017); return SQL_ERROR; } CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_SetStmtAttr, (stmt->dhstmt, Attribute, pdesc->dhdesc, StringLength)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } if (!SQL_SUCCEEDED (retcode)) return SQL_ERROR; stmt->desc[APP_PARAM_DESC] = (DESC_t *) ValuePtr; return SQL_SUCCESS; } case SQL_ATTR_APP_ROW_DESC: if (ValuePtr == SQL_NULL_HDESC || ValuePtr == stmt->imp_desc[APP_ROW_DESC]) { HDESC hdesc = ValuePtr == SQL_NULL_HDESC ? ValuePtr : stmt->imp_desc[APP_ROW_DESC]->dhdesc; CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_SetStmtAttr, (stmt->dhstmt, Attribute, hdesc, StringLength)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } if (!SQL_SUCCEEDED (retcode)) return SQL_ERROR; stmt->desc[APP_ROW_DESC] = SQL_NULL_HDESC; return SQL_SUCCESS; } if (!IS_VALID_HDESC (ValuePtr)) { PUSHSQLERR (stmt->herr, en_HY024); return SQL_ERROR; } else { DESC (pdesc, ValuePtr); if (pdesc->hdbc != stmt->hdbc || IS_VALID_HSTMT (pdesc->hstmt)) { PUSHSQLERR (stmt->herr, en_HY017); return SQL_ERROR; } CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_SetStmtAttr, (stmt->dhstmt, Attribute, pdesc->dhdesc, StringLength)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } if (!SQL_SUCCEEDED (retcode)) return SQL_ERROR; stmt->desc[APP_ROW_DESC] = (DESC_t *) ValuePtr; return SQL_SUCCESS; } case SQL_ATTR_CURSOR_SCROLLABLE: case SQL_ATTR_CURSOR_SENSITIVITY: case SQL_ATTR_ENABLE_AUTO_IPD: case SQL_ATTR_METADATA_ID: case SQL_ATTR_PARAM_BIND_OFFSET_PTR: case SQL_ATTR_PARAM_BIND_TYPE: case SQL_ATTR_PARAM_OPERATION_PTR: case SQL_ATTR_PARAM_STATUS_PTR: case SQL_ATTR_ROW_BIND_OFFSET_PTR: case SQL_ATTR_ROW_OPERATION_PTR: CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_SetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, StringLength)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } if (Attribute == SQL_ATTR_PARAM_BIND_TYPE) stmt->bind_type = (SQLUINTEGER) (SQLULEN) ValuePtr; return retcode; case SQL_ATTR_ROWS_FETCHED_PTR: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_SetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, StringLength)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return retcode; } else { /* an ODBC2 driver */ stmt->rows_fetched_ptr = ValuePtr; return SQL_SUCCESS; } case SQL_ATTR_FETCH_BOOKMARK_PTR: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_SetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, StringLength)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return retcode; } else { /* an ODBC2 driver */ stmt->fetch_bookmark_ptr = ValuePtr; return SQL_SUCCESS; } case SQL_ATTR_PARAMS_PROCESSED_PTR: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_SetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, StringLength)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return retcode; } else { /* an ODBC2 driver */ stmt->params_processed_ptr = ValuePtr; return SQL_SUCCESS; } case SQL_ATTR_PARAMSET_SIZE: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_SetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, StringLength)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } stmt->paramset_size = (SQLUINTEGER) (SQLULEN) ValuePtr; return retcode; } else { /* an ODBC2 driver */ stmt->paramset_size = (SQLUINTEGER) (SQLULEN) ValuePtr; return SQL_SUCCESS; } case SQL_ATTR_ROW_ARRAY_SIZE: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_SetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, StringLength)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } if (SQL_SUCCEEDED (retcode)) { stmt->rowset_size = Attribute; if (retcode == SQL_SUCCESS_WITH_INFO) { SQLUINTEGER data; if (SQLGetStmtAttr_Internal (statementHandle, SQL_ROWSET_SIZE, &data, 0, NULL, 'A') == SQL_SUCCESS) stmt->rowset_size = data; } } return retcode; } else { /* an ODBC2 driver */ if ((SQLUINTEGER) (SQLULEN) ValuePtr < 1) { PUSHSQLERR (stmt->herr, en_HY024); return SQL_ERROR; } stmt->row_array_size = (SQLUINTEGER) (SQLULEN) ValuePtr; /* reallocate the row_status_ptr */ if (stmt->row_status_ptr && stmt->row_status_allocated == SQL_TRUE) { MEM_FREE (stmt->row_status_ptr); stmt->row_status_allocated = SQL_FALSE; } stmt->row_status_ptr = MEM_ALLOC (sizeof (SQLUINTEGER) * stmt->row_array_size); if (!stmt->row_status_ptr) { PUSHSQLERR (stmt->herr, en_HY001); return SQL_ERROR; } stmt->row_status_allocated = SQL_TRUE; /* * Tell the driver the rowset size has changed */ if ((hproc = _iodbcdm_getproc (stmt->hdbc, en_SetStmtOption)) != SQL_NULL_HPROC) { CALL_DRIVER (stmt->hdbc, stmt, retcode, hproc, (stmt->dhstmt, SQL_ROWSET_SIZE, stmt->row_array_size)); if (SQL_SUCCEEDED (retcode)) { stmt->rowset_size = Attribute;; if (retcode == SQL_SUCCESS_WITH_INFO) { SQLUINTEGER data; if (SQLGetStmtOption_Internal (statementHandle, SQL_ROWSET_SIZE, &data) == SQL_SUCCESS) stmt->rowset_size = data; } } return retcode; } else if ((hproc = _iodbcdm_getproc (stmt->hdbc, en_SetStmtOptionA)) != SQL_NULL_HPROC) { CALL_DRIVER (stmt->hdbc, stmt, retcode, hproc, (stmt->dhstmt, SQL_ROWSET_SIZE, stmt->row_array_size)); if (SQL_SUCCEEDED (retcode)) { stmt->rowset_size = Attribute;; if (retcode == SQL_SUCCESS_WITH_INFO) { SQLUINTEGER data; if (SQLGetStmtOption_Internal (statementHandle, SQL_ROWSET_SIZE, &data) == SQL_SUCCESS) stmt->rowset_size = data; } } return retcode; } else { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return SQL_SUCCESS; } case SQL_ATTR_ROW_STATUS_PTR: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_SetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, StringLength)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } return retcode; } else { /* an ODBC2 driver */ /* free the implicit row status ptr (if any) */ if (stmt->row_status_ptr && stmt->row_status_allocated == SQL_TRUE) { MEM_FREE (stmt->row_status_ptr); stmt->row_status_allocated = SQL_FALSE; } stmt->row_status_ptr = ValuePtr; return SQL_SUCCESS; } case SQL_ATTR_ASYNC_ENABLE: case SQL_ATTR_CONCURRENCY: case SQL_ATTR_CURSOR_TYPE: case SQL_ATTR_KEYSET_SIZE: case SQL_ATTR_MAX_ROWS: case SQL_ATTR_NOSCAN: case SQL_ATTR_QUERY_TIMEOUT: case SQL_ATTR_RETRIEVE_DATA: case SQL_ATTR_ROW_BIND_TYPE: case SQL_ATTR_ROW_NUMBER: case SQL_ATTR_SIMULATE_CURSOR: case SQL_ATTR_USE_BOOKMARKS: case SQL_ROWSET_SIZE: case SQL_ATTR_MAX_LENGTH: if (((ENV_t *) ((DBC_t *) stmt->hdbc)->henv)->dodbc_ver == SQL_OV_ODBC3) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_SetStmtAttr, (stmt->dhstmt, Attribute, ValuePtr, StringLength)); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } if (Attribute == SQL_ATTR_ROW_BIND_TYPE && SQL_SUCCEEDED (retcode)) stmt->bind_type = Attribute; return retcode; } else { /* an ODBC2 driver */ if ((hproc = _iodbcdm_getproc (stmt->hdbc, en_SetStmtOption)) != SQL_NULL_HPROC) { CALL_DRIVER (stmt->hdbc, stmt, retcode, hproc, (stmt->dhstmt, Attribute, ValuePtr)); if (Attribute == SQL_ATTR_ROW_BIND_TYPE && SQL_SUCCEEDED (retcode)) stmt->bind_type = Attribute; return retcode; } else if ((hproc = _iodbcdm_getproc (stmt->hdbc, en_SetStmtOptionA)) != SQL_NULL_HPROC) { CALL_DRIVER (stmt->hdbc, stmt, retcode, hproc, (stmt->dhstmt, Attribute, ValuePtr)); if (Attribute == SQL_ATTR_ROW_BIND_TYPE && SQL_SUCCEEDED (retcode)) stmt->bind_type = Attribute; return retcode; } else { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } } default: if ((hproc = _iodbcdm_getproc (stmt->hdbc, en_SetStmtOption)) != SQL_NULL_HPROC) { CALL_DRIVER (stmt->hdbc, stmt, retcode, hproc, (stmt->dhstmt, Attribute, ValuePtr)); return retcode; } else if ((hproc = _iodbcdm_getproc (stmt->hdbc, en_SetStmtOptionA)) != SQL_NULL_HPROC) { CALL_DRIVER (stmt->hdbc, stmt, retcode, hproc, (stmt->dhstmt, Attribute, ValuePtr)); return retcode; } else { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } } return SQL_SUCCESS; } RETCODE SQL_API SQLSetStmtAttr ( SQLHSTMT statementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { ENTER_STMT (statementHandle, trace_SQLSetStmtAttr (TRACE_ENTER, statementHandle, Attribute, ValuePtr, StringLength)); retcode = SQLSetStmtAttr_Internal( statementHandle, Attribute, ValuePtr, StringLength, 'A'); LEAVE_STMT (statementHandle, trace_SQLSetStmtAttr (TRACE_LEAVE, statementHandle, Attribute, ValuePtr, StringLength)); } RETCODE SQL_API SQLSetStmtAttrA ( SQLHSTMT statementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { ENTER_STMT (statementHandle, trace_SQLSetStmtAttr (TRACE_ENTER, statementHandle, Attribute, ValuePtr, StringLength)); retcode = SQLSetStmtAttr_Internal( statementHandle, Attribute, ValuePtr, StringLength, 'A'); LEAVE_STMT (statementHandle, trace_SQLSetStmtAttr (TRACE_LEAVE, statementHandle, Attribute, ValuePtr, StringLength)); } RETCODE SQL_API SQLSetStmtAttrW ( SQLHSTMT statementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { ENTER_STMT (statementHandle, trace_SQLSetStmtAttrW (TRACE_ENTER, statementHandle, Attribute, ValuePtr, StringLength)); retcode = SQLSetStmtAttr_Internal( statementHandle, Attribute, ValuePtr, StringLength, 'W'); LEAVE_STMT (statementHandle, trace_SQLSetStmtAttrW (TRACE_LEAVE, statementHandle, Attribute, ValuePtr, StringLength)); } static RETCODE SQLSetConnectAttr_Internal ( SQLHDBC connectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength, SQLCHAR waMode) { CONN (con, connectionHandle); ENVR (penv, con->henv); HPROC hproc = SQL_NULL_HPROC; HPROC hproc2 = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; void * _ValuePtr = NULL; SWORD unicode_driver = (penv ? penv->unicode_driver : 0); SQLUINTEGER odbc_ver; SQLUINTEGER dodbc_ver; odbc_ver = ((GENV_t *) con->genv)->odbc_ver; dodbc_ver = (penv != SQL_NULL_HENV) ? penv->dodbc_ver : odbc_ver; if (con->state == en_dbc_needdata) { PUSHSQLERR (con->herr, en_HY010); return SQL_ERROR; } if (penv && ((unicode_driver && waMode != 'W') || (!unicode_driver && waMode == 'W'))) { switch(Attribute) { case SQL_ATTR_CURRENT_CATALOG: case SQL_ATTR_TRACEFILE: case SQL_ATTR_TRANSLATE_LIB: if (waMode != 'W') { /* ansi=>unicode*/ _ValuePtr = dm_SQL_A2W((SQLCHAR *) ValuePtr, StringLength); } else { /* unicode=>ansi*/ StringLength = (StringLength != SQL_NTS) ? (SQLINTEGER) (StringLength / sizeof(wchar_t)) : SQL_NTS; _ValuePtr = dm_SQL_W2A((SQLWCHAR *) ValuePtr, StringLength); } ValuePtr = _ValuePtr; StringLength = SQL_NTS; break; } } GET_UHPROC(con, hproc2, en_SetConnectOption, unicode_driver); if (dodbc_ver == SQL_OV_ODBC3 && ( odbc_ver == SQL_OV_ODBC3 || (odbc_ver == SQL_OV_ODBC2 && hproc2 == SQL_NULL_HPROC))) { CALL_UDRIVER(con, con, retcode, hproc, unicode_driver, en_SetConnectAttr, (con->dhdbc, Attribute, ValuePtr, StringLength)); if (hproc != SQL_NULL_HPROC) return retcode; } switch (Attribute) { case SQL_ATTR_AUTO_IPD: PUSHSQLERR (con->herr, en_HY092); return SQL_ERROR; default: retcode = _iodbcdm_SetConnectOption (con, Attribute, (SQLULEN) ValuePtr, waMode); return retcode; } } RETCODE SQL_API SQLSetConnectAttr ( SQLHDBC connectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { ENTER_HDBC (connectionHandle, 0, trace_SQLSetConnectAttr (TRACE_ENTER, connectionHandle, Attribute, ValuePtr, StringLength)); retcode = SQLSetConnectAttr_Internal ( connectionHandle, Attribute, ValuePtr, StringLength, 'A'); LEAVE_HDBC (connectionHandle, 0, trace_SQLSetConnectAttr (TRACE_LEAVE, connectionHandle, Attribute, ValuePtr, StringLength)); } RETCODE SQL_API SQLSetConnectAttrA ( SQLHDBC connectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { ENTER_HDBC (connectionHandle, 0, trace_SQLSetConnectAttr (TRACE_ENTER, connectionHandle, Attribute, ValuePtr, StringLength)); retcode = SQLSetConnectAttr_Internal ( connectionHandle, Attribute, ValuePtr, StringLength, 'A'); LEAVE_HDBC (connectionHandle, 0, trace_SQLSetConnectAttr (TRACE_LEAVE, connectionHandle, Attribute, ValuePtr, StringLength)); } RETCODE SQL_API SQLSetConnectAttrW ( SQLHDBC connectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { ENTER_HDBC (connectionHandle, 0, trace_SQLSetConnectAttrW (TRACE_ENTER, connectionHandle, Attribute, ValuePtr, StringLength)); retcode = SQLSetConnectAttr_Internal ( connectionHandle, Attribute, ValuePtr, StringLength, 'W'); LEAVE_HDBC (connectionHandle, 0, trace_SQLSetConnectAttrW (TRACE_LEAVE, connectionHandle, Attribute, ValuePtr, StringLength)); } static RETCODE SQLGetConnectAttr_Internal ( SQLHDBC connectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength, SQLINTEGER * StringLengthPtr, SQLCHAR waMode) { CONN (con, connectionHandle); ENVR (penv, con->henv); HPROC hproc = SQL_NULL_HPROC; HPROC hproc2 = SQL_NULL_HPROC; RETCODE retcode = SQL_SUCCESS; void * _Value = NULL; void * valueOut = ValuePtr; SWORD unicode_driver = (penv ? penv->unicode_driver : 0); SQLUINTEGER odbc_ver; SQLUINTEGER dodbc_ver; odbc_ver = ((GENV_t *) con->genv)->odbc_ver; dodbc_ver = (penv != SQL_NULL_HENV) ? penv->dodbc_ver : odbc_ver; if (con->state == en_dbc_needdata) { PUSHSQLERR (con->herr, en_HY010); return SQL_ERROR; } if (penv && ((unicode_driver && waMode != 'W') || (!unicode_driver && waMode == 'W'))) { switch(Attribute) { case SQL_ATTR_CURRENT_CATALOG: case SQL_ATTR_TRACEFILE: case SQL_ATTR_TRANSLATE_LIB: if (waMode != 'W') { /* ansi=>unicode*/ StringLength *= sizeof(wchar_t); if ((_Value = malloc(StringLength + 1)) == NULL) { PUSHSQLERR (con->herr, en_HY001); return SQL_ERROR; } } else { /* unicode=>ansi*/ StringLength /= sizeof(wchar_t); if ((_Value = malloc(StringLength + 1)) == NULL) { PUSHSQLERR (con->herr, en_HY001); return SQL_ERROR; } } valueOut = _Value; break; } } GET_UHPROC(con, hproc2, en_GetConnectOption, unicode_driver); if (dodbc_ver == SQL_OV_ODBC3 && ( odbc_ver == SQL_OV_ODBC3 || (odbc_ver == SQL_OV_ODBC2 && hproc2 == SQL_NULL_HPROC))) { CALL_UDRIVER(con, con, retcode, hproc, unicode_driver, en_GetConnectAttr, (con->dhdbc, Attribute, valueOut, StringLength, StringLengthPtr)); } if (hproc != SQL_NULL_HPROC) { if (ValuePtr && SQL_SUCCEEDED (retcode) && ((unicode_driver && waMode != 'W') || (!unicode_driver && waMode == 'W'))) { switch(Attribute) { case SQL_ATTR_CURRENT_CATALOG: case SQL_ATTR_TRACEFILE: case SQL_ATTR_TRANSLATE_LIB: if (waMode != 'W') { /* ansi<=unicode*/ SQLSMALLINT retlen; dm_StrCopyOut2_W2A ((SQLWCHAR *) valueOut, (SQLCHAR *) ValuePtr, StringLength / sizeof(wchar_t), &retlen); if (StringLengthPtr) *StringLengthPtr = retlen; } else { /* unicode<=ansi*/ SQLSMALLINT retlen; dm_StrCopyOut2_A2W ((SQLCHAR *) valueOut, (SQLWCHAR *) ValuePtr, StringLength, &retlen); if (StringLengthPtr) *StringLengthPtr = retlen * sizeof(wchar_t); } } } MEM_FREE(_Value); return retcode; } MEM_FREE(_Value); retcode = _iodbcdm_GetConnectOption (con, Attribute, ValuePtr, waMode); if (!SQL_SUCCEEDED (retcode)) return retcode; if (StringLengthPtr) { *StringLengthPtr = 0; if (ValuePtr) switch (Attribute) { case SQL_ATTR_CURRENT_CATALOG: case SQL_ATTR_TRACEFILE: case SQL_ATTR_TRANSLATE_LIB: if (waMode != 'W') *StringLengthPtr = STRLEN (ValuePtr); else *StringLengthPtr = WCSLEN (ValuePtr) * sizeof(wchar_t); } } return retcode; } RETCODE SQL_API SQLGetConnectAttr ( SQLHDBC connectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength, SQLINTEGER * StringLengthPtr) { ENTER_HDBC (connectionHandle, 0, trace_SQLGetConnectAttr (TRACE_ENTER, connectionHandle, Attribute, ValuePtr, StringLength, StringLengthPtr)); retcode = SQLGetConnectAttr_Internal( connectionHandle, Attribute, ValuePtr, StringLength, StringLengthPtr, 'A'); LEAVE_HDBC (connectionHandle, 0, trace_SQLGetConnectAttr (TRACE_LEAVE, connectionHandle, Attribute, ValuePtr, StringLength, StringLengthPtr)); } RETCODE SQL_API SQLGetConnectAttrA ( SQLHDBC connectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength, SQLINTEGER * StringLengthPtr) { ENTER_HDBC (connectionHandle, 0, trace_SQLGetConnectAttr (TRACE_ENTER, connectionHandle, Attribute, ValuePtr, StringLength, StringLengthPtr)); retcode = SQLGetConnectAttr_Internal( connectionHandle, Attribute, ValuePtr, StringLength, StringLengthPtr, 'A'); LEAVE_HDBC (connectionHandle, 0, trace_SQLGetConnectAttr (TRACE_LEAVE, connectionHandle, Attribute, ValuePtr, StringLength, StringLengthPtr)); } RETCODE SQL_API SQLGetConnectAttrW (SQLHDBC connectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength, SQLINTEGER * StringLengthPtr) { ENTER_HDBC (connectionHandle, 0, trace_SQLGetConnectAttrW (TRACE_ENTER, connectionHandle, Attribute, ValuePtr, StringLength, StringLengthPtr)); retcode = SQLGetConnectAttr_Internal( connectionHandle, Attribute, ValuePtr, StringLength, StringLengthPtr, 'W'); LEAVE_HDBC (connectionHandle, 0, trace_SQLGetConnectAttrW (TRACE_LEAVE, connectionHandle, Attribute, ValuePtr, StringLength, StringLengthPtr)); } RETCODE SQL_API SQLGetDescField_Internal ( SQLHDESC descriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr, SQLCHAR waMode) { DESC (desc, descriptorHandle); CONN (pdbc, desc->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; void * valueOut = ValuePtr; void * _ValuePtr = NULL; if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { switch(FieldIdentifier) { case SQL_DESC_BASE_COLUMN_NAME: case SQL_DESC_BASE_TABLE_NAME: case SQL_DESC_CATALOG_NAME: case SQL_DESC_LABEL: case SQL_DESC_LITERAL_PREFIX: case SQL_DESC_LITERAL_SUFFIX: case SQL_DESC_LOCAL_TYPE_NAME: case SQL_DESC_NAME: case SQL_DESC_SCHEMA_NAME: case SQL_DESC_TABLE_NAME: case SQL_DESC_TYPE_NAME: if (waMode != 'W') { /* ansi=>unicode*/ BufferLength *= sizeof(wchar_t); if ((_ValuePtr = malloc(BufferLength + 1)) == NULL) { PUSHSQLERR (desc->herr, en_HY001); return SQL_ERROR; } } else { /* unicode=>ansi*/ BufferLength /= sizeof(wchar_t); if ((_ValuePtr = malloc(BufferLength + 1)) == NULL) { PUSHSQLERR (desc->herr, en_HY001); return SQL_ERROR; } } valueOut = _ValuePtr; break; } } CALL_UDRIVER(desc->hdbc, desc, retcode, hproc, penv->unicode_driver, en_GetDescField, (desc->dhdesc, RecNumber, FieldIdentifier, valueOut, BufferLength, StringLengthPtr)); if (hproc == SQL_NULL_HPROC) { MEM_FREE(_ValuePtr); PUSHSQLERR (desc->herr, en_IM001); return SQL_ERROR; } if (ValuePtr && SQL_SUCCEEDED (retcode) && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W'))) { switch(FieldIdentifier) { case SQL_DESC_BASE_COLUMN_NAME: case SQL_DESC_BASE_TABLE_NAME: case SQL_DESC_CATALOG_NAME: case SQL_DESC_LABEL: case SQL_DESC_LITERAL_PREFIX: case SQL_DESC_LITERAL_SUFFIX: case SQL_DESC_LOCAL_TYPE_NAME: case SQL_DESC_NAME: case SQL_DESC_SCHEMA_NAME: case SQL_DESC_TABLE_NAME: case SQL_DESC_TYPE_NAME: if (waMode != 'W') { /* ansi<=unicode*/ SQLSMALLINT retlen; dm_StrCopyOut2_W2A ((SQLWCHAR *) valueOut, (SQLCHAR *) ValuePtr, BufferLength / sizeof(wchar_t), &retlen); if (StringLengthPtr) *StringLengthPtr = retlen; } else { /* unicode<=ansi*/ SQLSMALLINT retlen; dm_StrCopyOut2_A2W ((SQLCHAR *) valueOut, (SQLWCHAR *) ValuePtr, BufferLength, &retlen); if (StringLengthPtr) *StringLengthPtr = retlen * sizeof(wchar_t); } break; } } MEM_FREE(_ValuePtr); return retcode; } RETCODE SQL_API SQLGetDescField ( SQLHDESC descriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { ENTER_DESC (descriptorHandle, trace_SQLGetDescField (TRACE_ENTER, descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength, StringLengthPtr)); retcode = SQLGetDescField_Internal( descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength, StringLengthPtr, 'A'); LEAVE_DESC (descriptorHandle, trace_SQLGetDescField (TRACE_LEAVE, descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength, StringLengthPtr)); } RETCODE SQL_API SQLGetDescFieldA ( SQLHDESC descriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { ENTER_DESC (descriptorHandle, trace_SQLGetDescField (TRACE_ENTER, descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength, StringLengthPtr)); retcode = SQLGetDescField_Internal ( descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength, StringLengthPtr, 'A'); LEAVE_DESC (descriptorHandle, trace_SQLGetDescField (TRACE_LEAVE, descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength, StringLengthPtr)); } RETCODE SQL_API SQLGetDescFieldW ( SQLHDESC descriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr) { ENTER_DESC (descriptorHandle, trace_SQLGetDescFieldW (TRACE_ENTER, descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength, StringLengthPtr)); retcode = SQLGetDescField_Internal ( descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength, StringLengthPtr, 'W'); LEAVE_DESC (descriptorHandle, trace_SQLGetDescFieldW (TRACE_LEAVE, descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength, StringLengthPtr)); } RETCODE SQL_API SQLSetDescField_Internal ( SQLHDESC descriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLCHAR waMode) { DESC (desc, descriptorHandle); CONN (pdbc, desc->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; void * _ValuePtr = NULL; if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { switch(FieldIdentifier) { case SQL_DESC_BASE_COLUMN_NAME: case SQL_DESC_BASE_TABLE_NAME: case SQL_DESC_CATALOG_NAME: case SQL_DESC_LABEL: case SQL_DESC_LITERAL_PREFIX: case SQL_DESC_LITERAL_SUFFIX: case SQL_DESC_LOCAL_TYPE_NAME: case SQL_DESC_NAME: case SQL_DESC_SCHEMA_NAME: case SQL_DESC_TABLE_NAME: case SQL_DESC_TYPE_NAME: if (waMode != 'W') { /* ansi=>unicode*/ _ValuePtr = dm_SQL_A2W((SQLCHAR *) ValuePtr, BufferLength); } else { /* unicode=>ansi*/ BufferLength = (BufferLength != SQL_NTS) ? (SQLINTEGER) (BufferLength / sizeof(wchar_t)) : SQL_NTS; _ValuePtr = dm_SQL_W2A((SQLWCHAR *) ValuePtr, BufferLength); } ValuePtr = _ValuePtr; BufferLength = SQL_NTS; break; } } CALL_UDRIVER(desc->hdbc, desc, retcode, hproc, penv->unicode_driver, en_SetDescField, (desc->dhdesc, RecNumber, FieldIdentifier, ValuePtr, BufferLength)); MEM_FREE(_ValuePtr); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (desc->herr, en_IM001); return SQL_ERROR; } return retcode; } RETCODE SQL_API SQLSetDescField ( SQLHDESC descriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength) { ENTER_DESC (descriptorHandle, trace_SQLSetDescField (TRACE_ENTER, descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength)); retcode = SQLSetDescField_Internal (descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength, 'A'); LEAVE_DESC (descriptorHandle, trace_SQLSetDescField (TRACE_LEAVE, descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength)); } RETCODE SQL_API SQLSetDescFieldA ( SQLHDESC descriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength) { ENTER_DESC (descriptorHandle, trace_SQLSetDescField (TRACE_ENTER, descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength)); retcode = SQLSetDescField_Internal (descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength, 'A'); LEAVE_DESC (descriptorHandle, trace_SQLSetDescField (TRACE_LEAVE, descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength)); } RETCODE SQL_API SQLSetDescFieldW ( SQLHDESC descriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER ValuePtr, SQLINTEGER BufferLength) { ENTER_DESC (descriptorHandle, trace_SQLSetDescFieldW (TRACE_ENTER, descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength)); retcode = SQLSetDescField_Internal (descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength, 'W'); LEAVE_DESC (descriptorHandle, trace_SQLSetDescFieldW (TRACE_LEAVE, descriptorHandle, RecNumber, FieldIdentifier, ValuePtr, BufferLength)); } RETCODE SQL_API SQLGetDescRec_Internal ( SQLHDESC descriptorHandle, SQLSMALLINT RecNumber, SQLPOINTER Name, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLSMALLINT * TypePtr, SQLSMALLINT * SubTypePtr, SQLLEN * LengthPtr, SQLSMALLINT * PrecisionPtr, SQLSMALLINT * ScalePtr, SQLSMALLINT * NullablePtr, SQLCHAR waMode) { DESC (desc, descriptorHandle); CONN (pdbc, desc->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; void * nameOut = Name; void * _Name = NULL; if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ if ((_Name = malloc(BufferLength * sizeof(wchar_t) + 1)) == NULL) { PUSHSQLERR (desc->herr, en_HY001); return SQL_ERROR; } } else { /* unicode=>ansi*/ if ((_Name = malloc(BufferLength + 1)) == NULL) { PUSHSQLERR (desc->herr, en_HY001); return SQL_ERROR; } } nameOut = _Name; } CALL_UDRIVER(desc->hdbc, desc, retcode, hproc, penv->unicode_driver, en_GetDescRec, (desc->dhdesc, RecNumber, nameOut, BufferLength, StringLengthPtr, TypePtr, SubTypePtr, LengthPtr, PrecisionPtr, ScalePtr, NullablePtr)); if (hproc == SQL_NULL_HPROC) { MEM_FREE(_Name); PUSHSQLERR (desc->herr, en_IM001); return SQL_ERROR; } if (Name && SQL_SUCCEEDED (retcode) && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W'))) { if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *) nameOut, (SQLCHAR *) Name, BufferLength, StringLengthPtr); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *) nameOut, (SQLWCHAR *) Name, BufferLength, StringLengthPtr); } } MEM_FREE(_Name); return retcode; } RETCODE SQL_API SQLGetDescRec ( SQLHDESC descriptorHandle, SQLSMALLINT RecNumber, SQLCHAR * Name, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLSMALLINT * TypePtr, SQLSMALLINT * SubTypePtr, SQLLEN * LengthPtr, SQLSMALLINT * PrecisionPtr, SQLSMALLINT * ScalePtr, SQLSMALLINT * NullablePtr) { ENTER_DESC (descriptorHandle, trace_SQLGetDescRec (TRACE_ENTER, descriptorHandle, RecNumber, Name, BufferLength, StringLengthPtr, TypePtr, SubTypePtr, LengthPtr, PrecisionPtr, ScalePtr, NullablePtr)); retcode = SQLGetDescRec_Internal( descriptorHandle, RecNumber, Name, BufferLength, StringLengthPtr, TypePtr, SubTypePtr, LengthPtr, PrecisionPtr, ScalePtr, NullablePtr, 'A'); LEAVE_DESC (descriptorHandle, trace_SQLGetDescRec (TRACE_LEAVE, descriptorHandle, RecNumber, Name, BufferLength, StringLengthPtr, TypePtr, SubTypePtr, LengthPtr, PrecisionPtr, ScalePtr, NullablePtr)); } RETCODE SQL_API SQLGetDescRecA ( SQLHDESC descriptorHandle, SQLSMALLINT RecNumber, SQLCHAR * Name, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLSMALLINT * TypePtr, SQLSMALLINT * SubTypePtr, SQLLEN * LengthPtr, SQLSMALLINT * PrecisionPtr, SQLSMALLINT * ScalePtr, SQLSMALLINT * NullablePtr) { ENTER_DESC (descriptorHandle, trace_SQLGetDescRec (TRACE_ENTER, descriptorHandle, RecNumber, Name, BufferLength, StringLengthPtr, TypePtr, SubTypePtr, LengthPtr, PrecisionPtr, ScalePtr, NullablePtr)); retcode = SQLGetDescRec_Internal( descriptorHandle, RecNumber, Name, BufferLength, StringLengthPtr, TypePtr, SubTypePtr, LengthPtr, PrecisionPtr, ScalePtr, NullablePtr, 'A'); LEAVE_DESC (descriptorHandle, trace_SQLGetDescRec (TRACE_LEAVE, descriptorHandle, RecNumber, Name, BufferLength, StringLengthPtr, TypePtr, SubTypePtr, LengthPtr, PrecisionPtr, ScalePtr, NullablePtr)); } RETCODE SQL_API SQLGetDescRecW ( SQLHDESC descriptorHandle, SQLSMALLINT RecNumber, SQLWCHAR * Name, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLSMALLINT * TypePtr, SQLSMALLINT * SubTypePtr, SQLLEN * LengthPtr, SQLSMALLINT * PrecisionPtr, SQLSMALLINT * ScalePtr, SQLSMALLINT * NullablePtr) { ENTER_DESC (descriptorHandle, trace_SQLGetDescRecW (TRACE_ENTER, descriptorHandle, RecNumber, Name, BufferLength, StringLengthPtr, TypePtr, SubTypePtr, LengthPtr, PrecisionPtr, ScalePtr, NullablePtr)); retcode = SQLGetDescRec_Internal( descriptorHandle, RecNumber, Name, BufferLength, StringLengthPtr, TypePtr, SubTypePtr, LengthPtr, PrecisionPtr, ScalePtr, NullablePtr, 'W'); LEAVE_DESC (descriptorHandle, trace_SQLGetDescRecW (TRACE_LEAVE, descriptorHandle, RecNumber, Name, BufferLength, StringLengthPtr, TypePtr, SubTypePtr, LengthPtr, PrecisionPtr, ScalePtr, NullablePtr)); } static RETCODE SQLSetDescRec_Internal ( SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT Type, SQLSMALLINT SubType, SQLLEN Length, SQLSMALLINT Precision, SQLSMALLINT Scale, SQLPOINTER Data, SQLLEN * StringLength, SQLLEN * Indicator) { DESC (desc, DescriptorHandle); HPROC hproc; RETCODE retcode; hproc = _iodbcdm_getproc (desc->hdbc, en_SetDescRec); if (!hproc) { PUSHSQLERR (desc->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (desc->hdbc, desc, retcode, hproc, (desc->dhdesc, RecNumber, Type, SubType, Length, Precision, Scale, Data, StringLength, Indicator)); return retcode; } RETCODE SQL_API SQLSetDescRec ( SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT Type, SQLSMALLINT SubType, SQLLEN Length, SQLSMALLINT Precision, SQLSMALLINT Scale, SQLPOINTER Data, SQLLEN * StringLength, SQLLEN * Indicator) { ENTER_DESC (DescriptorHandle, trace_SQLSetDescRec (TRACE_ENTER, DescriptorHandle, RecNumber, Type, SubType, Length, Precision, Scale, Data, StringLength, Indicator)); retcode = SQLSetDescRec_Internal ( DescriptorHandle, RecNumber, Type, SubType, Length, Precision, Scale, Data, StringLength, Indicator); LEAVE_DESC (DescriptorHandle, trace_SQLSetDescRec (TRACE_LEAVE, DescriptorHandle, RecNumber, Type, SubType, Length, Precision, Scale, Data, StringLength, Indicator)); } static RETCODE SQLCopyDesc_Internal ( SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle) { DESC (desc, SourceDescHandle); DESC (desc1, TargetDescHandle); HPROC hproc; RETCODE retcode; hproc = _iodbcdm_getproc (desc->hdbc, en_CopyDesc); if (!hproc) { PUSHSQLERR (desc->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (desc->hdbc, desc, retcode, hproc, (desc->dhdesc, desc1->dhdesc)); return retcode; } RETCODE SQL_API SQLCopyDesc ( SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle) { ENTER_DESC (SourceDescHandle, trace_SQLCopyDesc (TRACE_ENTER, SourceDescHandle, TargetDescHandle)); retcode = SQLCopyDesc_Internal ( SourceDescHandle, TargetDescHandle); LEAVE_DESC (SourceDescHandle, trace_SQLCopyDesc (TRACE_LEAVE, SourceDescHandle, TargetDescHandle)); } RETCODE SQL_API SQLColAttribute_Internal ( SQLHSTMT statementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLLEN * NumericAttributePtr, SQLCHAR waMode) { STMT (stmt, statementHandle); CONN (pdbc, stmt->hdbc); ENVR (penv, pdbc->henv); GENV (genv, pdbc->genv); HPROC hproc = SQL_NULL_HPROC; HPROC hproc2 = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; void * charAttrOut = CharacterAttributePtr; void * _charAttr = NULL; SQLUINTEGER odbc_ver; SQLUINTEGER dodbc_ver; odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; dodbc_ver = (penv != SQL_NULL_HENV) ? penv->dodbc_ver : odbc_ver; if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { switch(FieldIdentifier) { case SQL_COLUMN_NAME: case SQL_DESC_BASE_COLUMN_NAME: case SQL_DESC_BASE_TABLE_NAME: case SQL_DESC_CATALOG_NAME: case SQL_DESC_LABEL: case SQL_DESC_LITERAL_PREFIX: case SQL_DESC_LITERAL_SUFFIX: case SQL_DESC_LOCAL_TYPE_NAME: case SQL_DESC_NAME: case SQL_DESC_SCHEMA_NAME: case SQL_DESC_TABLE_NAME: case SQL_DESC_TYPE_NAME: if (waMode != 'W') { /* ansi=>unicode*/ BufferLength *= sizeof(wchar_t); if ((_charAttr = malloc(BufferLength + 1)) == NULL) { PUSHSQLERR (stmt->herr, en_HY001); return SQL_ERROR; } } else { /* unicode=>ansi*/ BufferLength /= sizeof(wchar_t); if ((_charAttr = malloc(BufferLength + 1)) == NULL) { PUSHSQLERR (stmt->herr, en_HY001); return SQL_ERROR; } } charAttrOut = _charAttr; break; } } GET_UHPROC(stmt->hdbc, hproc2, en_ColAttributes, penv->unicode_driver); if (dodbc_ver == SQL_OV_ODBC3 && ( odbc_ver == SQL_OV_ODBC3 || (odbc_ver == SQL_OV_ODBC2 && hproc2 == SQL_NULL_HPROC))) { CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_ColAttribute, (stmt->dhstmt, ColumnNumber, FieldIdentifier, charAttrOut, BufferLength, StringLengthPtr, NumericAttributePtr)); } if (hproc != SQL_NULL_HPROC) { if (SQL_SUCCEEDED (retcode) && FieldIdentifier == SQL_DESC_CONCISE_TYPE) { SQLINTEGER *ptr = (SQLINTEGER *)NumericAttributePtr; /* * Convert sql type to ODBC version of application */ if (ptr) *ptr = _iodbcdm_map_sql_type (*ptr, genv->odbc_ver); } if (CharacterAttributePtr && SQL_SUCCEEDED (retcode) && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W'))) { switch(FieldIdentifier) { case SQL_COLUMN_NAME: case SQL_DESC_BASE_COLUMN_NAME: case SQL_DESC_BASE_TABLE_NAME: case SQL_DESC_CATALOG_NAME: case SQL_DESC_LABEL: case SQL_DESC_LITERAL_PREFIX: case SQL_DESC_LITERAL_SUFFIX: case SQL_DESC_LOCAL_TYPE_NAME: case SQL_DESC_NAME: case SQL_DESC_SCHEMA_NAME: case SQL_DESC_TABLE_NAME: case SQL_DESC_TYPE_NAME: if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *) charAttrOut, (SQLCHAR *) CharacterAttributePtr, BufferLength / sizeof(wchar_t), StringLengthPtr); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *) charAttrOut, (SQLWCHAR *) CharacterAttributePtr, BufferLength, StringLengthPtr); if (StringLengthPtr) *StringLengthPtr = *StringLengthPtr * sizeof(wchar_t); } } } MEM_FREE(_charAttr); return retcode; } if (ColumnNumber == 0) { char *szval = ""; int isSz = 0; SQLINTEGER val = 0; MEM_FREE(_charAttr); switch (FieldIdentifier) { case SQL_DESC_AUTO_UNIQUE_VALUE: case SQL_DESC_CASE_SENSITIVE: case SQL_DESC_FIXED_PREC_SCALE: case SQL_DESC_UNSIGNED: val = SQL_FALSE; break; case SQL_DESC_LABEL: case SQL_DESC_CATALOG_NAME: case SQL_DESC_LITERAL_PREFIX: case SQL_DESC_LITERAL_SUFFIX: case SQL_DESC_LOCAL_TYPE_NAME: case SQL_DESC_NAME: case SQL_DESC_SCHEMA_NAME: case SQL_DESC_TABLE_NAME: case SQL_DESC_TYPE_NAME: isSz = 1; break; case SQL_DESC_CONCISE_TYPE: case SQL_DESC_TYPE: val = SQL_BINARY; break; case SQL_DESC_COUNT: hproc = _iodbcdm_getproc (stmt->hdbc, en_NumResultCols); if (!hproc) { PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (stmt->hdbc, stmt, retcode, hproc, (stmt->dhstmt, NumericAttributePtr)); return retcode; case SQL_DESC_LENGTH: case SQL_DESC_DATETIME_INTERVAL_CODE: case SQL_DESC_SCALE: val = 0; break; case SQL_DESC_DISPLAY_SIZE: val = 8; break; case SQL_DESC_NULLABLE: val = SQL_NO_NULLS; break; case SQL_DESC_OCTET_LENGTH: case SQL_DESC_PRECISION: val = 4; break; case SQL_DESC_SEARCHABLE: val = SQL_PRED_NONE; break; case SQL_DESC_UNNAMED: val = SQL_UNNAMED; break; case SQL_DESC_UPDATABLE: val = SQL_ATTR_READONLY; break; default: PUSHSQLERR (stmt->herr, en_HYC00); return SQL_ERROR; } if (isSz) { int len = STRLEN (szval), len1; len1 = len > BufferLength ? BufferLength - 1 : len; if (CharacterAttributePtr) { STRNCPY (CharacterAttributePtr, szval, len1); ((SQLCHAR *) CharacterAttributePtr)[len1] = 0; } if (StringLengthPtr) *StringLengthPtr = len; } else { if (NumericAttributePtr) *((SQLINTEGER *) NumericAttributePtr) = val; } return SQL_SUCCESS; } else { /* all other */ switch (FieldIdentifier) { case SQL_DESC_SCALE: FieldIdentifier = SQL_COLUMN_SCALE; break; case SQL_DESC_LENGTH: FieldIdentifier = SQL_COLUMN_LENGTH; break; case SQL_DESC_PRECISION: FieldIdentifier = SQL_COLUMN_PRECISION; break; case SQL_DESC_COUNT: FieldIdentifier = SQL_COLUMN_COUNT; break; case SQL_DESC_NAME: FieldIdentifier = SQL_COLUMN_NAME; break; case SQL_DESC_NULLABLE: FieldIdentifier = SQL_COLUMN_NULLABLE; break; case SQL_DESC_TYPE: FieldIdentifier = SQL_COLUMN_TYPE; break; case SQL_DESC_BASE_COLUMN_NAME: case SQL_DESC_BASE_TABLE_NAME: case SQL_DESC_LITERAL_PREFIX: case SQL_DESC_LITERAL_SUFFIX: case SQL_DESC_LOCAL_TYPE_NAME: case SQL_DESC_NUM_PREC_RADIX: case SQL_DESC_OCTET_LENGTH: case SQL_DESC_UNNAMED: MEM_FREE(_charAttr); PUSHSQLERR (stmt->herr, en_HY091); return SQL_ERROR; } CALL_UDRIVER(stmt->hdbc, stmt, retcode, hproc, penv->unicode_driver, en_ColAttributes, (stmt->dhstmt, ColumnNumber, FieldIdentifier, charAttrOut, BufferLength, StringLengthPtr, NumericAttributePtr)); if (hproc == SQL_NULL_HPROC) { MEM_FREE(_charAttr); PUSHSQLERR (stmt->herr, en_IM001); return SQL_ERROR; } if (SQL_SUCCEEDED (retcode) && FieldIdentifier == SQL_DESC_CONCISE_TYPE) { SQLINTEGER *ptr = (SQLINTEGER *)NumericAttributePtr; /* * Convert sql type to ODBC version of application */ if (ptr) *ptr = _iodbcdm_map_sql_type (*ptr, genv->odbc_ver); } if (CharacterAttributePtr && SQL_SUCCEEDED (retcode) && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W'))) { switch(FieldIdentifier) { case SQL_COLUMN_QUALIFIER_NAME: case SQL_COLUMN_NAME: case SQL_COLUMN_LABEL: case SQL_COLUMN_OWNER_NAME: case SQL_COLUMN_TABLE_NAME: case SQL_COLUMN_TYPE_NAME: case SQL_DESC_BASE_COLUMN_NAME: case SQL_DESC_BASE_TABLE_NAME: case SQL_DESC_LITERAL_PREFIX: case SQL_DESC_LITERAL_SUFFIX: case SQL_DESC_LOCAL_TYPE_NAME: case SQL_DESC_NAME: if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *) charAttrOut, (SQLCHAR *) CharacterAttributePtr, BufferLength / sizeof(wchar_t), StringLengthPtr); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *) charAttrOut, (SQLWCHAR *) CharacterAttributePtr, BufferLength, StringLengthPtr); if (StringLengthPtr) *StringLengthPtr = *StringLengthPtr * sizeof(wchar_t); } } } MEM_FREE(_charAttr); return retcode; } } RETCODE SQL_API SQLColAttribute ( SQLHSTMT statementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLLEN * NumericAttributePtr) { ENTER_STMT (statementHandle, trace_SQLColAttribute (TRACE_ENTER, statementHandle, ColumnNumber, FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr, NumericAttributePtr)); retcode = SQLColAttribute_Internal ( statementHandle, ColumnNumber, FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr, NumericAttributePtr, 'A'); LEAVE_STMT (statementHandle, trace_SQLColAttribute (TRACE_LEAVE, statementHandle, ColumnNumber, FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr, NumericAttributePtr)); } RETCODE SQL_API SQLColAttributeA ( SQLHSTMT statementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLLEN * NumericAttributePtr) { ENTER_STMT (statementHandle, trace_SQLColAttribute (TRACE_ENTER, statementHandle, ColumnNumber, FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr, NumericAttributePtr)); retcode = SQLColAttribute_Internal ( statementHandle, ColumnNumber, FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr, NumericAttributePtr, 'A'); LEAVE_STMT (statementHandle, trace_SQLColAttribute (TRACE_LEAVE, statementHandle, ColumnNumber, FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr, NumericAttributePtr)); } RETCODE SQL_API SQLColAttributeW ( SQLHSTMT statementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr, SQLLEN * NumericAttributePtr) { ENTER_STMT (statementHandle, trace_SQLColAttributeW (TRACE_ENTER, statementHandle, ColumnNumber, FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr, NumericAttributePtr)); retcode = SQLColAttribute_Internal ( statementHandle, ColumnNumber, FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr, NumericAttributePtr, 'W'); LEAVE_STMT (statementHandle, trace_SQLColAttributeW (TRACE_LEAVE, statementHandle, ColumnNumber, FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr, NumericAttributePtr)); } static RETCODE SQLEndTran_Internal ( SQLSMALLINT handleType, SQLHANDLE Handle, SQLSMALLINT completionType) { switch (handleType) { case SQL_HANDLE_DBC: case SQL_HANDLE_ENV: break; default: return SQL_INVALID_HANDLE; } return SQLTransact_Internal ( handleType == SQL_HANDLE_ENV ? Handle : SQL_NULL_HENV, handleType == SQL_HANDLE_DBC ? Handle : SQL_NULL_HDBC, completionType); } RETCODE SQL_API SQLEndTran ( SQLSMALLINT handleType, SQLHANDLE Handle, SQLSMALLINT completionType) { SQLRETURN retcode = SQL_SUCCESS; ODBC_LOCK (); TRACE (trace_SQLEndTran (TRACE_ENTER, handleType, Handle, completionType)); retcode = SQLEndTran_Internal (handleType, Handle, completionType); TRACE (trace_SQLEndTran (TRACE_LEAVE, handleType, Handle, completionType)); ODBC_UNLOCK (); return retcode; } static RETCODE SQLBulkOperations_Internal ( SQLHSTMT statementHandle, SQLSMALLINT Operation) { STMT (stmt, statementHandle); HPROC hproc; RETCODE retcode; switch (Operation) { case SQL_ADD: case SQL_UPDATE_BY_BOOKMARK: case SQL_DELETE_BY_BOOKMARK: case SQL_FETCH_BY_BOOKMARK: break; default: PUSHSQLERR (stmt->herr, en_HY092); return SQL_ERROR; } hproc = _iodbcdm_getproc (stmt->hdbc, en_BulkOperations); if (hproc) { CALL_DRIVER (stmt->hdbc, stmt, retcode, hproc, (stmt->dhstmt, Operation)); if (Operation == SQL_FETCH_BY_BOOKMARK && SQL_SUCCEEDED (retcode)) _iodbcdm_ConvBindData (stmt); return retcode; } switch (Operation) { case SQL_ADD: retcode = _iodbcdm_SetPos (statementHandle, 0, SQL_ADD, SQL_LOCK_NO_CHANGE); return retcode; default: PUSHSQLERR (stmt->herr, en_HYC00); return SQL_ERROR; } } RETCODE SQL_API SQLBulkOperations ( SQLHSTMT StatementHandle, SQLSMALLINT Operation) { ENTER_STMT (StatementHandle, trace_SQLBulkOperations (TRACE_ENTER, StatementHandle, Operation)); retcode = SQLBulkOperations_Internal (StatementHandle, Operation); LEAVE_STMT (StatementHandle, trace_SQLBulkOperations (TRACE_LEAVE, StatementHandle, Operation)); } static RETCODE SQLFetchScroll_Internal ( SQLHSTMT statementHandle, SQLSMALLINT fetchOrientation, SQLLEN fetchOffset) { STMT (stmt, statementHandle); HPROC hproc = SQL_NULL_HPROC; RETCODE retcode; CONN (pdbc, stmt->hdbc); HPROC hproc2 = SQL_NULL_HPROC; SQLUINTEGER odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; SQLUINTEGER dodbc_ver = ((ENV_t *) pdbc->henv)->dodbc_ver; /* check arguments */ switch (fetchOrientation) { case SQL_FETCH_NEXT: case SQL_FETCH_PRIOR: case SQL_FETCH_FIRST: case SQL_FETCH_LAST: case SQL_FETCH_ABSOLUTE: case SQL_FETCH_RELATIVE: case SQL_FETCH_BOOKMARK: break; default: PUSHSQLERR (stmt->herr, en_HY092); return SQL_ERROR; } /* check state */ if (stmt->asyn_on == en_NullProc) { switch (stmt->state) { case en_stmt_allocated: case en_stmt_prepared: case en_stmt_fetched: case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: PUSHSQLERR (stmt->herr, en_S1010); return SQL_ERROR; default: break; } } else if (stmt->asyn_on != en_FetchScroll) { PUSHSQLERR (stmt->herr, en_S1010); return SQL_ERROR; } hproc2 = _iodbcdm_getproc (stmt->hdbc, en_ExtendedFetch); if (dodbc_ver == SQL_OV_ODBC3 && ( odbc_ver == SQL_OV_ODBC3 || (odbc_ver == SQL_OV_ODBC2 && hproc2 == SQL_NULL_HPROC))) { hproc = _iodbcdm_getproc (stmt->hdbc, en_FetchScroll); if (hproc) { CALL_DRIVER (stmt->hdbc, stmt, retcode, hproc, (stmt->dhstmt, fetchOrientation, fetchOffset)); } } if (hproc == SQL_NULL_HPROC) { if (!stmt->row_status_ptr) { PUSHSQLERR (stmt->herr, en_HYC00); return SQL_ERROR; } if (fetchOrientation == SQL_FETCH_BOOKMARK) { if (fetchOffset) { PUSHSQLERR (stmt->herr, en_HYC00); return SQL_ERROR; } retcode = _iodbcdm_ExtendedFetch (statementHandle, fetchOrientation, stmt->fetch_bookmark_ptr ? *((SQLINTEGER *) stmt->fetch_bookmark_ptr) : 0, (SQLULEN *) stmt->rows_fetched_ptr, (SQLUSMALLINT *) stmt->row_status_ptr); } else retcode = _iodbcdm_ExtendedFetch (statementHandle, fetchOrientation, fetchOffset, (SQLULEN *) stmt->rows_fetched_ptr, (SQLUSMALLINT *) stmt->row_status_ptr); } /* state transition */ if (stmt->asyn_on == en_FetchScroll) { switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_NO_DATA_FOUND: case SQL_ERROR: stmt->asyn_on = en_NullProc; break; case SQL_STILL_EXECUTING: default: return retcode; } } switch (stmt->state) { case en_stmt_cursoropen: case en_stmt_xfetched: switch (retcode) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_NO_DATA_FOUND: stmt->state = en_stmt_xfetched; stmt->cursor_state = en_stmt_cursor_xfetched; break; case SQL_STILL_EXECUTING: stmt->asyn_on = en_FetchScroll; break; default: break; } break; default: break; } return retcode; } RETCODE SQL_API SQLFetchScroll ( SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLLEN FetchOffset) { ENTER_STMT (StatementHandle, trace_SQLFetchScroll (TRACE_ENTER, StatementHandle, FetchOrientation, FetchOffset)); retcode = SQLFetchScroll_Internal ( StatementHandle, FetchOrientation, FetchOffset); if (SQL_SUCCEEDED (retcode)) _iodbcdm_ConvBindData ((STMT_t *) StatementHandle); LEAVE_STMT (StatementHandle, trace_SQLFetchScroll (TRACE_LEAVE, StatementHandle, FetchOrientation, FetchOffset)); } SQLRETURN SQL_API SQLBindParam ( SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT fCType, SQLSMALLINT fSqlType, SQLULEN cbParamDef, SQLSMALLINT ibScale, SQLPOINTER rgbValue, SQLLEN *pcbValue) { return SQLBindParameter (hstmt, ipar, SQL_PARAM_INPUT, fCType, fSqlType, cbParamDef, ibScale, rgbValue, SQL_MAX_OPTION_STRING_LENGTH, pcbValue); } static SQLRETURN SQLCloseCursor_Internal (SQLHSTMT hstmt) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; HPROC hproc2 = SQL_NULL_HPROC; SQLUINTEGER odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; SQLUINTEGER dodbc_ver = ((ENV_t *) pdbc->henv)->dodbc_ver; /* check state */ if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc) { PUSHSQLERR (pstmt->herr, en_S1010); return SQL_ERROR; } hproc2 = _iodbcdm_getproc (pstmt->hdbc, en_FreeStmt); if (dodbc_ver == SQL_OV_ODBC3 && ( odbc_ver == SQL_OV_ODBC3 || (odbc_ver == SQL_OV_ODBC2 && hproc2 == SQL_NULL_HPROC))) { hproc = _iodbcdm_getproc (pstmt->hdbc, en_CloseCursor); if (hproc) { CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt)); } } if (hproc == SQL_NULL_HPROC) { hproc = _iodbcdm_getproc (pstmt->hdbc, en_FreeStmt); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, (pstmt->dhstmt, SQL_CLOSE)); } if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) { return retcode; } /* * State transition */ pstmt->cursor_state = en_stmt_cursor_no; switch (pstmt->state) { case en_stmt_allocated: case en_stmt_prepared: break; case en_stmt_executed_with_info: case en_stmt_executed: case en_stmt_cursoropen: case en_stmt_fetched: case en_stmt_xfetched: if (pstmt->prep_state) pstmt->state = en_stmt_prepared; else pstmt->state = en_stmt_allocated; break; default: break; } return retcode; } SQLRETURN SQL_API SQLCloseCursor (SQLHSTMT hstmt) { ENTER_STMT (hstmt, trace_SQLCloseCursor (TRACE_ENTER, hstmt)); retcode = SQLCloseCursor_Internal (hstmt); LEAVE_STMT (hstmt, trace_SQLCloseCursor (TRACE_LEAVE, hstmt)); } #endif /* ODBCVER >= 0x0300 */ libiodbc-3.52.9/iodbc/herr.c0000644000076400007640000013161712323210535012503 00000000000000/* * herr.c * * $Id$ * * Error stack management functions * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #if (ODBCVER >= 0x0300) #include #endif #include #include #include #include #include "herr.ci" #include "misc.h" static HERR _iodbcdm_popsqlerr (HERR herr) { sqlerr_t *list = (sqlerr_t *) herr; sqlerr_t *next; if (herr == SQL_NULL_HERR) { return herr; } next = list->next; list->next = NULL; MEM_FREE (list); return next; } void _iodbcdm_freesqlerrlist (HERR herrlist) { HERR list = herrlist; while (list != SQL_NULL_HERR) { list = _iodbcdm_popsqlerr (list); } } HERR _iodbcdm_pushsqlerr ( HERR herr, sqlstcode_t code, void *msg) { sqlerr_t *ebuf; sqlerr_t *perr = (sqlerr_t *) herr; int idx = 0; if (herr != SQL_NULL_HERR) { idx = perr->idx + 1; } if (idx == 64) /* overwrite the top entry to prevent error stack blow out */ { perr->code = code; perr->msg = (char *) msg; return herr; } ebuf = (sqlerr_t *) MEM_ALLOC (sizeof (sqlerr_t)); if (ebuf == NULL) { return NULL; } ebuf->msg = (char *) msg; ebuf->code = code; ebuf->idx = idx; ebuf->next = (sqlerr_t *) herr; return (HERR) ebuf; } static char * _iodbcdm_getsqlstate ( HERR herr, void * tab) { sqlerr_t *perr = (sqlerr_t *) herr; sqlerrmsg_t *ptr; sqlstcode_t perr_code; if (herr == SQL_NULL_HERR || tab == NULL) { return (char *) NULL; } perr_code = perr->code; #if (ODBCVER >= 0x0300) switch (perr_code) { case en_S1009: perr_code = en_HY009; break; default: break; } #endif for (ptr = (sqlerrmsg_t *) tab; ptr->code != en_sqlstat_total; ptr++) { if (ptr->code == perr_code) { return (char *) (ptr->stat); } } return (char *) NULL; } static char * _iodbcdm_getsqlerrmsg ( HERR herr, void * errtab) { sqlerr_t *perr = (sqlerr_t *) herr; sqlerrmsg_t *ptr; if (herr == SQL_NULL_HERR) { return NULL; } if (perr->msg == NULL && errtab == NULL) { return NULL; } if (perr->msg != NULL) { return perr->msg; } for (ptr = (sqlerrmsg_t *) errtab; ptr->code != en_sqlstat_total; ptr++) { if (ptr->code == perr->code) { return (char *) ptr->msg; } } return (char *) NULL; } SQLRETURN SQL_API _iodbcdm_sqlerror ( SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLPOINTER szSqlstate, SQLINTEGER * pfNativeError, SQLPOINTER szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg, int bDelete, SQLCHAR waMode) { GENV (genv, henv); CONN (pdbc, hdbc); STMT (pstmt, hstmt); HDBC thdbc = SQL_NULL_HDBC; HENV dhenv = SQL_NULL_HENV; HDBC dhdbc = SQL_NULL_HDBC; HSTMT dhstmt = SQL_NULL_HSTMT; HERR herr = SQL_NULL_HERR; HPROC hproc2 = SQL_NULL_HPROC; HPROC hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x0300) SQLINTEGER handleType = 0; SQLHANDLE handle3; SQLHANDLE dhandle3 = 0; SQLSMALLINT *perr_rec = NULL; #endif SWORD unicode_driver = 0; SQLUINTEGER dodbc_ver = SQL_OV_ODBC2; SQLUINTEGER odbc_ver = SQL_OV_ODBC2; wchar_t _sqlState[6] = {L"\0"}; void *SqlstateOut = szSqlstate; void *_ErrorMsg = NULL; void *errorMsgOut = szErrorMsg; void *errmsg = NULL; void *ststr = NULL; int handle = 0; SQLRETURN retcode = SQL_SUCCESS; if (IS_VALID_HSTMT (hstmt)) /* retrieve stmt err */ { herr = pstmt->herr; thdbc = pstmt->hdbc; if (thdbc == SQL_NULL_HDBC) { return SQL_INVALID_HANDLE; } #if (ODBCVER >= 0x0300) handleType = SQL_HANDLE_STMT; handle3 = hstmt; dhandle3 = pstmt->dhstmt; perr_rec = &((STMT_t *)pstmt)->err_rec; #endif dhstmt = pstmt->dhstmt; handle = 3; } else if (IS_VALID_HDBC (hdbc)) /* retrieve dbc err */ { herr = pdbc->herr; thdbc = pdbc; if (thdbc == SQL_NULL_HDBC) { return SQL_INVALID_HANDLE; } #if (ODBCVER >= 0x0300) handleType = SQL_HANDLE_DBC; handle3 = hdbc; dhandle3 = pdbc->dhdbc; perr_rec = &((DBC_t *)pdbc)->err_rec; #endif dhdbc = pdbc->dhdbc; handle = 2; if (herr == SQL_NULL_HERR && pdbc->henv == SQL_NULL_HENV) { return SQL_NO_DATA_FOUND; } } else if (IS_VALID_HENV (henv)) /* retrieve env err */ { herr = genv->herr; /* Drivers shouldn't push error message * on environment handle */ if (herr == SQL_NULL_HERR) { return SQL_NO_DATA_FOUND; } handle = 1; } else { return SQL_INVALID_HANDLE; } if (szErrorMsg != NULL) { if (cbErrorMsgMax < 0) { return SQL_ERROR; /* SQLError() doesn't post error for itself */ } } if (herr == SQL_NULL_HERR) /* no err on drv mng */ { if (thdbc && ((DBC_t *)thdbc)->genv) odbc_ver = ((GENV_t *) ((DBC_t *)thdbc)->genv)->odbc_ver; if (thdbc && ((DBC_t *)thdbc)->henv) { unicode_driver = ((ENV_t *) ((DBC_t *)thdbc)->henv)->unicode_driver; dodbc_ver = ((ENV_t *) ((DBC_t *)thdbc)->henv)->dodbc_ver; } /* call driver */ if ((unicode_driver && waMode != 'W') || (!unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ if ((_ErrorMsg = malloc(cbErrorMsgMax * sizeof(wchar_t) + 1)) == NULL) return SQL_ERROR; } else { /* unicode=>ansi*/ if ((_ErrorMsg = malloc(cbErrorMsgMax + 1)) == NULL) return SQL_ERROR; } errorMsgOut = _ErrorMsg; SqlstateOut = _sqlState; } /* call driver */ if (unicode_driver) { /* SQL_XXX_W */ hproc2 = _iodbcdm_getproc (thdbc, en_ErrorW); #if (ODBCVER >= 0x300) hproc3 = _iodbcdm_getproc (thdbc, en_GetDiagRecW); #endif } else { /* SQL_XXX */ /* SQL_XXX_A */ hproc2 = _iodbcdm_getproc (thdbc, en_Error); if (hproc2 == SQL_NULL_HPROC) hproc2 = _iodbcdm_getproc (thdbc, en_ErrorA); #if (ODBCVER >= 0x300) hproc3 = _iodbcdm_getproc (thdbc, en_GetDiagRec); if (hproc3 == SQL_NULL_HPROC) hproc3 = _iodbcdm_getproc (thdbc, en_GetDiagRecA); #endif } if (odbc_ver == SQL_OV_ODBC2 && ( dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x300) if (hproc3 != SQL_NULL_HPROC) { (*perr_rec) = (*perr_rec) + 1; CALL_DRIVER (thdbc, NULL, retcode, hproc3, ( handleType, dhandle3, (*perr_rec), SqlstateOut, pfNativeError, errorMsgOut, cbErrorMsgMax, pcbErrorMsg)); } else #endif { if (hproc2 == SQL_NULL_HPROC) { MEM_FREE(_ErrorMsg); return SQL_NO_DATA_FOUND; } CALL_DRIVER (thdbc, NULL, retcode, hproc2, ( dhenv, dhdbc, dhstmt, SqlstateOut, pfNativeError, errorMsgOut, cbErrorMsgMax, pcbErrorMsg)); } if (szErrorMsg && SQL_SUCCEEDED (retcode) && ((unicode_driver && waMode != 'W') || (!unicode_driver && waMode == 'W'))) { if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *)errorMsgOut, (SQLCHAR *)szErrorMsg, cbErrorMsgMax, NULL); dm_StrCopyOut2_W2A ((SQLWCHAR *)SqlstateOut, (SQLCHAR *)szSqlstate, 6, NULL); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *)errorMsgOut, (SQLWCHAR *)szErrorMsg, cbErrorMsgMax, NULL); dm_StrCopyOut2_A2W ((SQLCHAR *)SqlstateOut, (SQLWCHAR *)szSqlstate, 6, NULL); } } MEM_FREE(_ErrorMsg); return retcode; } if (szSqlstate != NULL) { int len; /* get sql state string */ ststr = (char *) _iodbcdm_getsqlstate (herr, (void *) sqlerrmsg_tab); if (ststr == NULL) { len = 0; } else { len = (int) STRLEN (ststr); } /* buffer size of szSqlstate is not checked. Applications * suppose provide enough ( not less than 6 bytes ) buffer * or NULL for it. */ if (waMode != 'W') { STRNCPY (szSqlstate, ststr, len); ((char*)szSqlstate)[len] = 0; } else { dm_StrCopyOut2_A2W ((SQLCHAR *)ststr, (SQLWCHAR *)szSqlstate, 6, NULL); ((wchar_t*)szSqlstate)[len] = 0; } } if (pfNativeError != NULL) { /* native error code is specific to data source */ *pfNativeError = (SDWORD) 0L; } if (szErrorMsg == NULL || cbErrorMsgMax == 0) { if (pcbErrorMsg != NULL) { *pcbErrorMsg = (SWORD) 0; } } else { int len; char msgbuf[256] = {'\0'}; /* get sql state message */ errmsg = _iodbcdm_getsqlerrmsg (herr, (void *) sqlerrmsg_tab); if (errmsg == NULL) { errmsg = (char *) ""; } #if defined(HAVE_SNPRINTF) snprintf (msgbuf, sizeof(msgbuf), "%s%s", sqlerrhd, (char*)errmsg); #else sprintf (msgbuf, "%s%s", sqlerrhd, (char*)errmsg); #endif len = STRLEN (msgbuf); if (len < cbErrorMsgMax - 1) { retcode = SQL_SUCCESS; } else { len = cbErrorMsgMax - 1; retcode = SQL_SUCCESS_WITH_INFO; /* and not posts error for itself */ } if (waMode != 'W') { STRNCPY ((char *) szErrorMsg, msgbuf, len); ((char*)szErrorMsg)[len] = 0; if (pcbErrorMsg != NULL) *pcbErrorMsg = (SWORD) len; } else { dm_StrCopyOut2_A2W ((SQLCHAR *) msgbuf, (SQLWCHAR *) szErrorMsg, cbErrorMsgMax, pcbErrorMsg); } } if (bDelete) switch (handle) /* free this err */ { case 1: genv->herr = _iodbcdm_popsqlerr (genv->herr); break; case 2: pdbc->herr = _iodbcdm_popsqlerr (pdbc->herr); break; case 3: pstmt->herr = _iodbcdm_popsqlerr (pstmt->herr); break; default: break; } return retcode; } SQLRETURN SQL_API SQLError ( SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLCHAR * szSqlstate, SQLINTEGER * pfNativeError, SQLCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg) { SQLRETURN retcode = SQL_SUCCESS; ODBC_LOCK (); TRACE (trace_SQLError (TRACE_ENTER, henv, hdbc, hstmt, szSqlstate, pfNativeError, szErrorMsg, cbErrorMsgMax, pcbErrorMsg)); retcode = _iodbcdm_sqlerror ( henv, hdbc, hstmt, szSqlstate, pfNativeError, szErrorMsg, cbErrorMsgMax, pcbErrorMsg, 1, 'A'); TRACE (trace_SQLError (TRACE_LEAVE, henv, hdbc, hstmt, szSqlstate, pfNativeError, szErrorMsg, cbErrorMsgMax, pcbErrorMsg)); ODBC_UNLOCK (); return retcode; } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLErrorA ( SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLCHAR * szSqlstate, SQLINTEGER * pfNativeError, SQLCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg) { SQLRETURN retcode = SQL_SUCCESS; ODBC_LOCK (); TRACE (trace_SQLError (TRACE_ENTER, henv, hdbc, hstmt, szSqlstate, pfNativeError, szErrorMsg, cbErrorMsgMax, pcbErrorMsg)); retcode = _iodbcdm_sqlerror ( henv, hdbc, hstmt, szSqlstate, pfNativeError, szErrorMsg, cbErrorMsgMax, pcbErrorMsg, 1, 'A'); TRACE (trace_SQLError (TRACE_LEAVE, henv, hdbc, hstmt, szSqlstate, pfNativeError, szErrorMsg, cbErrorMsgMax, pcbErrorMsg)); ODBC_UNLOCK (); return retcode; } SQLRETURN SQL_API SQLErrorW ( SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLWCHAR * szSqlstate, SQLINTEGER * pfNativeError, SQLWCHAR * szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT * pcbErrorMsg) { SQLRETURN retcode = SQL_SUCCESS; ODBC_LOCK (); TRACE (trace_SQLErrorW (TRACE_ENTER, henv, hdbc, hstmt, szSqlstate, pfNativeError, szErrorMsg, cbErrorMsgMax, pcbErrorMsg)); retcode = _iodbcdm_sqlerror ( henv, hdbc, hstmt, szSqlstate, pfNativeError, szErrorMsg, cbErrorMsgMax, pcbErrorMsg, 1, 'W'); TRACE (trace_SQLErrorW (TRACE_LEAVE, henv, hdbc, hstmt, szSqlstate, pfNativeError, szErrorMsg, cbErrorMsgMax, pcbErrorMsg)); ODBC_UNLOCK (); return retcode; } #endif #if (ODBCVER >= 0x0300) static int error_rec_count (HERR herr) { sqlerr_t *err = (sqlerr_t *)herr; if (err) return err->idx + 1; else return 0; } static sqlerr_t * get_nth_error(HERR herr, int nIndex) { sqlerr_t *err = (sqlerr_t *) herr; while (err && err->idx != nIndex) err = err->next; return err; } RETCODE SQL_API SQLGetDiagRec_Internal ( SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLPOINTER Sqlstate, SQLINTEGER * NativeErrorPtr, SQLPOINTER MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLengthPtr, SQLCHAR waMode) { sqlerr_t *curr_err = NULL; HERR err = NULL; int nRecs; HPROC hproc2 = SQL_NULL_HPROC; HPROC hproc3 = SQL_NULL_HPROC; HDBC hdbc = SQL_NULL_HDBC; RETCODE retcode = SQL_SUCCESS; SQLHANDLE dhandle = SQL_NULL_HANDLE; SWORD unicode_driver = 0; SQLUINTEGER dodbc_ver = SQL_OV_ODBC3; SQLUINTEGER odbc_ver = SQL_OV_ODBC3; wchar_t _sqlState[6] = {L"\0"}; void *_MessageText = NULL; void *messageTextOut = MessageText; void *SqlstateOut = Sqlstate; if (RecNumber < 1) return SQL_ERROR; if (BufferLength < 0) return SQL_ERROR; switch (HandleType) { case SQL_HANDLE_ENV: if (!IS_VALID_HENV (Handle)) { return SQL_INVALID_HANDLE; } err = ((GENV_t *) Handle)->herr; break; case SQL_HANDLE_DBC: if (!IS_VALID_HDBC (Handle)) { return SQL_INVALID_HANDLE; } err = ((DBC_t *) Handle)->herr; dhandle = ((DBC_t *) Handle)->dhdbc; hdbc = Handle; break; case SQL_HANDLE_STMT: if (!IS_VALID_HSTMT (Handle)) { return SQL_INVALID_HANDLE; } err = ((STMT_t *) Handle)->herr; dhandle = ((STMT_t *) Handle)->dhstmt; hdbc = ((STMT_t *) Handle)->hdbc; break; case SQL_HANDLE_DESC: if (!IS_VALID_HDESC (Handle)) { return SQL_INVALID_HANDLE; } err = ((DESC_t *) Handle)->herr; dhandle = ((DESC_t *) Handle)->dhdesc; hdbc = ((DESC_t *) Handle)->hdbc; break; default: return SQL_INVALID_HANDLE; } nRecs = error_rec_count (err); if (nRecs >= RecNumber) { /* DM error range */ curr_err = get_nth_error (err, RecNumber - 1); if (!curr_err) { return (SQL_NO_DATA_FOUND); } retcode = SQL_SUCCESS; if (Sqlstate != NULL) { int len; char *ststr = (char *) _iodbcdm_getsqlstate (curr_err, (void *) sqlerrmsg_tab); if (ststr == NULL) { len = 0; } else { len = (int) STRLEN (ststr); } /* buffer size of szSqlstate is not checked. Applications * suppose provide enough ( not less than 6 bytes ) buffer * or NULL for it. */ if (waMode != 'W') { STRNCPY (Sqlstate, ststr, len); ((char*)Sqlstate)[len] = 0; } else { dm_StrCopyOut2_A2W ((SQLCHAR *) ststr, (SQLWCHAR *) Sqlstate, 6, NULL); ((wchar_t*)Sqlstate)[len] = 0; } } if (MessageText == NULL || BufferLength == 0) { if (TextLengthPtr != NULL) { *TextLengthPtr = (SWORD) 0; } } else { int len; char msgbuf[256] = { '\0' }; char *errmsg; /* get sql state message */ errmsg = _iodbcdm_getsqlerrmsg (curr_err, (void *) sqlerrmsg_tab); if (errmsg == NULL) { errmsg = (char *) ""; } #if defined(HAVE_SNPRINTF) snprintf (msgbuf, sizeof (msgbuf), "%s%s", sqlerrhd, errmsg); #else sprintf (msgbuf, "%s%s", sqlerrhd, errmsg); #endif len = STRLEN (msgbuf); if (len < BufferLength - 1) { retcode = SQL_SUCCESS; } else { len = BufferLength - 1; retcode = SQL_SUCCESS_WITH_INFO; /* and not posts error for itself */ } if (waMode != 'W') { STRNCPY ((char *) MessageText, msgbuf, len); ((char*)MessageText)[len] = 0; if (TextLengthPtr != NULL) *TextLengthPtr = (SWORD) len; } else { dm_StrCopyOut2_A2W ((SQLCHAR *) msgbuf, (SQLWCHAR *) MessageText, BufferLength, TextLengthPtr); } } return retcode; } else { /* Driver errors */ if (hdbc == SQL_NULL_HDBC) { return SQL_NO_DATA_FOUND; } RecNumber -= nRecs; if (hdbc && ((DBC_t *)hdbc)->henv) { unicode_driver = ((ENV_t *) ((DBC_t *)hdbc)->henv)->unicode_driver; dodbc_ver = ((ENV_t *) ((DBC_t *)hdbc)->henv)->dodbc_ver; } if (hdbc && ((DBC_t *)hdbc)->genv) odbc_ver = ((GENV_t *) ((DBC_t *)hdbc)->genv)->odbc_ver; if ((unicode_driver && waMode != 'W') || (!unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ if ((_MessageText = malloc((BufferLength + 1) * sizeof(wchar_t))) == NULL) { return SQL_ERROR; } } else { /* unicode=>ansi*/ if ((_MessageText = malloc(BufferLength + 1)) == NULL) { return SQL_ERROR; } } messageTextOut = _MessageText; SqlstateOut = _sqlState; } /* call driver */ if (unicode_driver) { /* SQL_XXX_W */ hproc2 = _iodbcdm_getproc (hdbc, en_ErrorW); #if (ODBCVER >= 0x300) hproc3 = _iodbcdm_getproc (hdbc, en_GetDiagRecW); #endif } else { /* SQL_XXX */ /* SQL_XXX_A */ hproc2 = _iodbcdm_getproc (hdbc, en_Error); if (hproc2 == SQL_NULL_HPROC) hproc2 = _iodbcdm_getproc (hdbc, en_ErrorA); #if (ODBCVER >= 0x300) hproc3 = _iodbcdm_getproc (hdbc, en_GetDiagRec); if (hproc3 == SQL_NULL_HPROC) hproc3 = _iodbcdm_getproc (hdbc, en_GetDiagRecA); #endif } if (odbc_ver == SQL_OV_ODBC2 && ( dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x300) if (hproc3 != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, Handle, retcode, hproc3, ( HandleType, dhandle, RecNumber, SqlstateOut, NativeErrorPtr, messageTextOut, BufferLength, TextLengthPtr)); } else #endif { if (hproc2 == SQL_NULL_HPROC) { MEM_FREE(_MessageText); return SQL_ERROR; } if (RecNumber > 1 || HandleType == SQL_HANDLE_DESC) { MEM_FREE(_MessageText); return SQL_NO_DATA_FOUND; } CALL_DRIVER (hdbc, Handle, retcode, hproc2, ( SQL_NULL_HENV, HandleType == SQL_HANDLE_DBC ? dhandle : SQL_NULL_HDBC, HandleType == SQL_HANDLE_STMT ? dhandle : SQL_NULL_HSTMT, SqlstateOut, NativeErrorPtr, messageTextOut, BufferLength, TextLengthPtr)); } if (MessageText && SQL_SUCCEEDED (retcode) && ((unicode_driver && waMode != 'W') || (!unicode_driver && waMode == 'W'))) { if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *)messageTextOut, (SQLCHAR *)MessageText, BufferLength, NULL); dm_StrCopyOut2_W2A ((SQLWCHAR *)SqlstateOut, (SQLCHAR *)Sqlstate, 6, NULL); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *) messageTextOut, (SQLWCHAR *) MessageText, BufferLength, NULL); dm_StrCopyOut2_A2W ((SQLCHAR *) SqlstateOut, (SQLWCHAR *) Sqlstate, 6, NULL); } } MEM_FREE(_MessageText); return retcode; } } RETCODE SQL_API SQLGetDiagRec ( SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLCHAR * Sqlstate, SQLINTEGER * NativeErrorPtr, SQLCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLengthPtr) { SQLRETURN retcode = SQL_SUCCESS; ODBC_LOCK (); TRACE (trace_SQLGetDiagRec (TRACE_ENTER, HandleType, Handle, RecNumber, Sqlstate, NativeErrorPtr, MessageText, BufferLength, TextLengthPtr)); retcode = SQLGetDiagRec_Internal ( HandleType, Handle, RecNumber, Sqlstate, NativeErrorPtr, MessageText, BufferLength, TextLengthPtr, 'A'); TRACE (trace_SQLGetDiagRec (TRACE_LEAVE, HandleType, Handle, RecNumber, Sqlstate, NativeErrorPtr, MessageText, BufferLength, TextLengthPtr)); ODBC_UNLOCK (); return retcode; } RETCODE SQL_API SQLGetDiagRecA ( SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLCHAR * Sqlstate, SQLINTEGER * NativeErrorPtr, SQLCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLengthPtr) { SQLRETURN retcode = SQL_SUCCESS; ODBC_LOCK (); TRACE (trace_SQLGetDiagRec (TRACE_ENTER, HandleType, Handle, RecNumber, Sqlstate, NativeErrorPtr, MessageText, BufferLength, TextLengthPtr)); retcode = SQLGetDiagRec_Internal ( HandleType, Handle, RecNumber, Sqlstate, NativeErrorPtr, MessageText, BufferLength, TextLengthPtr, 'A'); TRACE (trace_SQLGetDiagRec (TRACE_LEAVE, HandleType, Handle, RecNumber, Sqlstate, NativeErrorPtr, MessageText, BufferLength, TextLengthPtr)); ODBC_UNLOCK (); return retcode; } RETCODE SQL_API SQLGetDiagRecW ( SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLWCHAR * Sqlstate, SQLINTEGER * NativeErrorPtr, SQLWCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLengthPtr) { SQLRETURN retcode = SQL_SUCCESS; ODBC_LOCK (); TRACE (trace_SQLGetDiagRecW (TRACE_ENTER, HandleType, Handle, RecNumber, Sqlstate, NativeErrorPtr, MessageText, BufferLength, TextLengthPtr)); retcode = SQLGetDiagRec_Internal ( HandleType, Handle, RecNumber, Sqlstate, NativeErrorPtr, MessageText, BufferLength, TextLengthPtr, 'W'); TRACE (trace_SQLGetDiagRecW (TRACE_LEAVE, HandleType, Handle, RecNumber, Sqlstate, NativeErrorPtr, MessageText, BufferLength, TextLengthPtr)); ODBC_UNLOCK (); return retcode; } RETCODE SQL_API SQLGetDiagField_Internal ( SQLSMALLINT nHandleType, SQLHANDLE Handle, SQLSMALLINT nRecNumber, SQLSMALLINT nDiagIdentifier, SQLPOINTER pDiagInfoPtr, SQLSMALLINT nBufferLength, SQLSMALLINT * pnStringLengthPtr, SQLCHAR waMode) { GENV (genv, Handle); CONN (con, Handle); STMT (stmt, Handle); DESC (desc, Handle); HERR err; HPROC hproc = SQL_NULL_HPROC; RETCODE retcode = SQL_SUCCESS; SQLHANDLE dhandle = SQL_NULL_HANDLE; SWORD unicode_driver = 0; void *_DiagInfoPtr = NULL; void *diagInfoPtr = pDiagInfoPtr; switch (nHandleType) { case SQL_HANDLE_ENV: if (!IS_VALID_HENV (Handle)) { return SQL_INVALID_HANDLE; } err = genv->herr; con = NULL; stmt = NULL; desc = NULL; break; case SQL_HANDLE_DBC: if (!IS_VALID_HDBC (Handle)) { return SQL_INVALID_HANDLE; } err = con->herr; genv = (GENV_t *) con->genv; stmt = NULL; desc = NULL; dhandle = con->dhdbc; break; case SQL_HANDLE_STMT: if (!IS_VALID_HSTMT (Handle)) { return SQL_INVALID_HANDLE; } err = stmt->herr; con = (DBC_t *) stmt->hdbc; genv = (GENV_t *) con->genv; desc = NULL; dhandle = stmt->dhstmt; break; case SQL_HANDLE_DESC: if (!IS_VALID_HDESC (Handle)) { return SQL_INVALID_HANDLE; } err = desc->herr; stmt = (STMT_t *) desc->hstmt; con = (DBC_t *) desc->hdbc; genv = (GENV_t *) con->genv; dhandle = desc->dhdesc; break; default: return SQL_INVALID_HANDLE; } if (con != NULL && con->henv != SQL_NULL_HENV) unicode_driver = ((ENV_t *) con->henv)->unicode_driver; switch (nRecNumber) { case 0: /* Header record */ switch (nDiagIdentifier) { case SQL_DIAG_ROW_COUNT: { if (nHandleType != SQL_HANDLE_STMT || !stmt) { return SQL_ERROR; } if (stmt->state != en_stmt_executed_with_info && stmt->state != en_stmt_executed && stmt->state != en_stmt_cursoropen) { return SQL_ERROR; } if (!con) { return SQL_INVALID_HANDLE; } CALL_UDRIVER(con, stmt, retcode, hproc, unicode_driver, en_GetDiagField, (SQL_HANDLE_DBC, stmt->dhstmt, nRecNumber, nDiagIdentifier, pDiagInfoPtr, nBufferLength, pnStringLengthPtr )); if (hproc == SQL_NULL_HPROC) { if (!con) { return SQL_INVALID_HANDLE; } hproc = _iodbcdm_getproc (con, en_RowCount); if (!hproc) { return SQL_ERROR; } CALL_DRIVER (stmt->hdbc, stmt, retcode, hproc, (stmt->dhstmt, pDiagInfoPtr)); } return retcode; } case SQL_DIAG_CURSOR_ROW_COUNT: case SQL_DIAG_DYNAMIC_FUNCTION: case SQL_DIAG_DYNAMIC_FUNCTION_CODE: { if (nHandleType != SQL_HANDLE_STMT || !stmt) { return SQL_ERROR; } if (stmt->state != en_stmt_executed_with_info && stmt->state != en_stmt_executed && stmt->state != en_stmt_cursoropen) { return SQL_ERROR; } if (!con) { return SQL_INVALID_HANDLE; } CALL_UDRIVER(con, stmt, retcode, hproc, unicode_driver, en_GetDiagField, (SQL_HANDLE_DBC, stmt->dhstmt, nRecNumber, nDiagIdentifier, pDiagInfoPtr, nBufferLength, pnStringLengthPtr )); if (hproc == SQL_NULL_HPROC) return SQL_ERROR; else return retcode; } case SQL_DIAG_RETURNCODE: if (pDiagInfoPtr) *((SQLRETURN *) pDiagInfoPtr) = ((GENV_t *) Handle)->rc; { return SQL_SUCCESS; } case SQL_DIAG_NUMBER: if (pDiagInfoPtr) { (*(SQLINTEGER *) pDiagInfoPtr) = 0; /* get the number from the driver */ if (con) { CALL_UDRIVER(con, Handle, retcode, hproc, unicode_driver, en_GetDiagField, (nHandleType, dhandle, 0, nDiagIdentifier, pDiagInfoPtr, nBufferLength, pnStringLengthPtr )); if (hproc != SQL_NULL_HPROC) { if (retcode != SQL_SUCCESS) { return retcode; } /* and add the DM's value */ (*(SQLINTEGER *) pDiagInfoPtr) += error_rec_count (err); } else if (((ENV_t *) con->henv)->dodbc_ver == SQL_OV_ODBC2 && ((GENV_t *) Handle)->rc) { /* ODBC2 drivers can only have one error */ (*(SQLINTEGER *) pDiagInfoPtr) = 1; } } else if (genv) { (*(SQLINTEGER *) pDiagInfoPtr) = error_rec_count (err); } } break; default: return SQL_ERROR; } break; default: /* status records */ { int nRecs = 0; if (nRecNumber < 1) { return SQL_ERROR; } nRecs = error_rec_count (err); if (nRecNumber <= nRecs) { /* DM Errors */ char *szval = ""; int ival = 0; int isInt = 0; sqlerr_t *rec = NULL; rec = get_nth_error (err, nRecNumber - 1); if (!rec) { return (SQL_NO_DATA_FOUND); } switch (nDiagIdentifier) { case SQL_DIAG_SUBCLASS_ORIGIN: case SQL_DIAG_CLASS_ORIGIN: isInt = 0; szval = (rec->code >= en_HY001 && rec->code <= en_IM014) ? (char *) "ODBC 3.0" : (char *) "ISO 9075"; break; case SQL_DIAG_COLUMN_NUMBER: if (nHandleType != SQL_HANDLE_STMT || !stmt) { return SQL_ERROR; } if (!con) { return SQL_INVALID_HANDLE; } if (pDiagInfoPtr) *((SQLINTEGER *) pDiagInfoPtr) = SQL_COLUMN_NUMBER_UNKNOWN; return SQL_SUCCESS; case SQL_DIAG_CONNECTION_NAME: case SQL_DIAG_SERVER_NAME: isInt = 0; if (con) { if (waMode != 'W') retcode = SQLGetInfo (con, SQL_DATA_SOURCE_NAME, pDiagInfoPtr, nBufferLength, pnStringLengthPtr); else retcode = SQLGetInfoW (con, SQL_DATA_SOURCE_NAME, pDiagInfoPtr, nBufferLength, pnStringLengthPtr); return retcode; } else break; case SQL_DIAG_MESSAGE_TEXT: isInt = 0; szval = _iodbcdm_getsqlerrmsg (rec, (void *) sqlerrmsg_tab); break; case SQL_DIAG_NATIVE: isInt = 1; ival = 0; break; case SQL_DIAG_ROW_NUMBER: isInt = 1; if (nHandleType != SQL_HANDLE_STMT || !stmt) { return SQL_ERROR; } if (!con) { return SQL_INVALID_HANDLE; } CALL_UDRIVER(con, Handle, retcode, hproc, unicode_driver, en_GetDiagField, (nHandleType, dhandle, nRecNumber, nDiagIdentifier, pDiagInfoPtr, nBufferLength, pnStringLengthPtr )); if (hproc != SQL_NULL_HPROC) { return retcode; } else { ival = SQL_ROW_NUMBER_UNKNOWN; break; } case SQL_DIAG_SQLSTATE: isInt = 0; szval = _iodbcdm_getsqlstate (rec, (void *) sqlerrmsg_tab); break; default: return SQL_ERROR; } if (isInt) { if (pDiagInfoPtr) *((SQLINTEGER *) pDiagInfoPtr) = ival; } else { if (waMode != 'W') { int len = strlen (szval), len1; len1 = len > nBufferLength ? nBufferLength : len; if (pnStringLengthPtr) *pnStringLengthPtr = len; if (pDiagInfoPtr) { STRNCPY (pDiagInfoPtr, szval, len1); *(((SQLCHAR *) pDiagInfoPtr) + len1) = 0; } } else { dm_StrCopyOut2_A2W((SQLCHAR *) szval, (SQLWCHAR *) pDiagInfoPtr, nBufferLength, pnStringLengthPtr); } } break; } else { /* Driver's errors */ nRecNumber -= nRecs; if (!con) { return SQL_NO_DATA_FOUND; } if ((unicode_driver && waMode != 'W') || (!unicode_driver && waMode == 'W')) { switch(nDiagIdentifier) { case SQL_DIAG_DYNAMIC_FUNCTION: case SQL_DIAG_CLASS_ORIGIN: case SQL_DIAG_CONNECTION_NAME: case SQL_DIAG_MESSAGE_TEXT: case SQL_DIAG_SERVER_NAME: case SQL_DIAG_SQLSTATE: case SQL_DIAG_SUBCLASS_ORIGIN: if (waMode != 'W') { /* ansi=>unicode*/ if ((_DiagInfoPtr = malloc((nBufferLength + 1) * sizeof(wchar_t))) == NULL) { return SQL_ERROR; } } else { /* unicode=>ansi*/ if ((_DiagInfoPtr = malloc(nBufferLength + 1)) == NULL) { return SQL_ERROR; } } diagInfoPtr = _DiagInfoPtr; break; } } CALL_UDRIVER(con, Handle, retcode, hproc, unicode_driver, en_GetDiagField, (nHandleType, dhandle, nRecNumber, nDiagIdentifier, diagInfoPtr, nBufferLength, pnStringLengthPtr )); if (hproc != SQL_NULL_HPROC) { if (pDiagInfoPtr && SQL_SUCCEEDED (retcode) && ((unicode_driver && waMode != 'W') || (!unicode_driver && waMode == 'W'))) { switch(nDiagIdentifier) { case SQL_DIAG_DYNAMIC_FUNCTION: case SQL_DIAG_CLASS_ORIGIN: case SQL_DIAG_CONNECTION_NAME: case SQL_DIAG_MESSAGE_TEXT: case SQL_DIAG_SERVER_NAME: case SQL_DIAG_SQLSTATE: case SQL_DIAG_SUBCLASS_ORIGIN: if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *) diagInfoPtr, (SQLCHAR *) pDiagInfoPtr, nBufferLength, pnStringLengthPtr); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *)diagInfoPtr, (SQLWCHAR *) pDiagInfoPtr, nBufferLength, pnStringLengthPtr); } } } MEM_FREE(_DiagInfoPtr); return retcode; } else { /* an ODBC2->ODBC3 translation */ char *szval = ""; wchar_t szState[6]; SQLINTEGER nNative; if (nRecNumber > 1) { MEM_FREE(_DiagInfoPtr); return SQL_NO_DATA_FOUND; } if (nHandleType == SQL_HANDLE_DESC) { MEM_FREE(_DiagInfoPtr); return SQL_INVALID_HANDLE; } if (nDiagIdentifier != SQL_DIAG_MESSAGE_TEXT) MEM_FREE(_DiagInfoPtr); switch (nDiagIdentifier) { case SQL_DIAG_SUBCLASS_ORIGIN: case SQL_DIAG_CLASS_ORIGIN: CALL_UDRIVER (con, Handle, retcode, hproc, unicode_driver, en_Error, (SQL_NULL_HENV, nHandleType == SQL_HANDLE_DBC ? dhandle : SQL_NULL_HDBC, nHandleType == SQL_HANDLE_STMT ? dhandle : SQL_NULL_HSTMT, szState, &nNative, NULL, 0, NULL)); if (hproc == SQL_NULL_HPROC) { return SQL_INVALID_HANDLE; } if (retcode != SQL_SUCCESS) { return SQL_NO_DATA_FOUND; } if (waMode != 'W') { szval = !STRNEQ (szState, "IM", 2) ? (char *) "ODBC 3.0" : (char *) "ISO 9075"; } else { if (szState[0] != L'I' && szState[1] != L'M') szval = (char *) "ODBC 3.0"; else szval = (char *) "ISO 9075"; } break; case SQL_DIAG_ROW_NUMBER: case SQL_DIAG_COLUMN_NUMBER: if (nHandleType != SQL_HANDLE_STMT || !stmt) { return SQL_ERROR; } if (!con) { return SQL_INVALID_HANDLE; } if (pDiagInfoPtr) *((SQLINTEGER *) pDiagInfoPtr) = SQL_COLUMN_NUMBER_UNKNOWN; { return SQL_SUCCESS; } case SQL_DIAG_SERVER_NAME: case SQL_DIAG_CONNECTION_NAME: break; case SQL_DIAG_MESSAGE_TEXT: CALL_UDRIVER (con, Handle, retcode, hproc, unicode_driver, en_Error, (SQL_NULL_HENV, nHandleType == SQL_HANDLE_DBC ? dhandle : SQL_NULL_HDBC, nHandleType == SQL_HANDLE_STMT ? dhandle : SQL_NULL_HSTMT, szState, &nNative, diagInfoPtr, nBufferLength, pnStringLengthPtr)); if (hproc == SQL_NULL_HPROC) { MEM_FREE(_DiagInfoPtr); return SQL_INVALID_HANDLE; } if (pDiagInfoPtr && SQL_SUCCEEDED (retcode) && ((unicode_driver && waMode != 'W') || (!unicode_driver && waMode == 'W'))) { if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *) diagInfoPtr, (SQLCHAR *) pDiagInfoPtr, nBufferLength, pnStringLengthPtr); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *)diagInfoPtr, (SQLWCHAR *) pDiagInfoPtr, nBufferLength, pnStringLengthPtr); } } MEM_FREE(_DiagInfoPtr); return retcode; case SQL_DIAG_NATIVE: CALL_UDRIVER (con, Handle, retcode, hproc, unicode_driver, en_Error, (SQL_NULL_HENV, nHandleType == SQL_HANDLE_DBC ? dhandle : SQL_NULL_HDBC, nHandleType == SQL_HANDLE_STMT ? dhandle : SQL_NULL_HSTMT, szState, &nNative, NULL, 0, NULL)); if (hproc == SQL_NULL_HPROC) { return SQL_INVALID_HANDLE; } if (pDiagInfoPtr) *((SQLINTEGER *) pDiagInfoPtr) = nNative; return retcode; case SQL_DIAG_SQLSTATE: CALL_UDRIVER (con, Handle, retcode, hproc, unicode_driver, en_Error, (SQL_NULL_HENV, nHandleType == SQL_HANDLE_DBC ? dhandle : SQL_NULL_HDBC, nHandleType == SQL_HANDLE_STMT ? dhandle : SQL_NULL_HSTMT, szState, &nNative, NULL, 0, NULL)); if (hproc == SQL_NULL_HPROC) { return SQL_INVALID_HANDLE; } if (pDiagInfoPtr && SQL_SUCCEEDED (retcode) && ((unicode_driver && waMode != 'W') || (!unicode_driver && waMode == 'W'))) { if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *) szState, (SQLCHAR *) pDiagInfoPtr, nBufferLength, pnStringLengthPtr); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *)szState, (SQLWCHAR *) pDiagInfoPtr, nBufferLength, pnStringLengthPtr); } } return retcode; default: return SQL_ERROR; } if (waMode != 'W') { if (pDiagInfoPtr) { int len = strlen (szval); if (len > nBufferLength) len = nBufferLength; if (len) _iodbcdm_strlcpy ((char *) pDiagInfoPtr, szval, len); } if (pnStringLengthPtr) *pnStringLengthPtr = strlen (szval); } else { dm_StrCopyOut2_A2W((SQLCHAR *) szval, (SQLWCHAR *) pDiagInfoPtr, nBufferLength, pnStringLengthPtr); } } /* ODBC3->ODBC2 */ } /* driver's errors */ } /* status records */ } /* switch (nRecNumber */ return (SQL_SUCCESS); } RETCODE SQL_API SQLGetDiagField ( SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER DiagInfoPtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr) { SQLRETURN retcode = SQL_SUCCESS; ODBC_LOCK (); TRACE (trace_SQLGetDiagField (TRACE_ENTER, HandleType, Handle, RecNumber, DiagIdentifier, DiagInfoPtr, BufferLength, StringLengthPtr)); retcode = SQLGetDiagField_Internal ( HandleType, Handle, RecNumber, DiagIdentifier, DiagInfoPtr, BufferLength, StringLengthPtr, 'A'); TRACE (trace_SQLGetDiagField (TRACE_LEAVE, HandleType, Handle, RecNumber, DiagIdentifier, DiagInfoPtr, BufferLength, StringLengthPtr)); ODBC_UNLOCK (); return retcode; } RETCODE SQL_API SQLGetDiagFieldA ( SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER DiagInfoPtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr) { SQLRETURN retcode = SQL_SUCCESS; ODBC_LOCK (); TRACE (trace_SQLGetDiagField (TRACE_ENTER, HandleType, Handle, RecNumber, DiagIdentifier, DiagInfoPtr, BufferLength, StringLengthPtr)); retcode = SQLGetDiagField_Internal ( HandleType, Handle, RecNumber, DiagIdentifier, DiagInfoPtr, BufferLength, StringLengthPtr, 'A'); TRACE (trace_SQLGetDiagField (TRACE_LEAVE, HandleType, Handle, RecNumber, DiagIdentifier, DiagInfoPtr, BufferLength, StringLengthPtr)); ODBC_UNLOCK (); return retcode; } RETCODE SQL_API SQLGetDiagFieldW ( SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER DiagInfoPtr, SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr) { SQLRETURN retcode = SQL_SUCCESS; ODBC_LOCK (); TRACE (trace_SQLGetDiagFieldW (TRACE_ENTER, HandleType, Handle, RecNumber, DiagIdentifier, DiagInfoPtr, BufferLength, StringLengthPtr)); retcode = SQLGetDiagField_Internal ( HandleType, Handle, RecNumber, DiagIdentifier, DiagInfoPtr, BufferLength, StringLengthPtr, 'W'); TRACE (trace_SQLGetDiagFieldW (TRACE_LEAVE, HandleType, Handle, RecNumber, DiagIdentifier, DiagInfoPtr, BufferLength, StringLengthPtr)); ODBC_UNLOCK (); return retcode; } #endif libiodbc-3.52.9/iodbc/iodbc_misc.h0000644000076400007640000000670312323210535013640 00000000000000/* * iodbc_misc.h * * $Id$ * * Misc functions * * The iODBC driver manager. * * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _IODBC_MISC_H_ #define _IODBC_MISC_H_ #include "inifile.h" int _iodbcdm_cfg_init_str (PCONFIG *ppconf, void *str, int size, int wide); int _iodbcdm_cfg_parse_str (PCONFIG pconfig, void *str, int size, int wide); void *_iodbcdm_cfg_lookup (PCONFIG pconfig, const char *id); int _iodbcdm_cfg_to_string (PCONFIG pconfig, char *section, char *buf, size_t buf_sz); #endif /* _IODBC_MISC_H_ */ libiodbc-3.52.9/iodbc/henv.h0000644000076400007640000001531012323210535012477 00000000000000/* * henv.h * * $Id$ * * Environment object management functions * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _HENV_H #define _HENV_H #include #include #include #include #include enum odbcapi_t { en_NullProc = 0 #define FUNCDEF(A, B, C) ,B #include "henv.ci" #undef FUNCDEF , __LAST_API_FUNCTION__ } ; #if (ODBCVER >= 0x300) /* * SQL_ATTR_CONNECTION_POOLING value */ extern SQLINTEGER _iodbcdm_attr_connection_pooling; #endif typedef struct { int type; /* must be 1st field */ HERR herr; /* err list */ SQLRETURN rc; HENV henv; /* driver's env list */ HDBC hdbc; /* driver's dbc list */ int state; #if (ODBCVER >= 0x300) SQLUINTEGER odbc_ver; /* ODBC version of the application */ SQLINTEGER connection_pooling; /* SQL_ATTR_CONNECTION_POOLING value at the time of env creation */ SQLINTEGER cp_match; /* connection pool matching method */ struct DBC *pdbc_pool; /* connection pool */ #endif SQLSMALLINT err_rec; } GENV_t; typedef struct { HENV next; /* next attached env handle */ int refcount; /* Driver's bookkeeping reference count */ HPROC dllproc_tab[__LAST_API_FUNCTION__]; /* driver api calls */ HENV dhenv; /* driver env handle */ HDLL hdll; /* driver share library handle */ SWORD thread_safe; /* Is the driver threadsafe? */ SWORD unicode_driver; /* Is the driver unicode? */ MUTEX_DECLARE (drv_lock); /* Used only when driver is not threadsafe */ #if (ODBCVER >= 0x300) SQLUINTEGER dodbc_ver; /* driver's ODBC version */ #endif } ENV_t; #define IS_VALID_HENV(x) \ ((x) != SQL_NULL_HENV && ((GENV_t *)(x))->type == SQL_HANDLE_ENV) #define ENTER_HENV(henv, trace) \ GENV (genv, henv); \ SQLRETURN retcode = SQL_SUCCESS; \ ODBC_LOCK (); \ TRACE (trace); \ if (!IS_VALID_HENV (henv)) \ { \ retcode = SQL_INVALID_HANDLE; \ goto done; \ } \ CLEAR_ERRORS (genv) #define LEAVE_HENV(henv, trace) \ done: \ TRACE(trace); \ ODBC_UNLOCK (); \ return (retcode) /* * Multi threading */ #if defined (IODBC_THREADING) extern SPINLOCK_DECLARE(iodbcdm_global_lock); #define ODBC_LOCK() SPINLOCK_LOCK(iodbcdm_global_lock) #define ODBC_UNLOCK() SPINLOCK_UNLOCK(iodbcdm_global_lock) #else #define ODBC_LOCK() #define ODBC_UNLOCK() #endif /* * Prototypes */ void Init_iODBC(void); void Done_iODBC(void); /* Note: * * - ODBC applications only know about global environment handle, * a void pointer points to a GENV_t object. There is only one * this object per process(however, to make the library reentrant, * we still keep this object on heap). Applications only know * address of this object and needn't care about its detail. * * - ODBC driver manager knows about instance environment handles, * void pointers point to ENV_t objects. There are maybe more * than one this kind of objects per process. However, multiple * connections to a same data source(i.e. call same share library) * will share one instance environment object. * * - ODBC driver manager knows about their own environment handle, * a void pointer point to a driver defined object. Every driver * keeps one of its own environment object and driver manager * keeps address of it by the 'dhenv' field in the instance * environment object without care about its detail. * * - Applications can get driver's environment object handle by * SQLGetInfo() with fInfoType equals to SQL_DRIVER_HENV */ #endif libiodbc-3.52.9/iodbc/catalog.c0000644000076400007640000017676612323210535013173 00000000000000/* * catalog.c * * $Id$ * * Catalog functions * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include #include #include /* * Check state for executing catalog functions */ static SQLRETURN _iodbcdm_cata_state_ok ( STMT_t * pstmt, int fidx) { sqlstcode_t sqlstat = en_00000; if (pstmt->asyn_on == en_NullProc) { switch (pstmt->state) { case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: sqlstat = en_S1010; break; case en_stmt_fetched: case en_stmt_xfetched: sqlstat = en_24000; break; default: break; } } else if (pstmt->asyn_on != fidx) { sqlstat = en_S1010; } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } return SQL_SUCCESS; } /* * State transition for catalog function */ static SQLRETURN _iodbcdm_cata_state_tr ( STMT_t * pstmt, int fidx, SQLRETURN result) { if (pstmt->asyn_on == fidx) { switch (result) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: case SQL_ERROR: pstmt->asyn_on = en_NullProc; break; case SQL_STILL_EXECUTING: default: return result; } } if (pstmt->state <= en_stmt_executed) { switch (result) { case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: pstmt->state = en_stmt_cursoropen; break; case SQL_ERROR: pstmt->state = en_stmt_allocated; pstmt->prep_state = 0; break; case SQL_STILL_EXECUTING: pstmt->asyn_on = fidx; break; default: break; } } return result; } SQLRETURN SQL_API SQLGetTypeInfo_Internal ( SQLHSTMT hstmt, SQLSMALLINT fSqlType, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; waMode = waMode; /*NOTUSED*/ for (;;) { #if (ODBCVER < 0x0300) if (fSqlType > SQL_TYPE_MAX) { sqlstat = en_S1004; break; } /* Note: SQL_TYPE_DRIVER_START is a negative number So, we use ">" */ if (fSqlType < SQL_TYPE_MIN && fSqlType > SQL_TYPE_DRIVER_START) { sqlstat = en_S1004; break; } #endif /* ODBCVER < 0x0300 */ retcode = _iodbcdm_cata_state_ok (pstmt, en_GetTypeInfo); if (retcode != SQL_SUCCESS) { return SQL_ERROR; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_GetTypeInfo, ( pstmt->dhstmt, fSqlType)); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM001; break; } sqlstat = en_00000; if (1) /* turn off solaris warning message */ break; } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } retcode = _iodbcdm_cata_state_tr (pstmt, en_GetTypeInfo, retcode); return retcode; } SQLRETURN SQL_API SQLGetTypeInfo (SQLHSTMT hstmt, SQLSMALLINT fSqlType) { ENTER_STMT (hstmt, trace_SQLGetTypeInfo (TRACE_ENTER, hstmt, fSqlType)); retcode = SQLGetTypeInfo_Internal (hstmt, fSqlType, 'A'); LEAVE_STMT (hstmt, trace_SQLGetTypeInfo (TRACE_LEAVE, hstmt, fSqlType)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLGetTypeInfoA (SQLHSTMT hstmt, SQLSMALLINT fSqlType) { ENTER_STMT (hstmt, trace_SQLGetTypeInfo (TRACE_ENTER, hstmt, fSqlType)); retcode = SQLGetTypeInfo_Internal (hstmt, fSqlType, 'A'); LEAVE_STMT (hstmt, trace_SQLGetTypeInfo (TRACE_LEAVE, hstmt, fSqlType)); } SQLRETURN SQL_API SQLGetTypeInfoW (SQLHSTMT hstmt, SQLSMALLINT fSqlType) { ENTER_STMT (hstmt, trace_SQLGetTypeInfoW (TRACE_ENTER, hstmt, fSqlType)); retcode = SQLGetTypeInfo_Internal (hstmt, fSqlType, 'W'); LEAVE_STMT (hstmt, trace_SQLGetTypeInfoW (TRACE_LEAVE, hstmt, fSqlType)); } #endif SQLRETURN SQL_API SQLSpecialColumns_Internal ( SQLHSTMT hstmt, SQLUSMALLINT fColType, SQLPOINTER szTableQualifier, SQLSMALLINT cbTableQualifier, SQLPOINTER szTableOwner, SQLSMALLINT cbTableOwner, SQLPOINTER szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fScope, SQLUSMALLINT fNullable, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _TableQualifier = NULL; void * _TableOwner = NULL; void * _TableName = NULL; for (;;) { if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS) || (cbTableOwner < 0 && cbTableOwner != SQL_NTS) || (cbTableName < 0 && cbTableName != SQL_NTS)) { sqlstat = en_S1090; break; } if (fColType != SQL_BEST_ROWID && fColType != SQL_ROWVER) { sqlstat = en_S1097; break; } if (fScope != SQL_SCOPE_CURROW && fScope != SQL_SCOPE_TRANSACTION && fScope != SQL_SCOPE_SESSION) { sqlstat = en_S1098; break; } if (fNullable != SQL_NO_NULLS && fNullable != SQL_NULLABLE) { sqlstat = en_S1099; break; } retcode = _iodbcdm_cata_state_ok (pstmt, en_SpecialColumns); if (retcode != SQL_SUCCESS) { return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _TableQualifier = _iodbcdm_conv_var_A2W(pstmt, 0, (SQLCHAR *) szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_A2W(pstmt, 1, (SQLCHAR *) szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_A2W(pstmt, 2, (SQLCHAR *) szTableName, cbTableName); } else { /* unicode=>ansi*/ _TableQualifier = _iodbcdm_conv_var_W2A(pstmt, 0, (SQLWCHAR *)szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_W2A(pstmt, 1, (SQLWCHAR *)szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_W2A(pstmt, 2, (SQLWCHAR *)szTableName, cbTableName); } szTableQualifier = _TableQualifier; szTableOwner = _TableOwner; szTableName = _TableName; cbTableQualifier = SQL_NTS; cbTableOwner = SQL_NTS; cbTableName = SQL_NTS; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_SpecialColumns, ( pstmt->dhstmt, fColType, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fScope, fNullable)); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM001; break; } sqlstat = en_00000; if (1) /* turn off solaris warning message */ break; } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } retcode = _iodbcdm_cata_state_tr (pstmt, en_SpecialColumns, retcode); return retcode; } SQLRETURN SQL_API SQLSpecialColumns (SQLHSTMT hstmt, SQLUSMALLINT fColType, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fScope, SQLUSMALLINT fNullable) { ENTER_STMT (hstmt, trace_SQLSpecialColumns (TRACE_ENTER, hstmt, fColType, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fScope, fNullable)); retcode = SQLSpecialColumns_Internal( hstmt, fColType, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fScope, fNullable, 'A'); LEAVE_STMT (hstmt, trace_SQLSpecialColumns (TRACE_LEAVE, hstmt, fColType, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fScope, fNullable)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLSpecialColumnsA (SQLHSTMT hstmt, SQLUSMALLINT fColType, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fScope, SQLUSMALLINT fNullable) { ENTER_STMT (hstmt, trace_SQLSpecialColumns (TRACE_ENTER, hstmt, fColType, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fScope, fNullable)); retcode = SQLSpecialColumns_Internal( hstmt, fColType, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fScope, fNullable, 'A'); LEAVE_STMT (hstmt, trace_SQLSpecialColumns (TRACE_LEAVE, hstmt, fColType, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fScope, fNullable)); } SQLRETURN SQL_API SQLSpecialColumnsW (SQLHSTMT hstmt, SQLUSMALLINT fColType, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fScope, SQLUSMALLINT fNullable) { ENTER_STMT (hstmt, trace_SQLSpecialColumnsW (TRACE_ENTER, hstmt, fColType, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fScope, fNullable)); retcode = SQLSpecialColumns_Internal( hstmt, fColType, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fScope, fNullable, 'W'); LEAVE_STMT (hstmt, trace_SQLSpecialColumnsW (TRACE_LEAVE, hstmt, fColType, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fScope, fNullable)); } #endif SQLRETURN SQL_API SQLStatistics_Internal ( SQLHSTMT hstmt, SQLPOINTER szTableQualifier, SQLSMALLINT cbTableQualifier, SQLPOINTER szTableOwner, SQLSMALLINT cbTableOwner, SQLPOINTER szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fUnique, SQLUSMALLINT fAccuracy, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _TableQualifier = NULL; void * _TableOwner = NULL; void * _TableName = NULL; for (;;) { if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS) || (cbTableOwner < 0 && cbTableOwner != SQL_NTS) || (cbTableName < 0 && cbTableName != SQL_NTS)) { sqlstat = en_S1090; break; } if (fUnique != SQL_INDEX_UNIQUE && fUnique != SQL_INDEX_ALL) { sqlstat = en_S1100; break; } if (fAccuracy != SQL_ENSURE && fAccuracy != SQL_QUICK) { sqlstat = en_S1101; break; } retcode = _iodbcdm_cata_state_ok (pstmt, en_Statistics); if (retcode != SQL_SUCCESS) { return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _TableQualifier = _iodbcdm_conv_var_A2W(pstmt, 0, (SQLCHAR *)szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_A2W(pstmt, 1, (SQLCHAR *)szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_A2W(pstmt, 2, (SQLCHAR *)szTableName, cbTableName); } else { /* unicode=>ansi*/ _TableQualifier = _iodbcdm_conv_var_W2A(pstmt, 0, (SQLWCHAR *)szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_W2A(pstmt, 1, (SQLWCHAR *)szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_W2A(pstmt, 2, (SQLWCHAR *)szTableName, cbTableName); } szTableQualifier = _TableQualifier; szTableOwner = _TableOwner; szTableName = _TableName; cbTableQualifier = SQL_NTS; cbTableOwner = SQL_NTS; cbTableName = SQL_NTS; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_Statistics, ( pstmt->dhstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fUnique, fAccuracy)); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM001; break; } sqlstat = en_00000; if (1) /* turn off solaris warning message */ break; } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } retcode = _iodbcdm_cata_state_tr (pstmt, en_Statistics, retcode); return retcode; } SQLRETURN SQL_API SQLStatistics (SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fUnique, SQLUSMALLINT fAccuracy) { ENTER_STMT (hstmt, trace_SQLStatistics (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fUnique, fAccuracy)); retcode = SQLStatistics_Internal ( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fUnique, fAccuracy, 'A'); LEAVE_STMT (hstmt, trace_SQLStatistics (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fUnique, fAccuracy)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLStatisticsA (SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fUnique, SQLUSMALLINT fAccuracy) { ENTER_STMT (hstmt, trace_SQLStatistics (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fUnique, fAccuracy)); retcode = SQLStatistics_Internal ( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fUnique, fAccuracy, 'A'); LEAVE_STMT (hstmt, trace_SQLStatistics (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fUnique, fAccuracy)); } SQLRETURN SQL_API SQLStatisticsW (SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLUSMALLINT fUnique, SQLUSMALLINT fAccuracy) { ENTER_STMT (hstmt, trace_SQLStatisticsW (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fUnique, fAccuracy)); retcode = SQLStatistics_Internal ( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fUnique, fAccuracy, 'W'); LEAVE_STMT (hstmt, trace_SQLStatisticsW (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, fUnique, fAccuracy)); } #endif SQLRETURN SQL_API SQLTables_Internal ( SQLHSTMT hstmt, SQLPOINTER szTableQualifier, SQLSMALLINT cbTableQualifier, SQLPOINTER szTableOwner, SQLSMALLINT cbTableOwner, SQLPOINTER szTableName, SQLSMALLINT cbTableName, SQLPOINTER szTableType, SQLSMALLINT cbTableType, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _TableQualifier = NULL; void * _TableOwner = NULL; void * _TableName = NULL; void * _TableType = NULL; for (;;) { if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS) || (cbTableOwner < 0 && cbTableOwner != SQL_NTS) || (cbTableName < 0 && cbTableName != SQL_NTS) || (cbTableType < 0 && cbTableType != SQL_NTS)) { sqlstat = en_S1090; break; } retcode = _iodbcdm_cata_state_ok (pstmt, en_Tables); if (retcode != SQL_SUCCESS) { return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _TableQualifier = _iodbcdm_conv_var_A2W(pstmt, 0, (SQLCHAR *)szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_A2W(pstmt, 1, (SQLCHAR *)szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_A2W(pstmt, 2, (SQLCHAR *)szTableName, cbTableName); _TableType = _iodbcdm_conv_var_A2W(pstmt, 3, (SQLCHAR *)szTableType, cbTableType); } else { /* unicode=>ansi*/ _TableQualifier = _iodbcdm_conv_var_W2A(pstmt, 0, (SQLWCHAR *)szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_W2A(pstmt, 1, (SQLWCHAR *)szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_W2A(pstmt, 2, (SQLWCHAR *)szTableName, cbTableName); _TableType = _iodbcdm_conv_var_W2A(pstmt, 3, (SQLWCHAR *)szTableType, cbTableType); } szTableQualifier = _TableQualifier; szTableOwner = _TableOwner; szTableName = _TableName; szTableType = _TableType; cbTableQualifier = SQL_NTS; cbTableOwner = SQL_NTS; cbTableName = SQL_NTS; cbTableType = SQL_NTS; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_Tables, ( pstmt->dhstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szTableType, cbTableType)); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM001; break; } sqlstat = en_00000; if (1) /* turn off solaris warning message */ break; } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } retcode = _iodbcdm_cata_state_tr (pstmt, en_Tables, retcode); return retcode; } SQLRETURN SQL_API SQLTables (SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szTableType, SQLSMALLINT cbTableType) { ENTER_STMT (hstmt, trace_SQLTables (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szTableType, cbTableType)); retcode = SQLTables_Internal( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szTableType, cbTableType, 'A'); LEAVE_STMT (hstmt, trace_SQLTables (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szTableType, cbTableType)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLTablesA (SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szTableType, SQLSMALLINT cbTableType) { ENTER_STMT (hstmt, trace_SQLTables (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szTableType, cbTableType)); retcode = SQLTables_Internal ( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szTableType, cbTableType, 'A'); LEAVE_STMT (hstmt, trace_SQLTables (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szTableType, cbTableType)); } SQLRETURN SQL_API SQLTablesW (SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szTableType, SQLSMALLINT cbTableType) { ENTER_STMT (hstmt, trace_SQLTablesW (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szTableType, cbTableType)); retcode = SQLTables_Internal ( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szTableType, cbTableType, 'W'); LEAVE_STMT (hstmt, trace_SQLTablesW (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szTableType, cbTableType)); } #endif SQLRETURN SQL_API SQLColumnPrivileges_Internal ( SQLHSTMT hstmt, SQLPOINTER szTableQualifier, SQLSMALLINT cbTableQualifier, SQLPOINTER szTableOwner, SQLSMALLINT cbTableOwner, SQLPOINTER szTableName, SQLSMALLINT cbTableName, SQLPOINTER szColumnName, SQLSMALLINT cbColumnName, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _TableQualifier = NULL; void * _TableOwner = NULL; void * _TableName = NULL; void * _ColumnName = NULL; for (;;) { if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS) || (cbTableOwner < 0 && cbTableOwner != SQL_NTS) || (cbTableName < 0 && cbTableName != SQL_NTS) || (cbColumnName < 0 && cbColumnName != SQL_NTS)) { sqlstat = en_S1090; break; } retcode = _iodbcdm_cata_state_ok (pstmt, en_ColumnPrivileges); if (retcode != SQL_SUCCESS) { return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _TableQualifier = _iodbcdm_conv_var_A2W(pstmt, 0, (SQLCHAR *)szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_A2W(pstmt, 1, (SQLCHAR *)szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_A2W(pstmt, 2, (SQLCHAR *)szTableName, cbTableName); _ColumnName = _iodbcdm_conv_var_A2W(pstmt, 3, (SQLCHAR *)szColumnName, cbColumnName); } else { /* unicode=>ansi*/ _TableQualifier = _iodbcdm_conv_var_W2A(pstmt, 0, (SQLWCHAR *)szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_W2A(pstmt, 1, (SQLWCHAR *)szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_W2A(pstmt, 2, (SQLWCHAR *)szTableName, cbTableName); _ColumnName = _iodbcdm_conv_var_W2A(pstmt, 3, (SQLWCHAR *)szColumnName, cbColumnName); } szTableQualifier = _TableQualifier; szTableOwner = _TableOwner; szTableName = _TableName; szColumnName = _ColumnName; cbTableQualifier = SQL_NTS; cbTableOwner = SQL_NTS; cbTableName = SQL_NTS; cbColumnName = SQL_NTS; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_ColumnPrivileges, ( pstmt->dhstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM001; break; } sqlstat = en_00000; if (1) /* turn off solaris warning message */ break; } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } retcode = _iodbcdm_cata_state_tr (pstmt, en_ColumnPrivileges, retcode); return retcode; } SQLRETURN SQL_API SQLColumnPrivileges (SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName) { ENTER_STMT (hstmt, trace_SQLColumnPrivileges (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); retcode = SQLColumnPrivileges_Internal(hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName, 'A'); LEAVE_STMT (hstmt, trace_SQLColumnPrivileges (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLColumnPrivilegesA (SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName) { ENTER_STMT (hstmt, trace_SQLColumnPrivileges (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); retcode = SQLColumnPrivileges_Internal(hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName, 'A'); LEAVE_STMT (hstmt, trace_SQLColumnPrivileges (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); } SQLRETURN SQL_API SQLColumnPrivilegesW (SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName) { ENTER_STMT (hstmt, trace_SQLColumnPrivilegesW (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); retcode = SQLColumnPrivileges_Internal (hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName, 'W'); LEAVE_STMT (hstmt, trace_SQLColumnPrivilegesW (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); } #endif SQLRETURN SQL_API SQLColumns_Internal ( SQLHSTMT hstmt, SQLPOINTER szTableQualifier, SQLSMALLINT cbTableQualifier, SQLPOINTER szTableOwner, SQLSMALLINT cbTableOwner, SQLPOINTER szTableName, SQLSMALLINT cbTableName, SQLPOINTER szColumnName, SQLSMALLINT cbColumnName, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _TableQualifier = NULL; void * _TableOwner = NULL; void * _TableName = NULL; void * _ColumnName = NULL; for (;;) { if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS) || (cbTableOwner < 0 && cbTableOwner != SQL_NTS) || (cbTableName < 0 && cbTableName != SQL_NTS) || (cbColumnName < 0 && cbColumnName != SQL_NTS)) { sqlstat = en_S1090; break; } retcode = _iodbcdm_cata_state_ok (pstmt, en_Columns); if (retcode != SQL_SUCCESS) { return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _TableQualifier = _iodbcdm_conv_var_A2W(pstmt, 0, (SQLCHAR *)szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_A2W(pstmt, 1, (SQLCHAR *)szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_A2W(pstmt, 2, (SQLCHAR *)szTableName, cbTableName); _ColumnName = _iodbcdm_conv_var_A2W(pstmt, 3, (SQLCHAR *)szColumnName, cbColumnName); } else { /* unicode=>ansi*/ _TableQualifier = _iodbcdm_conv_var_W2A(pstmt, 0, (SQLWCHAR *) szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_W2A(pstmt, 1, (SQLWCHAR *) szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_W2A(pstmt, 2, (SQLWCHAR *) szTableName, cbTableName); _ColumnName = _iodbcdm_conv_var_W2A(pstmt, 3, (SQLWCHAR *) szColumnName, cbColumnName); } szTableQualifier = _TableQualifier; szTableOwner = _TableOwner; szTableName = _TableName; szColumnName = _ColumnName; cbTableQualifier = SQL_NTS; cbTableOwner = SQL_NTS; cbTableName = SQL_NTS; cbColumnName = SQL_NTS; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_Columns, ( pstmt->dhstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM001; break; } sqlstat = en_00000; if (1) /* turn off solaris warning message */ break; } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } retcode = _iodbcdm_cata_state_tr (pstmt, en_Columns, retcode); return retcode; } SQLRETURN SQL_API SQLColumns (SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName) { ENTER_STMT (hstmt, trace_SQLColumns (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); retcode = SQLColumns_Internal ( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName, 'A'); LEAVE_STMT (hstmt, trace_SQLColumns (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLColumnsA (SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName) { ENTER_STMT (hstmt, trace_SQLColumns (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); retcode = SQLColumns_Internal ( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName, 'A'); LEAVE_STMT (hstmt, trace_SQLColumns (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); } SQLRETURN SQL_API SQLColumnsW (SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName) { ENTER_STMT (hstmt, trace_SQLColumnsW (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); retcode = SQLColumns_Internal ( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName, 'W'); LEAVE_STMT (hstmt, trace_SQLColumnsW (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, szColumnName, cbColumnName)); } #endif SQLRETURN SQL_API SQLForeignKeys_Internal ( SQLHSTMT hstmt, SQLPOINTER szPkTableQualifier, SQLSMALLINT cbPkTableQualifier, SQLPOINTER szPkTableOwner, SQLSMALLINT cbPkTableOwner, SQLPOINTER szPkTableName, SQLSMALLINT cbPkTableName, SQLPOINTER szFkTableQualifier, SQLSMALLINT cbFkTableQualifier, SQLPOINTER szFkTableOwner, SQLSMALLINT cbFkTableOwner, SQLPOINTER szFkTableName, SQLSMALLINT cbFkTableName, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _PkTableQualifier = NULL; void * _PkTableOwner = NULL; void * _PkTableName = NULL; void * _FkTableQualifier = NULL; void * _FkTableOwner = NULL; void * _FkTableName = NULL; for (;;) { if ((cbPkTableQualifier < 0 && cbPkTableQualifier != SQL_NTS) || (cbPkTableOwner < 0 && cbPkTableOwner != SQL_NTS) || (cbPkTableName < 0 && cbPkTableName != SQL_NTS) || (cbFkTableQualifier < 0 && cbFkTableQualifier != SQL_NTS) || (cbFkTableOwner < 0 && cbFkTableOwner != SQL_NTS) || (cbFkTableName < 0 && cbFkTableName != SQL_NTS)) { sqlstat = en_S1090; break; } retcode = _iodbcdm_cata_state_ok (pstmt, en_ForeignKeys); if (retcode != SQL_SUCCESS) { return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _PkTableQualifier = _iodbcdm_conv_var_A2W(pstmt, 0, (SQLCHAR *)szPkTableQualifier, cbPkTableQualifier); _PkTableOwner = _iodbcdm_conv_var_A2W(pstmt, 1, (SQLCHAR *)szPkTableOwner, cbPkTableOwner); _PkTableName = _iodbcdm_conv_var_A2W(pstmt, 2, (SQLCHAR *)szPkTableName, cbPkTableName); _FkTableQualifier = _iodbcdm_conv_var_A2W(pstmt, 3, (SQLCHAR *)szFkTableQualifier, cbFkTableQualifier); _FkTableOwner = _iodbcdm_conv_var_A2W(pstmt, 4, (SQLCHAR *)szFkTableOwner, cbFkTableOwner); _FkTableName = _iodbcdm_conv_var_A2W(pstmt, 5, (SQLCHAR *)szFkTableName, cbFkTableName); } else { /* unicode=>ansi*/ _PkTableQualifier = _iodbcdm_conv_var_W2A(pstmt, 0, (SQLWCHAR *)szPkTableQualifier, cbPkTableQualifier); _PkTableOwner = _iodbcdm_conv_var_W2A(pstmt, 1, (SQLWCHAR *)szPkTableOwner, cbPkTableOwner); _PkTableName = _iodbcdm_conv_var_W2A(pstmt, 2, (SQLWCHAR *)szPkTableName, cbPkTableName); _FkTableQualifier = _iodbcdm_conv_var_W2A(pstmt, 3, (SQLWCHAR *)szFkTableQualifier, cbFkTableQualifier); _FkTableOwner = _iodbcdm_conv_var_W2A(pstmt, 4, (SQLWCHAR *)szFkTableOwner, cbFkTableOwner); _FkTableName = _iodbcdm_conv_var_W2A(pstmt, 5, (SQLWCHAR *)szFkTableName, cbFkTableName); } szPkTableQualifier = _PkTableQualifier; szPkTableOwner = _PkTableOwner; szPkTableName = _PkTableName; szFkTableQualifier = _FkTableQualifier; szFkTableOwner = _FkTableOwner; szFkTableName = _FkTableName; cbPkTableQualifier = SQL_NTS; cbPkTableOwner = SQL_NTS; cbPkTableName = SQL_NTS; cbFkTableQualifier = SQL_NTS; cbFkTableOwner = SQL_NTS; cbFkTableName = SQL_NTS; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_ForeignKeys, ( pstmt->dhstmt, szPkTableQualifier, cbPkTableQualifier, szPkTableOwner, cbPkTableOwner, szPkTableName, cbPkTableName, szFkTableQualifier, cbFkTableQualifier, szFkTableOwner, cbFkTableOwner, szFkTableName, cbFkTableName)); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM001; break; } sqlstat = en_00000; if (1) /* turn off solaris warning message */ break; } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } retcode = _iodbcdm_cata_state_tr (pstmt, en_ForeignKeys, retcode); return retcode; } SQLRETURN SQL_API SQLForeignKeys (SQLHSTMT hstmt, SQLCHAR * szPkTableQualifier, SQLSMALLINT cbPkTableQualifier, SQLCHAR * szPkTableOwner, SQLSMALLINT cbPkTableOwner, SQLCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLCHAR * szFkTableQualifier, SQLSMALLINT cbFkTableQualifier, SQLCHAR * szFkTableOwner, SQLSMALLINT cbFkTableOwner, SQLCHAR * szFkTableName, SQLSMALLINT cbFkTableName) { ENTER_STMT (hstmt, trace_SQLForeignKeys (TRACE_ENTER, hstmt, szPkTableQualifier, cbPkTableQualifier, szPkTableOwner, cbPkTableOwner, szPkTableName, cbPkTableName, szFkTableQualifier, cbFkTableQualifier, szFkTableOwner, cbFkTableOwner, szFkTableName, cbFkTableName)); retcode = SQLForeignKeys_Internal( hstmt, szPkTableQualifier, cbPkTableQualifier, szPkTableOwner, cbPkTableOwner, szPkTableName, cbPkTableName, szFkTableQualifier, cbFkTableQualifier, szFkTableOwner, cbFkTableOwner, szFkTableName, cbFkTableName, 'A'); LEAVE_STMT (hstmt, trace_SQLForeignKeys (TRACE_LEAVE, hstmt, szPkTableQualifier, cbPkTableQualifier, szPkTableOwner, cbPkTableOwner, szPkTableName, cbPkTableName, szFkTableQualifier, cbFkTableQualifier, szFkTableOwner, cbFkTableOwner, szFkTableName, cbFkTableName)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLForeignKeysA (SQLHSTMT hstmt, SQLCHAR * szPkTableQualifier, SQLSMALLINT cbPkTableQualifier, SQLCHAR * szPkTableOwner, SQLSMALLINT cbPkTableOwner, SQLCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLCHAR * szFkTableQualifier, SQLSMALLINT cbFkTableQualifier, SQLCHAR * szFkTableOwner, SQLSMALLINT cbFkTableOwner, SQLCHAR * szFkTableName, SQLSMALLINT cbFkTableName) { ENTER_STMT (hstmt, trace_SQLForeignKeys (TRACE_ENTER, hstmt, szPkTableQualifier, cbPkTableQualifier, szPkTableOwner, cbPkTableOwner, szPkTableName, cbPkTableName, szFkTableQualifier, cbFkTableQualifier, szFkTableOwner, cbFkTableOwner, szFkTableName, cbFkTableName)); retcode = SQLForeignKeys_Internal( hstmt, szPkTableQualifier, cbPkTableQualifier, szPkTableOwner, cbPkTableOwner, szPkTableName, cbPkTableName, szFkTableQualifier, cbFkTableQualifier, szFkTableOwner, cbFkTableOwner, szFkTableName, cbFkTableName, 'A'); LEAVE_STMT (hstmt, trace_SQLForeignKeys (TRACE_LEAVE, hstmt, szPkTableQualifier, cbPkTableQualifier, szPkTableOwner, cbPkTableOwner, szPkTableName, cbPkTableName, szFkTableQualifier, cbFkTableQualifier, szFkTableOwner, cbFkTableOwner, szFkTableName, cbFkTableName)); } SQLRETURN SQL_API SQLForeignKeysW (SQLHSTMT hstmt, SQLWCHAR * szPkTableQualifier, SQLSMALLINT cbPkTableQualifier, SQLWCHAR * szPkTableOwner, SQLSMALLINT cbPkTableOwner, SQLWCHAR * szPkTableName, SQLSMALLINT cbPkTableName, SQLWCHAR * szFkTableQualifier, SQLSMALLINT cbFkTableQualifier, SQLWCHAR * szFkTableOwner, SQLSMALLINT cbFkTableOwner, SQLWCHAR * szFkTableName, SQLSMALLINT cbFkTableName) { ENTER_STMT (hstmt, trace_SQLForeignKeysW (TRACE_ENTER, hstmt, szPkTableQualifier, cbPkTableQualifier, szPkTableOwner, cbPkTableOwner, szPkTableName, cbPkTableName, szFkTableQualifier, cbFkTableQualifier, szFkTableOwner, cbFkTableOwner, szFkTableName, cbFkTableName)); retcode = SQLForeignKeys_Internal( hstmt, szPkTableQualifier, cbPkTableQualifier, szPkTableOwner, cbPkTableOwner, szPkTableName, cbPkTableName, szFkTableQualifier, cbFkTableQualifier, szFkTableOwner, cbFkTableOwner, szFkTableName, cbFkTableName, 'W'); LEAVE_STMT (hstmt, trace_SQLForeignKeysW (TRACE_LEAVE, hstmt, szPkTableQualifier, cbPkTableQualifier, szPkTableOwner, cbPkTableOwner, szPkTableName, cbPkTableName, szFkTableQualifier, cbFkTableQualifier, szFkTableOwner, cbFkTableOwner, szFkTableName, cbFkTableName)); } #endif SQLRETURN SQL_API SQLPrimaryKeys_Internal ( SQLHSTMT hstmt, SQLPOINTER szTableQualifier, SQLSMALLINT cbTableQualifier, SQLPOINTER szTableOwner, SQLSMALLINT cbTableOwner, SQLPOINTER szTableName, SQLSMALLINT cbTableName, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _TableQualifier = NULL; void * _TableOwner = NULL; void * _TableName = NULL; for (;;) { if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS) || (cbTableOwner < 0 && cbTableOwner != SQL_NTS) || (cbTableName < 0 && cbTableName != SQL_NTS)) { sqlstat = en_S1090; break; } retcode = _iodbcdm_cata_state_ok (pstmt, en_PrimaryKeys); if (retcode != SQL_SUCCESS) { return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _TableQualifier = _iodbcdm_conv_var_A2W(pstmt, 0, (SQLCHAR *)szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_A2W(pstmt, 1, (SQLCHAR *)szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_A2W(pstmt, 2, (SQLCHAR *)szTableName, cbTableName); } else { /* unicode=>ansi*/ _TableQualifier = _iodbcdm_conv_var_W2A(pstmt, 0, (SQLWCHAR *)szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_W2A(pstmt, 1, (SQLWCHAR *)szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_W2A(pstmt, 2, (SQLWCHAR *)szTableName, cbTableName); } szTableQualifier = _TableQualifier; szTableOwner = _TableOwner; szTableName = _TableName; cbTableQualifier = SQL_NTS; cbTableOwner = SQL_NTS; cbTableName = SQL_NTS; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_PrimaryKeys, ( pstmt->dhstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName)); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM001; break; } sqlstat = en_00000; if (1) /* turn off solaris warning message */ break; } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } retcode = _iodbcdm_cata_state_tr (pstmt, en_PrimaryKeys, retcode); return retcode; } SQLRETURN SQL_API SQLPrimaryKeys (SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName) { ENTER_STMT (hstmt, trace_SQLPrimaryKeys (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName)); retcode = SQLPrimaryKeys_Internal ( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, 'A'); LEAVE_STMT (hstmt, trace_SQLPrimaryKeys (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLPrimaryKeysA (SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName) { ENTER_STMT (hstmt, trace_SQLPrimaryKeys (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName)); retcode = SQLPrimaryKeys_Internal ( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, 'A'); LEAVE_STMT (hstmt, trace_SQLPrimaryKeys (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName)); } SQLRETURN SQL_API SQLPrimaryKeysW (SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName) { ENTER_STMT (hstmt, trace_SQLPrimaryKeysW (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName)); retcode = SQLPrimaryKeys_Internal ( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName, 'W'); LEAVE_STMT (hstmt, trace_SQLPrimaryKeysW (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName)); } #endif SQLRETURN SQL_API SQLProcedureColumns_Internal ( SQLHSTMT hstmt, SQLPOINTER szProcQualifier, SQLSMALLINT cbProcQualifier, SQLPOINTER szProcOwner, SQLSMALLINT cbProcOwner, SQLPOINTER szProcName, SQLSMALLINT cbProcName, SQLPOINTER szColumnName, SQLSMALLINT cbColumnName, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _ProcQualifier = NULL; void * _ProcOwner = NULL; void * _ProcName = NULL; void * _ColumnName = NULL; for (;;) { if ((cbProcQualifier < 0 && cbProcQualifier != SQL_NTS) || (cbProcOwner < 0 && cbProcOwner != SQL_NTS) || (cbProcName < 0 && cbProcName != SQL_NTS) || (cbColumnName < 0 && cbColumnName != SQL_NTS)) { sqlstat = en_S1090; break; } retcode = _iodbcdm_cata_state_ok (pstmt, en_ProcedureColumns); if (retcode != SQL_SUCCESS) { return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _ProcQualifier = _iodbcdm_conv_var_A2W(pstmt, 0, (SQLCHAR *)szProcQualifier, cbProcQualifier); _ProcOwner = _iodbcdm_conv_var_A2W(pstmt, 1, (SQLCHAR *)szProcOwner, cbProcOwner); _ProcName = _iodbcdm_conv_var_A2W(pstmt, 2, (SQLCHAR *)szProcName, cbProcName); _ColumnName = _iodbcdm_conv_var_A2W(pstmt, 3, (SQLCHAR *)szColumnName, cbColumnName); } else { /* unicode=>ansi*/ _ProcQualifier = _iodbcdm_conv_var_W2A(pstmt, 0, (SQLWCHAR *)szProcQualifier, cbProcQualifier); _ProcOwner = _iodbcdm_conv_var_W2A(pstmt, 1, (SQLWCHAR *)szProcOwner, cbProcOwner); _ProcName = _iodbcdm_conv_var_W2A(pstmt, 2, (SQLWCHAR *)szProcName, cbProcName); _ColumnName = _iodbcdm_conv_var_W2A(pstmt, 3, (SQLWCHAR *)szColumnName, cbColumnName); } szProcQualifier = _ProcQualifier; szProcOwner = _ProcOwner; szProcName = _ProcName; szColumnName = _ColumnName; cbProcQualifier = SQL_NTS; cbProcOwner = SQL_NTS; cbProcName = SQL_NTS; cbColumnName = SQL_NTS; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_ProcedureColumns, ( pstmt->dhstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName, szColumnName, cbColumnName)); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM001; break; } sqlstat = en_00000; if (1) /* turn off solaris warning message */ break; } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } retcode = _iodbcdm_cata_state_tr (pstmt, en_ProcedureColumns, retcode); return retcode; } SQLRETURN SQL_API SQLProcedureColumns (SQLHSTMT hstmt, SQLCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLCHAR * szProcName, SQLSMALLINT cbProcName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName) { ENTER_STMT (hstmt, trace_SQLProcedureColumns (TRACE_ENTER, hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName, szColumnName, cbColumnName)); retcode = SQLProcedureColumns_Internal ( hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName, szColumnName, cbColumnName, 'A'); LEAVE_STMT (hstmt, trace_SQLProcedureColumns (TRACE_LEAVE, hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName, szColumnName, cbColumnName)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLProcedureColumnsA (SQLHSTMT hstmt, SQLCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLCHAR * szProcName, SQLSMALLINT cbProcName, SQLCHAR * szColumnName, SQLSMALLINT cbColumnName) { ENTER_STMT (hstmt, trace_SQLProcedureColumns (TRACE_ENTER, hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName, szColumnName, cbColumnName)); retcode = SQLProcedureColumns_Internal ( hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName, szColumnName, cbColumnName, 'A'); LEAVE_STMT (hstmt, trace_SQLProcedureColumns (TRACE_LEAVE, hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName, szColumnName, cbColumnName)); } SQLRETURN SQL_API SQLProcedureColumnsW (SQLHSTMT hstmt, SQLWCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLWCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLWCHAR * szProcName, SQLSMALLINT cbProcName, SQLWCHAR * szColumnName, SQLSMALLINT cbColumnName) { ENTER_STMT (hstmt, trace_SQLProcedureColumnsW (TRACE_ENTER, hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName, szColumnName, cbColumnName)); retcode = SQLProcedureColumns_Internal ( hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName, szColumnName, cbColumnName, 'W'); LEAVE_STMT (hstmt, trace_SQLProcedureColumnsW (TRACE_LEAVE, hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName, szColumnName, cbColumnName)); } #endif SQLRETURN SQL_API SQLProcedures_Internal ( SQLHSTMT hstmt, SQLPOINTER szProcQualifier, SQLSMALLINT cbProcQualifier, SQLPOINTER szProcOwner, SQLSMALLINT cbProcOwner, SQLPOINTER szProcName, SQLSMALLINT cbProcName, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _ProcQualifier = NULL; void * _ProcOwner = NULL; void * _ProcName = NULL; for (;;) { if ((cbProcQualifier < 0 && cbProcQualifier != SQL_NTS) || (cbProcOwner < 0 && cbProcOwner != SQL_NTS) || (cbProcName < 0 && cbProcName != SQL_NTS)) { sqlstat = en_S1090; break; } retcode = _iodbcdm_cata_state_ok (pstmt, en_Procedures); if (retcode != SQL_SUCCESS) { return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _ProcQualifier = _iodbcdm_conv_var_A2W(pstmt, 0, (SQLCHAR *)szProcQualifier, cbProcQualifier); _ProcOwner = _iodbcdm_conv_var_A2W(pstmt, 1, (SQLCHAR *)szProcOwner, cbProcOwner); _ProcName = _iodbcdm_conv_var_A2W(pstmt, 2, (SQLCHAR *)szProcName, cbProcName); } else { /* unicode=>ansi*/ _ProcQualifier = _iodbcdm_conv_var_W2A(pstmt, 0, (SQLWCHAR *)szProcQualifier, cbProcQualifier); _ProcOwner = _iodbcdm_conv_var_W2A(pstmt, 1, (SQLWCHAR *)szProcOwner, cbProcOwner); _ProcName = _iodbcdm_conv_var_W2A(pstmt, 2, (SQLWCHAR *)szProcName, cbProcName); } szProcQualifier = _ProcQualifier; szProcOwner = _ProcOwner; szProcName = _ProcName; cbProcQualifier = SQL_NTS; cbProcOwner = SQL_NTS; cbProcName = SQL_NTS; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_Procedures, ( pstmt->dhstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName)); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM001; break; } sqlstat = en_00000; if (1) /* turn off solaris warning message */ break; } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } retcode = _iodbcdm_cata_state_tr (pstmt, en_Procedures, retcode); return retcode; } SQLRETURN SQL_API SQLProcedures (SQLHSTMT hstmt, SQLCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLCHAR * szProcName, SQLSMALLINT cbProcName) { ENTER_STMT (hstmt, trace_SQLProcedures (TRACE_ENTER, hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName)); retcode = SQLProcedures_Internal ( hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName, 'A'); LEAVE_STMT (hstmt, trace_SQLProcedures (TRACE_LEAVE, hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLProceduresA (SQLHSTMT hstmt, SQLCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLCHAR * szProcName, SQLSMALLINT cbProcName) { ENTER_STMT (hstmt, trace_SQLProcedures (TRACE_ENTER, hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName)); retcode = SQLProcedures_Internal ( hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName, 'A'); LEAVE_STMT (hstmt, trace_SQLProcedures (TRACE_LEAVE, hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName)); } SQLRETURN SQL_API SQLProceduresW (SQLHSTMT hstmt, SQLWCHAR * szProcQualifier, SQLSMALLINT cbProcQualifier, SQLWCHAR * szProcOwner, SQLSMALLINT cbProcOwner, SQLWCHAR * szProcName, SQLSMALLINT cbProcName) { ENTER_STMT (hstmt, trace_SQLProceduresW (TRACE_ENTER, hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName)); retcode = SQLProcedures_Internal ( hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName, 'W'); LEAVE_STMT (hstmt, trace_SQLProceduresW (TRACE_LEAVE, hstmt, szProcQualifier, cbProcQualifier, szProcOwner, cbProcOwner, szProcName, cbProcName)); } #endif SQLRETURN SQL_API SQLTablePrivileges_Internal ( SQLHSTMT hstmt, SQLPOINTER szTableQualifier, SQLSMALLINT cbTableQualifier, SQLPOINTER szTableOwner, SQLSMALLINT cbTableOwner, SQLPOINTER szTableName, SQLSMALLINT cbTableName, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _TableQualifier = NULL; void * _TableOwner = NULL; void * _TableName = NULL; for (;;) { if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS) || (cbTableOwner < 0 && cbTableOwner != SQL_NTS) || (cbTableName < 0 && cbTableName != SQL_NTS)) { sqlstat = en_S1090; break; } retcode = _iodbcdm_cata_state_ok (pstmt, en_TablePrivileges); if (retcode != SQL_SUCCESS) { return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _TableQualifier = _iodbcdm_conv_var_A2W(pstmt, 0, (SQLCHAR *)szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_A2W(pstmt, 1, (SQLCHAR *)szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_A2W(pstmt, 2, (SQLCHAR *)szTableName, cbTableName); } else { /* unicode=>ansi*/ _TableQualifier = _iodbcdm_conv_var_W2A(pstmt, 0, (SQLWCHAR *)szTableQualifier, cbTableQualifier); _TableOwner = _iodbcdm_conv_var_W2A(pstmt, 1, (SQLWCHAR *)szTableOwner, cbTableOwner); _TableName = _iodbcdm_conv_var_W2A(pstmt, 2, (SQLWCHAR *)szTableName, cbTableName); } szTableQualifier = _TableQualifier; szTableOwner = _TableOwner; szTableName = _TableName; cbTableQualifier = SQL_NTS; cbTableOwner = SQL_NTS; cbTableName = SQL_NTS; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_TablePrivileges, ( pstmt->dhstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName, cbTableName)); if (hproc == SQL_NULL_HPROC) { sqlstat = en_IM001; break; } sqlstat = en_00000; if (1) /* turn off solaris warning message */ break; } if (retcode != SQL_STILL_EXECUTING) _iodbcdm_FreeStmtVars(pstmt); if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } retcode = _iodbcdm_cata_state_tr (pstmt, en_TablePrivileges, retcode); return retcode; } SQLRETURN SQL_API SQLTablePrivileges (SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName) { ENTER_STMT (hstmt, trace_SQLTablePrivileges (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName,cbTableName)); retcode = SQLTablePrivileges_Internal( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName,cbTableName, 'A'); LEAVE_STMT (hstmt, trace_SQLTablePrivileges (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName,cbTableName)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLTablePrivilegesA (SQLHSTMT hstmt, SQLCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLCHAR * szTableName, SQLSMALLINT cbTableName) { ENTER_STMT (hstmt, trace_SQLTablePrivileges (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName,cbTableName)); retcode = SQLTablePrivileges_Internal( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName,cbTableName, 'A'); LEAVE_STMT (hstmt, trace_SQLTablePrivileges (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName,cbTableName)); } SQLRETURN SQL_API SQLTablePrivilegesW (SQLHSTMT hstmt, SQLWCHAR * szTableQualifier, SQLSMALLINT cbTableQualifier, SQLWCHAR * szTableOwner, SQLSMALLINT cbTableOwner, SQLWCHAR * szTableName, SQLSMALLINT cbTableName) { ENTER_STMT (hstmt, trace_SQLTablePrivilegesW (TRACE_ENTER, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName,cbTableName)); retcode = SQLTablePrivileges_Internal( hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName,cbTableName, 'W'); LEAVE_STMT (hstmt, trace_SQLTablePrivilegesW (TRACE_LEAVE, hstmt, szTableQualifier, cbTableQualifier, szTableOwner, cbTableOwner, szTableName,cbTableName)); } #endif libiodbc-3.52.9/iodbc/Makefile.am0000644000076400007640000001046312323210535013426 00000000000000# # Makefile.am # # The iODBC driver manager. # # Copyright (C) 1995 by Ke Jin # Copyright (C) 1996-2014 by OpenLink Software # All Rights Reserved. # # This software is released under the terms of either of the following # licenses: # # - GNU Library General Public License (see LICENSE.LGPL) # - The BSD License (see LICENSE.BSD). # # Note that the only valid version of the LGPL license as far as this # project is concerned is the original GNU Library General Public License # Version 2, dated June 1991. # # While not mandated by the BSD license, any patches you make to the # iODBC source code may be contributed back into the iODBC project # at your discretion. Contributions will benefit the Open Source and # Data Access community as a whole. Submissions may be made at: # # http://www.iodbc.org # # # GNU Library Generic Public License Version 2 # ============================================ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; only # Version 2 of the License dated June 1991. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # # The BSD License # =============== # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR # 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. # SUBDIRS = trace . AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/iodbcinst lib_LTLIBRARIES = libiodbc.la libiodbc_la_LDFLAGS = -version-info @lib_version@ \ -export-symbols $(srcdir)/iodbc.exp libiodbc_la_LIBADD = trace/libiodbctrace.la \ ../iodbcinst/libiodbc_common.la \ $(LIBADD_DL) $(LIBADD_OS) libiodbc_la_SOURCES = catalog.c connect.c dlproc.c execute.c \ fetch.c hdbc.c henv.c herr.c hstmt.c info.c \ misc.c prepare.c result.c odbc3.c noinst_HEADERS = dlproc.h hdbc.h henv.h herr.h iodbc_misc.h \ hstmt.h itrace.h henv.ci herr.ci hdesc.h ithread.h if DARWIN libiodbc.la: $(libiodbc_la_OBJECTS) $(libiodbc_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libiodbc_la_LDFLAGS) $(libiodbc_la_OBJECTS) $(libiodbc_la_LIBADD) $(LIBS) -$(STRIP) -s $(top_srcdir)/mac/iodbc.exp -u .libs/*.dylib endif EXTRA_DIST = \ $(srcdir)/iodbc.def \ $(srcdir)/iodbc.exp \ $(srcdir)/main.c \ $(srcdir)/vmscompile.com \ $(srcdir)/install_libodbc.sh # # Add symbolic link for libodbc.so as some apps need this # install-exec-hook: if INSTALL_LIBODBC $(SHELL) $(srcdir)/install_libodbc.sh $(DESTDIR)$(libdir) endif libiodbc-3.52.9/iodbc/main.c0000644000076400007640000000653312323210535012465 00000000000000/* * main.c * * $Id$ * * Entry function used to build a share library on AIX * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include int __start () { return 0; } libiodbc-3.52.9/iodbc/dlproc.h0000644000076400007640000001012612323210535013022 00000000000000/* * dlproc.h * * $Id$ * * Load driver and resolve driver's function entry point * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #ifndef _DLPROC_H #define _DLPROC_H #include #if defined(_MAC) || defined (__cplusplus) typedef SQLRETURN (* HPROC) (...); #else typedef SQLRETURN (* HPROC) (); #endif #ifdef DLDAPI_SVR4_DLFCN #include #endif #ifdef DLDAPI_HP_SHL #include typedef shl_t HDLL; #elif !defined(WIN32) typedef void *HDLL; #endif typedef struct _dl_s { char * path; HDLL dll; unsigned int refcount; int safe_unload; struct _dl_s * next; } dlproc_t; /* dlproc.c */ HPROC _iodbcdm_getproc (HDBC hdbc, int idx); HDLL _iodbcdm_dllopen (char *path); HPROC _iodbcdm_dllproc (HDLL hdll, char *sym); int _iodbcdm_dllclose (HDLL hdll); char *_iodbcdm_dllerror (void); void _iodbcdm_safe_unload (HDLL hdll); #define SQL_NULL_HDLL ((HDLL)NULL) #define SQL_NULL_HPROC ((HPROC)NULL) #endif libiodbc-3.52.9/iodbc/hdbc.c0000644000076400007640000007351012323210535012440 00000000000000/* * hdbc.c * * $Id$ * * Data source connect object management functions * * The iODBC driver manager. * * Copyright (C) 1995 by Ke Jin * Copyright (C) 1996-2014 by OpenLink Software * All Rights Reserved. * * This software is released under the terms of either of the following * licenses: * * - GNU Library General Public License (see LICENSE.LGPL) * - The BSD License (see LICENSE.BSD). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2, dated June 1991. * * While not mandated by the BSD license, any patches you make to the * iODBC source code may be contributed back into the iODBC project * at your discretion. Contributions will benefit the Open Source and * Data Access community as a whole. Submissions may be made at: * * http://www.iodbc.org * * * GNU Library Generic Public License Version 2 * ============================================ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; only * Version 2 of the License dated June 1991. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * * The BSD License * =============== * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of OpenLink Software Inc. 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 COPYRIGHT HOLDERS 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 OPENLINK OR * 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. */ #include #include #include #include #include #include #include #include #include #include #include #include #include extern SQLRETURN _iodbcdm_driverunload (HDBC hdbc, int ver); static SQLRETURN _iodbcdm_drvopt_store (SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam, SQLCHAR waMode) { CONN (pdbc, hdbc); DRVOPT *popt; /* * Check if this option is already registered */ for (popt = pdbc->drvopt; popt != NULL; popt = popt->next) { if (popt->Option == fOption) break; } /* * New option */ if (popt == NULL) { if ((popt = (DRVOPT *) MEM_ALLOC (sizeof (DRVOPT))) == NULL) return SQL_ERROR; popt->Option = fOption; popt->next = pdbc->drvopt; pdbc->drvopt = popt; } /* * Store the value */ popt->Param = vParam; popt->waMode = waMode; return SQL_SUCCESS; } static SQLRETURN _iodbcdm_drvopt_free (SQLHDBC hdbc) { CONN (pdbc, hdbc); DRVOPT *popt; popt = pdbc->drvopt; while (popt != NULL) { DRVOPT *tmp = popt->next; free (popt); popt = tmp; } pdbc->drvopt = NULL; return SQL_SUCCESS; } SQLRETURN SQLAllocConnect_Internal ( SQLHENV henv, SQLHDBC * phdbc) { GENV (genv, henv); CONN (pdbc, NULL); if (phdbc == NULL) { PUSHSQLERR (genv->herr, en_S1009); return SQL_ERROR; } pdbc = (DBC_t *) MEM_ALLOC (sizeof (DBC_t)); if (pdbc == NULL) { *phdbc = SQL_NULL_HDBC; PUSHSQLERR (genv->herr, en_S1001); return SQL_ERROR; } pdbc->rc = 0; /* * Initialize this handle */ pdbc->type = SQL_HANDLE_DBC; /* insert this dbc entry into the link list */ pdbc->next = (DBC_t *) genv->hdbc; genv->hdbc = pdbc; #if (ODBCVER >= 0x0300) if (genv->odbc_ver == 0) genv->odbc_ver = SQL_OV_ODBC2; pdbc->hdesc = NULL; pdbc->cp_pdbc = NULL; pdbc->cp_in_use = FALSE; pdbc->cp_timeout = 0; pdbc->cp_expiry_time = 0; pdbc->cp_retry_wait = 0; pdbc->cp_probe = NULL; pdbc->cp_dsn = NULL; pdbc->cp_uid = NULL; pdbc->cp_pwd = NULL; pdbc->cp_connstr = NULL; #endif pdbc->genv = genv; pdbc->henv = SQL_NULL_HENV; pdbc->hstmt = SQL_NULL_HSTMT; pdbc->herr = SQL_NULL_HERR; pdbc->dhdbc = SQL_NULL_HDBC; pdbc->state = en_dbc_allocated; pdbc->drvopt = NULL; pdbc->dbc_cip = 0; pdbc->err_rec = 0; /* set connect options to default values */ pdbc->access_mode = SQL_MODE_DEFAULT; pdbc->autocommit = SQL_AUTOCOMMIT_DEFAULT; pdbc->current_qualifier = NULL; pdbc->login_timeout = 0UL; pdbc->odbc_cursors = SQL_CUR_DEFAULT; pdbc->packet_size = 0UL; pdbc->quiet_mode = (UDWORD) NULL; pdbc->txn_isolation = SQL_TXN_READ_UNCOMMITTED; pdbc->cb_commit = (SWORD) SQL_CB_DELETE; pdbc->cb_rollback = (SWORD) SQL_CB_DELETE; *phdbc = (SQLHDBC) pdbc; return SQL_SUCCESS; } SQLRETURN SQL_API SQLAllocConnect (SQLHENV henv, SQLHDBC * phdbc) { GENV (genv, henv); SQLRETURN retcode = SQL_SUCCESS; ODBC_LOCK (); if (!IS_VALID_HENV (genv)) { ODBC_UNLOCK (); return SQL_INVALID_HANDLE; } CLEAR_ERRORS (genv); TRACE (trace_SQLAllocConnect (TRACE_ENTER, henv, phdbc)); retcode = SQLAllocConnect_Internal (henv, phdbc); TRACE (trace_SQLAllocConnect (TRACE_LEAVE, henv, phdbc)); ODBC_UNLOCK (); return SQL_SUCCESS; } SQLRETURN SQLFreeConnect_Internal (SQLHDBC hdbc, int ver) { CONN (pdbc, hdbc); GENV (genv, pdbc->genv); CONN (tpdbc, NULL); /* check state */ if (pdbc->state != en_dbc_allocated) { PUSHSQLERR (pdbc->herr, en_S1010); return SQL_ERROR; } for (tpdbc = (DBC_t *) genv->hdbc; tpdbc != NULL; tpdbc = tpdbc->next) { if (pdbc == tpdbc) { genv->hdbc = pdbc->next; break; } if (pdbc == tpdbc->next) { tpdbc->next = pdbc->next; break; } } /* free this dbc */ _iodbcdm_driverunload (pdbc, 3); /* free driver connect options */ _iodbcdm_drvopt_free (pdbc); /* * Invalidate this handle */ pdbc->type = 0; return SQL_SUCCESS; } SQLRETURN SQL_API SQLFreeConnect (SQLHDBC hdbc) { ENTER_HDBC (hdbc, 1, trace_SQLFreeConnect (TRACE_ENTER, hdbc)); retcode = SQLFreeConnect_Internal (hdbc, 2); LEAVE_HDBC (hdbc, 1, trace_SQLFreeConnect (TRACE_LEAVE, hdbc); MEM_FREE(hdbc); ); } SQLRETURN _iodbcdm_SetConnectOption ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam, SQLCHAR waMode) { CONN (pdbc, hdbc); ENVR (penv, pdbc->henv); STMT (pstmt, NULL); HPROC hproc2 = SQL_NULL_HPROC; HPROC hproc3 = SQL_NULL_HPROC; sqlstcode_t sqlstat = en_00000; SQLRETURN retcode = SQL_SUCCESS; SQLUINTEGER odbc_ver; SQLUINTEGER dodbc_ver; odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; dodbc_ver = (penv != SQL_NULL_HENV) ? penv->dodbc_ver : odbc_ver; #if (ODBCVER < 0x0300) /* check option */ if (fOption < SQL_CONN_OPT_MIN || (fOption > SQL_CONN_OPT_MAX && fOption < SQL_CONNECT_OPT_DRVR_START)) { PUSHSQLERR (pdbc->herr, en_S1092); return SQL_ERROR; } #endif /* check state of connection handle */ switch (pdbc->state) { case en_dbc_allocated: if (fOption == SQL_TRANSLATE_DLL || fOption == SQL_TRANSLATE_OPTION) { /* This two options are only meaningful * for specified driver. So, has to be * set after a driver has been loaded. */ sqlstat = en_08003; break; } /* * An option only meaningful for the driver is passed before the * driver was actually loaded. We save it here and pass it onto * the driver at a later stage. */ if (fOption >= SQL_CONNECT_OPT_DRVR_START && pdbc->henv == SQL_NULL_HENV) _iodbcdm_drvopt_store (hdbc, fOption, vParam, waMode); break; case en_dbc_needdata: sqlstat = en_S1010; break; case en_dbc_connected: case en_dbc_hstmt: if (fOption == SQL_ODBC_CURSORS) { sqlstat = en_08002; } break; default: break; } /* check state of statement handle(s) */ for (pstmt = (STMT_t *) pdbc->hstmt; pstmt != NULL && sqlstat == en_00000; pstmt = (STMT_t *) pstmt->next) { if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc) { sqlstat = en_S1010; } } if (sqlstat != en_00000) { PUSHSQLERR (pdbc->herr, sqlstat); return SQL_ERROR; } #if (ODBCVER >= 0x0300) if (fOption == SQL_OPT_TRACE || fOption == SQL_ATTR_TRACE) #else if (fOption == SQL_OPT_TRACE) #endif /* tracing flag can be set before and after connect * and only meaningful for driver manager(actually * there is only one tracing file under one global * environment). */ { switch ((SQLUINTEGER)vParam) { case SQL_OPT_TRACE_ON: trace_start (); break; case SQL_OPT_TRACE_OFF: trace_stop (); break; default: PUSHSQLERR (pdbc->herr, en_HY024); return SQL_ERROR; } if (sqlstat != en_00000) { PUSHSQLERR (pdbc->herr, sqlstat); } return retcode; } #if (ODBCVER >= 0x0300) if (fOption == SQL_OPT_TRACEFILE || fOption == SQL_ATTR_TRACEFILE) #else if (fOption == SQL_OPT_TRACEFILE) #endif /* Tracing file can be set before and after connect * and only meaningful for driver manager. */ { SQLCHAR *_vParam; SQLCHAR *tmp = NULL; if (((char *)vParam) == NULL || (waMode != 'W' && ((char *) vParam)[0] == '\0') || (waMode == 'W' && ((wchar_t *) vParam)[0] == L'\0')) { PUSHSQLERR (pdbc->herr, en_S1009); return SQL_ERROR; } _vParam = (SQLCHAR *)vParam; if (waMode == 'W') { if ((_vParam = tmp = dm_SQL_WtoU8((wchar_t *)vParam, SQL_NTS)) == NULL) { PUSHSQLERR (pdbc->herr, en_S1001); return SQL_ERROR; } } if (ODBCSharedTraceFlag) { PUSHSQLERR (pdbc->herr, en_IM013); return SQL_ERROR; } trace_set_filename ((char *) _vParam); MEM_FREE (tmp); return SQL_SUCCESS; } if (pdbc->state != en_dbc_allocated) { /* If already connected, then, driver's odbc call * will be invoked. Otherwise, we only save the options * and delay the setting process until the connection * been established. */ void * _vParam = NULL; if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { switch (fOption) { case SQL_ATTR_TRACEFILE: case SQL_CURRENT_QUALIFIER: case SQL_TRANSLATE_DLL: case SQL_APPLICATION_NAME: case SQL_COPT_SS_ENLIST_IN_DTC: case SQL_COPT_SS_PERF_QUERY_LOG: case SQL_COPT_SS_PERF_DATA_LOG: case SQL_CURRENT_SCHEMA: if (waMode != 'W') { /* ansi=>unicode*/ _vParam = dm_SQL_A2W((SQLCHAR *)vParam, SQL_NTS); } else { /* unicode=>ansi*/ _vParam = dm_SQL_W2A((SQLWCHAR *)vParam, SQL_NTS); } vParam = (SQLULEN)_vParam; break; } } if (penv->unicode_driver) { /* SQL_XXX_W */ #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pdbc, en_SetConnectAttrW); #endif hproc2 = _iodbcdm_getproc (pdbc, en_SetConnectOptionW); } else { /* SQL_XXX */ /* SQL_XXX_A */ #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pdbc, en_SetConnectAttr); if (hproc3 == SQL_NULL_HPROC) hproc3 = _iodbcdm_getproc (pdbc, en_SetConnectAttrA); #endif hproc2 = _iodbcdm_getproc (pdbc, en_SetConnectOption); if (hproc2 == SQL_NULL_HPROC) hproc2 = _iodbcdm_getproc (pdbc, en_SetConnectOptionA); } if (odbc_ver == SQL_OV_ODBC2 && (dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x0300) if (hproc3 != SQL_NULL_HPROC) { switch (fOption) { /* integer attributes */ case SQL_ATTR_ACCESS_MODE: case SQL_ATTR_AUTOCOMMIT: case SQL_ATTR_LOGIN_TIMEOUT: case SQL_ATTR_ODBC_CURSORS: case SQL_ATTR_PACKET_SIZE: case SQL_ATTR_QUIET_MODE: case SQL_ATTR_TRANSLATE_OPTION: case SQL_ATTR_TXN_ISOLATION: CALL_DRIVER (hdbc, pdbc, retcode, hproc3, (pdbc->dhdbc, fOption, vParam, 0)); break; /* ODBC3 defined options */ case SQL_ATTR_ASYNC_ENABLE: case SQL_ATTR_AUTO_IPD: case SQL_ATTR_CONNECTION_DEAD: case SQL_ATTR_CONNECTION_TIMEOUT: case SQL_ATTR_METADATA_ID: PUSHSQLERR (pdbc->herr, en_IM001); MEM_FREE(_vParam); return SQL_ERROR; default: /* string & driver defined */ CALL_DRIVER (hdbc, pdbc, retcode, hproc3, (pdbc->dhdbc, fOption, vParam, SQL_NTS)); } } else #endif { if (hproc2 == SQL_NULL_HPROC) { PUSHSQLERR (pdbc->herr, en_IM001); MEM_FREE(_vParam); return SQL_ERROR; } CALL_DRIVER (hdbc, pdbc, retcode, hproc2, (pdbc->dhdbc, fOption, vParam)); } MEM_FREE(_vParam); if (!SQL_SUCCEEDED (retcode)) { return retcode; } } /* * Now, either driver's odbc call was successful or * driver has not been loaded yet. In the first case, we * need flip flag for(such as access_mode, autocommit, ...) * for our finit state machine. While in the second case, * we need save option values(such as current_qualifier, ...) * for delayed setting. So, ... */ /* No matter what state we are(i.e. allocated or connected, ..) * we need to flip the flag. */ switch (fOption) { case SQL_ACCESS_MODE: pdbc->access_mode = vParam; break; case SQL_AUTOCOMMIT: pdbc->autocommit = vParam; break; } /* state transition */ if (pdbc->state != en_dbc_allocated) { return retcode; } /* Only 'allocated' state is possible here, and we need to * save the options for delayed setting. */ switch (fOption) { case SQL_CURRENT_QUALIFIER: if (pdbc->current_qualifier != NULL) { MEM_FREE (pdbc->current_qualifier); } if (vParam == 0UL) { pdbc->current_qualifier = NULL; break; } if (waMode != 'W') pdbc->current_qualifier = (wchar_t *) MEM_ALLOC (STRLEN (vParam) + 1); else pdbc->current_qualifier = (wchar_t *) MEM_ALLOC((WCSLEN (vParam) + 1) * sizeof(wchar_t)); if (pdbc->current_qualifier == NULL) { PUSHSQLERR (pdbc->herr, en_S1001); return SQL_ERROR; } if (waMode != 'W') STRCPY ((char *)pdbc->current_qualifier, vParam); else WCSCPY ((wchar_t *)pdbc->current_qualifier, vParam); pdbc->current_qualifier_WA = waMode; break; case SQL_LOGIN_TIMEOUT: pdbc->login_timeout = vParam; break; case SQL_ODBC_CURSORS: pdbc->odbc_cursors = vParam; break; case SQL_PACKET_SIZE: pdbc->packet_size = vParam; break; case SQL_QUIET_MODE: pdbc->quiet_mode = vParam; break; case SQL_TXN_ISOLATION: pdbc->txn_isolation = vParam; break; default: /* Since we didn't save the option value for delayed * setting, we should raise an error here. */ break; } return retcode; } SQLRETURN SQL_API SQLSetConnectOption ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam) { ENTER_HDBC (hdbc, 0, trace_SQLSetConnectOption (TRACE_ENTER, hdbc, fOption, vParam)); retcode = _iodbcdm_SetConnectOption (hdbc, fOption, vParam, 'A'); LEAVE_HDBC (hdbc, 0, trace_SQLSetConnectOption (TRACE_LEAVE, hdbc, fOption, vParam)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLSetConnectOptionA ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam) { ENTER_HDBC (hdbc, 0, trace_SQLSetConnectOption (TRACE_ENTER, hdbc, fOption, vParam)); retcode = _iodbcdm_SetConnectOption (hdbc, fOption, vParam, 'A'); LEAVE_HDBC (hdbc, 0, trace_SQLSetConnectOption (TRACE_LEAVE, hdbc, fOption, vParam)); } SQLRETURN SQL_API SQLSetConnectOptionW ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLULEN vParam) { ENTER_HDBC (hdbc, 0, trace_SQLSetConnectOptionW (TRACE_ENTER, hdbc, fOption, vParam)); retcode = _iodbcdm_SetConnectOption (hdbc, fOption, vParam, 'W'); LEAVE_HDBC (hdbc, 0, trace_SQLSetConnectOptionW (TRACE_LEAVE, hdbc, fOption, vParam)); } #endif SQLRETURN SQL_API _iodbcdm_GetConnectOption ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLPOINTER pvParam, SQLCHAR waMode) { CONN (pdbc, hdbc); ENVR (penv, pdbc->henv); HPROC hproc2 = SQL_NULL_HPROC; HPROC hproc3 = SQL_NULL_HPROC; sqlstcode_t sqlstat = en_00000; SQLRETURN retcode = SQL_SUCCESS; SQLUINTEGER odbc_ver; SQLUINTEGER dodbc_ver; odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; dodbc_ver = (penv != SQL_NULL_HENV) ? penv->dodbc_ver : odbc_ver; #if (ODBCVER < 0x0300) /* check option */ if (fOption < SQL_CONN_OPT_MIN || (fOption > SQL_CONN_OPT_MAX && fOption < SQL_CONNECT_OPT_DRVR_START)) { PUSHSQLERR (pdbc->herr, en_S1092); return SQL_ERROR; } #endif /* check state */ switch (pdbc->state) { case en_dbc_allocated: if (fOption != SQL_ACCESS_MODE && fOption != SQL_AUTOCOMMIT && fOption != SQL_LOGIN_TIMEOUT && fOption != SQL_OPT_TRACE && fOption != SQL_OPT_TRACEFILE) { sqlstat = en_08003; } /* MS ODBC SDK document only * allows SQL_ACCESS_MODE * and SQL_AUTOCOMMIT in this * dbc state. We allow another * two options, because they * are only meaningful for driver * manager. */ break; case en_dbc_needdata: sqlstat = en_S1010; break; default: break; } if (sqlstat != en_00000) { PUSHSQLERR (pdbc->herr, sqlstat); return SQL_ERROR; } /* Tracing and tracing file options are only * meaningful for driver manager */ #if (ODBCVER >= 0x0300) if (fOption == SQL_OPT_TRACE || fOption == SQL_ATTR_TRACE) #else if (fOption == SQL_OPT_TRACE) #endif { if (ODBCSharedTraceFlag) *((UDWORD *) pvParam) = (UDWORD) SQL_OPT_TRACE_ON; else *((UDWORD *) pvParam) = (UDWORD) SQL_OPT_TRACE_OFF; return SQL_SUCCESS; } #if (ODBCVER >= 0x0300) if (fOption == SQL_OPT_TRACEFILE || fOption == SQL_ATTR_TRACEFILE) #else if (fOption == SQL_OPT_TRACEFILE) #endif { char *fname; fname = trace_get_filename (); /* UTF8 format */ if (waMode != 'W') { STRCPY (pvParam, fname); } else { dm_strcpy_A2W ((SQLWCHAR *)pvParam, (SQLCHAR *)fname); } free (fname); return SQL_SUCCESS; } if (pdbc->state != en_dbc_allocated) /* if already connected, we will invoke driver's function */ { void * _Param = NULL; void * paramOut = pvParam; switch (fOption) { case SQL_CURRENT_QUALIFIER: case SQL_TRANSLATE_DLL: if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ if ((_Param = malloc(SQL_MAX_OPTION_STRING_LENGTH * sizeof(wchar_t))) == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); return SQL_ERROR; } } else { /* unicode=>ansi*/ if ((_Param = malloc(SQL_MAX_OPTION_STRING_LENGTH)) == NULL) { PUSHSQLERR (pdbc->herr, en_HY001); return SQL_ERROR; } } paramOut = _Param; } break; } if (penv->unicode_driver) { /* SQL_XXX_W */ #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pdbc, en_GetConnectAttrW); #endif hproc2 = _iodbcdm_getproc (pdbc, en_GetConnectOptionW); } else { /* SQL_XXX */ /* SQL_XXX_A */ #if (ODBCVER >= 0x0300) hproc3 = _iodbcdm_getproc (pdbc, en_GetConnectAttr); if (hproc3 == SQL_NULL_HPROC) hproc3 = _iodbcdm_getproc (pdbc, en_GetConnectAttrA); #endif hproc2 = _iodbcdm_getproc (pdbc, en_GetConnectOption); if (hproc2 == SQL_NULL_HPROC) hproc2 = _iodbcdm_getproc (pdbc, en_GetConnectOptionA); } if (odbc_ver == SQL_OV_ODBC2 && (dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x0300) if (hproc3 != SQL_NULL_HPROC) { switch (fOption) { /* integer attributes */ case SQL_ATTR_ACCESS_MODE: case SQL_ATTR_AUTOCOMMIT: case SQL_ATTR_LOGIN_TIMEOUT: case SQL_ATTR_ODBC_CURSORS: case SQL_ATTR_PACKET_SIZE: case SQL_ATTR_QUIET_MODE: case SQL_ATTR_TRANSLATE_OPTION: case SQL_ATTR_TXN_ISOLATION: CALL_DRIVER (hdbc, pdbc, retcode, hproc3, (pdbc->dhdbc, fOption, paramOut, 0, NULL)); break; /* ODBC3 defined options */ case SQL_ATTR_ASYNC_ENABLE: case SQL_ATTR_AUTO_IPD: case SQL_ATTR_CONNECTION_DEAD: case SQL_ATTR_CONNECTION_TIMEOUT: case SQL_ATTR_METADATA_ID: PUSHSQLERR (pdbc->herr, en_IM001); MEM_FREE(_Param); return SQL_ERROR; default: /* string & driver defined */ CALL_DRIVER (hdbc, pdbc, retcode, hproc3, (pdbc->dhdbc, fOption, paramOut, SQL_MAX_OPTION_STRING_LENGTH, NULL)); } } else #endif { if (hproc2 == SQL_NULL_HPROC) { PUSHSQLERR (pdbc->herr, en_IM001); MEM_FREE(_Param); return SQL_ERROR; } CALL_DRIVER (hdbc, pdbc, retcode, hproc2, (pdbc->dhdbc, fOption, paramOut)); } if (pvParam && SQL_SUCCEEDED (retcode) && ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W'))) { switch (fOption) { case SQL_ATTR_TRACEFILE: case SQL_CURRENT_QUALIFIER: case SQL_TRANSLATE_DLL: if (waMode != 'W') { /* ansi<=unicode*/ dm_StrCopyOut2_W2A ((SQLWCHAR *)paramOut, (SQLCHAR *)pvParam, SQL_MAX_OPTION_STRING_LENGTH, NULL); } else { /* unicode<=ansi*/ dm_StrCopyOut2_A2W ((SQLCHAR *)paramOut, (SQLWCHAR *)pvParam, SQL_MAX_OPTION_STRING_LENGTH, NULL); } break; } } MEM_FREE(_Param); return retcode; } /* We needn't to handle options which are not allowed * to be *get* at a allocated dbc state(and two tracing * options which has been handled and returned). Thus, * there are only two possible cases. */ switch (fOption) { case SQL_ACCESS_MODE: *((UDWORD *) pvParam) = pdbc->access_mode; break; case SQL_AUTOCOMMIT: *((UDWORD *) pvParam) = pdbc->autocommit; break; case SQL_LOGIN_TIMEOUT: *((UDWORD *) pvParam) = pdbc->login_timeout; break; default: break; } return SQL_SUCCESS; } SQLRETURN SQL_API SQLGetConnectOption (SQLHDBC hdbc, SQLUSMALLINT fOption, SQLPOINTER pvParam) { ENTER_HDBC (hdbc, 0, trace_SQLGetConnectOption (TRACE_ENTER, hdbc, fOption, pvParam)); retcode = _iodbcdm_GetConnectOption (hdbc, fOption, pvParam, 'A'); LEAVE_HDBC (hdbc, 0, trace_SQLGetConnectOption (TRACE_LEAVE, hdbc, fOption, pvParam)); } #if ODBCVER >= 0x0300 SQLRETURN SQL_API SQLGetConnectOptionA ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLPOINTER pvParam) { ENTER_HDBC (hdbc, 0, trace_SQLGetConnectOption (TRACE_ENTER, hdbc, fOption, pvParam)); retcode = _iodbcdm_GetConnectOption (hdbc, fOption, pvParam, 'A'); LEAVE_HDBC (hdbc, 0, trace_SQLGetConnectOption (TRACE_LEAVE, hdbc, fOption, pvParam)); } SQLRETURN SQL_API SQLGetConnectOptionW ( SQLHDBC hdbc, SQLUSMALLINT fOption, SQLPOINTER pvParam) { ENTER_HDBC (hdbc, 0, trace_SQLGetConnectOptionW (TRACE_ENTER, hdbc, fOption, pvParam)); retcode = _iodbcdm_GetConnectOption (hdbc, fOption, pvParam, 'W'); LEAVE_HDBC (hdbc, 0, trace_SQLGetConnectOptionW (TRACE_LEAVE, hdbc, fOption, pvParam)); } #endif static SQLRETURN _iodbcdm_transact ( HDBC hdbc, UWORD fType) { CONN (pdbc, hdbc); ENVR (penv, pdbc->henv); STMT (pstmt, NULL); HPROC hproc2 = SQL_NULL_HPROC; HPROC hproc3 = SQL_NULL_HPROC; SQLRETURN retcode; SQLUINTEGER odbc_ver; SQLUINTEGER dodbc_ver; odbc_ver = ((GENV_t *) pdbc->genv)->odbc_ver; dodbc_ver = (penv != SQL_NULL_HENV) ? penv->dodbc_ver : odbc_ver; /* check state */ switch (pdbc->state) { case en_dbc_allocated: case en_dbc_needdata: PUSHSQLERR (pdbc->herr, en_08003); return SQL_ERROR; case en_dbc_connected: return SQL_SUCCESS; case en_dbc_hstmt: default: break; } for (pstmt = (STMT_t *) (pdbc->hstmt); pstmt != NULL; pstmt = pstmt->next) { if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc) { PUSHSQLERR (pdbc->herr, en_S1010); return SQL_ERROR; } } hproc2 = _iodbcdm_getproc (pdbc, en_Transact); #if (ODBCVER >= 0x300) hproc3 = _iodbcdm_getproc (pdbc, en_EndTran); #endif if (odbc_ver == SQL_OV_ODBC2 && (dodbc_ver == SQL_OV_ODBC2 || (dodbc_ver == SQL_OV_ODBC3 && hproc2 != SQL_NULL_HPROC))) hproc3 = SQL_NULL_HPROC; #if (ODBCVER >= 0x300) if (hproc3 != SQL_NULL_HPROC) { CALL_DRIVER (hdbc, pdbc, retcode, hproc3, (SQL_HANDLE_DBC, pdbc->dhdbc, fType)); } else #endif { if (hproc2 == SQL_NULL_HPROC) { PUSHSQLERR (pdbc->herr, en_IM001); return SQL_ERROR; } CALL_DRIVER (hdbc, pdbc, retcode, hproc2, (SQL_NULL_HENV, pdbc->dhdbc, fType)); } /* state transition */ if (!SQL_SUCCEEDED (retcode)) { return retcode; } pdbc->state = en_dbc_hstmt; for (pstmt = (STMT_t *) (pdbc->hstmt); pstmt != NULL; pstmt = pstmt->next) { switch (pstmt->state) { case en_stmt_prepared: if (pdbc->cb_commit == SQL_CB_DELETE || pdbc->cb_rollback == SQL_CB_DELETE) { pstmt->state = en_stmt_allocated; pstmt->prep_state = 0; break; } break; case en_stmt_executed_with_info: case en_stmt_executed: case en_stmt_cursoropen: case en_stmt_fetched: case en_stmt_xfetched: if (!pstmt->prep_state && pdbc->cb_commit != SQL_CB_PRESERVE && pdbc->cb_rollback != SQL_CB_PRESERVE) { pstmt->state = en_stmt_allocated; pstmt->prep_state = 0; pstmt->cursor_state = en_stmt_cursor_no; break; } if (pstmt->prep_state) { if (pdbc->cb_commit == SQL_CB_DELETE || pdbc->cb_rollback == SQL_CB_DELETE) { pstmt->state = en_stmt_allocated; pstmt->prep_state = 0; pstmt->cursor_state = en_stmt_cursor_no; break; } if (pdbc->cb_commit == SQL_CB_CLOSE || pdbc->cb_rollback == SQL_CB_CLOSE) { pstmt->state = en_stmt_prepared; pstmt->cursor_state = en_stmt_cursor_no; break; } break; } break; default: break; } } return retcode; } SQLRETURN SQLTransact_Internal ( SQLHENV henv, SQLHDBC hdbc, SQLUSMALLINT fType) { GENV (genv, henv); CONN (pdbc, hdbc); HERR herr; SQLRETURN retcode = SQL_SUCCESS; if (IS_VALID_HDBC (pdbc)) { CLEAR_ERRORS (pdbc); herr = pdbc->herr; } else if (IS_VALID_HENV (genv)) { CLEAR_ERRORS (genv); herr = genv->herr; } else { return SQL_INVALID_HANDLE; } /* check argument */ if (fType != SQL_COMMIT && fType != SQL_ROLLBACK) { /* SQLHENV handle = IS_VALID_HDBC (pdbc) ? ((SQLHENV) pdbc) : genv;*/ PUSHSQLERR (herr, en_S1012); return SQL_ERROR; } if (hdbc != SQL_NULL_HDBC) { retcode = _iodbcdm_transact (pdbc, fType); } else { for (pdbc = (DBC_t *) (genv->hdbc); pdbc != NULL; pdbc = pdbc->next) { retcode |= _iodbcdm_transact (pdbc, fType); } } if (!SQL_SUCCEEDED (retcode)) { /* fail on one of the connection */ return SQL_ERROR; } return retcode; } SQLRETURN SQL_API SQLTransact ( SQLHENV henv, SQLHDBC hdbc, SQLUSMALLINT fType) { SQLRETURN retcode = SQL_SUCCESS; ODBC_LOCK (); TRACE (trace_SQLTransact (TRACE_ENTER, henv, hdbc, fType)); retcode = SQLTransact_Internal (henv, hdbc, fType); TRACE (trace_SQLTransact (TRACE_LEAVE, henv, hdbc, fType)); ODBC_UNLOCK (); return retcode; } libiodbc-3.52.9/LICENSE.LGPL0000644000076400007640000006127512323204667012074 00000000000000 GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! libiodbc-3.52.9/README0000644000076400007640000002610012323210535011165 00000000000000iODBC Driver Manager Copyright (C) 1995 by Ke Jin Copyright (C) 1996-2014 by OpenLink Software All Rights Reserved. 1. Introduction Welcome to the iODBC driver manager maintained by OpenLink Software (). This kit will provide you with everything you need in order to develop ODBC-compliant applications under Unix without having to pay royalties to other parties. This kit consists of a number of parts: o The iODBC driver manager. This is a complete implementation of an ODBC driver manager, released under either the GNU Library General Public License or the BSD License. We fully comply with these licenses by giving you this product in source form (as well as the binary form). You can download the latest version of the driver manager from o A simple example, iodbctest.c, which gives you a command-line interface to SQL. You can fit this to your purposes, but at the very least this is useful for verification of your ODBC installation. You can use either part stand-alone, if you wish. An ODBC driver is still needed to affect your connection architecture. You may build a driver with the iODBC components or obtain an ODBC driver from a commercial vendor. OpenLink Software produces cross-platform commercial drivers as well as maintaining the iODBC distribution: evaluation copies may be obtained via download from . Any ODBC-compliant driver will work with the iODBC Driver Manager. See also the iODBC website, , for more pointers to various ODBC drivers. 2. Installation of run-time distribution You probably already unpacked this distribution. The next step is to make sure that your applications can find all the dynamic link libraries. Depending on your system's implementation of dynamic link libraries, you have a number of options: o Install the libraries in a directory that is searched by your linker by default. Typical locations are /usr/lib and /usr/local/lib. o Install the libraries in some other place, and make sure that the environment variable your dynamic linker uses to find extra locations for dynamic link libraries. Most systems use the environment variable LD_LIBRARY_PATH to this end. Exceptions are AIX which uses LIBPATH and HP/UX which uses SHLIB_PATH. If your system has a C compiler, you can verify the installation by compiling the iodbctest program. Otherwise, you may have ODBC applications installed on your system which you can use. 3. Configuration of run-time distribution The iODBC driver manager looks for a file ~/.odbc.ini, where the tilde stands for the user's home directory. This file only contains a default section where you can select which driver library to use. Copy the odbc.ini file from the examples directory to ~/.odbc.ini and make sure the right path and filename is used for your installation. A data source is a section (enclosed in square parenthesis), and the attributes for a data source are given within this section. The most important attribute to iODBC for each datasource is the Driver attribute. This must point to the shared library for the ODBC driver associated with the data source. As example, the OpenLink ODBC drivers have a number of attributes which can be set for a data source. Here is a description (with ODBC connect string tags between parenthesis): Host The hostname where the database resides (HOST). ServerType The type of server (see oplrqb.ini on the server, SVT). ServerOptions Server-specific extra options. See OpenLink server documentation for agents which can use this. Database The database to use (DATABASE). Options Connect options for the database (OPTIONS). UserName The name of the user (a password cannot be specified in the UDBCINI file, UID/PWD). ReadOnly A Yes/No value in order to make the connection read-only (READONLY=Y/N). FetchBufferSize The number of records that are transferred in a single call to the server. Default is 5; maximum is 99, minimum is 1 (FBS=value). Protocol The protocol to use. Leave set to ``TCP'' for this release. Apart from these data source-specific settings, you may add a section called [Communications], which you may use to tune our driver further: ReceiveTimeout The time the client application will wait for the database agent to finish the request (default is 60 seconds). BrokerTimeout The time the client application will wait for the request broker to accept of reject a database connection (default is 30 seconds). SendSize RPC send buffer size. A value of 0 (the default) will cause the application to use system-dependent defaults. ReceiveSize RPC receive buffer size. A value of 0 (the default) will cause the application to use system-dependent defaults. DebugFile If set, the name of a file to which debugging output from the driver should be directed. 4. Contribution of changes, patches and updates. While not mandated by the BSD license, any patches you make to the iODBC may be contributed back into the iODBC project at your discretion. Contributions will benefit the Open Source and Data Access community as a whole. Submissions may be made at . 5. iODBC driver manager platform availability The iODBC driver manager has been ported to following Unix platforms: BSDi BSD/OS 2.x ? DEC Unix(OSF/1) 3.x - 5.x DEC Alpha DG/UX 5.x Aviion FreeBSD 2.x - 5.x x86 HP/UX 9.x - 11.x HP9000 s700/s800 HP/UX 9.x HP9000 s300/s400 IBM AIX 3.x - 5.x IBM RS6000, PowerPC Linux ELF 1.x, 2.x x86, Itanium, PowerPC Mac OS X 10.x PowerPC Max/OS SVR4 1.x Concurrent Maxion 9200 MP NCR SVR4 3.x NCR 3435 OpenVMS 6.x DEC Alpha SCO OpenServer 5.x x86 SGI Irix SVR4 5.x, 6.x IP12 MIPS, IP22 MIPS SunOS 4.1.x Sun Sparc Sun Solaris 2.x Sun Sparc, PCx86 UnixWare SVR4.2 1.x, 2.x x86 Windows NT 4.x x86 As the iODBC driver manager uses autoconf/automake/libtool it should be portable to most modern UNIX platforms out of the box. However if you do need to make changes to the code or the configuration files, we would appreciate you share your changes with the rest of the internet community by mailing your patches to so we can include them for the next build. Porting of iODBC driver manager to some non-UNIX operating systems such as Windows family(3.x, 95, NT), OS/2 and Mac Classic is supported but has not been compiled and tested recently. Of cause, you need to supply a make/build file and a short LibMain for creating the iodbc.dll. 6. How to build iODBC driver manager: Mac OS X users should read the separate README.MACOSX document for more detail of porting on this platform. Otherwise: step 1. Run configure to adjust to target platform step 2. Run make step 3. Run make install The configure program will examine your system for various compiler flags, system options etc. In some cases extra flags need to be added for the C compiler to work properly. E.g. on HP systems you may need: $ CFLAGS="-Ae -O" ./configure --prefix=/usr/local .......... File Hierarchy -------------- Note that the path of the system wide odbc.ini file is calculated as follows (based on flags to ./configure): no --prefix default is /etc/odbc.ini --prefix=/usr /etc/odbc.ini --prefix=/xxx/yyy /xxx/yyy/etc/odbc.ini --sysconfdir=/xxx/yyy /xxx/yyy/odbc.ini --with-iodbc-inidir=/xxx/yyy /xxx/yyy/odbc.ini If the `--with-layout=' option is set, then the prefix and sysconfdir parameters will be changed accordingly. Currently, this parameter understands values of `gentoo', `redhat', `gnu', `debian' or `opt' (with everything going into /opt/iodbc/). If both are specified, a --prefix argument will overrule a --with-layout. Example ------- $ ./configure --prefix=/usr/local --with-iodbc-inidir=/etc ... ... ... $ make ... ... ... $ su # make install ... ... ... 7. odbc.ini Driver manager and drivers use odbc.ini file or connection string when establishing a data source connection. On Windows, odbc.ini is located in Windows directory. On UNIX, the iODBC driver manager looks for the odbc.ini file in the following sequence: 1. check environment variable ODBCINI 2. check $HOME/.odbc.ini 3. check home in /etc/passwd and try .odbc.ini in there 4. system-wide odbc.ini (settable at configuration time) Item 1 is the easiest as most drivers will also look at this variable. The format of odbc.ini( or ~/.odbc.ini ) is defined as: odbc.ini ::= data_source_list data_source_list ::= /* empty */ | data_source '\n' data_source_list data_source ::= '[' data_source_name ']' '\n' data_source_desc data_source_name ::= 'default' | [A-Za-z]*[A-Za-z0-9_]* data_source_desc ::= /* empty */ | attrib_desc '\n' data_source_desc addrib_desc ::= Attrib '=' attrib_value Attrib ::= 'Driver' | 'PID' | 'UID' | driver_def_attrib driver_def_attrib ::= [A-Za-z]*[A-Za-z0-9_]* An example of an odbc.ini file: ; ; odbc.ini ; [ODBC Data Sources] Myodbc = Myodbc Sample = OpenLink Generic ODBC Driver Virtuoso = Virtuoso [ODBC] TraceFile = /tmp/odbc.trace Trace = 0 ; set to 1 to enable tracing [Sample] Driver = /usr/local/openlink/lib/oplodbc.so.1 Description = Sample OpenLink DSN Host = localhost UserName = openlink Password = xxxx ServerType = Oracle 8.1.x Database = FetchBufferSize = 99 ReadOnly = no [Virtuoso] Driver = /usr/local/virtuoso/lib/virtodbc.so.1 Address = localhost:1112 Database = Demo [Myodbc] Driver = /usr/lib/libmyodbc.so HOST = localhost [Default] Driver = /usr/local/openlink/lib/oplodbc.so.1 8. Tracing iODBC driver manager traces driver's ODBC call invoked by the driver manager. Default tracing file is ./odbc.log. Tracing option (i.e. on/off or optional tracing file name) can be set in odbc.ini file under the [ODBC] heading as: [ODBC] TraceFile = Trace = ON | On | on | 1 | OFF | Off | off | 0 If is stderr or stdout, i.e. TraceFile = stderr or TraceFile = stdout the tracing message will go to the terminal screen (if it is available). 9. Further Information Sources: iODBC project home page. Binaries, source, documentation Source, CVS tree, mailing lists, forums, bug reports OpenLink Software. Free trials and support for OpenLink's ODBC drivers. Microsoft's ODBC pages.