Your IP : 216.73.216.86


Current Path : /home/emeraadmin/www/4d695/
Upload File :
Current File : /home/emeraadmin/www/4d695/unixODBC.zip

PK㰐\a��00"doc/AdministratorManual/index.htmlnuȯ��<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="Author" content="Peter Harvey">
   <meta name="GENERATOR" content="Mozilla/4.77C-CCK-MCD Caldera Systems OpenLinux [en] (X11; U; Linux 2.4.2 i686) [Netscape]">
   <title>unixODBC - Administrator Manual</title>
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E" alink="#FF0000">
<img SRC="unixODBC.gif" height=32 width=32><font face="Arial,Helvetica"><font size=+4>unixODBC</font></font>
<br>
<hr WIDTH="100%">
<center><b><font face="Arial,Helvetica"><font size=+3>ADMINISTRATOR MANUAL</font></font></b></center>

<p><b><font face="Arial,Helvetica">Introduction</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Welcome to the unixODBC Administrator Manual.
This manual has been created to help system administrators install and
manage the ODBC sub-system.</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Getting Started</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">At this point you know what ODBC is and
what it can offer the Users of your system(s) - now you want to get it
on your system(s).</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Platforms</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">unixODBC implements ODBC on the following
platforms;</font>
<ul>
<li>
<font face="Arial,Helvetica">Linux</font></li>

<li>
<font face="Arial,Helvetica">Mac OSX</font></li>

<li>
<font face="Arial,Helvetica">VMS</font></li>

<li>
<font face="Arial,Helvetica">and various flavours of UNIX</font></li>
</ul>
<font face="Arial,Helvetica">This manual covers all platforms and will
give special indication of differences for any particular platform.</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Do You Have It?</font></b>
<br><font face="Arial,Helvetica">&nbsp;</font>
<br><font face="Arial,Helvetica">It is possible that your system already
has unixODBC installed. The best way to check for this is to drop to a
terminal and execute 'odbcinst --version'.</font>
<br><font face="Arial,Helvetica"></font>&nbsp;
<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#FFFFCC" NOSAVE >
<tr>
<td>[root@p12 qt]# odbcinst --version
<br>unixODBC 2.1.1
<br>[root@p12 qt]#</td>
</tr>
</table>
<font face="Arial,Helvetica"></font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Downloading</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">You can get the source from <a href="http://sourceforge.net/projects/unixodbc">Source
Forge</a>.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">You can get binary distributions from various
places. One place to look is with the vendor of your operating system.
You can also go to <a href="http://sourceforge.net/projects/unixodbc/">Source
Forge</a> and take a look at the Home Page to see the availibility and
location of binary distributions.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Whether you choose a binary distribution
or source code depends largely upon your site policy and which operating
system you are working with. I recommend the following;</font>
<ul>
<li>
<font face="Arial,Helvetica">Mac OSX - use a binary distribution</font></li>

<li>
<font face="Arial,Helvetica">Others - use a source distribution (tar-ball
NOT CVS)</font></li>
</ul>
<font face="Arial,Helvetica"></font>
<p><br><b><font face="Arial,Helvetica">Installing From Source</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">There are two options when installing from
source. You can install from a source distribution (a gzipped tar-ball)
or from CVS. In either case you will find README files in the main directory
which should help you build and install unixODBC.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">The unixODBC build process uses the GNU&nbsp;auto-tools.
This will be a concern to you if you choose to build from CVS because you
must start the build process with 'make -f Makefile.cvs' - this, in turn,
uses the GNU&nbsp;auto-tools (i.e. automake, autoconf) to build a 'configure'
script. Unfortunately; the GNU&nbsp;auto-tools can be very version sensitive.
See the README file(s) for more on this if you plan to build from CVS source.</font>
<br><font face="Arial,Helvetica"></font>&nbsp;
<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#FFFFCC" NOSAVE >
<tr>
<td>[root@p12 unixODBC]# make -f Makefile.cvs&nbsp;</td>
</tr>
</table>
<font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">You do not have to 'make -f Makefile.cvs'
when using a source distribution. Regardless of whether you choose to use
CVS or a source distribution you will want to execute the 'configure' script
with options appropriate for your needs.</font>
<br><font face="Arial,Helvetica"></font>&nbsp;
<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#FFFFCC" NOSAVE >
<tr>
<td>[root@p12 unixODBC]# ./configure --help</td>
</tr>
</table>
<font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">The 'configure' script will check your
system for features of interest and build some make files as well as create
some include file(s) which will ensure that unixODBC will build without
errors and only with features supported by your operating system.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">At this point it is important to think
about whether or not GUI&nbsp;tools are important to you (and your Users).
The 'configure' script will try to detect support for the GUI&nbsp;applications
in unixODBC and will build them if such support exists. unixODBC&nbsp;includes
GUI tools based upon the Qt class library and GTK. The Qt based tools will
be built if libqt*so can be found. Linux systems will probably have this.
You can get this from <a href="http://www.trolltech.com">Troll Tech</a>.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Now you are ready to build the sources.
Do this with the usual build sequence of commands.</font>
<br><font face="Arial,Helvetica"></font>&nbsp;
<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#FFFFCC" NOSAVE >
<tr>
<td>[root@p12 unixODBC]# make
<br>[root@p12 unixODBC]# make install</td>
</tr>
</table>
<font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica"><font color="#FF0000">Mac OSX</font>: The
Apple folks seem to be grappling with their support for the GNU auto-tools
at the time of this writing. I recommend installing from a binary distribution
of unixODBC. If you must install from source, and you are having problems
with the GNU&nbsp;auto-tools, then you may want to try the qmake build.
The qmake build process is not well documented at this time. People familiar
with qmake should be able to build unixODBC with the included qmake project
files.</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Installing From Binary</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">RPM</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Various RPMs exist for unixODBC. The best
idea is to use any RPM files you can from your O/S vendor. Typically RPM&nbsp;distributions
break unixODBC into more than one RPM distribution such as; core, and GUI.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Mac OSX Disk Images</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">A binary distribution for OSX has recently
become availible in the downloads section at <a href="http://www.codebydesign.com/DataArchitect">CodeByDesign</a>.
This includes proper Mac installs. The install should be done in the following
order;</font>
<ol>
<li>
<font face="Arial,Helvetica">Qt Runtime</font></li>

<li>
<font face="Arial,Helvetica">unixODBC</font></li>

<li>
<font face="Arial,Helvetica">drivers in any order</font></li>
</ol>
<font face="Arial,Helvetica">Others</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Proper install packages are also avalible
for other platforms such as the Debian package format for Debian Linux.
Check with the O/S vendor.</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Where Are Installed Files</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">The location for files vary somewhat depending
upon how you installed unixODBC&nbsp;(source or binary) and which platform
you installed on. Furthermore; the location can be changed during a source
install by './configure --prefix='.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Typically;</font>
<ul>
<li>
<font face="Arial,Helvetica">library files will go in /usr/lib or /usr/local/lib</font></li>

<li>
<font face="Arial,Helvetica">binaries will go in /usr/bin or /usr/local/bin</font></li>

<li>
<font face="Arial,Helvetica">system config files will go in /etc or /usr/local/etc</font></li>
</ul>
<font face="Arial,Helvetica">The system config files are;</font>
<ul>
<li>
<font face="Arial,Helvetica">odbcinst.ini - list of registered drivers</font></li>

<li>
<font face="Arial,Helvetica">odbc.ini - system data source names</font></li>
</ul>
<font face="Arial,Helvetica">The location of the system config files can
be changed by setting the ODBCSYSINI&nbsp;environment variable at run-time.
The system config files can be edited using a simple text editor but it
is recommended that you use the ODBCConfig GUI&nbsp;tool or the odcinst
command-line tool because they will validate the reading and writing of
these files while ensuring that the current location is used.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica"><font color="#FF0000">Mac OSX</font>: The
OSX binary install will use; /usr/lib, /usr/bin, /Applications/Utilities
and /etc.</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Post Install</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">You now have an ODBC&nbsp;sub-system installed
on your system(s). What is the system administrators role from here? The
system administrator is the only person who can install and register ODBC&nbsp;drivers
and create/edit/delete system Data Source Names (DSN).</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Drivers</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Drivers should be installed and configured
based upon the driver vendors instructions. Many drivers do not include
a full install process - lacking the driver registration step. These drivers
can be registered using the ODBCConfig GUI tool or the odbcinst command-line
tool.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">System DSN</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">These can be created using the ODBCConfig
GUI&nbsp;tool or the odbcinst command-line tool. ODBCConfig is the prefered
method but not all drivers have a User Interface (U.I.) part.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica"><font color="#FF0000">Mac OSX</font>: In
some cases the ODBCConfig icon will not open. In such a case you should
drop to a terminal window and use the open command.</font>
<br><font face="Arial,Helvetica"></font>&nbsp;
<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#FFFFCC" NOSAVE >
<tr>
<td># open /Applications/Utilities/ODBCConfig.app</td>
</tr>
</table>
<font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Summary</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">unixODBC implements an ODBC&nbsp;sub-system
for a wide variety of platforms. unixODBC can be installed using; binary,
source and source from CVS. Drivers can be installed using installation
methods created by the driver vendor with unixODBC tools availible to fill
any gaps. ODBC&nbsp;system information can be managed using; ODBCConfig,
odbcinst, or a text editor.</font>
<br><font face="Arial,Helvetica"></font>&nbsp;
<p>
<hr WIDTH="100%">
<br>&nbsp;
<br>&nbsp;
</body>
</html>
PK㰐\#9�T�%�%%doc/AdministratorManual/odbcinst.htmlnuȯ��<html>
<head>
<title>unixODBC without the GUI</title>
</head>
<body>
<h1><center>unixODBC without the GUI</center></h1>
<h3><center>Or<br>
everything you wanted to know about odbcinst but were afraid to ask</center></h3>
<h3>Purpose</h3>
A lot of people are using unixODBC but for a number of reasons are not building
the GUI configuration and testing tools (ODBCConfig and DataManager). This
document is aimed at these people and hopes to explain what you need to do
and when to do it.
<br>

<h3>What's a ini file ?</h3>

ODBC first appeared within Windows 3.0. At this time Windows used .ini files
to contain configuration information. These are text files containing the 
following layout
<pre>[section1]
entry1 = value
entry2 = value

[section2]
entry1 = value
entry2 = value
...</pre>
With the advent of Windows NT these ini files have been replaced by the 
registry, but the API to access them in ODBC has remained the same. Windows
has two function in odbcinst.dll that allow applications and drivers to
query and modify these files, SQLGetPrivateProfileString and 
SQLPutPrivateProfileString. 
<p>As part of unixODBC's aim of reproducing the ODBC environment on non
Windows platform's the ini files and libodbcinst provide the same format
and functionality.

<h3>System versus User</h3>
ODBC distingushes between two types of ini files. System ini files are
designed to be accessable but not modifable by any user, and user files 
are provate to a particular user, and may be modified by that user.

<p>The system files are odbcinst.ini and odbc.ini (note no leading dot), 
and the user file is ~/.odbc.ini in each user's home directory (note 
leading dot).

<p>The system file odbcinst.ini contains information about ODBC drivers 
available to all users, and the odbc.ini file contains information about
DSN's available to all users. These &quot;System DSN's&quot; are useful
for application such as web servers that may not be running as a real user
and so will not have a home directory to contain a .odbc.ini file. 

<p>A good example of this is Apache and PHP with ODBC support. When the
http server is first started it calls SQLAllocEnv as root. it then at a
later time changes to the specified user (in my case nobody) and calls
SQLConnect. If the DSN's was not a system DSN then this fails.

<h3>FILEDSN's</h3>
ODBC 3 also has a third sort of DSN, a file DSN. These store the connection
information in a file that may be accessable to anyone. unixODBC does not
at this time support FILEDSN's but it will when I get around to it. They
are useful things but of less use to UNIX's than NT. Because of the MS view
that everyone should have Windows on there desk, each workstation will have
it's own registry with it's own set of system and user DSN's that can not
be used by other workstations. File DSN's are a fix to allow the information
to be stored in a central server that is accessable to all the workstations.

<h3>Why not vi ?</h3>
All the configuration files needed by unixODBC are plain text files, so there
is no reason that you can not use your favorite text editor to setup the files.
<p>
However since beta 1.6 the location of the system files odbcinst.ini and
odbc.ini are determined by the configure script. The default location is
/usr/local/etc, and if a prefix is specified the location is {prefix}/etc. 
The location of the etc path can be broken out of the normal prefix tree
by specifing --sysconfdir=DIR, so the following will expect the system
files to be in the same location as pre 1.6 builds.
<pre>./configure --sysconfdir=/etc</pre>
The upshot of all this is that if you use odbcinst to configure the files
you can be sure that the same path to the files will be used as are used by
the driver manager, so the modifications will take effect.

<h3>What goes into them ?</h3>

Ok now we know a bit of the history of ini files and ODBC so now we need to
get to the bit that is actually of use. What you put in them.

<h4>odbcinst.ini</h4>

This contains a section heading that provides a name for the driver, so
for the example below PostgreSQL to indicate a Postgres driver. The
following lines contain a description and then the important bits. The
Driver and Setup paths point to the ODBC driver and setup libs. The
setup lib is used when you click on Add in ODBCConfig to add a new DSN, 
but as this document is about not using the GUI tools, this is not
that important for us. Far more important is the Driver entry (vital in fact)
This is the library that the driver manager will dynamicaly load when 
SQLConnect or SQLDriverConnect is called for that DSN. If this points
to the wrong place the DSN will not work. If the dlopen() fails the DSN will 
not work. The fileusage entry is added by the odbcinst program, so if 
you are using a text editor, you will need to add it yourself.
<pre>
[PostgreSQL]
Description     = PostgreSQL driver for Linux & Win32
Driver          = /usr/local/lib/libodbcpsql.so
Setup           = /usr/local/lib/libodbcpsqlS.so
FileUsage       = 1
</pre>

<h4>templates</h4>

odbcinst expects to be supplied with a template file. If you are adding a
driver for the above entry the template file would contain the following
<pre>
[PostgreSQL]
Description     = PostgreSQL driver for Linux & Win32
Driver          = /usr/local/lib/libodbcpsql.so
Setup           = /usr/local/lib/libodbcpsqlS.so
</pre>

and you would invoke odbcinst with the following arguments, assuming that 
you have created a file template_file with the above entries in.
<pre>
odbcinst -i -d -f template_file
</pre>
The args to odbcinst are as follows
<p>-i install 
<br>-d driver
<br>-f name of template file
<p>

<h4>Threads</h4>
Since 1.6 if the driver manager was built with thread support you may
add another entry to each driver entry. For example
<pre>
[PostgreSQL]
Description     = PostgreSQL driver for Linux & Win32
Driver          = /usr/local/lib/libodbcpsql.so
Setup           = /usr/local/lib/libodbcpsqlS.so
<b>Threading       = 2</b>
</pre>

This entry alters the default thread serialization level. More details
can be found in the file DriverManager/__handles.c in the source tree.

<h4>[.]odbc.ini</h4>
The contents of the odbc.ini files are a bit more complicated, but they follow
just the same format as the odbcinst.ini entries. These are complicated by each
driver requiring different entries. The entries for all the drivers supplied 
with the distribution are included bellow for reference. The entries may be
added in the same way using odbcinst, or a text editor. A sample entry
to match the above driver could be
<pre>
[PostgreSQL]
Description         = Test to Postgres
Driver              = PostgreSQL
Trace               = Yes
TraceFile           = sql.log
Database            = nick
Servername          = localhost
UserName            =
Password            =
Port                = 5432
Protocol            = 6.4
ReadOnly            = No
RowVersioning       = No
ShowSystemTables    = No
ShowOidColumn       = No
FakeOidIndex        = No
ConnSettings        =
</pre>

And this may be written to a template file, and inserted in the ini file
for the current user by
<pre>
odbcinst -i -s -f template_file
</pre>

The individual entries of course may vary.

<p>The Driver line is used to match the [section] entry in the odbcinst.ini
file and the Driver line in the odbcinst file is used to find the
path for the driver library, and this loaded and the connection is then
established. It's possible to replace the driver entry with a path to
the driver itself. This can be used, for example if the user can't get
root access to setup anything in /etc (less important now because of
the movable etc path). For example

<pre>
[PostgreSQL]
Description         = Test to Postgres
Driver              = /usr/local/lib/libodbcpsql.so
Trace               = Yes
TraceFile           = sql.log
Database            = nick
Servername          = localhost
UserName            =
Password            =
Port                = 5432
Protocol            = 6.4
ReadOnly            = No
RowVersioning       = No
ShowSystemTables    = No
ShowOidColumn       = No
FakeOidIndex        = No
ConnSettings        =
</pre>

<h3>Templates</h3>

The templates for the included drivers are...

<h4>Postgress</h4>
<pre>
[PostgreSQL]
Description         = Test to Postgres
Driver              = PostgreSQL
Trace               = Yes
TraceFile           = sql.log
Database            = nick
Servername          = localhost
UserName            =
Password            =
Port                = 5432
Protocol            = 6.4
ReadOnly            = No
RowVersioning       = No
ShowSystemTables    = No
ShowOidColumn       = No
FakeOidIndex        = No
ConnSettings        =
</pre>

<h4>Mini SQL</h4>
<pre>
[Mini SQL]
Description     = MiniSQL
Driver          = MiniSQL
Trace           = No
TraceFile       =
Host            = localhost
Database        =
ConfigFile      =
</pre>

<h4>MySQL</h4>
<pre>
[MySQL]
Description     = MySQL
Driver          = MySQL
Trace           = No
TraceFile       =
Host            = localhost
Port            =
Socket          =
Database        =
</pre>

<h4>NNTP driver</h4>
<pre>
[nntp Data Source]
Description     = nntp Driver
Driver          = nntp Driver
Trace           = No
TraceFile       =
Host            = localhost
Database        =
Port            =
</pre>

<h4>Sybase SQL Anywhere 5.0</h4> Thanks Greg.
<pre>
[Sybase SQL Anywhere 5.0]
Driver=Sybase SQL Anywhere 5.0
Description=Sybase SQL Anywhere 5.0 ODBC Driver
Userid=dba
Password=sql
DatabaseFile=sademo.db
</pre>

Hopefully this will be of some use to someone... <a href="mailto:nick@lurcher.org">Nick Gorham</a>

</body>
</html>
PK㰐\d]H��!doc/AdministratorManual/php3.htmlnuȯ��<html>
<head>
<title>Installing PHP with unixODBC</title>
</head>
<body>
<h1>Installing PHP with unixODBC</h1>

This install procedure is based on apache 1.3.6 and PHP 3.0.9. The PHP4 from beta 3 will have a 
configure option to use unixODBC so most of the following will be redundant.

<p>
This document assumes that unixODBC has been built and installed, in this case in the default location
/usr/local, and that both Apache and PHP have been untarred in the users home directory.

<ol>

<li>In the Apache directory run the following command
<pre>
   ./configure --prefix=/www
</pre>

plus any other local config you need

<p><li>Create a file in /usr/local/include called odbc.h containing the following three lines

<pre>
   #include &lt;sql.h&gt;
   #include &lt;sqlext.h&gt;
   #include &lt;odbcinst.h&gt;
</pre>

replacing /www with your desired apache install path

<p><li>Move to the PHP directory

Define the following environment variables

<pre>
   CFLAGS="-I/usr/local/include"
   LDFLAGS=
   CUSTOM_ODBC_LIBS="-L/usr/local/lib -lodbc"
</pre>

remember to export these variables

<pre>
   export CFLAGS LDFLAGS CUSTOM_ODBC_LIBS 
</pre>

<p><li>Configure PHP with

<pre>
   ./configure --with-apache=../apache_1.3.6 --with-custom-odbc=/usr/local  --enable-track-vars
</pre>

plus any other local config you need

then...

<pre>
   make
   make install
</pre>

<p><li>Go back to your apache directory, and do

<pre>
   ./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a
   make
   make install
</pre>

<p><li>Back to the PHP directory

Then to quote from the PHP INSTALL
<pre>
   cp php3.ini-dist /usr/local/lib/php3.ini
   You can edit /usr/local/lib/php3.ini file to set PHP options.
   Edit your httpd.conf or srm.conf file and add:
     AddType application/x-httpd-php3 .php3
<pre>

</ol>

And that should be that.

<p>If this is of any help to someone, good, any problems let <a href="mailto:nick@unixodbc.org">me</a> know. 
<p>Nick Gorham
</body>
</html>
PK㰐\Z��!ZZ$doc/AdministratorManual/unixODBC.gifnuȯ��GIF89a  ��������l����������!�NETSCAPE2.0!�Made with GIMP!�	,  ����Ig���ͷ��ԍ�$Y}R����/L�w��[������JB�CŒ�]�C�F�5���O.ϫ"��1�3{��c�Jyゼ>ov[�{z}!vJ�{�[��|fDb��r+�;����W����Z=���p`��������u��a�n��1& g������ä��	!�	,  ����0�I�8�Z/�� J\�}���dy�B�����<�u��;��yy�tM�˘��R@���A����5'�Ëq�3�����-}�/����.�&siX�_f�Vc`BiP^��Y��7����2������I���{i����V���&��v_������������o��	!�	,  ����0J޼�
Q+��&n�GUD0��������s����ݪF�łBQ�2�â(C�z�i��Y���BsU��˱�<���_�o���-�i���%q8[���\m������)����lv5��.������xv����)���F��D������[��������w&y%&��	!�	,  ��I��x��Y�Di�^X��颛*�o]�ag�~鼝��	�3����'20��F׀���>Q��`���Oo���N���j�o�ܜ�1T{}ux �s�~�8��"�dz����{|p��D�^p�[]�������^�y����M��w��������������IŗȬ�Ɯ2#md�2l#�;PK㰐\�{o�[2[2*doc/AdministratorManual/unixODBCsetup.htmlnuȯ��<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
	<TITLE></TITLE>
	<META NAME="GENERATOR" CONTENT="StarOffice/5.1 (Linux)">
	<META NAME="AUTHOR" CONTENT="Charles Morrison">
	<META NAME="CREATED" CONTENT="19990831;225400">
	<META NAME="CHANGEDBY" CONTENT="Charles Morrison">
	<META NAME="CHANGED" CONTENT="19990914;11232600">
</HEAD>
<BODY>
<H3 ALIGN=CENTER>A neophyte's guide <BR>to getting unixODBC and
Mysql/MyODBC working<BR><BR><BR>
</H3>
<H4>Introduction</H4>
<P STYLE="margin-left: 0.79in">UnixODBC is an idea whose time has
come. It holds many promises for those of us who use databases in our
daily work and would like to do more of that work on Linux or one of
the UNIX variants. Those coming from a windows background will
rapidly discover that it can be much more involved setting up a
working Unix based database than they are used to. They will also
discover a world of great advantages too; stability, scalability and
freely available source code are values not easily dismissed.</P>
<P STYLE="margin-left: 0.79in">This document is designed to help
people set up and use unixODBC. My database of choice is MySQL, which
I have used with great success for several years, and it is the
database I will discuss setting up</P>
<P STYLE="margin-left: 0.79in">ODBC is an interface by which programs
and programmers can communicate with any database which has an ODBC
driver. While most databases have one or more APIs in various
programming languages, ODBC allows the same programming code to talk
with numerous types of databases. (ODBC is not the only interface to
do this, but it is very widely used and supported)</P>
<H4>Getting Started</H4>
<P STYLE="margin-left: 0.79in">UnixODBC is available in source code
only. This means that you download a tar file from
<A HREF="http://www.unixODBC.org/">http://www.unixODBC.org</A> ,
extract it, compile it, and install it. Before you do so though you
need some other things.</P>
<H4>Prerequisets: 
</H4>
<OL>
	<LI><P>The Qt toolkit version 2.x sources from <A HREF="http://www.troll.no/">http://www.troll.no</A>
	. Make sure it is version 2 or higher !</P>
	<OL>
		<LI><P>Download the Qt v2 sources.</P>
		<LI><P>Extract the sources to somewhere, usually this is done by
		placing the tar file in a directory like /usr/local or /opt and
		using the command.<BR><B>tar zxvf qt-2.0.1.tar.gz </B><BR>to
		extract the files. This will create a subdirectory qt-2.0.1 .
		Remember that only root can normally write to /usr/local or /opt.
		This is an exaple, use the name of the file you have.</P>
		<LI><P>Compile the sources. Assuming you have a relatively recent
		version of Linux with all the appropriate stuff (libg++, gcc or
		egcs etc) You issue 3 commands from the qt-2.0.1
		directory.<BR><B>./configure</B><BR><B>make</B><BR><B>make install</B></P>
		<LI><P>This last command is scary since it will install the new
		libqt into places where any old v1.4x libqt may exist. Rest assured
		that the full name of the library is different and it will not
		overwrite your existing libqt. It should choke on rewriting the
		symlink to libqt.so and thus not mess up your existing Qt / KDE
		apps. If it does rewrite this link, you will need to set it back to
		its original link.</P>
		<LI><P>For more information, see <A HREF="http://www.troll.no/">http://www.troll.no</A>
		. Please don't bother the unixODBC people for instructions on
		setting up Qt.</P>
	</OL>
</OL>
<OL START=2>
	<LI><P>A Database - in this case MySQL from <A HREF="http://www.mysql.com/">http://www.mysql.com</A></P>
	<OL>
		<LI><P>Again, I strongly suggest you get the sources and compile
		them yourself. The process is similar if not identical to that for
		Qt described above. By default MySQL installs it's executable files
		in<B><I> /usr/local/bin</I></B>, it's include files (source
		headers) in <B><I>/usr/local/include/mysql</I></B> and it's
		libraries in <B><I>/usr/local/lib/mysql</I></B>. The actual
		database files are in <B><I>/usr/local/var</I>.</B></P>
		<LI><P>Before you can use MySQL, you need to run
		<BR><B>/usr/local/bin/mysql_install_db</B> <BR>as root to set up
		the system tables. To actually start the database, run
		<BR><B>/usr/local/bin/safe_mysqld &amp;</B></P>
		<LI><P>MySQL comes with very extensive documentation. Refer to it
		for questions on compiling, installing and using MySQL. This is
		expecially true for permissions. If the permissions aren't correct,
		no interface will work.</P>
	</OL>
</OL>
<H4>Installing unixODBC</H4>
<OL>
	<LI><P>As mentioned before, get the source tar file from
	<A HREF="http://www.unixodbc.org/">http://www.unixodbc.org</A> . As
	root, move the tar file to /op or /usr/local or where ever you want
	the source to reside. Untar the file and run the following commands
	from the command line in the unixODBC source
	directories:<BR><B>./configure</B><BR><B>./make</B><BR><B>./make
	install</B></P>
	<LI><P>Assuming that you have all the libraries and tools that it
	needs, you should be breezing through this compile. Certainly after
	all that practice with Qt and MySQL this should be old hat. UnixODBC
	takes quite a while to compile, actually all of these packages do.
	Relax and enjoy it. 
	</P>
</OL>
<H4>Installing a Driver</H4>
<P STYLE="margin-left: 0.79in">UnixODBC by itself isn't a whole lot
of good without a driver. MySQL has an ODBC driver named MyODBC but
it isn't included with the current edition of unixODBC, so you have
to get it and compile it yourself. I'll be referring to version
2.50.24, the latest as of this writing. The installation is much the
same as the other packages, but you need to give configure some
options. It will prompt you for the path to the MySQL sources if you
don't specify the path, but you also have to supply the
<I>--with-unixODBC=</I>&lt;your unixODBC directory here&gt; flag. The
following is from the MyODBC INSTALL file: 
</P>
<P STYLE="margin-left: 0.79in"><I>     To make configure look for
unixODBC instead of iODBC, use</I></P>
<P STYLE="margin-left: 0.79in"><I>          --with-unixODBC=DIR</I></P>
<P STYLE="margin-left: 0.79in"><I>      Where DIR is where unixODBC
is installed.</I></P>
<P STYLE="margin-left: 0.79in"><I>      And (as usual), if the
unixODBC headers and libraries aren't located</I></P>
<P STYLE="margin-left: 0.79in"><I>      in DIR/include and DIR/lib,
use</I></P>
<P STYLE="margin-left: 0.79in"><I>          
--with-unixODBC-libs=LIBDIR  --with-unixODBC-includes=INCDIR</I></P>
<P STYLE="margin-left: 0.79in"><I>   You might want to specify a
prefix other than /usr/local for installation,<BR>   I, for example
keep my ODBC drivers in /usr/local/odbc/lib, so I add</I></P>
<P STYLE="margin-left: 0.79in"><I>       --prefix=/usr/local/odbc</I></P>
<P STYLE="margin-left: 0.79in">So here is my configure line:</P>
<P STYLE="margin-left: 0.79in"><B>./configure
<I>--with-unixodbc=/usr/local --with-mysql-sources=/usr/local/mysql</I></B></P>
<P STYLE="margin-left: 0.79in">Running <B>make</B> and then <B>make
install</B> puts the resulting library: <B>libmyodbc-2.50.23.so</B>
into /usr/local/lib. WAIT A MINUTE ! Didn't I say it was version
2.50.24 ? Yes, I did. However, unless you want to go in and change
the version info in the source code, it will create the library with
that name. I don't consider this a big deal and so I didn't mess with
it.</P>
<P STYLE="margin-left: 0.79in">If you omit the <I>--with-mysql-sources</I>
flag, configure will fail. If you omit the <SPAN STYLE="font-weight: medium"><I>--with-unixodbc</I></SPAN>
flag, configure will complete and MyODBC will compile. However, it
will not work correctly when using it with unixODBC. The problems
described below occurred when I omitted this flag: <BR><BR>1) If the
DSN (Data Source Name) you create is also the name of a database, the
driver points to that database no matter what you specify the
database to be.<BR>2) If the DSN is not the name of an existing
database, it will fail, not allowing you to login to the database.
The trace log file will tell you that it couldn't find a database
with the name of the DSN. This is confusing if you specified a valid
database name in the .odbc.ini file . 
</P>
<P STYLE="margin-left: 0.79in">When using the <I>--with-unixodbc</I>
flag, These problems dissappear and it works the way it should. 
</P>
<P STYLE="margin-left: 0.79in">A note: MyODBC does not support ODBC
version 3 as of version 2.50.24 . When writing programs that utilize
this driver, I have had success with specifying V_OD_ODBC2 when
calling SQLSetEnvAttr(...) .</P>
<H4>Setting up unixODBC</H4>
<P STYLE="margin-left: 0.79in">At long last we come to actually
setting up unixODBC and using it. While most of this information
exists on the unixODBC web pages and user's guide, I found it
difficult to find and follow, so I repeat it here in hopes that it
will be made clearer.</P>
<P STYLE="margin-left: 0.79in">UnixODBC consists of a lot of
libraries, installed in <B>/usr/local/lib</B>, and a few executable
files (binaries) installed into <B>/usr/local/bin</B>. These
executable files are <I>ODBCConfig</I>, <I>DataManager</I>, and
<SPAN STYLE="font-weight: medium"><I>odbcinst</I></SPAN>. 
</P>
<P><B>In order to get unixODBC running, do these things in this
order:</B></P>
<P><B>Do this as root...</B></P>
<P STYLE="margin-left: 0.79in">In an xterm, type ODBCConfig . This is
a GUI program and must be run in an X session. At the very least you
need to set up a driver to use. The drivers will be specific to one
database application, like MyODBC is specific to MySQL. In addition
to this, you need to specify a setup file to use for this drive. The
setup files are the <B>/usr/local/lib/libodbc*S.so</B> libraries
where * signifies the database application, so
<B>/usr/local/lib/libodbcmyS.so</B> is the &quot;setup file&quot; for
MyODBC. The driver (not the setup file) is
<B>/usr/local/lib/libmyodbc-2.50.23.so. </B>
</P>
<P STYLE="margin-left: 0.79in; font-weight: medium">To set up the
driver, run ODBCConfig as root, go to the drivers tab and click on
&quot;New&quot;. The following are the settings I use...</P>
<P STYLE="margin-left: 0.79in"><B>Name: myodbc<BR>Description: MySQL
driver.<BR>Driver: /usr/local/lib/libmyodbc-2.50.23.so<BR>Setup:
/usr/local/lib/libodbcmyS.so</B><BR><B>FileUsage: 1</B></P>
<P STYLE="margin-left: 0.79in; font-weight: medium">You should have a
driver set up before setting up a DSN. After having done so, you may
want to set up a system DSN. You do this by selecting the &quot;System
DSN&quot; tab, clicking on 'New', specifying the driver to use and
filling in the required information. You will want to select the
driver name you just defined as the Driver in the first screen that
displays, and click OK.</P>
<P STYLE="margin-left: 0.79in; font-weight: medium">Doing this as
root will create and edit the <B>/usr/local/etc/odbcinst.ini</B> (for
the driver info) and <B>/usr/local/etc/odbc.ini</B> (for the system
DSN) files. Early versions of unixODBC would put these files in /etc,
and you can still use a configure option : <I>--sysconfdir=/etc</I>
to put those files in that location.</P>
<P STYLE="font-weight: medium"><B>Do this as a normal user:</B> 
</P>
<P STYLE="margin-left: 0.79in">The process for setting up a user DSN
is identical to setting up a system DSN. You simply select the &quot;User
DSN&quot; tab in ODBCConfig and fill out the required fields. The
following is how I filled out a User DSN.</P>
<P STYLE="margin-left: 0.79in"><B>Name: mysqltest<BR>Description:
myodbc<BR>Driver: myodbc<BR>Trace: Yes<BR>TraceFile: mysql.log<BR>Host:
localhost<BR>Port: 3306<BR>Socket:<BR>Database: test</B></P>
<P STYLE="margin-left: 0.79in">This will create and edit a file named
~/.odbc.ini . Since the test database comes without any tables, you
may want to specify mysql as the database instead, so you can see the
tables when running DataManager.</P>
<P><B>Run DataManager</B></P>
<P STYLE="margin-left: 0.79in">Now you should be able to run
DataManager and see your drivers, DSNs and tables for each DSN. See
the unixODBC web site for screen shots of what it should look like. 
</P>
<P><B>OK, Now What ?</B></P>
<P STYLE="margin-left: 0.79in">UnixODBC is not so much an end user
program, but rather an intermediary between a program and one or more
databases. There is information in the unixODBC documentation for
example, about setting up StarOffice to use an ODBC connection. I am
in the process of writing a <A HREF="http://www.info2000.net/~cmorrison/databuilder.html">program</A>
that makes use of unixODBC and numerous others are as well. It may
well be that in time unixODBC will be included in numerous Linux
distributions and installed by default. Until that time I hope that
this document helps you get this sofware up and running.</P>
<P ALIGN=RIGHT STYLE="margin-left: 0.79in">Charles
Morrison<BR>cmorrison@info2000.net</P>
</BODY>
</HTML>PK㰐\v8��(doc/ProgrammerManual/Tutorial/close.htmlnu�[���<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Closing a connection</TITLE>
<LINK REL="Stylesheet" href="odbc.css">
</HEAD>
<BODY bgcolor="white">

<table width="90%" cols="3" border="0">
<TR>
   <TD colspan="3" class="big">Closing a connection</TD>
</TR>
<TR>
  <TD colspan="3"><P>Before your program terminates you need to free all resources you
  have allocated. If you checked the source on the previous page, you certainly
  spotted <CODE><A HREF="gloss.html#free">SQLFreeHandle</A></CODE>. This function must be used 
  to free each allocated handle. It expects a parameter which states the type of the handle
  to be freed and the handle itself. So if you want to free an environment handle you should 
  call (in our example program):</P>
  <CODE>
  SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
  </CODE>
  <P>
  Before you free any handle make sure that it is no longer needed, wouldn't be funny, if you
  released to connection handle but forgot to close the connection ;)</P>
  <P>
  And if you want to close a connection you need <CODE><A HREF="gloss.html#clos">SQLDisconnect</A></CODE>.
  This closes the connection associated with the connection handle offered as argument to <CODE>SQLDisconnect</CODE>.
  In our programm we need to call:</P>
  <CODE>
  SQLDisconnect(V_OD_hdbc);
  </CODE>
  <P>
  If you need source code, please have a look <A HREF="conne.html#list">here</A>.</P>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
PK㰐\�����(doc/ProgrammerManual/Tutorial/conne.htmlnu�[���<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Connecting </TITLE>
<LINK REL="StyleSheet" Href="odbc.css">
</HEAD>
<BODY bgcolor="white">

<table width="90%" cols="3" border="0">
<TR>
   <TD colspan="3" class="big">Connecting to a Datasource</TD>
</TR>
<TR>
  <TD colspan="3"><P>First thing you will need is a variable of type <CODE>SQLHENV</CODE>. This is
  a handle (pointer) to an internal ODBC structure which holds all informationen about the
  ODBC environment. Without a handle of that kind you won't be able do to very much.
  To get this handle you call <CODE><A HREF="gloss.html#alloc">SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &amp;V_OD_Env)</A></CODE>.
  <CODE>V_OD_Erg</CODE> is a variable of type <CODE>SQLHENV</CODE> which holds the allocated environment handle.</P>
  <P>
  If you have allocated the handle you need to define which version of ODBC to use. Therefore 
  you should call <CODE><A HREF="gloss.html#envattr">SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0)</A></CODE>.
  The constant <CODE>SQL_ATTR_ODBC_VERSION</CODE> defines that the needed version of ODBC will be defined
  and <CODE>SQL_OV_ODBC3</CODE> says that the program will need ODBC 3.0.
  </P>
  <P>Next thing to do is to create a handle for the database connection which is of the type <CODE>SQLHDBC</CODE>. Once again you call
  <CODE>SQLAllocHandle</CODE> this time with <CODE>SQL_HANDLE_DBC</CODE> and the variable to the environment returned by the first call to
  <CODE>SQLAllocHandle</CODE>.
  </P><P>
  Then you may choose to modify the connection attributes, mainly the timeout for any given
  action on the connection. You do this by calling <CODE><A HREF="gloss.html#conattr">SQLSetConnectAttr</A></CODE>
  with the connection handle, attribute and value pointer and the string length (if available).</P>
  <P>
  Finally we are able to connect to the database via <CODE><A href="gloss.html#conn">SQLConnect</A></CODE>, which needs the name of the data source,
  the username and password as parameters. For each parameter you need to specify how long the string is or just gib <COde>SQL_NTS</CODE> which
  says that it is a string which length has to be determined by <CODE>SQLConnect</CODE>
  </P>
  That's it, we are connected to the database. Please note, that all functions mentioned on this page return either <CODE>SQL_SUCCESS</CODE>, <CODE>SQL_SUCCESS_WITH_INFO</CODE> 
  if all went smoothly or <CODE>SQL_ERROR</CODE> or <CODE>SQL_INVALID_HANDLE</CODE> in case of an error. We will have a look on how to get diagnostic messages a little later.
  <P>
  So let's have a look at the code:
</TD>
</TR>
</TABLE>
<TABLE>
<TR>
<TD>
  <PRE><CODE class="list">
<A NAME="list"></A>  
/* odbc.c

    testing unixODBC
*/
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;odbc/sql.h&gt;
#include &lt;odbc/sqlext.h&gt;
#include &lt;odbc/sqltypes.h&gt;

SQLHENV			 V_OD_Env;     <FONT COLOR="green">// Handle ODBC environment</FONT>
long			 V_OD_erg;     <FONT COLOR="green">// result of functions</FONT>
SQLHDBC			 V_OD_hdbc;    <FONT COLOR="green">// Handle connection</FONT>

char			 V_OD_stat[10]; <FONT COLOR="green">// Status SQL</FONT>
SQLINTEGER		 V_OD_err,V_OD_rowanz,V_OD_id;
SQLSMALLINT		 V_OD_mlen;
char             V_OD_msg[200],V_OD_buffer[200];


int main(int argc,char *argv[])
{
	<FONT COLOR="green">// 1. allocate Environment handle and register version </FONT>
	V_OD_erg=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env);
	if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
	{
		printf("Error AllocHandle\n");
		exit(0);
	}
	V_OD_erg=SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, 
                               (void*)SQL_OV_ODBC3, 0); 
	if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
	{
		printf("Error SetEnv\n");
		SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
		exit(0);
	}
	<FONT COLOR="green">// 2. allocate connection handle, set timeout</FONT>
	V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc); 
	if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
	{
		printf("Error AllocHDB %d\n",V_OD_erg);
		SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
		exit(0);
	}
	SQLSetConnectAttr(V_OD_hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0);
	<FONT COLOR="green">// 3. Connect to the datasource "web" </FONT>
	V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "web", SQL_NTS,
                                     (SQLCHAR*) "christa", SQL_NTS,
                                     (SQLCHAR*) "", SQL_NTS);
	if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
	{
		printf("Error SQLConnect %d\n",V_OD_erg);
		SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, 
		              V_OD_stat, &V_OD_err,V_OD_msg,100,&V_OD_mlen);
		printf("%s (%d)\n",V_OD_msg,V_OD_err);
		SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
		exit(0);
	}
	printf("Connected !\n");
	<FONT COLOR="green">/* continued on next page */</FONT>
  </CODE>
  </PRE>
  </TD>
</TR>
</TABLE>
</BODY>
</HTML>
PK㰐\�W��\
\
&doc/ProgrammerManual/Tutorial/dsn.htmlnu�[���<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Obtainign Datasources</TITLE>
<LINK REL="Stylesheet" href="odbc.css">
</HEAD>
<BODY bgcolor="white">

<table width="90%" cols="3" border="0">
<TR>
   <TD colspan="3" class="big">Obtaining a Datasourcename</TD>
</TR>
<TR>
  <TD colspan="3"><P>A simple query should be a nobrainer right now. But what if
     your programm runs on a system where you can't be sure which datasource names
     are configured?</P>
     <P>Then you should use <A hrEF="gloss.html#dsn"><CODE>SQLDataSources()</CODE></a>.
     After allocating a environment handle you may use this to find out about the
     DSN and the supplied description for the datasource.</P>
     <P>As ODBC knows systemwide and userwide datasources, you need to give a direction
     which datasource types you are looking for. There you may specify either of the 
     following values:</P>
     <TABLE COLS="2" border="0" width="90%">
     <TR>
       <TD valign="top"><CODE>SQL_FETCH_FIRST</CODE></TD>
       <TD>Sets up <CODE>SQLDataSources()</CODE> to lookup the first of all
           available datasources (either user or systemwide).
     </TR>
     <TR>
       <TD valign="top"><CODE>SQL_FETCH_FIRST_USER</CODE></TD>
       <TD>Sets up <CODE>SQLDataSources()</CODE> to lookup the first of the
           available user datasources.
     </TR>
     <TR>
       <TD valign="top"><CODE>SQL_FETCH_FIRST_SYSTEM</CODE></TD>
       <TD>Sets up <CODE>SQLDataSources()</CODE> to lookup the first of the
           available system datasources.
     </TR>
     <TR>
       <TD valign="top"><CODE>SQL_FETCH_NEXT</CODE></TD>
       <TD>Fetches the next datasource.
           Depending on <CODE>SQL_FETCH_FIRST_USER</CODE>, <CODE>SQL_FETCH_FIRST_SYSTEM</CODE>
           or <CODE>SQL_FETCH_FIRST</CODE> this may only be a user datasource, 
           only a system datasource or one of either.
     </TR>
     </TABLE>
     <P>So let's have a look on a small function, which will return all available
     datasource names. You may insert this code into the program which you      built before and call it somewhere after you've obtained an environment      handle.</P>
<CODE class="list"><PRE>
void OD_ListDSN(void)
{
 char       l_dsn[100],l_desc[100];
 short int  l_len1,l_len2,l_next;

 l_next=SQL_FETCH_FIRST;
 while( SQLDataSources(V_OD_Env,l_next,l_dsn, sizeof(l_dsn),
        &l_len1, l_desc, sizeof(l_desc), &l_len2) == SQL_SUCCESS)
     {
      printf("Server=(%s) Beschreibung=(%s)\n",l_dsn,l_desc);
      l_next=SQL_FETCH_NEXT;
     }
}
</PRE></CODE>

     


</TD>
</TR>
</TABLE>
</BODY>
</HTML>
PK㰐\C��N�N(doc/ProgrammerManual/Tutorial/gloss.htmlnu�[���<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Developer Studio">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Glossary </TITLE>
<LINK REL="StyleSheet" Href="odbc.css">
</HEAD>
<BODY bgcolor="white">

<table width="90%" cols="3" border="0" cellspacing="0">
<TR>
   <TD colspan="3" class="big">Index / Glossary</TD>
</TR>
<TR>
  <TD colspan="3">
   <TABLE Cols="13" width=90% bgcolor="black">
   <TR>
      <TH class="head"><a href="#A">A</A></TH>
      <TH CLASS="head"><a href="#B">B</A></TH>
      <TH CLASS="head"><a href="#C">C</A></TH>
      <TH CLASS="head"><a href="#D">D</A></TH>
      <TH CLASS="head"><a href="#E">E</A></TH>
      <TH CLASS="head"><a href="#F">F</A></TH>
      <TH CLASS="head"><a href="#G">G</A></TH>
      <TH CLASS="head"><a href="#H">H</A></TH>
      <TH CLASS="head"><a href="#I">I</A></TH>
      <TH CLASS="head"><a href="#J">J</A></TH>
      <TH CLASS="head"><a href="#K">K</A></TH>
      <TH CLASS="head"><a href="#L">L</A></TH>
      <TH CLASS="head"><a href="#M">M</A></TH>
   </TR>
   <TR>
      <TH CLASS="head"><a href="#N">N</A></TH>
      <TH CLASS="head"><a href="#O">O</A></TH>
      <TH CLASS="head"><a href="#P">P</A></TH>
      <TH CLASS="head"><a href="#Q">Q</A></TH>
      <TH CLASS="head"><a href="#R">R</A></TH>
      <TH CLASS="head"><a href="#S">S</A></TH>
      <TH CLASS="head"><a href="#T">T</A></TH>
      <TH CLASS="head"><a href="#U">U</A></TH>
      <TH CLASS="head"><a href="#V">V</A></TH>
      <TH CLASS="head"><a href="#W">W</A></TH>
      <TH CLASS="head"><a href="#X">X</A></TH>
      <TH CLASS="head"><a href="#Y">Y</A></TH>
      <TH CLASS="head"><a href="#Z">Z</A></TH>
   </TR>
   </TABLE>
  </TD>
</TR>
</TABLE>
<table width="90%" cols="3" border="0" cellspacing="0">

<TR>
  <TD class="head" width="60"><a name="C"><B>C</B></A></TD>
  <TD width="20" class="head">&nbsp</TD>
  <TD class="head"><A Name="col">Column</A></TD>
</TR>
<TR><TD Colspan="2">&nbsp;</TD>
    <TD><P>A column is another name for field in a SQL table.
	It has a data type (Integer, Char, Money etc) and a name by which it is 
	addressed.</P>
	<P>You specify the name of a column in a query (either DELETE, UPDATE, SELECT or
	INSERT)</P>
	</TD>
</TR>
<TR>
  <TD class="head" width="60"><a name="D"><B>D</B></A></TD>
  <TD width="20" class="head">&nbsp</TD>
  <TD class="head"><A Name="dsrc">data source</A></TD>
</TR>
<TR><TD Colspan="2">&nbsp;</TD>
    <TD>A data source defines all informationen needed by ODBC to connect to a
	database. This includes the name of the driver to use (Postgres, mySQL etc.),
	the name of the user, his password, the server name on which the database resides 
	and of course the name of the database. There are a lot more options available.
	</TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD class="head"><A NAME="dtyp">Data Types</A></TD>
</TR>
<TR>
  <TD colspan="2">&nbsp;</TD>
  <TD><P>
  The following table show some ODBC data types and how the relate
  to standard C data types:</P>
  <TABLE COLS="3" border="0" cellspacing="1">
  <TR>
    <TH CLASS="head">Type identifier</TH>
    <TH CLASS="head">ODBC typedef</TH>
    <TH CLASS="head">C typedef</TH>
  </TR>
  <TR>
    <TD class="small">SQL_C_CHAR</TD>
    <TD class="small">SQLCHAR * </TD>
	<TD class="small">unsigned char * </TD>
  </TR>
  <TR>
    <TD class="small">SQL_C_SSHORT</TD>
    <TD class="small">SQLSMALLINT</TD>
	<TD class="small">short int </TD>
  </TR>
  <TR>
    <TD class="small">SQL_C_USHORT  </TD>
    <TD class="small">SQLUSMALLINT </TD>
    <TD class="small">unsigned short int </TD>
  </TR>
  <TR>
    <TD class="small">SQL_C_SLONG </TD>
    <TD class="small">SQLINTEGER</TD>
    <TD class="small">long int</TD>
  </TR>
  <TR>
    <TD class="small">SQL_C_FLOAT</TD>
    <TD class="small">SQLREAL</TD>
    <TD class="small">float </TD>
  </TR>
  <TR>
    <TD class="small">SQL_C_DOUBLE</TD>
    <TD class="small">SQLDOUBLE, SQLFLOAT</TD>
	<TD class="small">double </TD>
  </TR>
  <TR>
    <TD class="small">SQL_C_BINARY </TD>
    <TD class="small">SQLCHAR *</TD>
	<TD class="small">unsigned char </TD>
  </TR>
  <TR>
    <TD class="small">SQL_C_TYPE_DATE</TD>
    <TD class="small">SQL_DATE_STRUCT</TD>
	<TD class="small"> struct <BR>tagDATE_STRUCT {<BR>
     SQLSMALLINT year; <BR>
     SQLUSMALLINT month; <BR>
     SQLUSMALLINT day; <BR>
     } DATE_STRUCT; 
     </TD>
  </TR>
  <TR>
    <TD class="small">SQL_C_TYPE_TIME </TD>
    <TD class="small">SQL_TIME_STRUCT </TD>
	<TD class="small">struct<BR>tagTIME_STRUCT {<BR>
     SQLUSMALLINT hour; <BR>
     SQLUSMALLINT minute; <BR>
     SQLUSMALLINT second; <BR>
    } TIME_STRUCT;  
	</TD>
   </TR>
   </TABLE>
   <P>You will need the type identifier in calls to <A HREF="#bind">SQLBindCol</A>.
   </TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD >
  </TD>
</TR>
<TR>
  <TD class="head" width="60"><a name="O"><B>O</B></A></TD>
  <TD width="20" class="head">&nbsp</TD>
  <TD class="head"><A Name="oini">odbc.ini</A></TD>
</TR>
<TR><TD Colspan="2">&nbsp;</TD>
    <TD><CODE>/etc/odbc.ini</CODE> is the configuration file for system
	    <A HREF="#dsrc">data sources</A>. It contains information which will be needed when
		connecting to a database. It is modified by a graphical utility
		ODBCConfig.
	</TD>
</TR>
<TR>
  <TD class="head" width="60"><a name="R"><B>R</B></A></TD>
  <TD width="20" class="head">&nbsp</TD>
  <TD class="head"><A Name="row">Row</A></TD>
</TR>
<TR><TD Colspan="2">&nbsp;</TD>
    <TD>A row is a set of <A HREF="#col">columns</A> in a query. For example in our
	<A HREF="intro.html#tab">table</A> there are two users. Each user makes up a row
	in the table or in the result of our query.
	</TD>
</TR>
<TR>
  <TD class="head" width="60"><a name="S"><B>S</B></A></TD>
  <TD width="20" class="head">&nbsp</TD>
  <TD class="head"><A Name="alloc">SQLAllocHandle</A></TD>
</TR>
<TR><TD Colspan="2">&nbsp;</TD>
    <TD>allocates needed handles.
      <CODE><PRE>
SQLRETURN 
SQLAllocHandle(SQLSMALLINT  HandleType,     
               SQLHANDLE    InputHandle, 
               SQLHANDLE   *OutputHandlePtr); 

	  </PRE></CODE>
	  <H4>Arguments</H4>

	  <h5>HandleType</h5>
	  <P>
      Defines the type of handle to be allocated by <CODE>SQLAllocHandle</CODE>. There are four
	  possible values:</P>
      <CODE>
	  SQL_HANDLE_ENV<BR>
	  SQL_HANDLE_DBC<BR>
      SQL_HANDLE_STMT<BR>
      SQL_HANDLE_DESC
      </CODE>
	  <H5>InputHandle</H5>
      This is the input handle in whose context the new handle will be allocated. 
	  If <CODE>HandleType</CODE> is <CODE>SQL_HANDLE_ENV</CODE>, this is <CODE>SQL_NULL_HANDLE</CODE>. For
	  a handle of type <CODE>SQL_HANDLE_DBC</CODE>, this has to be an environment handle, and 
	  if it is <CODE>SQL_HANDLE_STMT</CODE> or <CODE>SQL_HANDLE_DESC</CODE>, it must be a connection 
	  handle.

      <H5>OutputHandlePtr</H5>
      Pointer to a buffer in which to return the allocated handle.

      <H4>Returns</H4>

	  <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE,</CODE> or <CODE>SQL_ERROR</CODE>.
		<HR width="20%" align="center">
  </TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD class="head"><A NAME="bind">SQLBindCol</A></TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD >
   binds a variable to a column in the result.
<CODE><PRE>
SQLRETURN 
SQLBindCol(SQLHSTMT      StatementHandle, 
           SQLUSMALLINT  ColumnNumber, 
           SQLSMALLINT   TargetType,  
           SQLPOINTER    TargetValuePtr, 
           SQLINTEGER    BufferLength, 
           SQLINTEGER   *StrLen_or_IndPtr); 
</PRE></CODE>

   <H4>Arguments</H4>
   <H5>StatementHandle</H5>
   <CODE>StatementHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE>
   and will hold all information and the result set of the statement.

   <H5>ColumnNumber</H5>
   Number of the column in the result set. Starts with 1.
   
   <H5>TargetType</H5>
   Type identifier of the <A href="#dtyp">data type</A>

   <H5>TargetValuePtr</H5>
   The pointer to the variable in which the data will be stored.

   <H5>BufferLength</H5>
   The size of the buffer <CODE>TargetValuePtr</CODE> points at in bytes.

   <H5>StrLen_or_IndPtr</H5>
   When data is fetched, returns either
   <UL>
   <LI>The length of the data available to return
   <LI>SQL_NO_TOTAL
   <LI>SQL_NULL_DATA 
   </UL>

   <H4>Returns</H4>

   <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR</CODE> or <CODE>SQL_INVALID_HANDLE</CODE>.
	<HR align="center" width="20%">
</TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD class="head"><A NAME="conn">SQLConnect</A></TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD >
   connects to a datasource
<CODE><PRE>
SQLRETURN SQLConnect(SQLHDBC     ConnectionHandle, 
                     SQLCHAR    *ServerName, 
                     SQLSMALLINT NameLength1, 
                     SQLCHAR    *UserName, 
                     SQLSMALLINT NameLength2, 
                     SQLCHAR    *Authentication, 
                     SQLSMALLINT NameLength3); 
</PRE></CODE>

   <H4>Arguments</H4>
   <H5>ConnectionHandle</H5>
   <CODE>ConnectionHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE>
   and will hold all information about the connection.

   <H5>ServerName</H5>
   Name of the database server
   
   <H5>NameLength1</H5>
   The length of <CODE>ServerName</CODE> or <CODE>SQL_NTS</CODE>

   <H5>UserName</H5>
   The name of the user who connects to the database.

   <H5>NameLength2</H5>
   The length of <CODE>UserName</CODE> or <CODE>SQL_NTS</CODE>
   <H5>Authentication</H5>
   Password of the user

   <H5>NameLength3</H5>
   The length of <CODE>Authentication</CODE> or <CODE>SQL_NTS</CODE>

   <H4>Returns</H4>

   <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR</CODE> or <CODE>SQL_INVALID_HANDLE</CODE>.
	<HR align="center" width="20%">
</TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD class="head"><A NAME="dsn">SQLDataSources</A></TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD >
   fetches avaible datasource names either user, system or both.
<CODE><PRE>
SQLRETURN 
SQLDataSources(SQLHENV      EnvironmentHandle, 
               SQLUSMALLINT Direction, 
               SQLCHAR     *ServerName, 
               SQLSMALLINT  BufferLength1, 
               SQLSMALLINT *NameLength1Ptr, 
               SQLCHAR     *Description, 
               SQLSMALLINT  BufferLength2, 
               SQLSMALLINT *NameLength2Ptr); 
</PRE></CODE>

   <H4>Arguments</H4>
   <H5>EnvironmentHandle</H5>
   <CODE>EnvironmentHandle</CODE> must have been allocated by       <CODE>SQLAllocHandle</CODE>.

   <H5>Direction</H5>
   Which DSN we are looking for. May be on of:
     <TABLE COLS="2" border="0">
     <TR>
       <TD valign="top"><CODE>SQL_FETCH_FIRST</CODE></TD>
       <TD>Sets up <CODE>SQLDataSources()</CODE> to lookup the first of all
           available datasources (either user or systemwide).
     </TR>
     <TR>
       <TD valign="top"><CODE>SQL_FETCH_FIRST_USER</CODE></TD>
       <TD>Sets up <CODE>SQLDataSources()</CODE> to lookup the first of the
           available user datasources.
     </TR>
     <TR>
       <TD valign="top"><CODE>SQL_FETCH_FIRST_SYSTEM</CODE></TD>
       <TD>Sets up <CODE>SQLDataSources()</CODE> to lookup the first of the
           available system datasources.
     </TR>
     <TR>
       <TD valign="top"><CODE>SQL_FETCH_NEXT</CODE></TD>
       <TD>Fetches the next datasource.
           Depending on <CODE>SQL_FETCH_FIRST_USER</CODE>, <CODE>SQL_FETCH_FIRST_SYSTEM</CODE>
           or <CODE>SQL_FETCH_FIRST</CODE> this may only be a user datasource, 
           only a system datasource or one of either.
     </TR>
     </TABLE>

   <H5>ServerName</H5>
   The name of the datasource is returned herein.

   <H5>BufferLength1</H5>
   Defines how many chars <I>Servername</I> may contain at most.

   <H5>NameLength1Ptr</H5>
   The pointer to the variable in which the actual length of the datasource name
   is stored. If <I>NameLength1Ptr</I> is greater than <I>BufferLength1</I>, then
   the DSN in <I>ServerName</I> is truncated to fit.

   <H5>BufferLength</H5>
   The size of the buffer <CODE>TargetValuePtr</CODE> points at in bytes.

   <H5>Description</H5>
   The description supplied with the datasource, giving more information on the
   datasource in human readable form.

   <H5>BufferLength2</H5>
   Defines how many chars <I>Description</I> may contain at most.

   <H5>NameLength2Ptr</H5>
   The pointer to the variable in which the actual length of the description
   is stored. If <I>NameLength2Ptr</I> is greater than <I>BufferLength2</I>, then
   the description in <I>Description</I> is truncated to fit.
 
   <H4>Returns</H4>

   <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR</CODE>,    <CODE>SQL_NO_DATA></CODE> or <CODE>SQL_INVALID_HANDLE</CODE>.
	<HR align="center" width="20%">
</TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD class="head"><A NAME="exec">SQLExecDirect</A></TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD >
   Executes a SQL statement
<CODE><PRE>
SQLRETURN SQLExecDirect(SQLHSTMT    StatementHandle, 
                        SQLCHAR    *StatementText, 
                        SQLINTEGER  TextLength); 
</PRE></CODE>
   <H4>Arguments</H4>
   <H5>StatementHandle</H5>
   <CODE>StatementHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE>
   and will hold all information and the result set of the statement.

   <H5>StatementText</H5>
   The SQL statement to be executed
   
   <H5>TextLength</H5>
   The length of <CODE>StatementText</CODE> or <CODE>SQL_NTS</CODE>

   <H4>Returns</H4>

   <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR</CODE> or <CODE>SQL_INVALID_HANDLE</CODE>.
	<HR align="center" width="20%">
</TD>
</TR>
<TR>
  <TD width="20" colspan="2">&nbsp</TD>
  <TD class="head"><A Name="clos">SQLDisconnect</A></TD>
</TR>
<TR><TD Colspan="2">&nbsp;</TD>
    <TD>disconnects the specified connection
      <CODE><PRE>
SQLRETURN SQLDisconnect(SQLHDBC     ConnectionHandle);

	  </PRE></CODE>
	  <H4>Arguments</H4>

	  <H5>ConnectionHandle</H5>
      The handle of the connection to be closed.


      <H4>Returns</H4>

	  <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE,</CODE> or <CODE>SQL_ERROR</CODE>.
		<HR width="20%" align="center">
  </TD>
</TR>
<TR>
  <TD width="20" colspan="2">&nbsp</TD>
  <TD class="head"><A Name="fetc">SQLFetch</A></TD>
</TR>
<TR><TD Colspan="2">&nbsp;</TD>
    <TD>Fetches the next row of the result set.
      <CODE><PRE>
SQLRETURN SQLFetch(SQLHDBC     StatementHandle);

	  </PRE></CODE>
	  <H4>Arguments</H4>

	  <H5>StatementHandle</H5>
      The handle of the statement to be closed fromwhich the data should 
	  be fetched.

      <H4>Returns</H4>

	  <P><CODE>SQL_SUCCESS, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE,</CODE> or <CODE>SQL_ERROR</CODE>.</P>
		<HR width="20%" align="center">
  </TD>
</TR>
<TR>
  <TD width="20" colspan="2">&nbsp</TD>
  <TD class="head"><A Name="free">SQLFreeHandle</A></TD>
</TR>
<TR><TD Colspan="2">&nbsp;</TD>
    <TD> frees allocated handles.
      <CODE><PRE>
SQLRETURN SQLFreeHandle(SQLSMALLINT  HandleType,     
                        SQLHANDLE    InputHandle);

	  </PRE></CODE>
	  <H4>Arguments</H4>

	  <h5>HandleType</h5>
	  <P>
      Defines the type of handle to be freed. There are four
	  possible values:</P>
      <CODE>
	  SQL_HANDLE_ENV<BR>
	  SQL_HANDLE_DBC<BR>
      SQL_HANDLE_STMT<BR>
      SQL_HANDLE_DESC
      </CODE>
	  <H5>InputHandle</H5>
      The handle to be freed. Should match the type stated by <CODE>HandleType</CODE>


      <H4>Returns</H4>

	  <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE,</CODE> or <CODE>SQL_ERROR</CODE>.
		<HR width="20%" align="center">
  </TD>
</TR>
<TR>
  <TD width="20" colspan="2">&nbsp</TD>
  <TD class="head"><A Name="ccol">SQLNumResultCols</A></TD>
</TR>
<TR><TD Colspan="2">&nbsp;</TD>
    <TD>returns the number of columns in the result set.
      <CODE><PRE>
SQLRETURN SQLNumResultCols(SQLHSTMT     StatementHandle, 
                           SQLSMALLINT *ColumnCountPtr); 
	  </PRE></CODE>
	  <H4>Arguments</H4>

      <H5>StatementHandle</H5>
      <CODE>StatementHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE>
      and holds all information and the result set of the statement.
	  <h5>ColumnCountPtr</H5>
	  A pointer to a variable to hold the result value.
      <H4>Returns</H4>

	  <P><CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_INVALID_HANDLE,</CODE> or <CODE>SQL_ERROR</CODE>.</P>
		<HR width="20%" align="center">
  </TD>
</TR>
<TR>
  <TD width="20" colspan="2">&nbsp</TD>
  <TD class="head"><A Name="crow">SQLRowCount</A></TD>
</TR>
<TR><TD Colspan="2">&nbsp;</TD>
    <TD>returns the number of rows affected by INSERT, UPDATE or DELETE. 
	    Many drivers (but not all) return the number of rows returned by the
		last executed SELECT statement too.
      <CODE><PRE>
SQLRETURN SQLSQLRowCount(SQLHSTMT     StatementHandle, 
                         SQLSMALLINT *RowCountPtr); 
	  </PRE></CODE>
	  <H4>Arguments</H4>

      <H5>StatementHandle</H5>
      <CODE>StatementHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE>
      and holds all information and the result set of the statement.
	  <h5>RowCountPtr</H5>
	  A pointer to a variable to hold the result value.
      <H4>Returns</H4>

	  <P><CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_INVALID_HANDLE,</CODE> or <CODE>SQL_ERROR</CODE>.</P>
		<HR width="20%" align="center">
  </TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD class="head"><A NAME="conattr">SQLSetConnectAttr</A></TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD >
   modifies attributes of connections.
<CODE><PRE>
SQLRETURN SQLSetConnectAttr(SQLHDBC    ConnectionHandle, 
                            SQLINTEGER Attribute, 
                            SQLPOINTER ValuePtr, 
                            SQLINTEGER StringLength); 
</PRE></CODE>

   <H4>Arguments</H4>
   <H5>ConnectionHandle</H5>
   <CODE>ConnectionHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE>
   and defines the connection which will be modified.

   <H5>Attribute</H5>
   which attribute to set

   <H5>ValuePtr</H5>
   Pointer to the value for <CODE>Attribute</CODE>. Depending on 
   <CODE>Attribute</CODE>, <CODE>ValuePtr</CODE> will be a 32-bit integer 
   value or a pointer to a null-terminated string.

   <H5>StringLength</H5>
   If <CODE>ValuePtr</CODE> points to a character string or a binary buffer, this 
   argument should be the length of <CODE>*ValuePtr</CODE>.
   Otherwise, for <CODE>ValuePtr</CODE> of type integer <CODE>StringLength</CODE> is ignored.

   <H4>Returns</H4>

   <P><CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR</CODE> or <CODE>SQL_INVALID_HANDLE</CODE>.</P>
	<HR align="center" width="20%">
</TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD class="head"><A NAME="envattr">SQLSetEnvAttr</A></TD>
</TR>
<TR>
  <TD colspan="2">&nbsp</TD>
  <TD >
   sets attributes of environments.
<CODE><PRE>
SQLRETURN  SQLSetEnvAttr(SQLHENV    EnvironmentHandle, 
                         SQLINTEGER Attribute, 
                         SQLPOINTER ValuePtr, 
                         SQLINTEGER StringLength); 
</PRE></CODE>

   <H4>Arguments</H4>
   <H5>EnvironmentHandle</H5>
   <CODE>EnvironmentHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE>

   <H5>Attribute</H5>
   which attribute to set

   <H5>ValuePtr</H5>
   Pointer to the value for <CODE>Attribute</CODE>. Depending on 
   <CODE>Attribute</CODE>, <CODE>ValuePtr</CODE> will be a 32-bit integer 
   value or a pointer to a null-terminated string.

   <H5>StringLength</H5>
   If <CODE>ValuePtr</CODE> points to a character string or a binary buffer, this 
   argument should be the length of <CODE>*ValuePtr</CODE>.
   Otherwise, for <CODE>ValuePtr</CODE> of type integer <CODE>StringLength</CODE> is ignored.

   <H4>Returns</H4>

   <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR</CODE> or <CODE>SQL_INVALID_HANDLE</CODE>.
   <HR width="20%" align="center">
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
PK㰐\J��(doc/ProgrammerManual/Tutorial/index.htmlnu�[���<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Dokumenttitel </TITLE>
</HEAD>


<frameset Cols="25%,75%" noresize frameborder="0" >
  <frame Name="navi" src="navi.html">
  <frame Name="inha"  src="intro.html">
</FRAMESET>
</HTML>
PK㰐\=PߪF	F	(doc/ProgrammerManual/Tutorial/intro.htmlnu�[���<HTML>
<HEAD>
<LINK REL="stylesheet" href="odbc.css">
<TITLE>Introduction</TITLE>
</HEAD>
<BODY bgcolor="white">

<table width="90%" cols="3" border="0">
<TR>
   <TD colspan="3" class="big">Introduction</TD>
</TR>
<TR>
  <TD colspan="3">Welcome to a short tutorial on ODBC programming. The goal of this tutorial is 
    to introduce a C-Programmer to ODBC programming. During this tutorial we will
    code a simple program which connects to a database via ODBC and reads some data. 
	There won't be any information on how to program ODBC Drivers or about <EM>unixODBC</EM> 
	internals. Configuration won't be covered too.
    The program developed throughout this tutorial was originally coded under WinNT
	and later ported without any adjustments to Linux and <EM>unixODBC</EM>. This is
	how compatibility should work :)
	<P>
	The information given within this tutorial are brief at best. Please
	take it as a pointer where and how to start. 
	</P><BR>
   </TD>
</TR>
</TABLE>
<TABLE COLS="3" Width="90%" border="0">
<TR><TD class="head" width="25%">Requirements</TD>
    <TD width="2%">&nbsp;</TD>
    <TD width="73%">I assume that you have</TD>
</TR>
<TR>
	<TD colspan="2">&nbsp;</TD>
	<TD><UL>
		   <LI>a system with unixODBC installed and with at least one
	           working datasource configured. 
		   <LI>the include files installed under <CODE>/usr/include/odbc</CODE>
		   <LI>a compiler installed and that you know how to use it ;)
		</UL>
	</TD>
</TR>
<TR><TD class="head" width="25%">Compiling</TD>
    <TD width="2%">&nbsp;</TD>
	<TD>If gcc is installed type:</TD>
</TR>
<TR>
	<TD colspan="2">&nbsp;</TD>
	<TD><CODE>gcc odbc.c -o odbc -lodbc</CODE><BR>
	    which will result in an executable named "odbc".
    </TD>
</TR>
<TR><TD class="head"><A nAME="tab">Database</A></TD>
    <TD width="20">&nbsp;</TD>
	<TD>Our database will have a single table:</TD>
</TR>
<TR>
	<TD colspan="2">&nbsp;</TD>
	<TD><TABLE COLS=2 Border="0" bgcolor="#efefef">
	    <TR>
		   <TH colspan=2 class="head">tkeyuser</TH>
		</TR>
		<TR>
		   <TD>iduser</TD>
		   <TD>sequence</TD>
		</TR>
		<TR>
		   <TD>dtname</TD>
		   <TD>char(40)</TD>
		</TR>
		<TR>
		   <TD>dtmaxSize</TD>
		   <TD>Integer</TD>
		</TR>
		
	    </TABLE>
		<BR>
		Our datasource will be named "web" and access is 
		granted to the user "christa" with no password.
    </TD>
</TR>

</table>

</BODY>
</HTML>
PK㰐\�r#8��'doc/ProgrammerManual/Tutorial/navi.htmlnu�[���<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Navigation </TITLE>
<LINK REL="stylesheet" href="odbc.css">
</HEAD>
<BODY bgcolor="white">

<TABLE Width="90%" cellspacing="1" bgcolor="black">
<TR>
  <TD class="center">ODBC Programming Tutorial</TD>
</TR>
</TABLE>
<TABLE Width="90%">
<TR>
  <TD>&nbsp;</TD>
</TR>
<TR>
  <TD><a href="intro.html" target="inha">Introduction</A>
   </TD>
</TR>
<TR>
  <TD><a href="conne.html" target="inha">Connection</A>
   </TD>
</TR>
<TR>
  <TD><a href="close.html" target="inha">Closing</A>
   </TD>
</TR>
<TR>
  <TD><a href="query.html" target="inha">Queries</A>
   </TD>
</TR>
<TR>
  <TD><A href="resul.html" target="inha">Results</A>
   </TD>
</TR>
<TR>
  <TD><A href="dsn.html" target="inha">Obtaining DSN</A>
   </TD>
</TR>
<TR>
  <TD>
     <A Href="gloss.html" target="inha">Index / Glossary</A>
   </TD>
</TR>
<TR>
  <TD>
     <A Href="http://genix.net/unixODBC/" target="_top">unixODBC Home</A>
   </TD>
</TR>
</TABLE>
</BODY>
</HTML>
PK㰐\l÷���&doc/ProgrammerManual/Tutorial/odbc.cssnuȯ��/* Style Sheet for odbc documentation
    =20
	 M.Rathmann


*/
BODY {background-color: white;
      color:			black;
	  font-family:		Arial;
	  font-style:		normal;
	  font-size:		medium;
	  background-attachment: fixed;
	  }

/*=20
  2. Die Verweise:

     Standard: Text unterstrichen
	            link: #008080=20
				vlink=3D"#800000"
				alink=3D"#008080"

*/
a:link {color:				#2222ff;
        text-decoration:	none;
	   }
a:visited {color:			#3333ee;
           text-decoration:	none;
		  }
a:active {color:			#4444dd;
          text-decoration:	none;
		 }


TH {border-style:		none;
	background-color:	#dddddd;
	font-family:		Arial;
	font-size:			normal;
	color:				white;
	vertical-align:		top;
	text-align:			center;
   }
TD {border-style:		none;
	background-color:	white;
	font-family:		Arial;
	font-size:			normal;
	color:				black;
	border-width:		3px;
	border-color:		white;
	vertical-align:		top;
	text-align:			justify;
   }

TD.center {border-style:		none;
	background-color:	#ddddff;
	text-align:			center;
	font-family:		Arial;
	font-size:			medium;
	color:				black;
	border-width:		3px;
	border-color:		white;
	vertical-align:		top;
   }
TD.head {border-style:		none;
	background-color:	#ddddff;
	text-align:			left;
	font-family:		Arial;
	font-size:			medium;
	color:				black;
    font-weight:		bold;
	vertical-align:		top;
   }
Th.head {border-style:		none;
	background-color:	#dddddd;=09
	text-align:		center;
	font-family:		Arial;
	font-size:			medium;
	color:				black;
    font-weight:		bold;
	vertical-align:		top;
   }
TD.big  {
    font-family: Arial;
    font-size:   x-large;
	}
TD.small  {
    font-family: Arial;
    font-size:   x-small;
	}

/* 5. =DCberschriften immer in Rot, Zeichensatz Arial
*/
H4 { color:			black;
     font-family:	Arial;
	 font-size:		small;
	 font-weight:	bold;
   }
H5 { color:			black;
	 font-size:		x-small;
	 font-family:   courier;
   }

/* 6. Blockquote
      St=E4rkere Einr=FCckung=20

*/
Blockquote {margin-left:		10pt; }

CODE.list {margin-left: 10 pt;
	  font-size:	xx-small;
      }
           }

/* 7. Listen
*/
UL {color:			black;
    font-family:	Arial
   }
OL {color:				black;
    list-style-type:	decimal}
LI {color:	black}

P  {font-family: Arial;
    font-size:   normal;
	}
TD P  {font-family: Arial;
    font-size:   normal;
	}

small {font-family: Arial;
       font-size:   x-small
	  }


From - Sun Jun  6 14:11:04 1999
Return-path: <M.Rathmann@ping.de>
Envelope-to: pharvey@interlog.com
Delivery-date: Sun, 6 Jun 1999 03:55:51 -0400
Received: from plus.interlog.com ([207.34.202.21] ident=root)
	by mailhub4.interlog.com with esmtp (Exim 2.05 #1)
	id 10qXmY-0002kw-00
	for pharvey@interlog.com; Sun, 6 Jun 1999 03:55:50 -0400
Received: from lilly.ping.de (qmailr@lilly.ping.de [195.37.120.2])
	by plus.interlog.com (8.9.3/8.9.3) with SMTP id DAA23367
	for <pharvey@codebydesign.com>; Sun, 6 Jun 1999 03:55:48 -0400 (EDT)
Received: (qmail 26070 invoked by alias); 6 Jun 1999 07:55:45 -0000
Received: (qmail 26063 invoked from network); 6 Jun 1999 07:55:37 -0000
Received: from suprimo-54.ping.de (HELO koala) (195.37.122.54)
  by lilly.ping.de with SMTP; 6 Jun 1999 07:55:37 -0000
Message-ID: <001a01beaff2$66b90320$030aa8c0@koala>
From: "Markus Rathmann" <M.Rathmann@ping.de>
To: "Peter Harvey" <pharvey@codebydesign.com>
Subject: The newest docu, to be sure :)
Date: Sun, 6 Jun 1999 09:58:43 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_NextPart_000_0017_01BEB003.29819060"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 4.72.3110.1
X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3
X-Mozilla-Status: 8001
X-Mozilla-Status2: 00000000
X-UIDL: ea3859ca9b1d73dac919ee5e69391b0b

This is a multi-part message in MIME format.

------=_NextPart_000_0017_01BEB003.29819060
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Hi Peter,

I'm sorry, but I think that you haven't got the newest version. Therefore
I'm sending it to you again. It has one more page (Obtaining Datasource
names) and a few display glitches (mainly Netscape) solved.
Furthermore I've added a link to the unixODBC Homepage, so that you may use
the complete browser window (if you like).

Bye
Markus


------=_NextPart_000_0017_01BEB003.29819060
Content-Type: text/css;
	name="ODBC.CSS"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="ODBC.CSS"

/* Style Sheet for odbc documentation
    =20
	 M.Rathmann


*/
BODY {background-color: white;
      color:			black;
	  font-family:		Arial;
	  font-style:		normal;
	  font-size:		medium;
	  background-attachment: fixed;
	  }

/*=20
  2. Die Verweise:

     Standard: Text unterstrichen
	            link: #008080=20
				vlink=3D"#800000"
				alink=3D"#008080"

*/
a:link {color:				#2222ff;
        text-decoration:	none;
	   }
a:visited {color:			#3333ee;
           text-decoration:	none;
		  }
a:active {color:			#4444dd;
          text-decoration:	none;
		 }


TH {border-style:		none;
	background-color:	#dddddd;
	font-family:		Arial;
	font-size:			normal;
	color:				white;
	vertical-align:		top;
	text-align:			center;
   }
TD {border-style:		none;
	background-color:	white;
	font-family:		Arial;
	font-size:			normal;
	color:				black;
	border-width:		3px;
	border-color:		white;
	vertical-align:		top;
	text-align:			justify;
   }

TD.center {border-style:		none;
	background-color:	#ddddff;
	text-align:			center;
	font-family:		Arial;
	font-size:			medium;
	color:				black;
	border-width:		3px;
	border-color:		white;
	vertical-align:		top;
   }
TD.head {border-style:		none;
	background-color:	#ddddff;
	text-align:			left;
	font-family:		Arial;
	font-size:			medium;
	color:				black;
    font-weight:		bold;
	vertical-align:		top;
   }
Th.head {border-style:		none;
	background-color:	#dddddd;=09
	text-align:		center;
	font-family:		Arial;
	font-size:			medium;
	color:				black;
    font-weight:		bold;
	vertical-align:		top;
   }
TD.big  {
    font-family: Arial;
    font-size:   x-large;
	}
TD.small  {
    font-family: Arial;
    font-size:   x-small;
	}

/* 5. =DCberschriften immer in Rot, Zeichensatz Arial
*/
H4 { color:			black;
     font-family:	Arial;
	 font-size:		small;
	 font-weight:	bold;
   }
H5 { color:			black;
	 font-size:		x-small;
	 font-family:   courier;
   }

/* 6. Blockquote
      St=E4rkere Einr=FCckung=20

*/
Blockquote {margin-left:		10pt; }

CODE.list {margin-left: 10 pt;
	  font-size:	xx-small;
      }
           }

/* 7. Listen
*/
UL {color:			black;
    font-family:	Arial
   }
OL {color:				black;
    list-style-type:	decimal}
LI {color:	black}

P  {font-family: Arial;
    font-size:   normal;
	}
TD P  {font-family: Arial;
    font-size:   normal;
	}

small {font-family: Arial;
       font-size:   x-small
	  }
PK㰐\��Q�(doc/ProgrammerManual/Tutorial/query.htmlnu�[���<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>executing a query</TITLE>
<link rel="stylesheet" Href="odbc.css">
</HEAD>
<BODY bgcolor="white">
<table width="90%" cols="3" border="0">
<TR>
   <TD colspan="3" class="big">Executing a query</TD>
</TR>
<TR>
  <TD colspan="3"><P>If you want to execute a query you will need to specify
  a handle (<CODE>SQL_HANDLE_STMT</CODE>) for a SQL-statement. In order to get one
  you have to allocate one with <CODE><A HREF="gloss.html#alloc">SQLAllocHandle</A></CODE>.
  </P>
  Then you have to think about the SQL statement you want to execute. As I mentioned in the introduction
  I assume that we have a table <CODE><A HREF="intro.html#tab">tkeyuser</A></CODE> which contains the following
  data:</P>
  <TABLE COLS=3 cellspacing="1" border="0" bgcolor="#eeeeee" cellpadding=2 width="50%">
  <TR>
   <TH class="head">iduser</TH>
   <TH class="head">dtname</TH>
   <TH class="head">dtmaxSize</TH>
  </TR>
  <TR>
    <TD>1</TD>
    <TD>Christa</TD>
	<TD>10000</TD>
  </TR>
  <TR>
    <TD>2</TD>
	<TD>Nicole</TD>
    <TD>9000</TD>
  </TR>
  </TABLE>
  <P>
  In this example, we want to execute a query which returns all the rows for the
  fields <CODE>iduser</CODE> and <CODE>dtname</CODE> in this table ordered
  by <code>iduser</CODE>. So the SQL statement would be:</P>
  <CODE>
  SELECT iduser,dtname FROM tkeydata ORDER BY iduser
  </CODE>
  <P>
  If you execute this statement you would get two rows each with two <A HREF="gloss.html#col">columns</A> of data. 
  This data has to be stored somewhere so that your programm can actually use it, so you need to define a variable 
  for each of the columns. So you need to bind a column to variable in your program. Binding a variable automatically
  stores the data of the column in the variable when you retrieve a result <A HREF="gloss.html#row">row</A> from the
  connection. It is important that your variables match the <A HREF="gloss.html#dtyp">type</A> of the column in the table 
  within the database.</P>
  <P>
  So we need to bin column #1 to a variable of type <CODE>SQLINTEGER</CODE> and the second column to
  a variable of type <CODE>char</CODE>. This is done by <CODE><A HREF="gloss.html#bind">SQLBindCol</A></CODE>.
  Therefore we add the variables:</P>
  <CODE class="list">
  SQLHSTMT       V_OD_hstmt;       &nbsp;     <FONT COLOR="blue">// Handle for a statement</FONT><BR>
  SQLINTEGER     V_OD_err,V_OD_id;<BR>
  char           V_OD_buffer[200];
  </CODE>
  <P>
  Now we can bind the variables:</P>
<CODE class="list"><PRE>
SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, &V_OD_buffer,200,&V_OD_err);
SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,&V_OD_id,sizeof(V_OD_id),&V_OD_err);
</PRE>
</CODE>
  <P>
  Yes you should check for the return code of the function call. I'm to lazy to
  code it here once again :( 
  </P>
  Now we can execute the query by calling <A HREF="gloss.html#exec"><CODE>SQLExecDirect</CODE></A>:
  </P>
  <CODE class="list"><PRE>
 V_OD_erg=SQLExecDirect(V_OD_hstmt,
             "SELECT dtname,iduser FROM tkeyuser order by iduser",SQL_NTS);
 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
    {
     printf("Error Select %d\n",V_OD_erg);
     SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat, &V_OD_err,
	               V_OD_msg,100,&V_OD_mlen);
     printf("%s (%d)\n",V_OD_msg,V_OD_err);
     SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
     SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
     SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
     exit(0);
    }
  </PRE>
  </CODE>
  </TD>
</TR>
</TABLE>
</BODY>
</HTML>
PK㰐\���;,,(doc/ProgrammerManual/Tutorial/resul.htmlnu�[���<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Fetching Data</TITLE>
<LINK REL="StyleSheet" Href="odbc.css">
</HEAD>
<BODY bgcolor="white">
<table width="90%" cols="3" border="0">
<TR>
   <TD colspan="3" class="big">Fetching data from a result set</TD>
</TR>
<TR>
  <TD colspan="3"><P>If the execution of the statement went fine you are now able to fetch
  the data <A Href="gloss.html#col">column</A> by column. May be you would first like to know
  how many columns there are in the result set (if you use a <CODE> SELECT * FROM tkeyuser</CODE>
  you wouldn't know in your program). A call to <a href="gloss.html#ccol"><CODE>SQLNumResultCols</CODE></A>.
  This function takes the statement handle and a pointer to an integer variable which will yield the
  number of columns after the call.</P>
  Knowing that much we can add this to our program:
  <CODE><PRE>
<FONT COLOR="green">// At the beginning add:</FONT>
SQLSMALLINT      V_OD_colanz;    <FONT COLOR="green">// Num of columns</FONT>

<FONT COLOR="green">// At the end add:</FONT>
   V_OD_erg=SQLNumResultCols(V_OD_hstmt,&V_OD_colanz);
   if ((V_OD_erg != SQL_SUCCESS) && 
       (V_OD_erg != SQL_SUCCESS_WITH_INFO))
      {
       printf("Fehler im ResultCols %d\n",V_OD_erg);
       SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
       SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
       SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
       exit(0);
      }
   printf("Number of Columns %d\n",V_OD_colanz);

  </PRE></CODE>
  <P>
  The next thing you need to know is how many <A href="gloss.html#row">rows</A> have
  been returned by the query. A call to <A HREF="gloss.html#crow"><CODE>SQLRowCount</CODE></A> should
  quench your thirst for knowledge. 
  </P>
  <P>
  The last thing to do is to fetch the data itself from the result set. You should call <A HREF="gloss.html#fetc"><CODE>SQLFetch</CODE></A>
  with a statement handle (which has been allocated and <CODE>SQLBind</CODE> has been called for all columns).
  <CODE>SQLFetch</CODE> returns <CODE>SQL_NO_DATA</CODE> if there is no more data in the result set.
  </P>
  <P>So here is the complete source code. Real C-programmers will moan in disgust
  how inefficient the program is coded, but I prefer it that way (doesn't it look a little bit like PASCAL?). 
  Take it as a starting point for your own endeavors with ODBC.</P>
  <CODE class="list"><PRE>
/* odbc.c

    testing unixODBC
*/
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;odbc/sql.h&gt;
#include &lt;odbc/sqlext.h&gt;
#include &lt;odbc/sqltypes.h&gt;

SQLHENV			 V_OD_Env;			<FONT COLOR="green">// Handle ODBC environment</FONT>
long			 V_OD_erg;			<FONT COLOR="green">// result of functions</FONT>
SQLHDBC			 V_OD_hdbc;			<FONT COLOR="green">// Handle connection</FONT>

char			 V_OD_stat[10];		<FONT COLOR="green">// Status SQL</FONT>
SQLINTEGER		 V_OD_err,V_OD_rowanz,V_OD_id;
SQLSMALLINT		 V_OD_mlen,V_OD_colanz;
char             V_OD_msg[200],V_OD_buffer[200];


int main(int argc,char *argv[])
{
	<FONT COLOR="green">// 1. allocate Environment handle and register version </FONT>
	V_OD_erg=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env);
	if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
	{
		printf("Error AllocHandle\n");
		exit(0);
	}
	V_OD_erg=SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); 
	if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
	{
		printf("Error SetEnv\n");
		SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
		exit(0);
	}
	<FONT COLOR="green">// 2. allocate connection handle, set timeout</FONT>
	V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc); 
	if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
	{
		printf("Error AllocHDB %d\n",V_OD_erg);
		SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
		exit(0);
	}
	SQLSetConnectAttr(V_OD_hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0);
	<FONT COLOR="green">// 3. Connect to the datasource "web" </FONT>
	V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "web", SQL_NTS,
                                     (SQLCHAR*) "christa", SQL_NTS,
                                     (SQLCHAR*) "", SQL_NTS);
	if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
	{
		printf("Error SQLConnect %d\n",V_OD_erg);
		SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, 
		              V_OD_stat, &V_OD_err,V_OD_msg,100,&V_OD_mlen);
		printf("%s (%d)\n",V_OD_msg,V_OD_err);
		SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
		exit(0);
	}
	printf("Connected !\n");
	V_OD_erg=SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt);
	if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
	{
		printf("Fehler im AllocStatement %d\n",V_OD_erg);
		SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
		printf("%s (%d)\n",V_OD_msg,V_OD_err);
		SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
		exit(0);
	}
    SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, &V_OD_buffer,150,&V_OD_err);
    SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,&V_OD_id,150,&V_OD_err);
	
    V_OD_erg=SQLExecDirect(V_OD_hstmt,"SELECT dtname,iduser FROM tkeyuser order by iduser",SQL_NTS);   
    if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
    {
       printf("Error in Select %d\n",V_OD_erg);
       SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
       printf("%s (%d)\n",V_OD_msg,V_OD_err);
       SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
       SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
       SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
       exit(0);
    }
    V_OD_erg=SQLNumResultCols(V_OD_hstmt,&V_OD_colanz);
    if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
    {
        SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
        SQLDisconnect(V_OD_hdbc);
        SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
        SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
        exit(0);
    }
    printf("Number of Columns %d\n",V_OD_colanz);
    V_OD_erg=SQLRowCount(V_OD_hstmt,&V_OD_rowanz);
    if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
    {
      printf("Number ofRowCount %d\n",V_OD_erg);
      SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
      SQLDisconnect(V_OD_hdbc);
      SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
      SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
      exit(0);
    }
    printf("Number of Rows %d\n",V_OD_rowanz);
    V_OD_erg=SQLFetch(V_OD_hstmt);  
    while(V_OD_erg != SQL_NO_DATA)
    {
     printf("Result: %d %s\n",V_OD_id,V_OD_buffer);
     V_OD_erg=SQLFetch(V_OD_hstmt);  
    }  ;
    SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
    SQLDisconnect(V_OD_hdbc);
    SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
    SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
    return(0);
}
  </PRE>
  </CODE>
  If I find some more time I will add something about diagnostics, cursor positioning updating and and and...

  </TD>
</TR>
</TABLE>
  

</BODY>
</HTML>
PK㰐\h���doc/ProgrammerManual/index.htmlnuȯ��<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="Author" content="Peter Harvey">
   <meta name="GENERATOR" content="Mozilla/4.77C-CCK-MCD Caldera Systems OpenLinux [en] (X11; U; Linux 2.4.2 i686) [Netscape]">
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E" alink="#FF0000">
<img SRC="unixODBC.gif" height=32 width=32><font face="Arial,Helvetica"><font size=+4>unixODBC</font></font>
<br>
<hr WIDTH="100%">
<center><b><font face="Arial,Helvetica"><font size=+3>PROGRAMMER MANUAL</font></font></b>
<br><b><font face="Arial,Helvetica">Peter Harvey</font></b>
<br><b><font face="Arial,Helvetica">19.DEC.01</font></b></center>

<p><b><font face="Arial,Helvetica">Introduction</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Welcome to the unixODBC&nbsp;Programmer
Manual. This manual is a starting point for a programmer who is interested
in developing an application which *uses* ODBC. This manual does not address
Driver development or any other development which is internal to the ODBC&nbsp;sub-system.</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Why Use ODBC?</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">ODBC&nbsp;provides a portable Application
Programmers Interface (API) with which to access data. This means that
your data access code will recompile without changes on all popular platforms.
In practice; portability is sometimes hampered by incomplete drivers. However;
the core ODBC functionality (the most used functionality) is always supported
any working driver. Other advantages to developing with ODBC&nbsp;include;</font>
<ul>
<li>
<font face="Arial,Helvetica">most popular API of its kind</font></li>

<li>
<font face="Arial,Helvetica">most mature API of its kind</font></li>

<li>
<font face="Arial,Helvetica">skills more reusable/easily found</font></li>

<li>
<font face="Arial,Helvetica">hundreds, if not thousands, of applications
use it</font></li>

<li>
<font face="Arial,Helvetica">availible on all majour platforms</font></li>

<li>
<font face="Arial,Helvetica">easy to change data storage solution/vendor
(ah; freedom)</font></li>

<li>
<font face="Arial,Helvetica">easy to upscale data storage (developer and
end-user)</font></li>

<li>
<font face="Arial,Helvetica">arguably the most complete API of its kind</font></li>

<li>
<font face="Arial,Helvetica">many books on the subject</font></li>

<li>
<font face="Arial,Helvetica">greater support base</font></li>
</ul>
<b><font face="Arial,Helvetica">Languages Supported</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">ODBC&nbsp;is based upon a C API. C++ programmers
will find a number of C++ class libraries for using the ODBC&nbsp;API.
These are wrappers - using the C&nbsp;API&nbsp;internally but can provide
a much nicer way to use ODBC for C++ programmers.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Any language which can call a C API should
be able to use the ODBC&nbsp;API and most languages, such as PHP and Perl,
provide an interface to work with ODBC but these are not covered in this
manual.</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Architecture</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Client Libraries</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">These are client libraries which are specific
to the particular database being used. These, often, provide a C API of
their own which is used by Driver developers. In some cases these exist
inside of the Driver itself or are staticly linked into the Driver. Any
Client Libraries required by a Driver will be a part of the installation
of your Driver or will simply be a requirement for the installation of
your Driver. Sometimes Client Libraries must be configured before any ODBC&nbsp;configuration.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Driver</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Driver Manager</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">The Driver Manager acts as a gateway to
the ODBC&nbsp;drivers. The main advantage to having a Driver Manager is
that the end-user can configure the Driver Manager to use a different Driver
than the one original conceived of by the programmer.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">It as virtualy identical functions declarations
as a Driver which means that one *could* create an application</font>
<br><font face="Arial,Helvetica"></font>&nbsp;
<p>
<hr WIDTH="100%">
<br>&nbsp;
<br>&nbsp;
</body>
</html>
PK㰐\Bv3~��!doc/ProgrammerManual/unixODBC.gifnuȯ��GIF89a  ��������l����������!�NETSCAPE2.0!�Made with GIMP!�	,  ����Ig���ͷ��ԍ�$Y}R����/L�w��[������JB�CŒ�]�C�F�5��PK㰐\n�����doc/UserManual/Figure1.gifnuȯ��GIF87a�}����2b�666LLL����m��������������������g�u�r�e`�1�.�g�i)�f�'�*?*^xZ�[�*~��[R�
��R�����*�����R�����������؈����*W�*����*0�Y����\c�*� ���X��*�0��Y��)c��**���XY��*0 0Y�Y�\8���z������***0�4YR��D�*�R��*z ���R����@X����0(*Y���*\�R�T`��a��@��[�)
��*�,nZ
�T|�������*غ@�[�**��R���
�R�T���*�@��2��*��I�J��ί**�ڪ��@���*M����}�������*Over�wJr�i*tpe� ��ex�i�s�t*i��n��g� f�i\l
e �'�/�hod�m�e�/p�h�arv�e�yu�n�ixOn�D��B�C/,�}�H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ	,`@��ɓ(S�\ɲ�˗0cʜI��͛8s��ɳ�ϟ@��, ����H�*]ʴ�ӧP�J�J��իX�j�ʵ�ׯ`ÊKv)ёe�X˶�۷p�ʝK��ݻx���˷�߿�L��Ѵe�F���ǐ#K�L���˘3k�̹��ϠC�M���Ө//fV1�Ʃc˞M���۸s�6���W�N$ ���ȓ+_μ�s�}s���سo���������=�����;��@�f�2}p=���Q
�O�?���(�&WV�����T��}g�vR�Q*�_d��"�Y�!JV�d(b��f-"���&^6#����b���Ȣ�������فWm���NA���ʗ�u
g�}�� �G}�؋3�Yc�c����6��j�F�m��㚞�I"�80�x�eHZ��Q�2�$�QJ����w�p�g�PJiHyy��z�Yf���	����)j�v���B�y�lv�'��ʺj�>�xk�@�ꩬA��)����H�7U�������(~G]���f;i��b�坱�Ƃz븿�K"�h���������k��;*����k���o��{���*�m�+Ь�6E�Q�*Eq	,����N�Y�+o�q�kp��k���;��x�Z/��ۦ�1+p���Ȯ��<^�7�,U	6����V�P@mSo��"g�r���c�熝��_��+��⛳�.��+�:��5�X�L��Z��J?�l��NX�QD-u~���?��5�=���˟�|o��n�v�4����i�nw搇��A�
��H7�pR�*�%ӄO+��PO��{	��&Nj���G������v�+����=�
w���\��C՞z�d��ήh��5q_������j�@�<��d�����V�����_�Tf?�kd��ߎ\�=�nY��S�W��!�8P���z� ᑤð��vSҠ�#���| 	�bA�]�80̡w �*�5$ayH�"�6>��S�(�8�P���H�*Zq'J�
���.z�`��Hƨ0��hL����6�1���H�:��x� ��>Nd�y� I�4���bq��H�(��6y$$O"�I>���L�o��D6|�(3��P�r#�<�CR��V���� ��IO.Q$��
Q��:a�e's%^Ӑ�ԣ��I̥��4\�3�(�1V��3�wɘZb�|ߌ�6})Mk���D&k�	$ŝ[A�RJ�x��*g�	��I�t�џ�(�	G)1�)�T@B��P{6�(!z'>q�zRe�V��;EtO�VE��(S0�M~"T�
E�V@��Bt�.��8��И���l�A�ٔ�B��}iM�Җ���8�G�J�x.էAe�8JԎz��V=jLm�ϙ�ԥ\KX�IՑU���:w*�ա?5�S�
W��S�r=kPE�Rw“�C=�D�J�
V�)��U��ձ�U�K��^'�W�.ͫ==lD�T�FU��E)h�ղ����*\E�ȵ.�U}�kl9[��V�v��Ig�[�Vv�
�h�թ�V�qE,n�\������+g-����U���lr��׷R���5kg��Q骵��m�\%�W�w�~��q%�X�jW����p���FV��.a�kږ����.o�{��ռhmm�����Z��9�
[�Z\ھ����w�;_�z���m/�;,����ѭ�C-
ԉ��3�+}�:����@�qs�b�J���!�\���L%�ݫ��~ֹ0~*i�l�WխB}qE�,����3��#,�	�X��p^)���x��e��2�v�S��m��k��F3�eF0�=嬞����i�C|����0��<�.��y�3~!����5�L���'�2�w\�M'��&�������M��E��Q����n�m|}�8z��ns��l����>���5�.�:��4,�=Cr��\$hZ��oϓ�z�#V�}��{���s�3��`�{��^�����s�6�����wm�R�
8�~p}2�_�xA'np����ZLo8��m���Q��v��U�m��t��x��rsz|�5$�q.q(�|$��$Ѓ>���$F?zP��t�T�茥ԧN��[��X��ӓ8�{��`/��N�����:=�����ݙ\���Nw�/��xϻ�u>�����g�O��>1�?���x��񐏼��>��[��Al��7��{>���<PV�yћ��O��OR�G�]ݔ_
I
C�����Ͻ�w���`����3{����O���|�3`-����IL�����\�I��E�_ޖŏ�ק_���]+D9����{=�IQ��/>������8(���)��w�x�d}�a�q	x^�Wr��m�Gz�g��~|��uրh}��u�7��W��w�����􀼄[5g!��w�S�qk]���I3p�fc&�O(��DV,XR���m�~#�h��mK3�;�a=�i�l֖�"X�La�5^.b�f��EdHh�a�X��W�5�Kb�v_)vO5}S~U�egە\<�]H�tXi��Yr8;�P�i��d�%e�hd�\���q���{Hg���#{��h�6�Q���X���i&U��f��f�e�Є�d�dL�Y�腉�c�F���e�k����8��&�X�Q$e��HH�(������FH�ˆ��Fs�8d�Ha�X��x�U��C^�HL�o&d��q��0er��������H����Fg����x�x}V(V�Ɔ�8���bsx�`9�Z�d޸_����V]Z�Rƌ�G������V@�iz���6��T��*�oY���x�8�xՒ%��$�%g��Ԑ%����oȉ>��y��w��(�F9�II�KYH@iqBh|��|����}W�FY�O[	��w1lٖn��p�r9�tY�vy�x��rY�LI����YP��y��������٘������9��Y��y��������ٙ�Y�(���9����\x��������ٚ������I�(�v�G��������ٛ����Y�nw��Y��y�ș�ʩ���vĹ����9�ԙ���v�Y�����ٝ�i�׹v���Y��y����ڷ��������g9r�9��9�����Y��s����9�Z���ؔ��f}ڠ������v�\�z����)�E�ji��":��ɡĤ��$��,��&�K(Z|-:�4ڟ/jK1ʠ5��<z�7
]��F9��=Z�FJ�?Je�(D��Dz�P�ƙ�s�c�(�|��/���R��`��TZ[����(h����lڦ�9�!�c�8��x�M��^�z��ڔ)X��Ec�x����E\��yʧ����	�yf�f�ƃ����z�����ʄ�x����٤�]���J�������֎�Js(����zz�x4��*��
��Jomd����lJ��v�2
����zrĪ��ڬ=���t�Nz��Z�$
�����j���?�ʧ��ڭ��~Z�蚮�*��ڮ�h7��:�
�g'��i�f������ɯe�[��駶	��j���깞9��
;�߉�o����S�M�� +�KM�&��#۫%{�,��)�F۲2�/�Ҋ�3���Y�B��:��oʱx��
�Fۚ?��mŪbG��z�P��7*i�~>�X��/�UmXY����R(����f��[{��6��V^u�`N��g;��*�w]�8��v�MF��J��+�i�^󨷾���{���������F���oq����S����]�;���8{��{�I[�Yz��h�(N�[��+�<[�LZ����&Jo����X��Z��k�Y�VٺO뻘��w��{��;nʻ�Yۼe��K��
�cI��������u���;�Kv;�G[������:��Oɾ�˼;�
;�f��w��������ۿQ��&�����{�FK�3w�̲����Y�<�����-�h�� |�"l�\�!���I�*�'s)��&�	��4L�6<�3������>��,�8<��'z�H�J�L����8�RL�T�pV|�����\\�^LqB�S\�
�f̭c�sF����v��p\�r,H\��z�|W�z,�hܯj�����y�DŽ\��\���ȹ����ǎ�ȁ<��<ɱ
��*ɘ|��LN������ʢ�ȕl��|ʗJ��ʬ���L��˥:�*[˶������˳���K������\̣|���ʬ�����{�=;���֌L؜������|��\��<μ\����|������Ȫ�������|�E��������<P�4:���]�m�
��3����͢-x]�ך�#��-�����WU�$�����Rj�-7�.
�0�q2=�Z�5��8M�+-�-����7|�BM�:�D�|�-��
g�L͟N-vP�9�LZ�V-�X-�Z��K�<�`m�b�d]��s��j��g��_����r��t��v��s�����8��~͝�M��=��Y����
�q
Ň��ө��枒��{m��}��I�[7���٭Wwx���U�٦����r���S��Z�ڰ��Ŵ]�4{�d�ֺ}ڙ����ۻ�ڈ7��m���Ơ��j�dQ��]ףMw�=���s���m�ڍ�<����}���m�Э��}ެMއ����������ތ\�-����߄�ߛ�����^�Hzड़�
.�����}:�-<�~��MK������� ��">�ǹ�H��(.�%��,�␩��t�2��4�v6~㽙��<Θ>�o@�9�!��F��n�E���Ҭ�P��R~�T^寉�/��Z��J��U�v*�PN�	f�K����Z��W��n���湥�Fn�I5�t��z�x|���X�Ι�~h�~�h��茮����x䉾O��㗮H�~�I�.�~K��⣾g�������8��i���>�^��̾ػ����x�y�^��~�Ȟ�1�Ǘ��^ݱ�>��λ�~��^�پ��������ތ�g��^��~��N�ʾ����������N��7��|y�[���#��֮m��o���W�������y?|]8�*����$�Y�iS1b���e?T�U�(pX�����Yq�ԗ�0��Wa�o�5�0�TM���h�U!�M4�ľ����
mV:�No`J?eb�^@��f�3֊�%�M�X��cP���e��l��\ՖX�V`{���Wm��U��`�n�(d��2�$�f���eZ߹�x�nۋ}h����ok�ڶ�%��_����e
�&/�z?�k���&�|H�U����W؍��k���j�of���(�{[i,h�����{������iOf��U�ʍ-jl�F���H���&�h�g_��?�C������Y�o��^�/W
��z���O�������F�nώ�/�\������xgg6���gA��$hp`…
>D��A�)Z��P�ŋ'>���G�#�ir���]B�ؒ�ȕ1Q��)�!ˑ8o�<�ѥN�@{ɠ��0H��T�5m�|�ӠJ�!�^���kP�/gz�(�lY�X�~5��Дt�v���ͼa�����T�`i��۲k՞J�:�
�1c�T��(sۭ���<�9�f͋/��1�iĞ]�=
ڳ��v��:�n�m��Zo�ن��mz�f̺��65�%WC�^���M�F�^�x��͟��^�z��ۿ���v|��7������'O1|o>��@����o�&��B/İB7d�7?�JA9q�TBɤR C8�g��M�1Gw�G�CQ�XtqB��1Id�I'��2��,�]D2K%-��K/�3L��nŅ�LRK�����M�<�+�ڴ+qN��<�<����=2�ێ��dTK65�3�B�����@B�䬽I9eoS�2CE�MU!ͫ8���m��>j.�޸,��&�54YI�.��P�T(Њ%eˌ6���5]��5XjcE���z���joU�ެ;.Wn�
w=R͔��S�LR�U),V�>k
-�B�	_}��W�|�:�ٴ��X��͢�lخ��|�5�w�Ճo�5b��-K�O�Zw�3�EI.c�Fz}�׷W�M�ㅵ�8�;u.���*����i&:�sr�ᢏn5_��yߧ����N�d�*ٽ�Bx׼�GYe:�e�z`��M�f�v��+-j�c��m�^���Ef��i����
�b��"<q��+9ѓ�vTްž�&m!�����Ί��h�.�ǡ���=���YO/c�F��N�iu�^HH��:�SW�3�ks�p��}7�yb�M�^�:s^����}�0�+��j�Iw]j���7h��)�pk�����x�<y1'[�е��|KX�2����
Y���8��U�{�����fIL-��V�*88��ʂ@�KAp�o`)���4�Dn!�A��׿6��M���"/q�'�_��7���Oe;�\_&7&q�W�T����ٰA�*��6)6�gO2!�(��lq�8�p�"-�Qle4���G>�qTI�
�X�T!o�x̣�HF6�*q���&;"ґ��d&��A�1Iv�59JR��I��\)YI�ҕ���P�?���kBd"c�K^�2>�l��`�Կ�ɗ�Df2k�%
2�
@�b�H���f6�	�@~���@�\�R��Dg)�y�p
@�;��ؖ�Nz�S����NwF�r��<�iO�T����4���h�1j�@'dP�V����B��Q44�D-:R�~	��&G7�P���%�iL�tR5T�u�Ke�S�ʒ�e�_0��S�ި�GE*���T�65JKujT��ş"j�S�jV?U�vի���W�:VCU�JdEkZ���2Q�o�+R�W��u�u�+Y��W�vu�}�T�X�&u��E�N�Xƒt����AY��s���l69��vֳ�mhE;ZҖִ�EmjU�Zֵֶ��mle;[��ֶ�ŭkͺ��ַ�np�;\�׸�Enr��\�6׹υnt�;]�V׺��nv��V�fֻI��wŻ��׼$-�y�k��׽�l�{���׾Ȭ�}��K�h׿�p�<`�Fp��+/7��p�%<a
W���p�5�aw��q�E<b���;PK㰐\ą_nndoc/UserManual/Figure2.gifnuȯ��GIF87a���2b�666LLL����������������u@a�l/Fi�g�u�r�e`�2�.�g�i)�f�'�*?*^XZ�[�*~��[R�
��R�����*�����R�����������؈����*�W���*���0�Y��\��� ����*�����)(c�**���XY��0 )Y���*\���*����W���***0�4YR�D�*�R��*z ���R��*��@X����0(*Y�\�R�T`��a���� ��[���)
��*�,nZ
�T|���������*ؚ0�[Ҷ**��R���
�R�T���*�0��2��*��I�J��ί**�ڪ��0����M����������*Over�wJr�i*tpe� ��ex�i�s�t*i��n��g� f�i\l
e �'�/�hod�m�e�/p�h�arv�e�yu�n�ixO��D�B�C/,��H����*\Ȱ�Ç#J�H��E� �ȱ�Ǐ C�I��ɓ(S�\ɲ�˗%dD`��͛8s��ɳ�ϟ@�
J��ѣH����Q��P�J�J��իX�j�ʵ�ׯ`��t��ؤ�]˶�۷p�ʝK��ݻx���{�,R�e�
L���È�k�Ҵ�#K�L���Ō�:Fk���Ϡ�b6@�ti�	�L�s��аc˦��t�ۧ��V�sw뙁�*>|nq�ď�N�|���z��-�\�p�sڮ�]w�7}̶�\�p�����s��׷��\��ѷ�H�:wx��&��V�{�%�]r�!� qj�G�uF�[�M(@�Z(!s>�!|^�^�(V��\��d���9��o7Af�u+��#����!�8��9�܇6�#�>Id�<	��U��"i��#�:��id�i`��M)d�Sv8��HJ�d�q:y�J)%�h�Y���J�&���!�F�禝���$�x�W���tb�d�zJ*j[��W�m3�$fck>Z'���B*+�i�Wi���蟞ii���)(O�!����?�	��Q��*���꧆���,��F�*�Z�x�w`"kӪE�Xd}�J{ �*b�)��
+)���K��&���ˢ�^e����l�e�g���ŚN�,g
wl�ˁ��e��Ưy�r�GLW�[���G����8���<)<L@-��D-��Ҍ��L7���P�s�TWm��X#���\w�5c�-vK|m��`+�3�C���pK��M
Pw�R�����]Mv?�wOnn8�a����^'���{
�Nd���w���θ�㤹����U�.z�] �M���y����T�;�.�N��$<�۔|M���ɼ޼O��t|�`��5-o��χ�Y�5<��ۤ��ܣN��Ӌ/c~������췯������6���.~���w9������'ض��x�[�P�?�\/}� G8�*Nz�=�@
�����NH�>ł�3��6���yP��B��
GH��Ѕ�{�K���k�P�	'�B�0�V���'C�Eq�ED����~�a|[[sF0Ⰺh[#��H�4�N�t�=��<:tTa]��;Љo��������F:2��Z�I�JZ�̤X��4��䃠�(GI�R��L�*W��T�G�p�IfI�Z��̥.w��^���0�I����{�e1���f:�Ќ�,�9��)S��̦6���[Rsmo�f7�I�r�3�ߴ�p��X��
f<�I�z��c���pn��p�s���e@�IЂ�3�5Yg?�τ���|hC��L�t8��h,jЎzT�}�H:ґ��$-)Ϯ9π��0��LgZ̐B4��$�MKQ��4��PiJԢⓓ�\(O��S�&�i?�hr��R�Z����iNwjҦ����Xq�R����ZU'Ww�֜R4�ekYzֺ4�n��B��Ԟ��-��E�j��4���a�U�N���,Z�L�AV����cw��z����dX?KZ�R�����jW��ֺ��9�-8�6�����
Rg�ޚ
��
n�*�7M���M�r�"[�}��Ѝ�t�K��ZWv�M�hK�]sfײ��x����w��is���6}*c��V��K��.��^��H��O��]���o_�Q�:t�"m(S�ԉ�Жt��@��`�*x�^U�D��B���(<c��w�_q�s"�{��%M�*����N�|G�S��6N��/�Q����
2��Kc*���G������C���1��\��X�Z�r�U7<�/���a���<Q��z�k?��d��S�n&myM&���G�!j�Vh͜сtf]AH[z�0N�/�cI��Ӑ�4��R��Ԩ>u�
��V��հޭpg=I���W��^���W�5{aM�bh¶&oq��Usv��v��=	�h+;ى���;�dj{���6��=��)�,q�	��fn��'�&7�̭O~3�Ϋ�#gv>��j��J�-g��{�_���zz�����#�����)<��ƲƓ<�*O\��x�.����w�$.dy�"o]�����di���j昏|�Yn0�q�S�cY�*�yѓ��,Ǹ�5z�U�Ф+lݶ췯�oq?��#���>�s����z�ўv���m�5����������$j����.x���xO����������'O�P�q��d�H[�S�	6�c��̃~��S�S/�ӗ���Bh~�{�����טc�����Ƿ�hj����
��_k?V�:��]��i�|2[�9�}�y�}��g����=��O�r�~��pO��o���� �?�q��ˉZ����C�q�R��g���~�~
�ׇf�|��}���z
�s(5u�V�dMV��u��w6�%�F5|������vł�\��3�(�4XW�7�^3���J�K�V�Fx�H�C�6ׄNxl�WxhGzR�oThq���Z�wh�y�Ty`�by,x_e8j?���*<W�5'��ņ�G|8(�4E�rc�>��yH�%|~N�$7�h�~X��X��V<Qh���xNz�؈�vbɷ��V�7Ci8��T�ȇh}Wd�n�(���{�����e�r=NJ���D� ���S�8�&�H�n=����M��V��T�q�q&��3��3u�n�s���x�����M�؋}��g��|��`�8�#�o�o�5���T��茜%���L��z��z�H����]i���n�h���E��������y[���� �)хgX�"W�&m(�9[ؒ.�����7�4Y�6iJ%�z9�[�(��Ć)�;Yz>�����X=Y������ǔ�u���t��q�;�e��T`�'M\)P�5T�Ȉۘ�X��o�amM^IOa�K�ee������Ɖ�pr�e�a=�~T�f��f��f(UU�}�{��a\����tӸ���p�x��9W]F���,���~�٘���,ƖN��_9�G���9t�獙�q�x�����	��e�I��ٚ��eĉ�����H�'��Eah6dw��8���r��a�ٛ��ba�Ǚ���mY�m��T�`�y��	�r�x_�ٛ��_��lj�ɟ�IVC������)g�X�Aי��x�m&��9��9���g�	���e�5X�IO�qΙT�8aDF�Uǎ
�� 8�٩a*�͇Qqy�ϧ��	���|�|kX��)�9rKYL�LG
dz��甤���e�Ӥ�VORJLY�YTz�IُR)�t�Bz�a���JVJ�٦nj�1	�h#�tZ��w2C���&�z:k|ڧ�����[`�:��T���G���t���zF���Q���FyZ��E��ZGr��¥��I���:��z��z�����ڨ�ڪ����:��:���������w7٫������;PK㰐\'���))doc/UserManual/Figure3.gifnuȯ��GIF87a�Y�PH�PTPPX`Pl�P��`d`ppp�l��������������������������������9�P���@@�|�d�5��@�|�'`����@���/��x�H�l>�
�@���\�6�@��!�	7�|�H`5>{6`�@�D/|
�@|�A`/�8l�7
�a�����Bj@�66/�@\D��
l/
@�,A�������@��7@@��57���@�t6�j��\�/���ll

@@@�H�/>���D�/�\5>@�B6����!�f@/�\�G������6�q@|<�7_���#�@�����l�
��@��=�/e@x��/\|\(�>��������#�@�0c|f���/#(���(�L/���n��������@#�(6�|,�������'�@�4�9�l�
�@'0�@@���l/�H>D<a'����@@@,�Y�H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�ǃ"�I��ɓ(S�\ɲ�˗0cʜI��͛8s��ɳ�O�
~
J��ѣH�*]�th��J�J��իX�j�ʵ�ׯ`ÊK��ٳhӪ]˶�ԠP�ʝK��ݻx���˷�Ӿ�L���Â��
����K�L���˘�X<��ϠC?�����ӨS�ƺ9�T�	b˖=z��۸s�ۚ*lȍ'��z�U�X�76��k��УK��� @x,�t���;(��^��ӫ_/���ʻo�x���<��ܱ�����k�
�ށ&�Wu���|TM �00�����sF��	蟀���(�8��9�S1 �^h���y��!�b�>v�a~*i�T�f�h�9^qPV�@�T�G�~)��X:��`"��k�����M%�We雎\��&�i�Ѝy�rhG^Tj妜?��>։碌��"	�(�V�Y���Y�6�駙�Gv��j�u5�Yg�*����z��o'뭸ު盹�ꫩ��*찟K��~)���6�l�ա4@S�Vk��f��E1��kSM����&*�R�[��f��k�����m�Q�[��P�o��ֹRŋ��7<ֻ����W�տ�;��wm��n���C�n�"3,ϵ߆-�,�mg�W}��rg0��3�߂�2�V�xeZNݡ�G�l��?GM׽'KL4c-�Vқf��^K-�]���s�eq���jk���c�]׿Q)|��oY���s�-���m8[&�;�sE���ۃ;N7�9n�W5��7�p��4�
�y�_n:Y�}3��Y9X~������[un��v{�����}X�����A���j�//}Y��������g�x;����#�{ս��~��k���
��>��'?��?�����H����:����?	X�̠7�z� �GH���(L�
W����0��%P���8̡w����@|a
�H�"�HL���C2�P���H�*�PT� d@�(>f�]�`]8F	�1����5��iL!pT���ъ-Ģ�(�;1�~a ��G��q�#�x�5r�����!!�HJ��x<��h�b��e��EY�=^R9>d$$��FR�Еj\e'9��2� ��Y9F^Rr���c(��I��i�e,{��I2����3	Mb�2�����Lcns����(ei��s���7?(�g���D�;�yMkBs���&9���~���ɢ?�)Nl����f?�Nm�ҡ-�>M�N�z��Ҕ(A�Њ�ӛu�:c�GRf�	�(;:͐�ӣ0(jјԥ(�h�(ӆvt��$M1JT��T��l�>E�N�.Ւu�Q�:S�����<�U��R�FԨA��J��Ҡ�3��ku	բ�U�g����̑��
�&\��T}�s�}�"]��Y��T�^�Z˸2v�.Ul8���֔�ݢZq�����u+Zg*ҭ"մy�jjA{Q�S��}��h�*[�:V����Y��TE��f�c K[�������Z����X��PY*[��Ը�4)uq:��"5�O�+3���rb����,e#�ݗ���M/Y7j�š��>�iK+�R�vT�m-�w�zN�V����0�H�b�T�gf��[7���ԫ,�a��>if�_�
ֺ��o:��B=���e1.g<��؊7Fccg���.�)���a<ds�@��&=��߶�Pfb��8�SNv�`n����.{��2\2��L�2�y�.>������6'1�n����L�.@ˮ�����*s�Ǭ峠-d?oY̆&����DC9˞�'x�J>i����l�7M�Nk��'u�C��R��ԣN5�W]OS��ըf��a��Y��Ҹ洓��|��v]dDY��N6�=d8Z�Ўv�-�Z��ζ�Whm�m���7�iq����&�����v[��v���gx��η��k_y���7��Mc~_��=�r.�s�xNx���c2���~8.�g癟��/>������x�S�G�����*B��T�z��5���Unn��㹍yy����
�����)�f��{�yFzh)�cI��J׶ϫ��x�\�({h�v��7���:���U�ʷ���Mm�^��}�j#ۙ�L�J]ŀy�!��g;�R�
������s��[��-�<�7�j��}?�xћ��t&��O�i��̪o��z3w{�A���O����6,=}��۱�e&��/�A+���/%����#|�{���i��{�o���>�ǯlœ���<�׿h����|����d��_�����e��_�Η}7���8�_��%`�HFL`�M�O��{�D�D
h[3Wx�vQeT�Qs��Xq�r�Z��}��0(Uw��g�]���bXwXE�Fx��q4xD�D8�d-x}1�>wN(�C�G6�eGhb)�u�������U�Q�zsV�VR?xl}Wa"ȅvu�tZa��S�e��{qx�<4-*|s��~�A��h}���hAuX���(E�������bntc��W�%����`�DUxK�X_�Xur؈�xD�X{��d.��?6��7�FT�%&xCw^fr,5Y��L�hH�e`P��XD�Hw@�`P[�MJ%sWx]M�U�8��HD���
�p��ZI�Xjńe5��������aih[��\Twv-�#�f�a(�?T�Ax[�艨��,8[���H�>d��u��Hv95^���Y8v�ņ�%��'�<D��u�����w�M�`�ubk8O$Ɉ�C�hc�؈뗒�Ȓ09�z�J+���6��:��:ٓ3D�W�>9f'���(C6��V��w�*��K)�3�9QȔP9�R�Kd8s��Y�t[�I)v=��aɇݷ����i�fhiCei�b�r9�xԕ�؁�u�x)�k�t`	����������|��<���ٓ�	�����y�������@ٙ�6�?锠)o�)C�Y�x��V���yx�YE����v�14��	m�	C���ɶ�/ԛ�)l��B�9��V��G��	n��B�ٜ:��i��Y�0y��وڹ��؝�Y�zؘ���(t�Y��IEǙ�t��+Ԟ�)g�B��k�&k��j��k�Fk���:��柵���Y����I�z��
ʠ�)g��u+8��V�)t�p����S�
��ơ(�&:�*��'آ.j�0��7�4�~6z�-qƑ�z"jB��DX7A�q�����v��U�艔HmIF�U:C���Q�tF֥m�hN��p����Z*FQ�X/���O?j����8�/8�dڣ�X�$������wH�%�M5��ԋ�xt�]�Xtǥ�jX�|:�nʤ�Vy5[ozv�Ȑ7���et���rP����P�����:q�zYnhZ:�sl�z39�$f�oi�楀Ƀ󥪬��=h��ux*�Ě��(våR�Ǝ\�Q���^븩�X�fW[ͺ�n��J�Cz��*�v��[j� ��	�ch�t׮��sڕd�4v�
��8`;���ê�2��
H�"V��*gt�VY�[q���s��`n7����o'aOj�?U�yHI��[����U�e�옔r��*���tik��axr��=˨#�mh�"��J���o>���j��z�eȧ���:��Gl3D[;d9:oSv��&��w���yU������g�:��$��,��r~t[��'�x�}n��{����8x����������
�����{��;��{�����������˹���˖]+��6��Y���m������׺g�a(��K��{�~���{��ۻ����{���FƶRH��e�{��X�4�`�[fͫ������5�cV����Nh�_��b�j�5w�n���ɽ�x��:TkX��CK�����{D����۰�h����ƛ�8���׿b���%�N�W"UIj�F��(���l����K�>d�]e��
�<ZLs
����"LD$̫i��p���;����W1�D�{�Xz�?<�‹�m
�E\dA�u6��K�eM��7�Tl}V|�ї�Z�|3����`�{b<Ƴǻ�۹�[���Ɣ�ƌ��r��s��vǓ�t��w��}�����kƭWƄ�z�|Ȧ�Ŋ|�G�Ȳ�Ȑ�ȏ<ɧ'ɖ,z��ɠ���h���Ül�\�)[u�;�"T����IĪE�|`B��K���\���14�譁�� ����]����,�~�t��5��D���+����g�<�*�ʝʥ�بNJ��l���C�̏���x��k�~��;���ʳ�\é��<k�;L��\�Qf��lIfa�=C�\di����ц���u�̊�mĤ�w�̲�G
��@�(&���,�jd�Id�	볒&rBL�
��Q��<�0M�[�#x���﬌�����?�6��l��
�	��<�ܭ��W�
L ��M�_"i���Mm�U���ؾ�U�V����g��.��������+,W=�Fk�u]�Ϋ�7\�9�N��l]Ѝ��&H���QIF˖���ٜMo՜�b8�$7��L�(
��Zx�}ӟ}Cg]N^:Ϋ�į]��̯!�Q�z�8���ط]B�-w8]���_���ݪ�Mܹ��d��̓-u���E��Pܾ�k�5ݶ6�1[�ڽ������o��K�	V� ���v���W��[���ܡm�f��Èɑ^aj
����6��]���g�pz��
�Ҙ-��A������m ��6�$m�|�"~�*��,��+�ri��x<�l�5��u��n��<��>䁬�4.�8�)�(��JmI���f�P�hR>�V�V.hX��{��\^g^��s��]��ED.�h\�Tv��!>�h9�!,�u��Gb[Z��HK��k �M�~rw�ܫ����"}]�h�@F�~�M���26��J\�
�.�;vʨ*ڨ$�V���5����������뿛��q^�l.�ۊα�܍��;w:��d����]��TW9r�-��>�b�������f�^��~화�Tc���<jؤ�E��V��[�?{��NE�>լ��h��U��F�.��~�
k�B���n��~�O�R��=,�	��>��j�h���Ҷ��)
���6����_"D޾�lT�Lt��*�A,��e��:�4�K6�x;PK㰐\����)
)
doc/UserManual/Figure4.gifnuȯ��GIF87a�[�PX`ppp����������������������H>�@���686�X�P����@��|d���@�|�'`l�
@@���//��x�H�/>�\�\>6@̘!��7��|H`>{�6`/�@1���|
�@|�.`/�8l�7
�@�a�����@@�Bj@�66/�@\1��
l/
@�,.�������@��7@@��57���@�t6�j��\�/���ll

@@@�H�1�/�\5>@�/6����!�4@/�\�G������6�q@|<�7_����@�����l�
��@��=�/ex��/\|\(�>����������c/|H4�>��8�(l�
�@��(���RL���)n9H>��#8(������|0�@@�8���9�8��H>��l�`�Da'���/,�[�H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�I��ɓ(S�\ɲ�˗0cʜISb��8s��ɳ�ϟ@�
J��ѣH�*]ʴ�ӧP�J�J��իX�J���ׯ`ÊK��ٳhӪ��u�۷p�ʝK��ݻxs��	��߿�
L���È�{��ǐ#����˘3kޜ�q�B�=���ӨS�^ͺ�gЀ�*(
T���}��˔�P߭�N�x��8p��l�?(�]��P�_��ν���=��+��<��鶧_���o����M�������ߴ�����
@�H�O��_l��'�|N�^f��n�Gm9 �"h₺�GY}+��_}�#�4�h�T!'�dVgۏ`���X�:ha�Gj��PF)�M��feh=�4$�(���_2�`�c.9�h�ٟg���$O?�d]Pa�I�e�8��|��gkl0�Rs�Y��J���m��埐F*ial*7饘f�iP��榠�*j�l�⨨��*��Ƹ���*\���j뭜ъ뮼���+�r��P5%���6���F+-LT�,��f��V��fm�ۆ+�@��ג�����M�+���N�ҫᄆ�[-���+��ӽ�K��Cj/�7,��S��-�g�1�Ë�oG~��U�18��(����9)l�nV����*�l3R���:���S=�� |?��ݧ7'=p�	|O>�L�RA3yr�R�w��\3��;����R�M�NXG�6�Xw�9�MT�j���l�m_�ޮ��7�L#�2�xg-U�e���|��_;M'�d�}��F�8�?�y�qK�l#���"��"����.z^��n;������A�����.�ġ'�]���������s[��Go��C?8��w�W��:�他{�-_���[�>��G�>���/|[������H��L��:���'H�
Z�̠7(A�q� �GH���(L�
W���/0��gH���8̡w����@��H�"�HL����&:�P�����)Z�X̢���.z�`����*��hL����6��p���H�:��x̣��G�0:���FA�АHDdE���4@�H(:����a&xI!Ɔ��<b(�8�'��<d*9�J#v��leO�EC��"%eY�K�R��d$$�xK_�R���d2q�LV�r��D�)�IJjZҚ24&6k�h�2����w9�h�3��䡛��V
R���8�9�t.ҞI���*��I|�P�b�+繛 v���V�)�N�S����=m�Nh:���(<7*ˈj��|h)�ъ����|hF?
C���,eh$1��a��ܨDI�L�Nt�@�g8;jSG�T��<):A�ѕ┙?m)GQiL�JU�=�9�Ϧ�t�*U)L�9U�fu�D�!8�zը*��U%)E�zհ���Z��ISJMrʕ���]��R�6��t�f`	�R�S�bM�LJQ��՞G�kT%U�T���'b��V�֢f��a�xVՠ�E��W;֙�V���l�*S�����Ԭ_i
Y��֫�lM�KV�N6�Ienm�N��t��EjnI�[����nk��S��U��ͫlU���Nֽ��b	�������`����n7����p��L
��v+q��Ԉ��.(i!L_�z���40W�[R�
���o�k�c6����jo��b����Mo��{�
�x��*t;cߒ8Ÿ�/�y;�������c��ƺ��tcW��~2wy�X&����51f�j�_v�F��GIe+�׺��/�]+dϹ�Z�rZ�lC"��͑}�m��ZAֱ�-h/{^�6Z�1���%�g'�U�N-�E�<�ʮx���4�]�B�y�V�m|��RY�p����~>���Eu�	�^>�0���4p�z�A�4�qmp�͚����4�ݼ��آ��iy��g�B��6�+)}k;o��Ͼv�E��v����,��<jx/U���px���j:��+��
�9⚍l�u�p.���nh�>E�/��O4�����/��i�.�)^O��7�6���}E�����g�E����V�8�qNLo�|�gt�χN���HO���(�;=��}�ԧNu9*t��<�}>F�����$��ͪ���h����]s�܉^ϯ�ٙa����iϻ��ĵ7����/�ok�O�u]3���;~�k/,Z�.XX�5����E����[��F�=z4��ޥ^d ��ֻ��i�}eS+��Fq%U�Q�6�R]
j3�>�d���|����Q�{ۼ�n[߿�'u�S�?�:C��
��q����H>��=�V�	�<J�JyX����,0/)L������M�~X��~��fd�lm�z��aF^R�Y�w}�Q'��d�؁|{��~����fZ�6�'�hx5f�ւ�v{�udsWm�ui�H��:hu6_��}6�f�m�Vy��l1v��y�F���_�fm�wyGH~��X��Awu=6Hd��[�zW�dX�X�t_VK)�qfw؆p�E����p\�zr�O�|؇>D�~��8���x����|g��؈����Dž�8��X�4;PK㰐\�ǁ�.�.doc/UserManual/Figure6.gifnuȯ��GIF87a���������@@PX`ppppt��������l������Ȩ������������������X������ܨ��������@@���//��x�H�/>�\�\>6@̘!��7��|H`>{�6`/�@D���|
�@|�A`/�8l�7
�@�a�����@@�Bj@�66/�@\D��
l/
@�,A�������@��7@@��57���@�t6�j��\�/���ll

@@@�H�D�/�\5>@�B6����!�f@/�\�G������6�q@|<�7_��0�%�@�����l�
��@��=�/ex��/\|\(�>������0�%�@��c/|Hf�>�08%�(l�
�@��(���RL���)n49H>��#8(������|0�@@*���9�7��H>��l�`�Da'���/,���+H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�� C�I��ɓ(S�<���0cʜI��͛8s��ɳ�ϟ@�
J��ѣH�����ӧP�J�J��ի/���ʵ�ׯ`ÊKS+ٳhӪ]��ٚ4����ݻx��Vfܹr�K����d= ��xf_��m�`�M��qZ�[7�f��;��<34�Ө�*^,s��~%ϥLY4M˟K��=,�ݿ{Cȝ��q��a&����hS�����Φ_�~]{��ۡ�c'-��p�w_�~h���a�Yz�ˢ�s��?�����݀�	蟀��m���;�_|L�G�g�5؟�m��� p��v� z���L��V�c`��e�߇���y�
w�i�8$���Ơ�L���1��܍6z��y�x䑙�ȥ�'��$�"j��J����U�8�&uZb�e���`�昞��'��B�ޚ3��7FW�(vYgyy����h�u�ev���|f�袌�8�q,���8�Zjsڥ�*j�ª�45�+���Y�f*��&���)�쳮2��*m��f���v��i�~+�w���覫������+��`���AL���,�l�'���7���|L�Fl��g���p@ �,��R\�K����,��p��n5��4�l��x<r|<����sЊ@t�w��$�;4�L�vt�TW���!�k��R���և]���d��5�^C�v�ʍ�6af����s���_w
7�x�W�2�ͩm�۬�9���C�6�tO3d�#Q�S��}����E8�''��"n]�A
���Z�k����.��~{i>�t�<��u*��O�>s�����C�Y�Y��o���Tl��%�������U��<��/����<\�	���[��ݻ����8��O;������dE�K�{r��O��'�3�}�{
��“A�M�,����X�
@��B�8P'd�N��
��2�<��FCɅ��s���?��
��cb�8�o~7l\	(A)�ć@1!eXEљLl�ۢ���>��O!#
͘���1,T����>��� I�B�O�����@tݑ(�3�$'I�JZ�D$sYG4>�+>,��pF�R�r`��'�f�Ov%��)gIK���b��']�7p�@-�IL��2+�l%/�K�1��*�4�y��ё��\fU�)0Y�2��4�Y�jq���&3}Y8��`��@8Q����Ȟ��X>�9Ns&3��
7�)1x�S�����Ѕ�L����D�YL^S���F7�юzT�N�e��vO���>��D%�Ї���0�(E-
4�"�8ͩNw:Ȑ�����&���)�}iLz���T�4��f9.��u#
���w�xL�Nm�>�*T�>u�QE�Tg�n���X-(RMꁢ
0+]�X�*ֳ���s��2_IWi�E�C���:W��`x5�^��T����M�E�{=��gA�P;��:ӱ��T+��"��fm��k/kʴv��_9�@;ѦHJW]�H߉��F.�,+Y��O�֓���-6qJޞE����tBZ�F̸���x!&]�f���%v{���夻;�x�۰�r��mY�X|k$����
�)����3bĥnv�.R0�`�x*5��zW��ef7��?�z���z5'�D�a�wJ�E����0����opY�%�v?�^��VM�&|b��kn��9�tb)�7~p��Ds���
�WD��9eHv�`(@��.�Ve��i(�%�naC\�k�+NN�{d�5��e>3��WF�zX�|��
�:�$�MB�ZT�|�ca
�)NS@���e��eɽv�������u��n�lx9�bl�IV�?M0��{
5�F}?[�9�`���UK:-��4���ӌѕ����=�i��U�,#6ގ"�Z��^���<-��\�6/}1�2��&3�=�_�U�J��K��۞i�嚝\��+�.r�\�)פ�ֶPy�m���� �����pd.���t��?Jo��4�\��7�ڽ���8�,��
X����h�#��b�G��w�;>ف|��9�	X��O�6����}�攝h�-V����<M����њf�ֱL��u�����G~v������O�§�n魉�O�̝ӱU2�[Jp|J=g%����u��{b���7f�>ޥ�����zջa�:��o����c=�wϰ�O��+=������a��;l�7ջ�D~�_K�S;��/�S��__����O~�OO�Jߘ޿���f�˔�d3�m���*Y��
����z����}7���\Bu��WV�WJ�v�0�u�{�wN��D�7�
�H��J�V��bp(~��b��8�%�~)Ӏ��1�~�7�Hu��y��淂'H�*�0Ȃ.8��>���xA��&�32Xm��|��t8�1��#h�Qx0J؁/X~O�o$�k�W�ghJS�}4�|چ�Y�1[�⇂C(�D��dh�fȆB��džJ��G���x�o�s1�gL}��W���yIx�L��d�1~X���4��W"��xJohkwZ�'ss'p!H��w�F{��2[h�����u�ȇP�������򷆫���Ԋ�r['w�7�
��ODž�G��惿}Syz��h(f�xrHS��n���df\�x.t(�z7Y!�� v��m��ty�M�q�ȃ����wp�}%�/9CP6"����is9Ǎ�Vv!�|xw�d��)U,��c���q�r�Y����|r��t�O����s;Iv�x�&�z*�u-�u��x�[ő)r�6�P��7�`����f����7��wo�4����J�	�M�Z{�te��T�M5�j��\�{^��
�d�o˸��U�g	~yx�'8v�W�$yjh�X�fZY�ui���Zg���O�@�Rw�qhLb9�DșWy?8]=H��癕y���g��Pry���ǚ_i�5���yf�����a��p��I[�)��G}ǩO����ٜ���D�|p��i������E��雓銟I�؉��ɛ�I_�	15�3��߉��9^�0�&���ɇ��e�:��:9`�I5�9�1V�
sm�	�l�	�V�����6��a�K��	StB�u�֠�yw��\�P�砀ل
~bg�*Z��(�������թ��(� Z���ɓNY�y(�h�=I{3��5`�A\�U�
��'ʓ ��L���wI�y�K�M��7���ht-)���#*���jY�8i�^��Ç�D8��Y��y��R�FI%
��~�\��z�yZ��Y�I�
��*z���`y�sx�W�Ȩ��=ɖ�z�آ�J|�i���s��y.�z�&�%
}���ّ���c��0��9�&W��:_�j|�YfhZ����㴬vج���\��*M�*���ں��ԭ�2�Z��D�}�犮�(�҄d��~����$���گ�
��:���2��~�� ����;�2U�Uh�00��+l��6�x)��0�Hg��i��8S
���ı�j�Z��"k
�	K�q:�'�O��.ò�Y�ï0�33K������*��e��G�˳��&EfC�z���wN����V)K��d��ׅ�/�;�����*�[*�Ok��Ȥf[}��VX{0Vz.	����vZ�wKDyK�{��}{J��A�5K�t��7YQe۸����IJ
Z0q˵��H{��[�aK�P{��Y�����+��$���i��i�Ky������mHL;�U���fk0"��K���-�겝�����Rh��Ԟ�ټ�1Л����0�{�캹廱��۽껾4s�i����[����۳��b0	�S+h�ۿ
C���������Ȋ�5��ʈ0�]�I�9+����2���\[+�Fk� |釨�+�R;��7�r%���E[��pK��9y�.:Ĥ��Z(�4�1%�+0Z�"۵,̂p9�pF���K^J�����s�L�r+�������6��x���#Ƣ�Ģ�.��ɸ�k��m����tl1vw@+��[�X��~��iYpW��2<��[��k�6�3��̵H�Ʃ[��(�G��vHȘl��\3�+���׊�)z��(�w�J�q<��\�����k0L0�KJs�2��p�N,���3_���6��ƭ�3�+�ĊY�L��{ͬ��,����0�L������{�|�|�����wl��+��{�L0�w;��v��̿<�'<���,�����k���#�Ô%y��d
����(,�9��>��
�1Ҙ<�Ӹ�;l�����I�-=�]���2E���Sܯ7m����;�ί[�`�
ɶ�r�
�0��]������4��z,��l�;��=��?�28<T����\�W�յ�҅�

˟l�e��t]�\}�i-��<L�0������c��#h�h��-��|0�,сM����kM3����ּ����o��vMǓ-�e��Om�@�ڑMѫ�����е�3��������K���
���%�_
�l��}Ә-ږ���;��P�i
��+�Х�#�כjq)<�)=[�I�����-�4m�U��y��Fl��ݧ����]0`��PL[K�m��l��jʃ&��|�]��͐d,�f��V�iL߁9�b˺����>]�Njǝ<֢��$�����+�"~0�M��ȡQ)���6̀��M���I�]�F>�	~�J�����l�yy⋭��K��y�4�����N�0������N���}����͸^�/i��>��o>0q>�g.�w~�m�@��\ڛ�M�����=�Y8�\�eл����������]��^�Bnm׭4��x�8[���!��M�Q�+\�:������3-����j��eߧ��|��\>�u�>{ϕ�N���@�Tm��8��N�؋��^�T��V���ȍ��s.��n�`>�������?:�{H����.��>�p}㴼��ޑ�+�̜ꬭ�G�}=�V<��^����ޱe|�S���������=y���^�#.{��m�A
��
/�?�қ.S�K=�放��.c'��)ߚ|�n.�9���}�w��9�������nؽ����<��N�����i���B��To�M����[��KoJ�����N����.�o�%��
��*`���3>���u?�zʧW������O�9������g���K�J�ێ���I���%�ߋ�r�(��x?���/ӝl�_��n�_�o�}�{m�?���ۇ��]��{�
,˱��~u����_�3��#��ݝ�޵��j�.�?����~�
��-__/?�ӝ�J�f/��_�3ox����O���	��/�����@T�@��
>�Q�ć&X�F�bR�H�%M�D�R��	�Y��@�c��S�N�=}�T�P�h4�P!Q�/fdȀ�T�,\�U�V�]�<zs&L�d�6E�V�Z�i��U:�l[�%bl��ի��x%ؘ5��[p.]ƍ?���r!S<�Y��x,��+�/V������+��2]�M���lڵKFJy�m�v�:��ChH�Hz$j��U?�ʺp�׈o.�]�v��Dž���E�|�(<���2�
�yÐ�+�]?H�b�#�M<�$�6,<�����J=�:r�>�仏����P���돬���@O��@�,ێA���L���j���{�A�2���}���
���QD2I�TO��|���"I��:����1H��DjD#KT�L3�b2A'!��!)�*��PC:���N/ӵ�ʚ�LA�)�ݴ{�����F�C��1K;�L�O�<�PO?��P��3���TWUU���J���2OL��TL@s�WAEUPЅ�HU.oEV�\��U1_�U�5�$���W�#�S2��@i�v�l��jYo�
���]y�ܶ5?a��]}k��D�E�z[�_vF�~��7�~�`];u��%�\1X�*�]��
�Y�-&���}m�.�:x���-غ�K�y��{M��b��g_��X�|k&���-�T��ꀾcu�9�$��n⡋ƚ���7�{�H��F�j��
4k��ƸI��4o�߻���n*���l��ym��L3��;h�i��v�%�<#���[����P�V��K]Yq���l�,�r�/g+������7�ME;�`&@���]'~V�%����d�Wf�m_�2u�[g��`�	�^���~��S�Vw�ڡ��C?�R?�E巜��)�6�c&1p������0�q���Tf��h�u{S���������Lg@�l��{���}a�tD۟�'B��`t�ǴB�̅5$��%���Z�^�Ñ��b7�KHī1aHܗ��B��ЉO�a�%E�1��W���E~���s+&F
p'z�����@��&'g4_ՈE���h���Ӻ���g����.62,�[���#�aǁ��Y���:��jU��"��ȷA-g��$�g��=2?�k�&�:�%2��l)q7��ǀ��h�y���|���m�G\22�E#O�f�έi��1g�JB��~�\&���g��3 ���3"�eO�=��S��L�.AH�, ����+��Ma6��xd==y�<����'��x��|�Y�L�Qu̱�C���A�'Y6���m�T���NzO��K�
��'���*��K�G
2��>-g��.���G%�O��B�B�$͠Ik��*Ҫg�*���п픦_�NX=�Tpqu�gE�m�J(���Sn-b\�4���M4���;S-�TU�`M*���UR|��2����"��<�_�4LZ�Z�4�iE�Z�UsE�ie-�ؒE3Ju\� �IK��m%<%gX�擵$s-^z��_>���m�K��J���E�e��Z7�i�\�J�+5�n��]�d�]II�Mg�[�~ӻݽm6I���W\���b�c�_����o��`Y�d�s�Q�{_���~��ۣ�APyR�19�\�ή�p]p[�;������0����ogĘ�	s�b���X�-v1~;֜2�'�1Z^<]��o
2�'�6��Ճ4V�W��/���0�2��l�*��A3떹3��~Y�s��do3�qYќ�va�"�i7C2�{�����Ĉ(1#��[mOZSpB�7�c�L��.D�����Y�W�Y��5}�HSy�Z��)c��챒�CE^���\Q��	Nm�o3�(�v�+îC�`�����,&�uM�I�z�T'v�>����r��e_���t:��^y�֛�����n����*�;+�^�
8���m��;Ov�[ȼ#��i�	kZ۟��?�����Lyw�Ȉ�	C������m����Bu�I�q�D��䒱�G=g���w6��q��7�������q-��f/'4Pt��C��?�xsޫ���%z����?}'7���A�t���-�	�'ž,��n����1�=�@$ ��Ħ@��7�d?v�'��D �̝�/;'���lc;�z�۷�vS
���{�5���:������lt���눢|}�;��o^��ܩ�o�&{�?.=QN�2Rww�����}�.`Az����|/)�w��JD��/~�i_�t��h�|�z�����G��
j��'��M���c�n�-,�m�t�O��q��ӎ��?��p	@��?$+@�9@pI��{����ڈ@3�@����X:	\��j@�{���:�@�
A��ٸ����[�'�@�5ýԉd�t�/��t�������#���z��z�t>|�񃈆��P�8B��,?s�܃B����B`�+D�3DB�b��aCNÊ.,�/l�0�&��2�+��=�C5�7<�5ˆ�CƠ��;,C>T؋�+4�D���zC̸A,D�8�ꃈ;���KB,��kC.��A|�Ll�0L/��DP��$<7RܾSD� L:��>��EY|,xz���[��\�>�;��I԰W10,{4��D!���P�T14�T�F��	̎b�EUd�$rDEs\t�3ћƮ�9vTw8�<zL{<u�Fd��~l� Ȃ4H�\|�;}D�d�H�HHK����JF���T������G dȦ����������Ya4�QH�I���VH���D��yI��I�`������I������J��#Ac�ɡ���s��X�ʭc˦����C�yH����,�r�����J�	߃��$K�\�bڨ�
��|��,Ae̬��K��&c;���ˣ��p�H�|Ȅ����sF�8L���6��"�H��J�-���O[�LLl�˓���J��l��\LӜ���͂T̀��y�L�:��Z�,@�;�|Gi$�n$��\+�G�$=��
&�;��;ylB�F�DN�RNCr��M
�N��N�a��H9�N
O�O�؀
(O0O	�N�$9��E"4�wzOѐ��|$ؙ��4���D�x���O����PC�͖�O�N1����O�#�Ѱg��4��I������P�+6Y���Z�ѻή<Q�P�K`�|
�Oc���7X*Q��зL�͏m�Qˁ��ɃC��ɿ�G��F�ܱeLk�]�YL��F0c9/=Ƌt���^���������%}�&�S���;J��ܮ�M�C�-���tS?��T�M��SsT��TC:O�ش5=�t�7}ξS��䘶XB}��1�EmS/�T:
N�RF�UV%2S����v��)lϋ�N��X5�`S���,V���nSV�t�:�!-R�t�բ��2T��O��*5қ��;��e�V(�S�Ĉ m�5S	u3
��nmW��tR
]��P"=ׂZ�NK�kYW]�׸��:����!%T�R4W���#Nd�ƅKK�Qy}�lU�4%�QU/�V�J�E
)uя0W{���D�N:VPmԔ=��tW2͈z]��DRaL�R�X��:�Ӂ�7a���)�H;�p݌���BM��Q���@��j�8IE���Z:�Z���M=U	-�4;[�]�ބ���C�5�LE��G���a������U���|
U��O7{V�����W�=9^
�!]\��-C\f���V�}�]H��9�U���O��&��M��Y0����V
R]�E�]�ݬ�EuO�
���:-�,��U��U��U�߅ؗ�݉
ZɊ�Yˏ˝�̍��  
Ґ��H�+E�M2���3
���<�+�D�����;1�]���0����B� S�1���^�5
`+��(B����Z�
sC�h�{`Z�Z#���K�E=ɵ;����
֦�V�e���nU�MG^0^V3a�a��[y+���?���֙�`�/�ߧpV>�NV#����bb���e�Pr����M��L��/�M�x�]z�P:
9&�V!��֍��٤��;m�MC�g<^O��!�VQ�R�E�d_�mP���(´��⍵bLѰ��>��e�a���u/4�M5���mcp_��ߒ}�R��.��/�K�l%�-(K>6T��M�@��ٻ@`tS��fUe�)�@��A�Q��0h��[f&fDby�����>�f$�7��մ��r�b�Wh�d��,�}�r��(��f	gK�g0�g�4��u����9�g�=�)�㦴�fN���l%b�Hg�Z�W-�`˭�u,hC���r��kg�eS�b��9b�cP�X8��3;��ԁ��Q����<x��?�Aƨ�c�v�E��0�]��䈝�i�Lη}.b���Fď
_Q��%6��֏��'}�W����X�5��[Ê�,\�ݵ��8�^>#�u3j�j�K�'��cL�sZ�^h��n;�%���s�̬%j8r�úh?K�����QĞ<�LhFk�v�U$:�m��s�1<cJ�>jI�ץ�a����Θ�VٱJ����m\]�<n2�������l�3n�m����F�����un�nx�n��`��3]6駨��~n��n����-V��4��f�o|%��6�F���f�,�1�`�w�㽋�����n��i�\�G�Tj�`�ӎƋ%�m-��&��*�W�
������E&��)�P�g�w������������qe�Kh�.kj��+_dCK��G�Dv�
����_���������G��-��.��/�0�1'�.Om��`����Fۚ�$�T����F{��;��<��=��>��?�@��3���V��ϔ	-��G�QA��I��J��K�tB���8N�hӢ�:��Q'�R7�S/MoH�e�O��P�)T��Y��Z�sUG��^��u[�`vK�u�4��_�eg�f��b��掘dWvg��kvh�Ji�	j�ul�p�um����j�vqW�u�tr?�'{n��b�z�w@w�y���n_�oԺ���[g���m*7�^BpV�~?�o����|�kv�D3�Q����r�����,���'yt�	z��g�*�w������y
�R��w�����������/�>�y�Gzk�����fY$�����Gn�p������zf�v��n�f����7��w��>�<?��w{[�
8���z7��`G�������x����|Z���O�_r���S�{�w������?o���|R/|�7����7���Ч������ʿ�ԯ��?�9���{��ُz[K{ӿs�W��t�o�ͨ�/uЧ��W׌��s����s�G
�~�~R'~��~�d�};g~��'��|�׌0��Q���g��/o@������@�^����w��z�`� „	Dx@!Ĉ'R�h�"ƌ7r���`�*<0�*�l��%̘2U��i�&Μ:w����J�52\��(ҤJ�2mjphȑ%uάj��I�Z�r���Ρ�:tj�,ڴj!BI�`V�r�ҭk�.O����/�.l�0�Ċ3n�_�Q�B�l�2�̚77��w-�ТGo�L�4�ԪW�n�Z��ײgӮm��Ӑc���7��uc���8��ʗ3o�9��ҧS�n���ڷs	�;���Ǔ/o�<���׳o�=����ӯo�>��!�;PK㰐\���doc/UserManual/My.sqlnuȯ��select * from tbSysInfo

PK㰐\�l?��%doc/UserManual/StarOfficeDataGrid.gifnuȯ��GIF87a�����x4 4x<(PP\\8d ||x H4 8X\8hphhHpppx|x������p���������������������(��������,����8����\�l>6@̘,��7��|H`>{�6`/�@����|
@|��`/�@|�7
�@�a�����@@�Bj@�66/�@\���
|/
@�,��������H��7@@��57���@�t6�j��\�/���||

�@@�H�/>����/�\5>@��6����!�f@/�\�G������6�q@|<�7_���!�@�����|�
��@��=/ex��/\|\(�>�������!�@��c||
<f�����!@@�(5���$(������L����
@nXzp�#(�|$0���@��97H>�|�FDa'���/,���GH����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�I��ɓ(3~Xɲ�˗0cʜI��͛8s��ɳ�ϟ@�
J�(�F�*]ʴ�ӧP�J�
)իX�j�ʵ�ף-��J��ٳh�b��R��,��K��ݻ_�~p�҂��xL��M�|WZ8q⯄�*��L�e�,1���啜;���3�Т�jn��sgͰSEM����u֖��u�؛o���x�Ō8�Y���+���:��Gg-z���M��o���in𙅏�i��z�I۳WO��[�K��fs�9']z��f��ib'o�e���R�`�ץ'_��!h!��e�L	�����^y ��
jx��61#w��"��(�}4��	� @.
�X��d��AH�����!�ʷ�Wr�"y�����X��!�e���MVb#��Yg��9���i"�;� �*�x�Gc0��d��.u �L:ii�$�x&v{^YayqN)��bF(ۧk�i"�}�J�n��nG諮q�'�j	(���go��I�|�d�ǀxpBv�E��LV[���ު�7�*���m�������n��8��f�e���
�/u�	"��'�}ګ�+�G�������ׁ��e�k��b0��k/��6��iv:1� o8���Ӊ���n��뱯i�0z,XhXb� �	�
���E�fR�����٪�N?�q�)W�nּ�ʱ�L&�I����Ok�n�v��fg��
��EO6_�~Yk���襁��1����{�c��'�ά2^��2���,��׽r�v�>n߲n!�� ���>���`��X	ȝ ��'���,��>�|�7�z��G_��`@X��K���W��o>^㟯���o�~���/�QV�`���������H��L��:�`�"H�
Z�̠7�z��GH���(L!C@�υ��d�@�p�1�
I����d!�8��""04���u8D#R�6�a{�DJ��M�����.�O�NLb��C��1��;��h�#�рl< 
�G/��`Lc��F�01��1"[�F%�����c�h�C"2�Stbq��>VґT��#/Y�J��x\	�vX�I�/���)��E�2�Y,� 8�Z°��t�*�7�V���	�8CH��-4&2_��E��τ#)KD2х�d�/��KnZ�˔�0�)Bb�R��$���^Ә��&-�)O>2��t';�9�x���'9�As�ӛ��&2a��L�s�a�'?w��|*�
�hB*Pg�4h"s�ъ���e#}�ЄNԛ+�dLىRg2�����MA����T�2�hʠjq��l���Ȇ����fm�T�nR���VH̭z��.�X�(�D�f�g� mIK(fp�I-!\a9ֺ
��vͫ^��W��
,A�*����*$,b���^�*��d'K��Z���ͬf7���z���
�hGK�Қ���M�jW�Y�(鵰���lgK�����ͭnw������
�p�K��W��M�r�K@�2��Ѕ�s���Z���ͮv����z���
�x�K^��@���!k�������|Ep���~C%��������{�����c̸�;�����%L��b����e��gqf�/l�GL����J�//��;b��Cz1-�Z�y�i�e�����Cr�y`!���Frlw� +ٸO�m�};e߶�,�pX	(c����_��x���8?2�q�V�`#�ʯE����*�ٿoVp��<�ۢ&�Q�qhv��;�V��-��ܿ,Ñ������a���(sY�����Ӡ�2g.=�6/�s�󳊬h	�Yի�3�Ok>�Y�q�2�kMk�2���b }?ɮ�җs3��<�:��~��&W[ֻ�5���d3��7ε�o
n=�z��6���\hk#�ۀvr��|k[s������=����6��
���������J7̙����l8��L��M-k'�����5�����z�n���U~�tә� o��c�jy���>��ō�\�w���se#�׼�җ>l/'����_X�\ԟκ��]��x�;�v�S=t��]�`�ڃ^�\�o'��َ���fO{��>wU3:��n!ә�ƈ☕�(p_\�/��=�⍧���5��v�W{�u�{�G����2�|��M�����7���y����D��/��7=����ģ�_-*���:�+��ڋ]�|}��������y�C�p�|�<��؟��w>�}�W�p*��
�,���_���Q�������'}!}ԧ~��yBw~x�w�sxy?�yxv��r�F���׆t��~�ihY�G�|�7J�gq�i'���|��q�o�}8{�F��
&h�6p6Ho��}�&p�h��oFn��g;8�JnN(�v��:Dlb�`�fi�f�F)��'y�Ay1\
�`�dž6�bo�j?�_aiX�eą�����_�Kc���ւe�i~�u�i�xa�����yV�W(�d���_1F���td�.�|9���8��X�)�Yw�Ef���|�y�Xj�8��X���]�xC�u@�Y3]�(X�V�]�c�Ș��Xb�%������X��X�[5�֘��(L�%_�����8��X��(Y���긎�؎�[�([϶��X�\��f����?��7�u�[%��X������_��U�S
i��E+�����9���	��x���t�{�@�e9F�@^7�ْ���i����t�?#i?JA%�po�BZhl"�eiIZ�?5�v��	�9����<�AO��}��S�o4Y��ZHYWi��v�"5i�d�@�#��v�E]
ԇ$�Dqf�0&iG��b�
i��#��i�@l9��wdp�@a֖�hy8���zI�9��l`�Ŧ��Qi��T�Y�RN燤���&he�t�6f"�+9�^��b���	�%����BA�V����,H�ܶ��I�\Y
���S�Y�>�S�ϢA�ecB��)�g�scW�Cٜ����	4�>IF��?�9D�1F�	[ɘf�fՉ�8��^i�	�')�v���?�ypف�q���b��dtag9��i��)�N�������U�(��3�7yO�#�>YL��c�נq�Mu䚔����{��[h�:X�y^<*�Z�j���f�T�F٠�i@,F�V)i���4x�ɟ�%�9�S���2��ii�����y�:E-Z�^z��W�����ƕ�WJN��jV�i�L�p
z��yACz�|؞�,��_�&�s�EY��%H])�xx
A��@�����qY��ʨ;�b/�b��I�����@r���Ԩ�W�.��^t���\u*C��a����Z����4���ګ@D���X�hC�z��j���{���H�bV^�z�ؚ�ں��ڭ����ʧ�X��z�蚮꺮����f�ua�8�hfh�z��(���h���c�*��JN���0�-����K�E�WK��
���{��yZX��h��ڱ�@[�
kX)��;ė	K���'TT�ID�M�tI���D��e���M9��v����췲X�R�4U�$U)�E�%U-K�/+���W�(KR��$�S$d�|%KӴMF[WH��1ɧb�pu�@�DJX�H8�N[�&+Xy;R�kS%Xq��t˱w�;E�Q[�U��5�m�P%X�+|
˸�)�:�MX{Bj{��[U�X�l2�@��CL��M��<;��۸���CkM5uX��Y���K��[�;P�[���K�ژ�z���ʴ�鼟�Z�[�]��=����f�����[����+�}	��ھ����;��k�K�ƥ���0���k���z�ԋe�������p��0[��������|��Z�˫Ry8z@�f6wdCe�U�&c���s��.l[̽H�G���jvw��wb>�s)�v>���D\[1��1[�i�hw�v9g�6oS8�C<���z���~B~E�Ź��2,�4�xK܁����grڇ����'�=�o�z����nP�g�|��Zƀd�v�o�v�5�}j,r|<��ĉ�@��:��~��ya~$ȱ�՚k	}?�Ȑhv�<sQ���´�r�gɖ��X�l���7\zrW��ˇ��r�s�\�w����~�Vʰ�²�b���fe� ��rv�+\�Rl�Ȅ9<��<��r�Ř��͌�����|[��j�
������F�Z�(�.���l\�<�ͣb̅�̧ۚ�=N�����+�-\}�,˒5j��ѿ��"�΀���uk�%�-}�'=Y�Q�L\��'[���Km7�}/���c���cP��Ǽ�G��ԥ6Ԍ;v��r�\�!
�IM��LݎN�����q*��9]�YMr���]��_�ea}@,�ָ��-��i�v]��m��o
�*[~���WMΔ,�G����vHӬ�X։��Y��T�׊��N�Dm��r�|�=��;���|י����؝���k����
�3[ر�bF}�M�2<�߫��E��Ǽ�������Iŭ�ZA�=�ҿ��\��J�ӝ�}���
���]}��D�]�-=��A�m��轧j�������
���뜎�t߇����-m��^��_~�~�	�D���
>��]����������������	�&��"�q~�,^�)b+��2N�/.��=�8^�5��7��>�;�k��D�AN�cZ�J>bG�K��;PK㰐\�.��kIkIdoc/UserManual/index.htmlnuȯ��<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
	<TITLE></TITLE>
	<META NAME="GENERATOR" CONTENT="OpenOffice.org 2.0  (Linux)">
	<META NAME="AUTHOR" CONTENT="Peter Harvey">
	<META NAME="CREATED" CONTENT="20070322;14575800">
	<META NAME="CHANGED" CONTENT="16010101;0">
	<STYLE>
	<!--
		TD P { color: #000000 }
		P { color: #000000 }
		A:link { color: #0000ef }
		A:visited { color: #51188e }
	-->
	</STYLE>
</HEAD>
<BODY LANG="en-US" TEXT="#000000" LINK="#0000ef" VLINK="#51188e" BGCOLOR="#ffffff" DIR="LTR">
<P STYLE="margin-bottom: 0in"><IMG SRC="unixODBC.gif" NAME="graphics1" ALIGN=BOTTOM WIDTH=32 HEIGHT=32 BORDER=0><FONT SIZE=7><FONT FACE="Arial, Helvetica">unixODBC</FONT></FONT>
</P>
<HR>
<P ALIGN=CENTER><FONT FACE="Arial, Helvetica"><FONT SIZE=5><B>USER
MANUAL</B></FONT></FONT></P>
<P><BR><BR>
</P>
<P><FONT FACE="Arial, Helvetica">Welcome to the unixODBC User
Manual.&nbsp; This manual is targeted toward people who will be using
unixODBC to access data sources from tools and applications which
have been developed by others. This manual compliments the
<A HREF="../AdministratorManual">Administrator Manual</A> and the
<A HREF="../ProgrammerManual">Programmer Manual</A>, each of which is
geared for a more technical audience.</FONT> 
</P>
<P><B><FONT SIZE=4><FONT FACE="Arial, Helvetica">Getting Started</FONT></FONT></B>
</P>
<P><FONT FACE="Arial, Helvetica">At this point unixODBC has been
installed by your System Administrator. Your System Administrator
should have installed and registered at least one ODBC Driver (we
will assume that the ODBC Text File Driver has been installed). Your
System Administrator accomplished this by following the directions
laid out in the Administrator Manual.</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">You will need an account on the
UNIX/Linux machine; this is also provided by your System
Administrator. In fact, if you run into problems at any point in this
manual then you should refer to your System Administrator to ensure
that all required software is installed, accounts given and
privileges granted. You may also want to talk to your Database
Administrator (DBA) to ensure that you have access to your database
and to resolve any questions about which driver to use and what
options to set.</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">UNIX users can be given a wide
variety of methods to access their account resources and these access
methods usually fall into one of two categories.</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">1. shell account (telnet and
terminal sessions)</FONT> <BR><FONT FACE="Arial, Helvetica">2.
graphical desktop</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">If you are limited to a shell
account then you will not be able to use the ODBCConfig and the
DataManager tools.</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">We are now ready to start using the
unixODBC tools. The first thing you should do is verify that you have
a working System DSN. If you do not; then you should create a User
DSN. These tasks can be accomplished using the ODBCConfig tool.</FONT>
</P>
<P><B><FONT SIZE=4><FONT FACE="Arial, Helvetica">Using ODBCConfig</FONT></FONT></B>
</P>
<P><FONT FACE="Arial, Helvetica">The ODBCConfig tool is designed to
allow you to easily setup a Data Source (DSN). DSN's act as an access
point for getting to your data. In many cases; creating a DSN is as
simple as picking a Driver to use, selecting a Server, and entering a
Name for the DSN. In fact; DSN stands for Data Source Name.</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">You should find using the ODBCConfig
tool to be quite intuitive because of the simple Graphical User
Interface (see Figure 1) but you must understand a few terms before
getting started.</FONT> <BR>&nbsp; 
</P>
<CENTER>
	<TABLE BORDER=1 CELLPADDING=2 CELLSPACING=2>
		<TR>
			<TD>
				<P><BR>
				</P>
			</TD>
		</TR>
		<TR>
			<TD>
				<P ALIGN=CENTER>Figure 1</P>
			</TD>
		</TR>
	</TABLE>
</CENTER>
<P><B><I><FONT FACE="Arial, Helvetica">User DSN</FONT></I></B> 
</P>
<P><FONT FACE="Arial, Helvetica">These are your personal Data
Sources. You are able to; Add new ones, Remove existing ones, and
Configure existing ones. User DSN information is stored in a secret
location where only you can access them. Keeping your User DSN's
separate from other User DSN's allows you a great deal of flexibility
and control over creating and working with Data Sources which are
only important to you.</FONT> 
</P>
<P><B><I><FONT FACE="Arial, Helvetica">System DSN</FONT></I></B> 
</P>
<P><FONT FACE="Arial, Helvetica">These are created by the System
Administrator. They act very much like the User DSN's but with three
important differences.</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">1. ONLY the System Administrator
can; Add, Remove and Configure System DSN's.</FONT> <BR><FONT FACE="Arial, Helvetica">2.
System DSN's will be used only if the DSN does not exist as a User
DSN. In other words; your User DSN has precedence over the System
DSN.</FONT> <BR><FONT FACE="Arial, Helvetica">3. Everyone, logged
into the ODBC enabled computer, shares the same list of System DSN's.</FONT>
</P>
<P><B><I><FONT FACE="Arial, Helvetica">Drivers</FONT></I></B> 
</P>
<P><FONT FACE="Arial, Helvetica">Drivers contain the special code
required to talk to the specific type of database you will work with.
The Drivers often come from the vendor of the database but may also
be found in the unixODBC package. Your System Administrator is the
only user who can install and register a Driver. You will select a
Driver to use when adding a new DSN.</FONT> 
</P>
<P><B><I><FONT FACE="Arial, Helvetica">Add a DSN</FONT></I></B> 
</P>
<P><FONT FACE="Arial, Helvetica">You will want to ensure that you
have at least one working DSN. Here is a quick step-by-step guide to
creating your first User DSN. We will not actually use it yet because
that will involve using other tools and we have not talked about them
yet.</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">1. Execute ODBCConfig</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">This can be done in a variety of
ways. If you know that you have an icon or menu item for ODBCConfig
on your desktop then execute it using one of these methods. If you do
not; then start a shell and enter the command <FONT COLOR="#cc33cc">ODBCConfig</FONT><FONT COLOR="#000000">.
You should see a window popup (see Figure 1).</FONT></FONT> 
</P>
<P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">2. Add</FONT></FONT>
</P>
<P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">Click on the
User DSN tab to ensure that you are working with User DSNs. Click on
the Add button. Select a Driver from the list. If the list is empty
then contact your System Administrator; only the System Administrator
can add Drivers. For this example we will try to use the Text File
Driver. Select the Text File Driver if you have it available.</FONT></FONT>
</P>
<P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">3. Edit
Options</FONT></FONT> 
</P>
<P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">You should be
presented with a list of DSN options which you can edit.&nbsp; Figure
2 shows the options for the Text File Driver but you may have a
different set of options if you selected a different driver. Common
options are; Name (a unique name must be entered). Description, Trace
and TraceFile.</FONT></FONT> <BR>&nbsp; <BR>&nbsp; 
</P>
<CENTER>
	<TABLE BORDER=1 CELLPADDING=2 CELLSPACING=2>
		<TR>
			<TD>
				<P><BR>
				</P>
			</TD>
		</TR>
		<TR>
			<TD>
				<P ALIGN=CENTER>Figure 2</P>
			</TD>
		</TR>
	</TABLE>
</CENTER>
<P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">Enter a unique
name, enter a comment, turn Trace off and click Ok to save it. You
may click on Configure, at the main window, to come back to these
options at any time in the future. Notice that the Database in
Figure-2 is /home/pharvey/test.db. You should ensure that this points
to something like; /home/YourLoginID/test.db where you replace
YourLoginID with your ID. The test.db file should not already exist
(for the purposes of this excercise); it will be created for you.
This is how to create a new database using the ODBC Text File Driver.</FONT></FONT>
</P>
<P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">4. Your Done</FONT></FONT>
</P>
<P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">Notice that
you now have your new DSN listed in the main form. This means that
you can try to use it in any tool or application which uses ODBC DSNs
for data access. This includes many applications such as Word
Processors and Spread Sheets. You may want to test your DSN using the
DataManager.</FONT></FONT> 
</P>
<P><B><I><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">Summary</FONT></FONT></I></B>
</P>
<P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">ODBCConfig is
a useful tool for PowerUsers but it is simple enough for almost any
user to use. ODBCConfig exposes the most important reason for using
ODBC to access your data; the ability for you or your System
Administrator to change the Data Source for your tools and
applications. Please take some time to get familiar with ODBCConfig
and your Driver options, perhaps sit with someone who is a bit more
technical and talk about it for one or two minutes. You will be
rewarded.</FONT></FONT> 
</P>
<P><B><FONT SIZE=4><FONT FACE="Arial, Helvetica">Using DataManager</FONT></FONT></B>
</P>
<P><FONT FACE="Arial, Helvetica">The DataManager is a great,
graphical, tool for exploring your Data Sources. It allows you to
explore you Data Sources in a similar manner to exploring your file
system. The DataManager ( see Figure 6 ) is split into two views. On
the left hand side you have a Tree View'. The Tree View is where you
can drill down to the information that interests you. On the right
hand side you have a Detail View. The Detail View shows any details
that may be available for the selected item in the Tree View.</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">Just like ODBCConfig, you can
execute the DataManager in a variety of ways. One way is to go to a
shell and enter the command <FONT COLOR="#cc66cc">DataManager</FONT>.
This should bring up a window that looks similar to Figure 6.</FONT>
<BR>&nbsp; 
</P>
<CENTER>
	<TABLE BORDER=1 CELLPADDING=2 CELLSPACING=2>
		<TR>
			<TD>
				<P><BR>
				</P>
			</TD>
		</TR>
		<TR>
			<TD>
				<P ALIGN=CENTER>Figure 6</P>
			</TD>
		</TR>
	</TABLE>
</CENTER>
<P><FONT FACE="Arial, Helvetica">Next; expand the nodes to drill down
to the information that interests you. You will be asked to login if
you try to drill past a Data Source. If this happens, enter the login
ID and Password provided by your Database Administrator or System
Administrator. You will know that you are logged in when the little
computer screen changes from Red to Green.</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">One of the interesting Detail Views
occurs when you select a Data Source item in the Tree View when you
are logged into it (the little computer screen is Green). The Detail
View is an SQL editor. This is only useful if you know the SQL
command language but for those that do... it can be very handy.</FONT>
</P>
<P><B><I><FONT FACE="Arial, Helvetica">Summary</FONT></I></B> 
</P>
<P><FONT FACE="Arial, Helvetica">The DataManager tool is a good way
to test a DSN and then to see what resources are available inside the
Data Source. It is also very easy to use.</FONT> <BR>&nbsp; 
</P>
<P><B><FONT SIZE=4><FONT FACE="Arial, Helvetica">Using isql</FONT></FONT></B>
</P>
<P><FONT FACE="Arial, Helvetica">This is a command line tool. This
means that you can use it even if you are not working on a Graphical
Desktop (for example; in a telnet session). This tool is designed for
more advanced uses of unixODBC. You can use isql to test a connection
but it is designed to be used by those experienced with the
Structured Query Language (SQL). You probably will not want to use
this tool if you are unfamiliar with SQL.</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">isql allows you to;</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">1. connect to your Data Source
(using a DSN)</FONT> <BR><FONT FACE="Arial, Helvetica">2. send SQL
commands to the Data Source</FONT> <BR><FONT FACE="Arial, Helvetica">3.
receive results from the Data Source</FONT> 
</P>
<P><FONT FACE="Arial, Helvetica">This tool can act in batch mode or
interactive mode. Figure 3 shows a simple, interactive, session.</FONT>
<BR>&nbsp; <BR>&nbsp; 
</P>
<CENTER>
	<TABLE BORDER=1 CELLPADDING=2 CELLSPACING=2>
		<TR>
			<TD>
				<P><BR>
				</P>
			</TD>
		</TR>
		<TR>
			<TD>
				<P ALIGN=CENTER>Figure 3</P>
			</TD>
		</TR>
	</TABLE>
</CENTER>
<P><FONT FACE="Arial, Helvetica">Figure 4 shows an example of isql
being used in batch mode. Notice that it is being told to run a
similar query as above but this time it is coming from a file (
My.sql ).</FONT> <BR>&nbsp; <BR>&nbsp; 
</P>
<CENTER>
	<TABLE BORDER=1 CELLPADDING=2 CELLSPACING=2>
		<TR>
			<TD>
				<P><BR>
				</P>
			</TD>
		</TR>
		<TR>
			<TD>
				<P ALIGN=CENTER>Figure 4</P>
			</TD>
		</TR>
	</TABLE>
</CENTER>
<P><FONT FACE="Arial, Helvetica">The example, in Figure 4, is also
formatting the results into an HTML table and is sending them to a
new file ( My.html ). Figure 5 shows the resulting html table.</FONT>
<BR>&nbsp; 
</P>
<CENTER>
	<TABLE WIDTH=679 BORDER=1 CELLPADDING=2 CELLSPACING=3 FRAME=VOID RULES=COLS>
		<COL WIDTH=0>
		<COL WIDTH=118>
		<COL WIDTH=118>
		<COL WIDTH=104>
		<COL WIDTH=136>
		<COL WIDTH=158>
		<COL WIDTH=0>
		<TBODY>
			<TR>
				<TD COLSPAN=7 WIDTH=669></TD>
			</TR>
			<TR>
				<TD ROWSPAN=4 WIDTH=0 VALIGN=TOP></TD>
				<TD WIDTH=118 BGCOLOR="#000099">
					<P><FONT COLOR="#ffffff"><FONT FACE="Arial, Helvetica">vcCompanyName</FONT></FONT></P>
				</TD>
				<TD WIDTH=118 BGCOLOR="#000099">
					<P><FONT COLOR="#ffffff"><FONT FACE="Arial, Helvetica">vcCompanyStreet</FONT></FONT></P>
				</TD>
				<TD WIDTH=104 BGCOLOR="#000099">
					<P><FONT COLOR="#ffffff"><FONT FACE="Arial, Helvetica">vcCompanyCity</FONT></FONT></P>
				</TD>
				<TD WIDTH=136 BGCOLOR="#000099">
					<P><FONT COLOR="#ffffff"><FONT FACE="Arial, Helvetica">vcCompanyProvince</FONT></FONT></P>
				</TD>
				<TD WIDTH=158 BGCOLOR="#000099">
					<P><FONT COLOR="#ffffff"><FONT FACE="Arial, Helvetica">vcCompanyPostalCode</FONT></FONT></P>
				</TD>
				<TD ROWSPAN=4 WIDTH=0 VALIGN=TOP></TD>
			</TR>
		</TBODY>
		<TBODY>
			<TR>
				<TD WIDTH=118>
					<P><FONT FACE="Arial, Helvetica">XYZ Company</FONT></P>
				</TD>
				<TD WIDTH=118>
					<P><FONT FACE="Arial, Helvetica">XYZ Street</FONT></P>
				</TD>
				<TD WIDTH=104>
					<P><BR>
					</P>
				</TD>
				<TD WIDTH=136>
					<P><BR>
					</P>
				</TD>
				<TD WIDTH=158>
					<P><BR>
					</P>
				</TD>
			</TR>
		</TBODY>
		<TBODY>
			<TR>
				<TD WIDTH=118>
					<P><FONT FACE="Arial, Helvetica">Another Company</FONT></P>
				</TD>
				<TD WIDTH=118>
					<P><BR>
					</P>
				</TD>
				<TD WIDTH=104>
					<P><BR>
					</P>
				</TD>
				<TD WIDTH=136>
					<P><BR>
					</P>
				</TD>
				<TD WIDTH=158>
					<P><BR>
					</P>
				</TD>
			</TR>
		</TBODY>
		<TBODY>
			<TR>
				<TD WIDTH=118>
					<P><FONT FACE="Arial, Helvetica">CodeByDesign</FONT></P>
				</TD>
				<TD WIDTH=118>
					<P><BR>
					</P>
				</TD>
				<TD WIDTH=104>
					<P><BR>
					</P>
				</TD>
				<TD WIDTH=136>
					<P><BR>
					</P>
				</TD>
				<TD WIDTH=158>
					<P><BR>
					</P>
				</TD>
			</TR>
			<TR>
				<TD COLSPAN=7 WIDTH=669></TD>
			</TR>
			<TR>
				<TD COLSPAN=7 WIDTH=669>
					<P ALIGN=CENTER>Figure 5</P>
				</TD>
			</TR>
		</TBODY>
	</TABLE>
</CENTER>
<P><B><I><FONT FACE="Arial, Helvetica">Summary</FONT></I></B> 
</P>
<P><FONT FACE="Arial, Helvetica">isql is a powerful tool for working
SQL to access your Data Source but it is more for the advanced user.</FONT>
</P>
<P><B><FONT SIZE=4><FONT FACE="Arial, Helvetica">StarOffice 5</FONT></FONT></B>
</P>
<P><FONT FACE="Arial, Helvetica">StarOffice is an application similar
in goals to MS Office. A free version, for non-commercial use, can be
downloaded from <A HREF="http://www.stardivision.com/">StarDivisions
web site</A>. Figure 7 shows a PostgreSQL table being browsed in
StarOffice. StarOffice can use ODBC data but it can be tricky to get
going. Here are some things to note about using StarOffice with
unixODBC. Make sure that unixODBC is installed on your machine before
trying to use StarOffice ODBC on UNIX.</FONT> <BR>&nbsp; 
</P>
<CENTER>
	<TABLE BORDER=1 CELLPADDING=2 CELLSPACING=2>
		<TR>
			<TD>
				<P><BR>
				</P>
			</TD>
		</TR>
		<TR>
			<TD>
				<P ALIGN=CENTER>Figure 7</P>
			</TD>
		</TR>
	</TABLE>
</CENTER>
<P><FONT FACE="Arial, Helvetica">Q. StarOffice disappears when I try
to load a list of ODBC DSNs and I get an error in my terminal window
about some library file missing?</FONT> 
</P>
<P>A. If you have StarOffice 5.0 you may want to try adding this to
your soffice start script <I><B>export
LD_PRELOAD=/usr/lib/libodbc.so</B>&nbsp; </I>Your soffice start
script can be found in <B><I>Office50/bin/soffice</I></B>and can be
edited with any text editor. If you are not sure of where libodbc.so
is or where soffice is then you may want to use the UNIX <B><I>find
</I></B>command. 
</P>
<P>However with the release of StarOffice 5.1 and beyond all you need
to do is to add the path to the libodbc.so to either /etc/ld.so.conf
or to your LD_LIBRARY_PATH environment variable. 
</P>
<P>Q. Do all ODBC drivers work with StarOffice? 
</P>
<P>A. No. StarOffice is very demanding upon an ODBC driver.
StarOffice needs many ODBC features in order to accept a driver. Two
drivers which are known to work are; 1. PostgreSQL and 2. MySQL.
People are actively working on other drivers. 
</P>
<P><B><I><FONT FACE="Arial, Helvetica">Summary</FONT></I></B> 
</P>
<P><FONT FACE="Arial, Helvetica">StarOffice is a rising 'star' in the
UNIX world. You can combine StarOffice with unixODBC to get at your
data. With StarOffice and unixODBC you can pull your data into a
Spreadsheet, Word Processor or even create Web forms based upon your
data.</FONT> 
</P>
<P><B><FONT SIZE=4><FONT FACE="Arial, Helvetica">Conclusion</FONT></FONT></B>
</P>
<P><FONT FACE="Arial, Helvetica">unixODBC comes with a variety of
useful and powerful tools to allow you to configure you ODBC access
and to work with your ODBC data. Familiarity with these tools is a
great start to using your ODBC in applications such as word
processors, spreadsheets and even applications developed at your
company of employ. I hope you enjoy them! Please email comments
and/or suggestions to me, <A HREF="mailto:pharvey@codebydesign.com">Peter
Harvey</A>.</FONT> 
</P>
<HR>
<P><BR>&nbsp; <BR>&nbsp; 
</P>
</BODY>
</HTML>PK㰐\Z��!ZZdoc/UserManual/unixODBC.gifnuȯ��GIF89a  ��������l����������!�NETSCAPE2.0!�Made with GIMP!�	,  ����Ig���ͷ��ԍ�$Y}R����/L�w��[������JB�CŒ�]�C�F�5���O.ϫ"��1�3{��c�Jyゼ>ov[�{z}!vJ�{�[��|fDb��r+�;����W����Z=���p`��������u��a�n��1& g������ä��	!�	,  ����0�I�8�Z/�� J\�}���dy�B�����<�u��;��yy�tM�˘��R@���A����5'�Ëq�3�����-}�/����.�&siX�_f�Vc`BiP^��Y��7����2������I���{i����V���&��v_������������o��	!�	,  ����0J޼�
Q+��&n�GUD0��������s����ݪF�łBQ�2�â(C�z�i��Y���BsU��˱�<���_�o���-�i���%q8[���\m������)����lv5��.������xv����)���F��D������[��������w&y%&��	!�	,  ��I��x��Y�Di�^X��颛*�o]�ag�~鼝��	�3����'20��F׀���>Q��`���Oo���N���j�o�ܜ�1T{}ux �s�~�8��"�dz����{|p��D�^p�[]�������^�y����M��w��������������IŗȬ�Ɯ2#md�2l#�;PK㰐\1��(	(	doc/lst/InternalStructure.gifnu�[���GIF89a����@��  @ � �@@@@�@�``@`�`���@������@������@������@����  @ � �    @  �  � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,��@��	H����*\Ȱ�Ç#J�HQ ��3j�8�"� C���q�ɓ$?�\��ǖ03��I�̚U�,xs�O�%
�t�Q�=W�\��)͙��*ujͪD�Z��ukˮ��,ٓf#�M{��[�k�ʝ���ݻlՎ5���ݿ#o
�Ugݔ�o�˸q^Ő�ʍL�2O��3{}�����=74��NШ�X�#fĨcstL{���0'��-�5��e��>�4��|�5��bB���vN�z�밣kOY�����/�O^���vF�=�g�IS7�����޾�e�B�߀��'���!�Z*���A8�o\18����G�x�Iׅ��؇���bx����ȝV�7"{�H������a�����M�_���h"�∤ft-i�Nfb�F�"����#�C�g�I�]�TIFR�e�X�y�mj�hf�R��TXi¹����і>ڹ�u�i�����d����f��F���VihZv���CF
���i�iE�*�ީIhb�ޖ�_��֪]����!���ꖭL������O��z'OB�_�W"+��~���S����MM�gQ�j�nX�����ʙmt�.��2����V�U*���������o���+�TY(0�o:)���^`��f���m��}�n���
_�e�z�q�"�1��L���|�*��r�.�����SZ\>j�UZ�0�"C�����k9�I#�G�)$�|z�t�&�D��V�u�0n-�^��n�3_Mv�4�{v�>�f��l�s�A�94�D�4��J�����u�i
8�iw}8No/�܎#^s�CMN���o��ڗ�=گ
e�~w8�y��Tޢ�*$�mz�Ou�o�����;��O3��"���6�2���θ��B����R���7j/l��/��ޯ�����<~��Z����~�ݷ��\c�8���_^�g���R�����@�XnC�z݋(������rMѾ�.�f������|����9*q.z,�͛^(>>J��1�M46��P)�X���>x:�i�b�����A&�^��B�C)�'^�2�s�����2��q�]鐲45z.>�u��5Α�k#�w8�U�G��Ha��$�5l>�t�Ƹ��]����� ɾB�
t��0�1J��v�]��;�1x�<eS�EB�у�d,c9�(Ҳ���%��K\zn��e-]	8�	�c�f�F̓qF\�,��:��5*�H�c��iȇ�.�$���&IՅ3��<Z)�IB�$�^�[��9n��[����ٷ2s��4�2�wL�4S��,h��PjV����%D�&ĉҎ���A'�}t��g�2����m`�%�H�ǀvS����K�l2lu� �V��J�u�cO$����ES�YOM�RL<��H7f�svI��s$V5%ЌZͫ�4)�*
֒b��$+X�V����K��A�ڻ����K�W�ZS\q,�T5jǽ����V��3p�4�*����1ٵ��$bU��`�e��Sk&�T���!�_=JՈ)����aA�L��6<;PK㰐\�����doc/lst/InternalStructure.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]">
   <title>LST - Doubly Linked List</title>
</head>
<body bgcolor="#FFFFFF">

<center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Doubly Linked List</font></font></b>
<hr WIDTH="100%">
<br><img SRC="InternalStructure.gif" ALT="LST - Doubly Linked List" BORDER=0 height=252 width=207>
<br>
<hr WIDTH="100%"></center>
<b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">This diagram depicts a single, doubly linked,
list with 4 items. The actual data being stored in each item is pointed
to by pData. Doubly Linked lists are great for storing&nbsp; things in
memory. LST&nbsp;makes working with a linked list very easy. The following
pages will describe more advanced features of LST such as cursors.</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">lstOpen, lstClose, lstAppend, lstFirst,
lstEOL, lstNext, lstGet</font>
<br>
<hr>
<center><a href="InternalStructure2.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a>
<p>Page 1 of 9</center>

</body>
</html>
PK㰐\n,��doc/lst/InternalStructure.vsdnu�[�����ࡱPK㰐\�w���doc/lst/InternalStructure2.gifnu�[���GIF89a����@��  @ � �@@@@�@�``@`�`���@������@������@������@����  @ � �    @  �  � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,��@��	H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�? =�	�ȓ(E6H���ʖ0=��I��̚8s|���N�@��s(ѣy"��t�Q�NYB�JbӪ'�b-PK㰐\����doc/lst/InternalStructure2.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]">
   <title>LST - Cursor - Add B</title>
</head>
<body bgcolor="#FFFFFF">

<center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Cursor</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Add B</font></font></b>
<hr WIDTH="100%">
<br><img SRC="InternalStructure2.gif" ALT="LST - Cursor - Add B" BORDER=0 height=247 width=431></center>

<hr WIDTH="100%">
<br><b><font face="Arial,Helvetica">Description</font></b>
<p><font face="Arial,Helvetica">This diagram depicts a cursor (B) which
is based upon the root list (A). The cursor was created with a call to
lstOpenCursor(). This cursor contains a subset of items from the base list
because a filter function was provided. Cursors can be manipulated using
the same functions as a normal list and they are closed with a simple call
to lstClose().</font>
<p><font face="Arial,Helvetica">The pData in cursor items refer directly
to the corresponding item in the root list. Reference counters are increased
in the base list (A) and in each item. This prevents underlying data from
being deleted while a derived cursor is still in use.</font>
<p><b><font face="Arial,Helvetica">Related Functions</font></b>
<p><font face="Arial,Helvetica">lstOpenCursor</font>
<br>
<hr>
<center><a href="InternalStructure.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure3.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a>
<p>Page 2 of 9</center>

</body>
</html>
PK㰐\��qdoc/lst/InternalStructure3.gifnu�[���GIF89a����@��  @ � �@@@@�@�``@`�`���@������@������@������@����  @ � �    @  �  � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,��@��	H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�i�I�()�����
^�ds�M�5o��s�ω+�*�(ĞF["M���Ҧ#�BeJt�ȪV�J��q+ן^�f+v�əXe�-+�,ȕ,u�e�r�Ǹ�ʴK�ڏU���{��߾o	c�[��`�J�l@9'��x�,�����n]�4ƥ�MWL�� �ֆg�,�e��m������pa��H{���zu#�+�.k�NGǽ�����C�{���G�{��]uy��%�'}~}_��^�X|����7�?�~�1Uv߀���C�`Bsu�����|Fx_�ah����ᇮH�c��vQ�	bb��F݋�}V�}+�W"����b�U�a�"޸cu8�$l3&���,�x$b�u��rQi�K^Y��SjI��`R�$�a�e�=�蝏?���vcnGVq
��&LjF5�����&&	Տv�єlz�QX����mg����zg�D��cu�>Xh����CPK㰐\j��A{{doc/lst/InternalStructure3.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]">
   <title>LST - Cursor On Cursor - Add C</title>
</head>
<body bgcolor="#FFFFFF">

<center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Add C</font></font></b>
<hr WIDTH="100%">
<br><img SRC="InternalStructure3.gif" ALT="LST - Cursor On Cursor - Add C" BORDER=0 height=247 width=647>
<br>
<hr WIDTH="100%"></center>
<b><font face="Arial,Helvetica">Description</font></b>
<p><font face="Arial,Helvetica">This diagram depicts a cursor (C) which
is based upon another cursor (B). It shows how a list can be incrementally
reduced using calls to lstOpenCursor() with a filter function.</font>
<p><font face="Arial,Helvetica">Notice that the item (C1) is a direct reference
to the root list (A) even though the cursor is based upon (B).</font>
<p><b><font face="Arial,Helvetica">Symantics</font></b>
<p><font face="Arial,Helvetica">(B) and (C) are cursors.</font>
<p><font face="Arial,Helvetica">(C) is based upon (B).</font>
<p><font face="Arial,Helvetica">(B) is the base list for (C).</font>
<p><font face="Arial,Helvetica">(A) is the root list for (B) and (C).</font>
<p><font face="Arial,Helvetica">(A) is the base list for (B).</font>
<p><b><font face="Arial,Helvetica">Related Functions</font></b>
<p><font face="Arial,Helvetica">lstOpenCursor()</font>
<p>
<hr>
<center><a href="InternalStructure2.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure4.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a>
<p>Page 3 of 9</center>

</body>
</html>
PK㰐\Dq����doc/lst/InternalStructure4.gifnu�[���GIF89a�&��@��  @ � �@@@@�@�``@`�`���@������@������@������@����  @ � �    @  �  � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,�&@��	H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�y�ɓM�\��ʖ0��I��̚8o�ܙQ'ϖ>
mt(ɢF�D��#ӦP]� �iԪSR�i�*Ϯ��ӫY�`�NL�h[�lߢ�+�!ݺs�rTyW/�:��]*P�`��
PK㰐\h�i�doc/lst/InternalStructure4.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]">
   <title>LST - Cursor On Cursor - Add C2</title>
</head>
<body bgcolor="#FFFFFF">

<center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Add C2</font></font></b>
<br>
<hr WIDTH="100%">
<br><img SRC="InternalStructure4.gif" ALT="LST - Cursor On Cursor - Add C2" BORDER=0 height=294 width=652>
<br>
<hr WIDTH="100%"></center>
<b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">This diagram depicts what happens when
a new item (C2) is appended to a cursor list (C) using lstAppend().</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Notice that the item is appended to the
root list and a reference item is added to the cursor list. No intermediate
lists are affected.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">A call to lstGet on (C) while the current
item is (C2) would return the pData in (A5).</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">lstAppend, lstInsert, lstGet</font>
<br>
<hr>
<center><a href="InternalStructure3.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure5.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a>
<p>Page 4 of 9</center>

</body>
</html>
PK㰐\�''��doc/lst/InternalStructure5.gifnu�[���GIF89a�V��@��  @ � �@@@@�@�``@`�`���@������@������@������@����  @ � �    @  �  � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,�V@��	H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�I�ɓM�\�R�ʖ0��I��̚8o��yQ'O�>
ut�ȢF�D��#ӦM���S*ԡV=R�5f֫;�v@�lM�`s�=�v-ڶ��E)w.úvI��{P�^�%u�<��`�q
F�r1���3;�+W�e/�,٦BǏ:����d̜���th�#Uo����l�w_��]r��ǿ��
��8\���&O�x9T�W]C:����<�'5�@;L�X�g˻wO���o��Y��������y���7:��툂u�߀
��i�ԝ~�d`A�%�_��ڂ2�xfH݆�xׂ
W��ۑ� �+V�⋞�x"����2�h#�<�c���Ռ��h�H�(�zR��ޒ)y\CN�e[$*�Ceіە.n!��)��}D�%&A�GP�`� �d�Ie�́���xZħ�1xf�o�I�9
�ޟv��Y�PK㰐\r%':HHdoc/lst/InternalStructure5.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]">
   <title>LST - Cursor On Cursor - Add B3</title>
</head>
<body bgcolor="#FFFFFF">

<center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Add B3</font></font></b>
<br>
<hr WIDTH="100%">
<br><img SRC="InternalStructure5.gif" ALT="LST - Cursor On Cursor - Add B3" BORDER=0 height=342 width=649>
<br>
<hr WIDTH="100%"></center>
<b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">This diagram depicts what happens when
a new item (B3) is added to cursor list (B) which is also a base list (for
C).</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Notice that the addition of a new item
in a base list has no immediate affect on the derived list (C).</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">lstAppend, lstInsert</font>
<br>
<hr>
<center><a href="InternalStructure4.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure6.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a>
<p>Page 5 of 9</center>

</body>
</html>
PK㰐\N/�3��doc/lst/InternalStructure6.gifnu�[���GIF89a�Q��@��  @ � �@@@@�@�``@`�`���@������@������@������@����  @ � �    @  �  � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,�Q@��	H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�9�ɓM�\�R�ʖ0��I��̚8o��iQ'O�>
ut�ȢF�D��#ӦJ���S*ԡV=R�5f֫;�v@�lM�`Ϧ=�v-ڶ��E)w.úv����ޔ:��%�W�`��k|iXqJ�]���̕+ղ�N�lSac�w!�\Y���]I�|���So����l��]����-oſ��
�[����)o�y9X�iyC7:����U�K\��Z��z_9>�E��_��yaz�v�����r��e��Zs���"4g(Sw�H�h����C�9�Wp�1h�!y�`��^�$z�!�%
XbRea�߇+:�=��"��цc�PK㰐\��%��doc/lst/InternalStructure6.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]">
   <title>LST - Cursor On Cursor - Del B2</title>
</head>
<body bgcolor="#FFFFFF">

<center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Del B2</font></font></b>
<br>
<hr WIDTH="100%">
<br><img SRC="InternalStructure6.gif" ALT="LST - Cursor On Cursor - Del B2" BORDER=0 height=337 width=648>
<br>
<hr WIDTH="100%"></center>
<b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">This diagram depicts what happens when
an item (B2) is deleted.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Notice that the reference item (B2) is
removed immediatly. This causes the reference counter in (A4) to be reduced.
A delete flag is set in (A4) because there are still references to it and
deletion is delayed until all references are removed. (C) and (C1) are
oblivious to the delete.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Navigation is affected by (A4) being flagged
for delete. Navigation functions such as; lstFirst and lstNext will skip
(hide) any items which are flagged for delete. This prevents deleted items
from getting more references.</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">lstDelete</font>
<br>
<hr>
<center><a href="InternalStructure5.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure7.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a>
<p>Page 6 of 9</center>

</body>
</html>
PK㰐\κ[���doc/lst/InternalStructure7.gifnu�[���GIF89a����@��  @ � �@@@@�@�``@`�`���@������@������@������@����  @ � �    @  �  � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,��@��	H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�9�ɓM�\�R�ʖ0��I��̚8o��iQ'O�>
ut�ȢF�D��#ӦJ���S*ԡV=R�5f֫;�v@�lM�`Ϧ=�v-ڶ��E)w.úv����^�7���bY���XqJ�]���̕+ղ�N�X�c��	n�,��殣A>m���a�Qo����l��[����-oǿ��
��0����M.\7E��FO�{:I��Kw���󒻻���Q{���%/�or��;<�~��_�{��>u��!d�I���m�tހb%ZA&(��נ[f`}mx�_��Fᇁ����
�H�w���"D���/#s(�c����#_5��c��v�/�(�L6yԒN.eQ�Q��W!1Xe�
yx����H^V�y�eNb2&%CT
x�wBHPK㰐\�����doc/lst/InternalStructure7.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]">
   <title>LST - Cursor On Cursor - Add D</title>
</head>
<body bgcolor="#FFFFFF">

<center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Add D</font></font></b>
<br>
<hr WIDTH="100%">
<br><img SRC="InternalStructure7.gif" ALT="LST - Cursor On Cursor - Add D" BORDER=0 height=403 width=648>
<br>
<hr WIDTH="100%"></center>
<b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">This diagram depicts the creation of a
new cursor list (D)... the second one based on the root list (A).</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Reference counts are increased in (A),
(A2), and (A6).</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">The filter function for (D) was never presented
with (A4) as it is flagged for deletion.</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">lstOpenCursor</font>
<br>
<hr>
<center><a href="InternalStructure6.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure8.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a>
<p>Page 7 of 9</center>

</body>
</html>
PK㰐\l 8%

doc/lst/InternalStructure8.gifnu�[���GIF89a����@��  @ � �@@@@�@�``@`�`���@������@������@������@����  @ � �    @  �  � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,��@��	H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�9�ɓM�\����-c&|	N�͏*o��s�O�=�*�hC�FY"M�T!Ѧ"�B�*ujǪV�.�q+צX�b+v'ٲ%�6���"۶f�r<+w%]��P0�_�'�֝۠����0Iă��)آb��17��g���~m2i�lG�v8��j�DU��(��c�|qc&�{���!�֞]дD࿓+��{��0{$r�ΕkN��Xfi��h||y�ӳbM?8���	�˕?�5|���O;Y�]�pZ���]��g��A��B:ŠQ>(�F�����!�<u�ԇ]��mz]f"A��RO��蛌!������8��aWcI7��cR:���^F�7�B
E ��Q�P�d�X��[f�H]���Z�i�T�8��]Ue���&��5���d��ams���\v>� �ui�'����ʹ!w���o)"y'O�2�P�4v�ۣ6��7=%�����s���c���ƚҩfJ��B�*I��꫓��ʢ���lQ�
�,N�I�6���Wٺ��Y;"�]z��i�h��r��.��x/�$.aC�)�'�U)n��.��z�oZ����v���ڿLr*������""��:�!�_Q���i,Ʊa<�ȁq�n���ջ�}�2J,�$����ܞ��Vs|4ˌ3A�m�P���:�L ������M^t��;�b*����T�|��r]�a=�E��hF��s�ؘ��[v�sϷ��eѤ���|7���{��$GqWT���b�7���m�����C>���3���u�
hd�[>������w��Ў.���'��V�5���:Wv�껗%��=2�#���jh��Tv��S�n�ԷW��;����JV:���/>��+t��|�����	Ij��Gj�>���/���
<���Z���5@3�,T�s�:Ѐ�"HAT	�Q���8A"5p� aT�}P�(La�����pI�{�gH�PK㰐\��u��doc/lst/InternalStructure8.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]">
   <title>LST - Cursor On Cursor - Del B</title>
</head>
<body bgcolor="#FFFFFF">

<center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Del B</font></font></b>
<br>
<hr WIDTH="100%">
<br><img SRC="InternalStructure8.gif" ALT="LST - Cursor On Cursor - Del B" BORDER=0 height=403 width=648>
<br>
<hr WIDTH="100%"></center>
<b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">This diagram depicts the closing of list
(B) using the lstClose function.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Notice that no lists or items are actually
removed. The reference counter in (B) is decremented but it is not actually
closed because its reference count is still greater than zero. It is, in
effect, flagged for deletion.</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">lstClose</font>
<br>
<hr>
<center><a href="InternalStructure7.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure9.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a>
<p>Page 8 of 9</center>

</body>
</html>
PK㰐\�Y†kkdoc/lst/InternalStructure9.gifnu�[���GIF89a����@��  @ � �@@@@�@�``@`�`���@������@������@������@����  @ � �    @  �  � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,��@��	H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�Ir"��%SJ<	@�˔�b���0&8�8?6��s�Ξ@�PK㰐\�Jn2��doc/lst/InternalStructure9.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]">
   <title>LST - Cursor On Cursor - Del C</title>
</head>
<body bgcolor="#FFFFFF">

<center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=+1>Del C</font></font></b>
<hr WIDTH="100%">
<br><img SRC="InternalStructure9.gif" ALT="LST - Cursor On Cursor - Del C" BORDER=0 height=966 width=680>
<br>
<hr WIDTH="100%"></center>
<b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">This diagram depicts the state Before a
call to close list (C) and After it has been called.</font><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">Notice that lstClose on list (C)&nbsp;detected
that list (B)&nbsp;could be closed. Item (A4) was removed because it was
flagged for delete and had no more references to it.</font><font face="Arial,Helvetica"></font>
<p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font>
<p><font face="Arial,Helvetica">lstClose</font>
<p>
<hr>
<center><a href="InternalStructure8.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a>
<p>Page 9 of 9</center>

</body>
</html>
PK㰐\��T{��doc/lst/back.gifnu�[���GIF87a  �������������,  �8��p)@��8������mAi�hz
"A�p\��l��K�w����r�݌��	KM_�4E�Nd�Z�jU\��
K�y������罷�;�=�+Xyx�t�u&Rqr����g��0��)���~��!,�����B����
��	;PK㰐\%{����doc/lst/next.gifnu�[���GIF87a  �������������,  �8��p)@��8������mAi�hz
"A�p\��l��K�w��^ʷ+�Bu45yK`�)�:aT�ˮZ����r�Y3���°�����z�&��|b(8w}&�C���Z�H�0joBfI���������{.e,�����A����
��	;PK㰐\0m�\� � doc/index.htmlnuȯ��<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML XMLNS="http://www.w3.org/1999/xhtml">
<HEAD >
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
  <TITLE>unixODBC</TITLE>
  <META NAME="generator" CONTENT="SlickEdit">
  <!-- leave this for stats -->
  <LINK REL="stylesheet"
  HREF="style.css"
  TYPE="text/css" MEDIA="screen">
  <STYLE TYPE="text/css" MEDIA="screen">
  body { background: url("background.jpg"); }
  #page { background: url("body.jpg") repeat-y top; border: none; }
  #header { background: url("header.gif") no-repeat bottom center; }
  #footer { background: url("footer.jpg") no-repeat bottom; border: none;}
  #header { padding: 22px 30px 0px 30px; height: 56px; width: 690px; }
  </STYLE>
</HEAD>
  <BODY>
  <DIV ID="page">
    <DIV ID="header">
      <A HREF="http://www.unixodbc.org/"><IMG
                                                                  SRC="icon64.png"
                                                                  ALIGN="right"
                                                                  BORDER="0" HSPACE="0" VSPACE="0"></A> <H1>unixODBC</H1>
      <DIV CLASS="description">
        Standards compliant, open source, database connectivity for everyone.
      </DIV>
    </DIV>
    <DIV ID="content" CLASS="widecolumn">
      <DIV STYLE="text-align: center;">
        <SPAN
         STYLE="font-weight: bold;">
        Home
        </SPAN>
        | <A HREF="News.html">News</A> | <A
                                      HREF="Documentation.html">Documentation</A> | <A
                                      HREF="Drivers.html">Drivers</A> | <A
                                      HREF="Support.html">Support</A> | <A
                                      HREF="Downloads.html">Downloads</A>
      </DIV>
      <DIV CLASS="post" ID="post-68">
        <DIV CLASS="entrytext">
          <TABLE>
            <TR>
              <TD><H2>unixODBC is...</H2></TD>
              <TD><H2>News</H2></TD>
            </TR>
            <TR>
              <TD><BR>unixODBC is an implementation of the ODBC standard which is;
                <UL>
                  <LI>
                    open source
                  </LI>
                  <LI>
                    licensed under LGPL/GPL
                  </LI>
                  <LI>
                    community developed and community supported
                  </LI>
                  <LI>
                    proven with over a decade of active use/development
                  </LI>
                </UL>
              </TD>
              <TD>
                <HR STYLE="width: 100%; height: 2px;">
                <SPAN STYLE="color: rgb(192, 192, 192);">
                March 15th 2007
                </SPAN>
                <BR>
                <DIV STYLE="margin-left: 40px;">
                  New look for unixodbc.org
                <DIV STYLE="margin-left: 40px;">
                  The old web site was serving the project fine but it seemed 
                  like it was about time to make it all 'fresh'. We hope you 
                  find it more pleasing to use.
                </DIV>
                </DIV>
                <SPAN
                STYLE="color: rgb(192, 192, 192);">
                October 13th 2006
                </SPAN>
                <BR>
                <DIV STYLE="margin-left: 40px;">
                  2.2.12 Released<BR>
                </DIV>
                <A HREF="News.html"><SMALL>More...</A></TD>
            </TR>
            <TR>
              <TD><H2>Key features...</H2></TD>
              <TD><H2>Architecture</H2></TD>
            </TR>
            <TR>
              <TD STYLE="vertical-align: top;"><BR>
                <SPAN STYLE="font-weight: bold;">
                Software Development Kit
                </SPAN>
                (SDK) - Develop ODBC applications and drivers using the C 
                language and the unixODBC SDK.<BR> <BR>
                <SPAN STYLE="font-weight: bold;">
                Driver Manager
                </SPAN>
                (DM)&nbsp; - The unixODBC DM allows the end-User to switch data 
                sources without recompiling/linking application source code. The
                application does not have to be linked to a specific vendors 
                product.<BR> <BR>
                <SPAN STYLE="font-weight: bold;">
                Tools
                </SPAN>
                - unixODBC includes CrossPlatform command-line and GUI tools to 
                make working with ODBC easy.<BR>
              </TD>
              <TD STYLE="vertical-align: top;"><IMG ALIGN="LEFT"
                                                STYLE="width: 200px; height: 175px;" ALT="" SRC="Splash.png">
                <P>Applications typically 
                                                link with the unixODBC 
                                                Driver Manager (DM) which then 
                                                uses the appropriate Driver to 
                                                communicate with the data 
                                                source. The DM understands ODBC
                                                but relies on the Driver to 
                                                understand specifics of the data
                                                source.</P>
                <P>The Driver is typically provided by the data source 
                  Vendor. The Driver understands ODBC and the specifics of the
                  data source.</P>
              </TD>
            </TR>
          </TABLE>
          <BR>
          <TABLE CLASS =codebox>
            <TR>
              <TD
              STYLE="vertical-align: top; background-color: rgb(102, 102, 102); width: 33%;">
                <SPAN STYLE="font-weight: bold;">
                CrossPlatform<BR>
                <BR>
                </SPAN>
                Applications built using unixODBC are compatible with the 
                Microsoft implementation of ODBC. unixODBC is provided with all 
                majour Linux distributions. unixODBC has been ported to all 
                majour UNIX and UNIX-like platforms;<BR>
                
                <DIV STYLE="margin-left: 40px;">
                  - Linux, Solaris, SGI, etc<BR> 
                  - VMS, OS/2, etc<BR>
                </DIV>
              </TD>
              <TD
              STYLE="vertical-align: top; background-color: rgb(102, 102, 102); width: 33%;">
                <SPAN STYLE="font-weight: bold;">
                CrossDatabase
                </SPAN>
                <BR>
                <BR>
                unixODBC supports drivers from all majour database vendors including;<BR>
                <DIV STYLE="margin-left: 40px;">
                  - Oracle<BR>
                  - DB2<BR>
                  - Interbase<BR>
                  - Mimer<BR>
                  - MySQL<BR>
                  - others<BR>
                </DIV>
              </TD>
              <TD
              STYLE="vertical-align: top; background-color: rgb(102, 102, 102); width: 33%;">
                <SPAN STYLE="font-weight: bold;">
                License
                </SPAN>
                <BR>
                <BR>
                unixODBC was developed by the open source community and is provided under the LGPL and GPL licenses. Commercial applications can be developed using unixODBC without paying for a license or royalty. Free support is provided by the community. 
                </TD>
            </TR>
            <TR>
              <TD STYLE="vertical-align: top;"><A
                                                HREF="CrossPlatform.html">More...</A></TD>
              <TD STYLE="vertical-align: top;"><A
                                                HREF="CrossDatabase.html">More...</A></TD>
              <TD STYLE="vertical-align: top;"><A HREF="License.html">More...</A></TD>
            </TR>
          </TABLE>
          </TD>
          </TR>
          </TABLE>
          </P>
        </DIV>
      </DIV>
    </DIV>
    <DIV ID="footer">
      <P>
      --<BR>
      <A HREF=mailto:pharvey@peterharvey.org>Peter Harvey</A>
      </P>
    </DIV>
  </DIV>
  </BODY>
</HTML>

PK㰐\~�؏�doc/smallbook.gifnuȯ��GIF89a���������������������!�Made with GIMP!�
,B8����^\3�z�ހ�x�Q%h�) <l�a�:�L��
�� ��t���:���)�*��E�^;PK㰐\Bv3~��doc/unixODBC.gifnuȯ��GIF89a  ��������l����������!�NETSCAPE2.0!�Made with GIMP!�	,  ����Ig���ͷ��ԍ�$Y}R����/L�w��[������JB�CŒ�]�C�F�5��PK㰐\�T�//AUTHORSnu�[���Authors of unixODBC...

Peter Harvey <pharvey@codebydesign.com>
Nick Gorham <nick@easysoft.com>

The PostgreSQL Driver was modified from the standard PostgreSQL 
ODBC driver (http://www.postgresql.org)

The NNTP Driver as written by Ke Jin

The MySQL driver is a mirror from the MySQL folks.

Other contributors include 

Alex Hornby
Axel Reinhold
Alexander Mitin
Artiom Morozov
Arun K Desai
Bard Hustveit
Bill Bouma
Bill Medland
Bojnourdi Kaikavous
Brian Harris
Bruce A Mallett
Charles Morrison
Charles Overbeck
Chris Friesen
Christian Jullien
Christian Werner
Constantine Filin
Craig A Berry
Dave Berry
David Brown
Dmitriy Yusupov
Donnie Pinkston
Emile Heitor
Erik Lundqvist
Frediano Ziglio
Gary Bunting
Geoffrey Gowan
Greg Bentz
Heikki Linnakangas
Holger Bischoff
Holger Schurig
Honza Horak
Hristo Hristov
Hugh McMaster
Ian Ashley
James Dugal
Jan Cihlar
Jan Stanek
Jason Crummack
Jay Cai
Jay Q. Cai
Jay Van Vark
Jeff Garzik
Jean Louis Charton
Jens Schlegel
Jess Balint
Jim Ziegler
Joel W. Reed
John C. Rood
John L Miller
John Moreshead
Jon Kåre Hellan
Jon Pounder
Jon Willeke
Jürgen Pfeifer
Keith Woodard 
Lars Doelle
Manush Dodunekov
Markus Beth
Mark Chopping
Mark Hessling
Mark Vanderwiel
Martin Edlman
Martin Evans
Martin Hobbs
Martin Kittel
Martin Lacko
Max Khon
Michael Koch
Michael Vetter
Miloslav Marik
Mike Schultz
Mikko Vierula
Murad Nayal
Murray Todd Williams
Nikolai Afanasiev 
Ocke Janssen
Oded Comay
Ola Sundell 
Oren Nechushtan
Patrice Favre
Paul Richardson
Per Bengtsson
Per I. Mathisen
Petr Vandrovec
Pierangelo Masarati
Rafi Einstein
Ralf Fassel
Rick Flower
Richard Kettlewell
Ron Norman
Samuel Cote
Scot Loach
Scott Courtney
Shandy J. Brown
Simon Pepping
Stefan Radman
Steffen Dettmer
Steve Gilbert
Steve Langasek
Steven M. Schultz
Steven Reynolds
Stuart Coupe
Thomas Langen
Tim Roepken
Tomas Zellerin
Trond Eivind Glomsrød
Venu Anuganti
Zoltan Boszormenyi

If I have omitted anyone from this let me know and I will amend it ASAP.

I have removed the email address of the people on this list. If someone
wants to get in touch, mail me and I will pass it on.

Nick Gorham
PK㰐\��Ko_o_COPYINGnuȯ��          GNU LESSER GENERAL PUBLIC LICENSE
               Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
     59 Temple Place, Suite 330, Boston, MA  02111-1307  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 Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

                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 Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
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 and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
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 other code 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.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  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, whereas the latter must
be combined with the library in order to run.

          GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser 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 combine 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) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) 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.

    d) 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.

    e) 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 materials to be 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 with
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 Lesser 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
PK㰐\+J���#�#	ChangeLognu�[���10-Aug-2018
2.3.7

    * Fix for pkg-config file update on no linux platforms
    * Add W entry for GUI work
    * Various fixes for SQLBrowseConnect/W, SQLGetConnectAttr/W,and SQLSetConnectAttr/W
    * Fix buffer overflows in SQLConnect/W and refine behaviour of SQLGet/WritePrivateProfileString
    * SQLBrowseConnect/W allow disconnecting a started browse session after error
    * Add --with-stats-ftok-name configure option to allow the selection of a file name
      used to generate the IPC id when collecting stats. Default is the system odbc.ini file
    * Improve diag record handling with the behavior of Windows DM and export SQLCancelHandle
    * bug fix when SQLGetPrivateProfileString() is called to get a list of sections or a list of keys
    * Connection pooling: Fix liveness check for Unicode drivers

19-March-2018
2.3.6

    * Fix order of arguments in SQLWriteFileDSN.c, fix unwanted free() in iusql.c (CVE-2018-7485)
    * Add pkg-config files

2-Jan-2018
2.3.5

    * Add configure option --enable-setlibversion set mark the libs with VERS_3.52
      Linux only, so any driver built with the libs will work with closed source 
      DM's
    * Add persistent storage of isql command line history if readline() is used (thanks Axel)
    * Rename some local mutex functions to avoid name clashes
    * Assorted fixes (Thanks Markus * 2)
    * Fix regression in ini caching
    * Make SQLDrivers look in user as well as system odbcinst.ini for driver attributes
    * If in use, clear the ini cache when a write is done via SQLWritePrivateProfileString() so 
      the new value is read
    * Fix problem with pooling if the environment was released by the application
    * Add check for SQL_COLUMN_COUNT in SQLColAttribute
    * isql would not display long error messages. Fixed now.
    * Fix problem calling the driver to report errors if the error is from the DM and the driver 
      has not been called
    * SQLSetConnectAttrW crashes when attempting to set SQL_ATTR_LOGIN_TIMEOUT
    * Buffer overflow in unicode_to_ansi_copy() (CVE-2018-7409)
    * SQLDriverConnect with not-found FILEDSN causes crash
    * SQLGetDescRec with null name pointer causes crash
    * Connection string escaping does not work
    * SQLDriverConnect/W with very long driver name causes crash
    * Connection string with trailing empty value causes crash
    * Freeing explicitly allocated descriptor results in writing to freed memory
    * Buffer overflows and missing null checks in SQLConfigDataSource, SQLInstallDriverEx, and SQLWriteFileDSN
    * Statement enters incorrect state upon SQLExecDirectW returning SQL_NO_DATA
    * SQLBulkOperations fails to exit async state after success
    * SQLFreeStmt causes prepared statements in S1 or S2 to erroneously transition to S3
    * Buffer length fixes for SQLGetDiagField
    * SQLSetConnectAttrW and Unicode string pre-connect attributes do not work
    * SQLGetData and SQLSetPos async states are incorrect
    * Various string conversion and length issues in SQLColAttribute(s)
    * Missing buffer length check in SQLColAttribute(s)W
    * SQLGetStmtAttr state handling incorrect in S5, S6, and S7 (via SQLExtendedFetch)
    * SQLSetPos and SQLExtendedFetch state management fixes
    * SQLExecDirect/W erroneous transition to S1 upon error in S5
    * Async SQLGetData and SQLExecDirect/W fails to restore state upon cancellation
    * SQLFetchScroll cannot move cursor back into the rowset
    * SQLSetDescField doesn't adjust the length of the buffer when converting to unicode
    * SQLGetDescField/W and SQLSetDescField/W do not check for negative buffer lengths
    * SQLSetStmtAttrW SQL_ATTR_APP_PARAM_DESC and SQL_ATTR_APP_ROW_DESC does not accept null
    * SQLGetData async state reentrancy issues
    * SQLDriversW off-by-one in enumerating driver list
    * SQLPrimaryKeys does not pass length in characters to driver
    * SQLGetConnectAttr with string attributes truncates to half buffer length
    * SQLTransact with autocommit enabled erroneously changes statement state
    * SQLDataSources/W fails to reset list position upon end
    * SQLGetEnvAttr successfully returns unset SQL_ATTR_ODBC_VERSION
    * Lack of SQL_HANDLE_SENV support
    * SQLAllocEnv fails to set environment version correctly
    * SQLMoreResults with streamed output parameters returns unexpected HY010
    * Custom pre-connect pointer attributes are truncated to 32 bits
    * 08003 message should be "Connection not open"
    * SQL_ATTR_ACCESS_MODE set using SQLSetConnectOption/W before connecting does not persist after disconnecting
    * SQL_ATTR_AUTOCOMMIT incorrect default value before connecting
    * SQL_AUTOCOMMIT set using SQLSetConnectOption/W before connecting does not persist after disconnecting
    * SQLAllocHandle/SQLFreeHandle with invalid handle type should return SQL_INVALID_HANDLE
    * SQLAllocHandleStd not setting ODBC version correctly
    * SQLBindParameter does not ignore BufferLength for DAE parameters
    * SQLBindParameter does not ignore BufferLength for fixed-length parameters
    * SQLBindParameter returns "Invalid application buffer type" instead of " Program type out of range"
    * SQLCancel with 01S05 returned from driver should result in SQL_SUCCESS, not SQL_SUCCESS_WITH_INFO 
      (see https://msdn.microsoft.com/en-us/library/aa392708(v=vs.85).aspx )
    * SQLColAttribute/SQLColAttributes should return number of bytes needed for Unicode string when truncating
    * SQLColumnPrivileges/W differing error message precedence from Windows DM and order in ODBC spec
    * SQLColumns/W extraneous checks on null string's length
    * SQLCopyDesc does not copy descriptors across connections correctly
    * SQLDescribeParam extraneous checks for state
    * SQLDriverConnect/W adds extraneous DM prefix to diagnostic messages
    * SQLDriversW before ODBC version set returns incorrect SQLSTATE
    * SQLFetch in state S7 does not return error from DM
    * SQLFetchScroll missing check for SQL_FETCH_BOOKMARK
    * SQLForeignKeys/W missing check for null table names
    * SQLGetConnectAttr/W erroneously retrieves attributes with no default (SQL_ATTR_PACKET_SIZE, SQL_ATTR_QUIET_MODE)
    * SQLGetConnectAttr/W fails to get some set attributes before connecting
    * SQLGetConnectAttr/W fails to retrieve set attributes with no connection
    * SQLGetConnectAttrW returns incorrect value for SQL_ATTR_TRACE
    * SQLGetConnectOption/W cannot retrieve SQL_ODBC_CURSORS before connection
    * SQLGetConnectOption/W fails to retrieve SQL_LOGIN_TIMEOUT before connecting
    * SQLGetConnectOption/W fails to retrieve SQL_ATTR_ACCESS_MODE set with SQLSetConnectOption/W
    * SQLGetData and SQLSetPos async states are incorrect
    * SQLGetData missing check for cursor end indication; SQLSetCursorName/W fails to clear previous diagnostic records
    * SQLGetDiagField/W does not check record number for SQL_DIAG_ROW_COUNT and SQL_DIAG_DYNAMIC_FUNCTION_CODE
    * SQLGetDiagField/W missing check for negative buffer length for string fields
    * SQLGetDiagField/W inconsistent handling of statement-only diagnostic fields
    * SQLGetInstalledDrivers off-by-one length
    * SQLGetStmtOption various state handling issues
    * SQLSetConnectAttr/W SQL_ATTR_CURRENT_CATALOG extraneous check with error 24000
    * SQLSetConnectAttr/W does not prevent attempts to set ODBC 3.x statement attributes
    * SQLSetConnectAttr/W with null string attributes causes crash
    * SQLSetConnectOption passes SQL_ATTR_TRACEFILE to the driver
    * SQLSetConnectOption/W or SQLSetConnectAttr/W missing validity checks for SQL_ATTR_TXN_ISOLATION
    * SQLSetConnectOption/W setting SQL_ATTR_TRACEFILE to null results in different error
    * SQLSetCursorName/W missing checks for negative name length
    * SQLSetDescField/W missing check for negative SQL_DESC_COUNT
    * SQLSetParam missing various error checks for invalid data types and buffer 
    * SQLSetPos does not check for state S5
    * SQLSetPos missing checks in state S7
    * SQLSetScrollOptions various state handling issues
    * SQLSetStmtOption/W missing check for positive rowset sizes
    * SQLSpecialColumns/W error precedence differs from Windows DM
    * SQLSpecialColumns/W incorrect check for SQL_NTS string lengths
    * SQLStatisticsW uniqueness parameter missing validation
    * SQLTablePrivileges/W extraneous checks on null string's length
    * Various issues with SQLGetFunctions
    * Various string conversion and length issues in SQLColAttribute; missing buffer length check in SQLColAttributeW
    * As above, but for SQLColAttributes and SQLColAttributesW; incorrect check for SQL_COLUMN_COUNT
    * Setting SQL_ATTR_TRACEFILE to null value results in different error
    * check_target_type allows driver-specific C data types for ODBC < 3.8
    * fix empty SQL_DIAG_SERVER_NAME field in DM-supplied diag recs
    * fix differing behaviour for an empty string DSN in SQLConnect/W
    * Alter isql to return errors from SQLMoreResults
    * Handle case of building on mingw-w64

3rd-Aug-2015
2.3.4

    * Fix typo in the loading of the cursor lib, reports

	internal error, unexpected SHLIBEXT

2nd-Aug-2015
2.3.3

    * Reporting of logging state was broken in SQLGetConnectAttr
    * Fix incorrect text against HY007
    * Add -L option to isql to increase max column data display
    * Update automake toolset in svn
    * Add SQLFreeStmt( SQL_CLOSE ) function to SQLCancel
    * Allow SQL_NTS as a buffer length to SQLBindParameter
    * More manual pages for the tools
    * Fix buffer overrun returning long diagnostic from driver
    * Cross call between wide and ascii error reporting in the driver when needed
    * Fix some possible unchecked memory references after malloc
    * Prevent free( NULL ) in SQLGetDiagRecW
    * Add missing A->W conversion in SQLGetStmtOption
    * Allow iconv to convert strings into the driver with differing A and W lengthts (UTF)
    * SQLDataSourcesW takes buffer_lenghts as characters not bytes
    * Fix memory leak in SQLGetDiagRec
    * Allow setting custom non standard attributes via DMStmtAttr, format is:

        DMStmtAttr=[xxxx]=\yyy
        DMStmtAttr=[xxxx]={ssss}

        where xxxx = integer attribute to set, yyy is decimal numeric value and
        ssss is a string value

    * Add check in SQLGetData for null target value or negative buffer length
    * Fix memory leak when using the cursor lib
    * Catch incorrectly expanded SHLIBEXT
    * There was a bug in the ini caching, now fixed
    * More ODBC 3.80 additions (streaming parameters)
    * Check for NULL handle in __validate_xxx()
    * Avoid potential memory leak in SQLAllocStatement
    * Avoid buffer overflow via environment variamles
    * Fix some typos

8th-October-2013
2.3.2

    * The logging of WStrings was using the incorrect length in some cases
    * Pass SQLDescribeCol call to driver when in state 2 (not a cursor spec).
    * Pass SQLMoreResults call to driver when in state 2 (not a cursor spec).
      Both the last two changes are not as per the original book state table
      but allign with the current MS driver manager
    * The -e option to isql got lost somewhere. Back in now
    * Update install-sh
    * SQLCancel assumed that the DM was being built with thread support
    * Try and speed up SQLTransact and SQLEndTran operation
    * Add missing \ in Postgres7.1 Makefile
    * Correct some potential buffer overflows
    * Handle SQL_NEED_DATA from a SQLMoreResults 
    * Get the local charset via nl_langinfo(CODESET) when asking the DM to do ASCII-UNICODE conversions
    * Handle (and remove) leading spaces from ini entries
    * Fixed unicode conversion problems in SQLGetDiagField(W)
    * missing terminating null in iusql
    * add to the list of errno states that does not cause a create of the ini file
    * SQLSetConnactAttr() -> SQLSetConnectAttrW() was passing incorrect string length
    * Fix double free in SQLGetDiagFieldW
    * Fix Unicode/Ansi conversion problem in SQLGetDiagFieldW.c
    * Add support for Driver64 in SQLDriverConnectW
    * Add missing unicode setting when returning a connection to the pool
    * Tidy up leaking iconv handles if connect_part_one fails
    * Fix (and avoid) some out of memory problems
    * Wrap lt_dlinit and dlerror in the lib mutex
    * Add slencheck executable to try and find the sizeof(SQLLEN) from a installed driver
    * SQL_NO_DATA after SQL_STILL_EXECUTING in SQLExtendedFetch was not setting the state correctly
    * A little more 3.80 stuff being added
    * Added fixes found by coverity
    * Added man pages
    * Patches to update VMS build
    * Change mutex protection around release_env
    * Altered strlen to be count of bytes in SQLGetDiagFieldW
    * Add check for W function support in do_attr
    * Allow SQLDrivers to return attribute length with no supplied buffer

26th-November-2011
2.3.1
    
    * Change type definition of a integer in SQLConnect.c, just to avoid
      confusion
    * Allow setting the DM overrive values in the connection string to SQLDriverConnect
      for example
      "DRIVER={Easysoft ODBC-SQL Server};Server=myserver;UID=user;PWD=pass;DMStmtAttr=SQL_QUERY_TIMEOUT=10;"
    * Error and info message order was being inverted by the driver manager
    * Fix memory leak in SQLDriverConnect.c (Thanks JM)
    * The keyword matching for DRIVER=, DSN= etc was case sensitive. Make it insensitive now
    * Avoid sprintf NULL pointer problem in SQLGetDiagRec
    * Fix typo affecting the pooling of connections, (thanks Chris)
    * Fix SunCC _mcount problem
    * Attempt to stamp version info on the libs generated. There are aps in use linked against other 
      driver managers that expect VERS_3.52
    * Fix potential buffer overrun when using SAFEFILE
    * Fix mutex problem in the exit from __SQLGetInfo (thanks Richard)
    * Allow getting SQL_DM_VER via SQLGetInfo before connecting to a driver
    * Generate unixodbc_conf.h using macros to allow cross compiling
    * Fix some libltdl problems 
    * Fix some naming problems with the cursor lib
    * Fix odbcinst problems on systems without pwd.h
    * Change lib version to 2 to reflect SQLLEN changes in v2.3
    * Fix threading problem (thanks Petr Vandrovec)
    * Allow use of lib name in a DRIVER= connection string
    * Change default threading protection to 0, most drivers should be thread
      safe by now. If the driver is at all thread safe, allow SQLCancel to bipass the
      interlock.
    * Performance change to handle large numbers of connection and statement handles better.
      Thanks for the change from the folks at Acision.
    * Add -k option to isql to treat the DSN as a connection string and use SQLDriverConnect
        isql -k "DSN=server;UID=test;PWD=test"
    * Couple of the SQLSetConnactAttr values are now SQLULEN instead of SQLUINTEGER
    * SQLSetConnectAttr was passing a char length instead of a byte length into the 
      Driver SQLSetConnectAttr when converting from Ansi->Unicode
    * Driver version was not being held when a second connection was made to the driver

20th-April-2010
2.3.0

	* Try and rationalise the way the connection process find the driver
	  version and supported functions
	* Sort out problem in isql with blank lines
	* Stop libthread from being used under AIX
	* Move the GUI parts off into a new project
		http://sourceforge.net/projects/unixodbc-gui-qt/
	* Strip out the GUI parts. I have also removed the spec files
	  as they will need redoing,
	* Move the Test parts off into a new project
		http://sourceforge.net/projects/unixodbc-test/
	* Add interface into odbcinstQ to allow for a dialog if SQLDriverConnect
	  is called without a DSN= (as the MS spec)
	* Allow the setting of a default Threading level in the ODBC section
          of odbcinst.ini
        * Change double format string in Postgre7.1 driver
	* Add missing CR to output of odbcinst
	* add fixes to MiniSQL driver
	* Add missing .y in nn driver, now I need to get it to work
    * Assoured bux fixes and format problems, thanks Tom
	* SQLBindCol on metadata calls was incorrectly going via the cursor lib if it 
	  was enabled
	* fix isql problem with nested definitions.
	* Add configure option to enable building of driver config libs
	* Shift build to using config.h, the compile lines were so big it was hard to 
	  see warnings
	* Fix bug in isql when using -b option.
    * Check attribute values when setting connection and statement attrs
    * Check for valid pointers in SQLGetInfo(W) and SQLGetFunctions
    * Add extra checks for states in SQLCopyDesc
    * Add --enable-stricterror option to allow compliance with the error reporting
      definition, driver errors don't have the unixODBC prefix
    * Check for statements in the NEED_DATA state when calling SQLEndTran
    * Extra error check for SQLPutData
    * Check handle type in SQLEndTran
    * Prevent seg fault if there are no driver error functions
    * the -n option to isql was not working correctly
    * Stripped out all the bespoke LDTL configure stull, not just what libtoolize 
      provides
    * Fix problem where ansi_to_unicode_alloc didn't leave space for the NULL
      and could cause memory corruption
    * Add the ODBC 3.80 additions that MS have produced. I am sure I remember 
      the standard being given to XOpen, what do I know :-)
    * Change the file open mode for the ini file from w to w+ just in case the 
      original open failed but the file did exist
    * Fix configure problem preventing the CHAR encoding from being passed
    * Remove white spave from ini write, not all drivers use unixODBC ini functions 
      and can handle the spaces
    * Update config.guess to current GNU version including support for AIX6
    * Create SVN repository at sourceforge
    * Add cast to fix problem in SQLSetConnectOption
    * Fix SQLINTEGER<->SQLLEN conversion broblem in SQLNativeSQL
    * Fix bug that stopped setting SQL_ATTR_CONCURRENCY to SQL_CONCUR_VALUES
    * Change minor version number because of the SQLLEN change
    * Remove unintended trailing white space from log generation


19th-Nov-2008
2.2.14

	* missing protype in 2.2.13 made the build fail on some platforms

18th-Nov-2008
2.2.13

	* There was a mutex around iconv that needed adding. Without this, 
 	  there was a potential thread problem
	* Fix problem with SQLGetDiagRec/Field returning double driver 
	  errors
	* odbctest was using the wrong handle for SQLGetConnectOption
	* remove startup thread race condition
	* fix descriptor memory leak with UNICODE only drivers (thanks Ian)
	* Alter the default 64bit build mode, and change the flag to 
	  BUILD_LEGACY_64_BIT_MODE
	* Fix a couple of 64bit problems
	* create unixodbc_conf.h on install to contain compile settings
	* Allow the GUI parts to build with qt4
	* try and deal with drivers that call internal W functions and 
	  end up in the driver manager (informix for example). Enabled
	  by --enable-handlemap=yes when configuring
	* Fix leak of iconv handles
	* Allow the setup API to call through to the wide driver functions
	* Fix potential seg fault in SQLGetPrivateProfileString
	* Fix a couple of broken casts, and some MS 64bit changes
	* Add check for postgres driver getting into a spin wait
	* Fix logging that reported the setting of env attrs failing
	* Add isql option to wrap strings with quotes
	* Add isql option -3 to make isql use ODBC 3 calls instead of 2
	* Add timestamp to logging output
	* Pull any errors from driver whern SQLBrowseConnect returns SQL_NEED_DATA
	* isql now displays any warnings from SQLMoreResults
	* Add include path to odbc_config --cflags output
	* Fix some SQLLEN/SQLINTEGER conflicts in the cursor lib
	* isql now checks if the driver has SQLMoreResults before calling it
	* A couple of tweeks in the txt driver
	* Fix More than 1 log msg relevant in odbcinst now
	* Changed UI plugin technique for odbcinst see... 
	  ODBCConfig > main.cpp, and 
	  odbcinst > SQLManageDataSources.c and 
	  odbcinstQ4 > SQLManageDataSources.cpp 
	* Add more 64 bit changes, remove SQLROWCOUNT and its frends from 64 bit
	  land
	* Couple of descriptor typo's fixed (Thanks Jess)
	* Add odbcinstQ4 to support pure Qt4 SQLCreateDataSource and 
	  SQLManageDataSources
	* Add ODBCCreateDataSourceQ4 as Qt4 based exec to SQLCreateDataSource
	* Add ODBCManageDataSourcesQ4 as Qt4 based exec to SQLManageDataSources
	* Add "-c" option to odbcinst to call SQLCreateDataSource
	* Add "-m" option to odbcinst to call SQLManageDataSources
	* Add ODBCDataManagerQ4 
	* Add Wrappers (C++, QtCore 4, QtGui 4 - thin wrappers to ODBC)
	* Add more complete set of driver config options to GUI config
	* Fix incorrect export file in odbcinstQ
	* Added some extra features to isql (thanks to Ron Norman for the
          ideas)
	* Add diag support lib for driver development  and possibly DM
	  This is very 'black-boxed' on purpose.
	* Fix Replaced diag code in txt driver to use new diag lib.
	* Add New odbctrac library.
	* Add Threading can not be config via Qt(4) based GUI
	* Add New ODBCString library.
	* Add odbcinst.ini -> ODBC -> TraceLibrary and corresponding GUI Qt(4)
	  config.
	* prevent the cursor lib from seg faulting if the query isn't a select
	* Add SQLULEN size display to the output of odbcinst -j
	* Add mutexes in odbcinst/_logging.c
	* Remove the MySQL Driver, its woefully out of date now
	* Remove incorrect path in vms_odbc.opt
	* rename trace.h to odbctrace.h to avoid potential name conflicts 
	  and move to include dir
	* update unixODBC.spec file
	* Add README.CYGWIN
	* Fix build problem with QT4 without QWizard support
	* Alter how the Ansi-Unicode mapping is done, so a unicode function can be 
	  passed to the driver (if it supports it) even if a non unicode connect was done
	* Fix buffer overrun in SQLDriverConnectW and SQLColAttributesW
	* I have cut back on a lot of the GUI parts that are being added. The goal is to
	  create a distinct set of files that contains these and other parts that are
	  not part of the core goal of providing ODBC. Likewise the drivers will go on the 
	  next release, as most DB's now have their own folk working on their drivers
	  and they all interoperate with unixODBC so its just adding confusion including them
	  here (IMHO that is)
	* Prevent a potential buffer overrun in the DM
	* The processing of --enable-rtldgroup had been dropped, back now
	* Allow the cursor lib to handle multiple result sets


13th-Oct-2006
Release 2.2.12
	
	* Add missing SQLSetStmtOptionA and SQLSetStmtOptionW 
	* The config string being passed into ConfigDsn was wrong, removed 
	  semicolon, and added terminating double null
	* Add help help to isql
	* Couple of changes to make the build on OSX work better
	* Alter odbctest FullConnect to use SQLDriverConnect 
	* Replace a missed flag for true 64 bit operation
	* Add ODBC3<->ODBC2 type mapping in SQLSetParam
	* Add missing SQLSetStmtOptionW.c
	* Tidy up the search for GUI lib code in SQLManageDatasource
	* Backport a couple of changes from the Debian build into the 
	  cursor lib
	* Add extra config settings to the MaxDB/SapDB setup lib
	* Fix possible exit from SQLConnect without having closed
	  in the driver
	* Fix configure problem on Tru64
	* Fix a build issue on Sinix
	* Allow calling metadata functions via the cursor lib
	* Alter args to SQLParamOptions
	* Fix bug preventing attribute length from being returned from 
	  SQLDrivers
	* Fix broken iusql
	* SQLTransact via the cursor lib has the args swapped
	* Remove leak in the postgres driver (error messages were not being
	  released), and yet a different leak in convert.c
	* Add code to allow the Cursor lib to call SQLGetDiagRec
	* Updated libtool, automake and autoconf, so expect problems
	  for the next few months...
	* Add new QT detection macros (Thanks Peter)
	* Removed some unneeded strlen's from the postgres drivers
	* Small change to the logging in SQLBrowseConnect
	* Add additional SQLGetInfo value SQL_ATTR_DRIVER_THREADING (1028) that
	  returns a SQL_USMALLINT containing the level of thread protection
	  afforded the driver by the driver manager
	* Fix small bug that prevents SQLDrivers from returning the first entry if
	  SQL_FETCH_FIRST is not used
	* Make DataManagerII check the DB's quote char when creating SQL
	* The cursor lib wasn't correctly returning the last rowset 
	* Fix problem with the cursor lib, rowsets and SQLExtendedFetch
	* Fix couple of spelling mistakes in isql
	* Allow decoupling of SQLHANDLES between application and driver, there is 
	  a 64bit DB2 where the driver handles are int's but unixODBC uses void *.
	  There is a define for DRV_SQLHANDLE in DriverManager/drivermanager.h that
	  allows this choice at build time
	* Add a few extra checks for only unicode API's from the driver
	* Check for existance of qt-mt lib before adding to link line
	* added missing cleanup in Postgres driver
	* Added a contrib directory with (so far) a new ODBCConfig and ODBCStats 
	  apps, (Thanks Fizz for those).
	* Ask the driver when there are no errors left in the DM's store
	* Add a couple of unicode fixes suppled by Oracle
	* Small fix for call to SQLGetDiagField
	* Fix silly typo that was using sizeof( SQL_WCHAR ) instead of SQLWCHAR
	* Add check for C_TYPE in SQLBindCol, SQLBindParameter, SQLBindParam, 
	  and SQLGetData
	* Fix overflow if the LOG_MESSAGE_LENGTH is increased
	* Save the last arg for SQLSetConnectAttr if called before connection for 
	  later passing to driver
	* Fix missing mutex release in SQLFreeHandle (thanks Mark)
	* Add missing maps from unicode in SQLSetDescFieldW and SQLSetStmtAttrW
	* Handle resetting statement descriptors to implicit values, 
	  by passing in NULL or the implicit descrptor  to SQLSetStmtAttr with 
	  the attribute SQL_ATTR_APP_PARAM_DESC or SQL_ATTR_APP_ROW_DESC
	* Avoid calling SQLGetInfo for every SQLEndTran/SQLTransact
	* Remove inconsistency in the return value from SQLGetPrivateProfileString
	* Fix broken QT_VERSION detection
	* Add UNICODE wrapper functions in libodbcinst. The ini file is still ascii, so
	  its not got full support at the moment, but any apps that need the W functions
	  should build now
	* Add GUI support for SQLCreateDataSource
	* More informative error message if a invalid handle is passed to SQLAllocHandle
	* Add TIMESTAMP_NO_TMZONE to Postgres drivers types
	* The ANSI to UNICODE mapping in SQLTablePrivilges was broken
	* Fix incorrect buffer length in SQLGetInfo when calling unicode drivers

4-March-2005
Release 2.2.11
	
	* Fix a couple of typo errors in postgres driver and odbctest
    * Fix problem where ini files could be truncated under heavy
      load
    * Fix potential hang with FILEDSN's if the connect string included 
      a DSN= entry as well
    * Don't save the SAVEFILE attribute in the filedsn.
    * Fixed bug that prevented the setting of some attributes via the 
      DMConnAttr method
    * Removed the -module entry from the cursor lib, it prevents it
      building on HPUX.
    * Add a couple of extra info types to the pull down in odbctest
    * SQLGetInfoW was returning the wrong length when converting from 
      the ANSI call. The same was also going on the other way. Also
      fixed same thing for other calls.
    * Fix incorrect value in SQLFetchScroll in odbctest
    * Fix memory leak in odbcinstQ
    * Check for MOC being found, before building GUI parts
    * Add list of export symbols to libodbcinst
    * Fix a problem in the cursor lib returning blobs
    * SQL_DIAG_NUMBER was being stored and returned as a SQLINTEGER 
      instead of a SQLRETURN
    * Check if we can include sys/stats.h in iniOpen.c
    * Fix potential buffer overun in SQLConfigDataSource()
    * Fix problem in odbctest that prevented intervals from being displayed.
    * Cope with SHLIBEXT not being set when finding the cursor lib
    * Add a couple of missing Setup64 checks
    * Small change in __info to conserve memory
    * Add odbcinst.exp to distrib
	* Add missing ODBC2 installer stubs
	* Fix typo in SQLStatistics
	* Not passing user names and password into isql passes NULLS not empty 
	  strings into SQLConnect
	* Add missing SQLPrepareA from the driver manager export file
	* Make the default for DontDLClose 1, it doesn't do any harm, and fixes
	  some segfaults
	* Fix printf format in the postgres driver on 64 platforms

29-Sep-2004
Release 2.2.10

    * Add additional check in sqltypes.h to detect AIX 64 bit
    * Fixed minor copypaste error in configure.in
    * Fixed problem in configure script that prevented it using the 
      qt-header and qt-lib config args. And allow the QT bin dir 
      to be set.
    * Add new spec file (Thanks Stefan)
    * Alter string initialisation in isql to reduce memory use on 
      some platforms
    * Remove the parts of odbcinstext.h that only are needed in 
      unixODBC builds from outside app builds. (Cheers Stefan)
    * Small fix to DataManagerII
    * Protect iconv handle in threaded environments
    * Extend cursor lib to cope with where clauses
    * Remove incorrect duplicate function in iniOpen.c
    * Strip FILEDSN from connection string before passing to driver
    * If using a cursor lib use "IS NULL" instead of binding nulls
    * Allow 32 and 64 installations to coexist using a Driver64 entry
      in odbcinst.ini
    * Fix uninitialsed value that was causing "Driver does not support 
      the requested version" warning
    * Fix typo in sqltypes.h that failed when building Perl DBD::ODBC
    * INI cacheing is not on by default, it can lead to a memory leak
    * Alter the Makefile.am's so builds outside the config dir can be
      done
    * Fix possible buffer overrun in SQLConnect
    * Replaced crypt auth in postgres with md5 for 7.1 Postgres driver
    * Fix memory leak in descriptor thread support

24-Jun-2004
Release 2.2.9

    * Fix problem so that if SQLGetPrivateProfileString fails because 
      odbcinst.ini doesn't exist, it copys the default value into the
      output.
    * Avoid caling SQLFreeEnv the driver more than once.
    * Rename lo_xxx func in Postgres driver(s) to avoid clash with
      postgres lib.
    * Add odbc-config to find compile time options for use with
      other build tools
    * Fix call to SQLParamData in cursor lib
    * Add SQL_NULL_DESC to include files
    * Remove -M for unixware builds from libtool
    * Fix descriptor bug in SQLCopyDesc (Thanks Erik)
    * Add extra iconv targets
    * Fix bug that stopped RTLD_GROUP from being added to dlopen
    * Remove mem leak if libodbc.so is loaded using dlopen instead of
      linked as is normally done.
    * Add check for LP64 in sqltypes.h
    * Remove dlclose from ODBCConfig
    * Fix typo in the readline detection in configure
    * Fix potential hang with semaphore allocation in driver manager
    * Alter how the state is set after a SQLParamData to S5 insted of S4
    * Stop the driver manager from calling SQLFreeEnv twice in the driver
    * Add new MySQL source from MyODBC 3.51.07
    * Update the uo_fopen functions
    * Add some extra mutex locks around end_tran code.
    * Alter the flag to build real 64 bit mode to 
      BUILD_REAL_64_BIT_MODE
    * Update a couple of prototypes for 64 bit builds
    * Fix assorted 64 bit warnings and cast issues

17-Feb-2004    
Release 2.2.8
    
    * Fix bug in SQLMoreResults that moves to incorrect state
    * Fix problem where metadata calls fail if in STATE_S5
    * Fix bug inserting ini entry with more than one '='
    * Fix some stupid leaks in the connection pooling code
    * Allow the driver manager to probe a pooled connection, to
      see if its valid. Set the query to use in the odbcinst.ini entry
      by setting CPProbe = SQL, for example this works well for postgres

        [PostgreSQL]
        Description		    = Postgres SQL Driver
        Driver		        = /usr/local/lib/libodbcpsql.so.2.0.0
        Setup		        = /usr/local/lib/libodbcpsqlS.so
        CPTimeout		    = 1000
        CPTimeToLive		= 100
        CPProbe             = select user
        FileUsage		    = 1
        DisableGetFunctions	= 0
        DontDLCLose		    = 1

    * Fix the SQLGetPrivateProfile code when passing NULL sections or
      names.
    * Fix SQLGetData to avoid a problem returning unicode from ODBC2 
      drivers.
    * Make the header sqlext.h include the unicode header sqlucode.h. This
      matches the MS header files.
    * Added DriverConfig lib for Mimer. (From Mimer)
    * Make connection pooling check using SQLGetConnectOption as well
      as Attr
    * Fix leak if iconv is used and a connection fails
    * Add configure option to disable the use of readline in isql

02-Dec-2003
Release 2.2.7
    
    * Add missing comma in Oracle setup lib
    * Add -l option to isql to allow setting locale
    * Fix problem in SQLDriverConnectW that prevented connecting to 
      UNICODE driver.
    * Remove a couple of the attribute mappings from SQLColAttribute
      when going from V2 app to V3 driver. 
    * Clear SQLError errors in the same was as SQLGetDiagRec (this
      will help PHP out somewhat).
    * Add a check to handle driver that don't support SQLGetEnvAttr
    * Allow ATTR; in set attr lists from ini file
    * Small change to warning dialogs in odbctest (Thanks Mark).
    * Fix the cursor lib to work via SQLFetch as well as the other
      fetches.
    * Update the README.OSX file to cover building the cursor lib.
    * Remove the SQLNumResults() call after a execute. This means the
      DM doesn't know if there is a result set, but it seems to match
      what the MS one is doing.
    * Fix a major mistake in the thread protection, it worked fine until
      the driver returned a error.
    * Fix write beyond string bound in SQLDriverConnect.c (Thanks Ocke)
    * Add call to setlocale( LC_ALL, "" ) in isql.c, can also be set using 
      -l option
    * Add initial support for Microsoft Interix, details in README.INTERIX
    * small change to ODBCConfig to have the password field in the driver 
      properties hide the password
    * Make both # and ; comments in ini files
    * Update README.OSX to cover changing driver libs into bundles
    * Fix a couple of small display problems in odbctest
    * minor updates to odbctest:
        Have the gui list match the input order and the ini file
        Restore the selection after Add/Remove
    * Expand a text buffer to avoid overflow
    * Add RTLD_MEMBER to dlopen args if available (AIX)
    * Fix bug in SQLWritePrivateProfileString

21-July-2003
Release 2.2.6
    
    * Add SQL...A() functions as well as W
    * Add some 64 Bit changes
    * Add support for SQL_BIGINT in Postgre7.1 driver
    * Fix bug in libtool that fixes a call to access
    * Allow setting of odbcinstQ lib load with either
      environment variable ODBCINSTQ or in the [ODBC] section
      of odbcinst.ini with a odbcinstq = /path/to/libodbcinstQ.so
    * Alter the way SQLDataSources works (again :-)
    * Add configure option to force the way dlopen works
    * Fix bug in stats collection 
    * Add call to endpwent() to avoid a small leak
    * Allow isql to handle SQLMoreResults
    * Add option TracePid in [ODBC] section of odbcinst.ini, setting
      this makes the DM treat the TracePath as a path to a directory, 
      and creates seperate log file for eack PID in use, mainly of
      use when used under something like apache.
    * Add extra unicode string for Solaris, see README.SOLARIS
    * Sort error messages according to state (as per the spec)
    * Remove trailing \ from doc/Makefile.am
    * Fix memory corruption in postgres driver that caused table 
      creation under OpenOffice to fail
    * Tidy up gODBCconfig so it builds with current tools (or 
      so I hope).

26-Feb-2003
Release 2.2.5

    * On error from SQLMoreResult don't change to S1
    * Fix build problem with QT 3.1.1
    * Fix spelling of error message
    * Fix bug where multiple connections give ODBC version error
      (thanks Jay Cai)
    * Increase the TEXT_FIELD_SIZE in the PG drivers
    * Set output handle to NULL if SQLAllocHandle call fails
    * Return any errors from the drivers SQLAllocConnect
    * Update version of automake and autoconf used to produce
      distributions
    * rebuild libtools configure to work with new autoconf

24-January-2003
Release 2.2.4
    
    * Make the DM look in libdir for the cursor lib
    * Additions to DataManagerII
    * More thread safe issues and fixes
    * Fix uninitialised pointer in SQLDriverConnect.c
    * Fix memory leak in SQLGetDiagRec
    * Add missing SAG conformance SQLGetfo call in odbctest
    * Fix bug in SQLDriverConnect where warnings were not getting into
      the error stack
    * Add quotes to table names in DataManager
    * update the file "missing"
    * Add missing SQL_DECIMAL in logging conversions
    * VMS build changes... (Thanks Craig)
        * get caught up with changes since the original VMS port
        * follow the compiler warnings to fix myriad small nits throughout 
             the sources
        * change the handling of shareable images so they no longer need to 
             be placed in SYS$SHARE
        * improve the installation and set-up process
    * Make the cursor lib build without needing libodbc, it breaks on HPUX
    * Fix allocation problem in cursor lib
    * Fix potential seg fault in cursor lib, when bind is done with null 
      indicator
    * Update README.QNX to cope with QNX 6.2
    * Fix problem with flags to dlopen
    * Make the exit logging in the driver manager display unknown return 
      codes
    * Fix bug in driver manager where a SQLAllocHandle in the driver can
      cause a seg fault
    * Add -s option to isql to allow the input buffer size to be set
        i.e. isql -s32000 dsn
    * Update some of the autoconf scripts to handle RH 8
    * Add extra attrs to oracle setup lib
    * Allow DMEnvAttrs to be set in odbcinst.ini as well
    * Alter the way the config mode is stored, don't use putenv now, as 
      it causes trouble if the DM is unloaded. Also malloc the strings
      if the environment is set via the DM, to avoid the same problem
      with putenv. This caused a crash of OpenOffice on Solaris

23-August-2002

Release 2.2.3
    
    * fix bug in unicode_to_ansi_copy
    * DataManagerII was missed from the last release, sorry, I thought that it
      had been moved to DataManager.
    * DatamanagerII: Remove duplicate rows with drivers such as Postgres which 
      doesn't work as expected when getting lists of Schemas
    * Attempt to set permissions for the file dsn directory.
    * Fix bug with conversion of ODBC 2 values to SQL_C_WCHAR
    * Make the postgres drivers return a SQL State of 01000 for a warning,
      not 00000
    * Add option to isql (-x)  to specify a separator in hex (0x09 is V tab) 
      or octal (012)
    * Fix typo in pre 7.1 Postgres driver that broke bound timestamps
    * Fix what looks like a bug in the libtool dlopen wrapper, its fails
      to fail, when failing to load a lib.
    * Only call the ODBC 3 version of SQLGetFuctions if we have requested ODBC3
      some drivers (SAPDB) that return ODBC 3 API's only return this call if 
      the connect specified ODBC 3.
    * Check the attributes being passed into SQLSetConnectAttr, only pas into
      SQLSetConnectOption if they are ODBC 2 values. The same for SQLSetStmtAttr
    * Allow double clicks on dsn's to bring up the configure in ODBCConfig
    * Add extra thread checks for FreeBSD
    * Add check for SQL_NO_DATA in isql
    * Add code to make DM cope with SQL_NO_DATA from SQLExec(Direct)
    * Change UNICODE conversions, remove all inplace converts.
    * Add support for iconv for the UNICODE to ANSI conversions
    * Add code to make DM code with SQL_NO_DATA from SQLExec(Direct)
    * DBFIO: completed basic functionality (DBF file access library)
    * dbfio: completed basic functionality (test program for DBFIO) 
    * Add checks for usage counts for loaded libs
    * Replicate the way the MS DM only calls SQLAllocEnv on a driver once
    * Add fix from John L Miller for SQLEndTran and SQLTransact
    * Make it try and find a working iconv set of encodings
    * Small fix to SQLMoreResults from John L Miller
    * Alter error state return in SQLCloseCursor
    * Allow state 07009 to be mapped to S1002 or S1093 depending on the
      calling function
    * Fix major ineffiency with text fields and the Postgres drivers
    * Fix incorrect return state from SQLEndTran/SQLTransact
    * Make rowcount return a count of -1 if its returns a error
    * Further AIX linking tweeks

08-July-2002

Release 2.2.2
    
    * added -m option to isql
    * improved row count at end-of-result in isql
    * allow SQLColAttribute(s)(W) to be called with a column number of 0 
      to get the descriptor count
    * Remove -export-symbols from sample, it was causing some 
      problems on Solaris
    * Add DataManagerII, this is a updated version from Mark Vanderwiel
    * Update libtool to escape from AIX build problem
    * Add fix to avoid file handle limitations
    * Add more UNICODE changes, it looks like it is native 16 representation
      after all.  The old way (Fixed at BE) can be reproduced by defining UCS16BE
    * Add iusql, its just the same as isql but uses the wide functions
    * Couple of cast warnings cleaned up
    * Add change to libtool to clean up AIX build
    * Create README.AIX
    * Fix small bug in SQLDriverConnectW, I was allocating 1 byte two little
    * Fix typo in SQLConnect that wasn't allowing the driver manager to supply
      SQLFreeConnect for drivers that didn't support this.
    * Fix build on Caldera OpenUnix8 (not sure why anywone would want to
      go anywhere near this OS IMHO...)
    * Move DataManagerII to DataManager
    * Alter what comes back in the second field from SQLDataSources to be the
      description from the ODBCINST.INI entry, this matches what happens
      in with the windows DM.

23-Mar-2002

Release 2.2.1
    
    * odbcinst: now tries to auto create system odbc.ini
    * odbcinst: implemented -n, -l, -h for -q -s   
    * Add option to disable definition of windows types in sqltype.h
    * Fix small bug in ini uper case routines.
    * Added STMT and OPTION to MySQL driver setup
    * Added -j arg for odbcinst (shows INI file names)
    * Fixed seg fault bug in Text File driver
    * Fix small bug in SQLBrowseConnect
    * Fix check for Darwin (OSX)
    * Fix bug in sqltypes that stopped 64 bit builds
    * Fix build problem on 32 bit platforms without long long
    * Add option to set environment (unix) values via SQLSetEnv, 
      this can also be done in the odbc.ini, for example
      [sample]
      Description     = Test to DB2
      Driver          = DB2
      DMEnvAttr       = SQL_ATTR_UNIXODBC_ENVATTR={DB2INSTANCE=db2inst1}
    * Fix some cases where the trace file env value was "Trace File"
    * Make the readline check make sure there are headers as well as libs
    * Add check to use RTLD_GROUP in libltdl if present
    * change DWORD definition to unsigned long where applicable
    * Fix bug in error reporting that cound crash with multiple errors and ODBC3
    * Remove C++ comment from exe/odbcinst.c
    * If we are not building the drivers, dont build sqp
    * Alter default size of odbctest window
    * Improve check for stats headers
    * Add install-data-am section back to Makefile.am to create the 
      empty ini files
    * Extend naming of cursor lib to work on non linux platforms 
      (it expected a .so)
    * Make Postgres driver(s) handle {oj ... } syntax
    * Fix some endian issues with 4 byte unicode support
    * Update the MySQL driver code

30-Jan-2002

Release 2.2.0
    
    * Allow SQL_ATTR_LOGIN_TIMEOUT  to be set on a connected 
      connection doesn't make that much sense, but it mirrors 
      what the Windows DM does.
    * Change DWORD in sqltypes to be a unsigned int to work on 
      64 bit platforms
    * Fix incorrect diag message in SQLSetStmtOption.c
    * Hack to the 7.1 postgres driver to enable SQLPrepare
      to be called BEFORE SQLBindParameter
    * Reset the stmt->prepared flag when going into a SQLParamData
      state after SQLExecDirect
    * Fix silly bug that stops odbctest adding the fidt entry on 
      the list
    * Add missing tracing to SQLBrowseConnect
    * Fix some potential corruption in SQLGetDiagField
    * Add some simple cacheing to SQLGetPrivateProfileString
    * check for redefinition of SQL_OL_CAP to stop AIX build breaking
    * Add missing getGlobalDefaults in PG 7.1 driver (Thanks Rick)
    * Fix bug in SQLConnectW (Thanks Artiom)
    * More mods to SQLConnectW and SQLDriverConnectW
    * More MS generated 64bit changes
    * Add MyODBC 3.5 driver. Its a separate configure in Drivers/MySQL

Release 2.1.1

2001-12-21

    * started to add mac package/install dirs for PackageMaker
    * added qmake project files as an optional build process
    * ODBCConfig can build with a static odbcinstQ
    * Remove auto text driver setup, this breaks new installs as
      it can't find odbcinst
    * Fix mixup in SQLSetScrollOptions
    * Small portability fix for BSDI
    * Make UNIX Domain socket settable in postgres driver vua UDP=
      in odbc.ini dsn entry
    * Fix bug where some SQLGetConnectAttr values were not coming
      from the driver, but the driver manager
    * Alter odbctest to make directory select in Manage Auto Test
      work better
    * Fix browser in DataManager so that it works with drivers
      that don't return values from SQLRowCount
    * Fix some error retrieval problems
    * Alter the include files to match MS ODBC 3.52 with 64bit
      support, fix assorted warnings when building on 64bit 
      platforms
    * Add option to force tracing on, this is for use with apps like
      StarOffice that disable tracing
    * Add support for MAX_ROWS in postgres drivers
    * Add fix to cover Darwin 1.5 (OSX)
    * Add DisableGetFunctions option to driver section of odbcinst.ini
      to cope with drivers that can't handle the call (Solid 2.2 AFAIK)
    * Fix 64 bit bug in Postgres driver
    * Add some ODBC 3 bits to the Postgres driver to make it run with 
      Star Office 6.0 (beta)

Release 2.1.0

2001-11-27

    * cvs moved to Source Forge
    * attempts have been made to cleanup GNU auto-stuff to make the
      cvs code more accessable
      - added README.cvs
      - hopefully "make -f Makefile.cvs" works on more platforms
    * implemented more in SQLManageDataSources()
      - created odbcinstQ (plugin for Qt GUI support in odbcinst)
      - moved most code from ODBCConfig to odbcinstQ
    * stupid mistake on my part(Nick), left a #ifdef in isql.c that prevented
      displaying a list of tables
    * Make calls to localtime in Postgres Driver only when required
    * Made some changes to Postgres prototypes
    * Add option to get odbcinst info from stdin
    * Make SQLError errors clean down after each API call for ODBC 3
      apps
    * Add mapping from SQLColAttribute attributes to ODBC2 attributes
    * Fix reported leak in ltdl.c
    * Make the path for file DSN's come from the odbcinst.ini file
    * If using a ODBC 3 driver call the one off version of SQLGetFunctions
    * Now builds better on Darwin
    * Reinstate conversion from wide to ansi types in SQLGetData if the
      driver is ODBC2, also adjust the buffer length to prevent buffer
      overrun.
    * Stop ODBCConfig setting Trace File in odbcinst.ini it should be
      TraceFile
    
Release 2.0.10

2001-10-14

    * odbctxt : escape special chars when read/write lines into a table
    * Fix bug where a Execute that errors should return to state S2
    * Update README.OSX to cover a txt driver problem
    * Add Drivers/txt/doc to distribution
    * Add missing text driver setup from spec file
    * add missing VMS opt files
    * Add missing include <qmultilineedit.h> from DataManager
      (Samuel Cote)
    * Remove LT_GLOBAL from the libtool code. This breaks perl amongst 
      others.
    * Allow the display of unicode data in logs
    * Fix stupid WCHAR bug in SQLGetData
    * Move ifdef in __stats.c to allow the building of ODBCConfig under
      Mac OSX
    * Add missing args to prototype in sqlext.h (Thanks Christian)
    * Pass on unknown connection attributes to driver after connect
    * Make SQLGetPrivateProfileString return the actual len read, not + 2
    * Make the OSX build cleaner, it just needs the dlcompat lib now
    * Allow ODBCConfig to handle attributes not described in setup libs
    * Stop the ODBC Version being set when there are open connections
    * Alter odbcinst error messages to match windows
    * Fix incorrect installer errors (they were offset by one...)
    * Create ./odbc.ini if it doesn't exist
    * Fix typo that stoped odbctest from building on Suns latest
      compiler
    * Slightly alter the unicode definitions in sqltypes.h
    * Add support for FILEDSN in driver manager, odbcinst, and ODBCConfig
    * Fix buffer overrun in Postgres drivers

Release 2.0.9

2001-08-14

    * odbctxt: tweeked - now works on PowerPC
    * Add auto register for text driver to Makefile.am
    * Add check for flex, sqp won't build with lex now
    * odbctxtS: now supports CaseSensitive property
    * Add build time option to select wchar_t UNICODE (4 bytes)
      as opposed to signed short UNICODE (2 byte)
    * Add build time option to select the length of logged 
      strings (LOG_MESSAGE_LEN in drivermanager.h)
    * Fix libtool bug that caused the AIX build to not produce
      shared libs
    * Fix couple of typos that caused the build to fail on Solaris
    * Add conditional for 64 bit application compilation when the 
      sizeof(long) will not have been done by configure
    * Fix small bug in postgres driver on debian
    * Add build instruction for QNX
    * add Slovak translation of gODBCConfig
    * Fixes to SQLBrowseConnect in driver manager
    * Get the DM to check with the driver for the CLI Year
    * Fix small bug in strncasecmp in extras
    * Add extra support for SQLSetConnectAttr before connection
    * rename global structure in Postgres drivers to avoid a colision
    * Add support for presetting Env,Conn and Stmt attributes via the
      ini file using the following syntax in the dsn section of odbc.ini
        DMConnAttr = SQL_ATTR_CONNECTION_TIMEOUT=30
        DMStmtAttr = SQL_ATTR_NOSCAN=SQL_NOSCAN_OFF;*SQL_ROWSET_SIZE=20
      the * indicates thats its a override attribute, so any attempt to
      call SQLSetStmtAttr to set the rowsize, will always set it to 20
      in this example.

      NOTE: That at the moment, this information will be lost if ODBCConfig
      is used


Release 2.0.8 

2001-06-25

    * Add definition of alphasort and checks for location of dir.h in the txt
      driver.
    * Add some missing functions from cur lib
    * Fix a problem in configure.in that was loosing LIB settings
    * Remove C++ comment from sqlext.h
    * sqp: now makes use of check for NOT NULL in CREATE TABLE
    * sqp: fixed missing pointer assignment (affected CREATE TABLE)
    * sqp: added more debugging messages (but turned off by default)
    * odbctxt: removed long log message (would cause seg fault)
    * odbctxt: now appends a space to each SQL statement; this is to
      work around a problem in the sqp lexer when last char is close
      quote
    * Fixed a bug in the driver manager that would fail if the driver
      returned a max size error message
    * sqp: now makes use of IS NULL and IS NOT NULL
    * sqp: now makes use of INSERT INTO table(col1,...)
    * sqp: now makes use of LIKE and NOT LIKE (with optional ESCAPE)
    * sqp: now makes use of any mix of AND, OR, () in WHERE clause
    * sqp: now makes use of ? for column value (used in SQLBindParameter)
    * sqp: now makes use of integers for column values (just mapped to string)
    * odbctxt: basic implementation of SQLBindParameter (only SQL_C_CHAR input allowed)
    * odbctxt: new syntaxes of sqp parser taken into account
    * odbctxt: new option CaseSensitive (Yes or No) allowed in .odbc.ini file
    * odbctxt: fix message length returned in SQLGetDiagRec function
    * odbctxt: drop statement when freeing it via SQLFreeHandle
    * sqp: default string length changed to 255
    * Fix threading problem when multiple ENV's are in use

Release 2.0.7 Peter Harvey <pharvey@codebydesign.com> And
                Nick Gorham <nick@lurcher.org>

2001-06-06

    * ODBCConfig/DataManager: Updates for Qt 3.0
    * Add extra decoding of types in the log output
    * Fix some type problems for 64 bit platforms
    * Fix rogue logging in SQLGetInfo
    * Add correlation and alias to sqp
    * Add some fixes to the txt driver to enable it to work 
      with StarOffice
    * Stop Ctrl-D from Segfaulting isql
    * Add a example autotest to the build
    * Make isql detect the EOF when not using readline
    * Tidy up the libs from autoconf
    * DataManager: refinements such as; logout a DSN, isql history
    * sqp: CREATE TABLE now supports most data types and some column options
    * sqp: added DROP TABLE
    * sqp: added ORDER BY
    * sqp: enhanced api with sqpOpen, sqpClose...
    * odbctxt: checked in rewrite (much less code now)
    * odbctxtS: added setup lib for odbctxt
    * ODBCConfig: Stats now shows PIDs
    * Add missing -lpthread in configure (thanks Jon K�re Hellan)
    * Remove C++ comments from autotest.h
    * Fix big in Postgres7.1 with binding a column to a double
      (thanks J�rgen)
    * Update libtool to 1.4
    * Fix problem that looked like a restriction on the size of ini 
      files, but was actually a problem when the same section appeared
      twice in a file
    * Add VMS port (Thanks Jason)
    * Add extra PG7.1 numeric fix (Thanks Zoltan)
    * Add fix to PG7.1 to allow the retrieval of more than 8K
      blobs, adjust the define TEXT_FIELD_SIZE in psqlodbc.h
      (Thanks Bojnourdi)
    * Fix small typo in SQLConnect (Thanks Martin)
    * The postgres drivers didn't recognise "Yes" in the ini files,
      only 1 or 0, fixed now
    * Avoid "broken pipe" message with postgres (Thanks Gary)
    * Alter check if cursor lib needed with ODBC 3 apps
    * Fix couple of bugs with cursor lib
    * Get to build on Mac OS X (without GUI bits ATM) 
      look at README.OSX for help and hints
    * Fix for use with QT 3
    * Remove default trace option from ODBCINSTConstructProperties
    * Stop ODBCConfig from accepting null DSN names

Release 2.0.6 Nick Gorham <nick@lurcher.org>

2001-04-18
    
    * Add define for _THREAD_SAFE to help AIX builds
    * Fix bug in cursor lib introduced by UNICODE addon's
    * Make the header definitions work on 64 bit platforms
    * Fix a incorrect return from SQLConnect with pooling
    * Add support for unicode drivers that have ANSI functions 
      renamed to the unicode versions (duh!).
    * If pooling, then set the flag to not close the driver
      handle (DontDLClose)
    * Add CPTimeToLive option to restrict the number of times
      a driver will be reused (useful with leaky drivers)
    * Alter logging, and support setting logging via 
      SQLSetConnectAttr call
    * Add a AutoTest facility to odbctest
    * Fix incorrect error test in SQLBrowseConnect
    * Check descriptor is for a open connection
    * More unicode fixes

Release 2.0.5

2001-03-21 Nick Gorham <nick@lurcher.org>

    * Add extra autoconf checks for -pthread and -mt compiler
      options
    * Add Postgres7.1 tree for code from new postgres development
    * Fix retrieval of errors for SQLTables and SQLColumns call 
      in isql
    * Fix mem leak in DM if SQLDisconnect was called with open 
      statements or descriptors
    * Fix broken check if readline needs -lcurses
    * Add setup lib for SAPDB (thanks Holger Schurig)
    * Added locale fixes to PG7.1 driver (thanks Zoltan)
    * Fix configure problem on Solaris

Release 2.0.4

2001-02-02 Nick Gorham <nick@lurcher.org>

    * Changes to Postgres driver for operation with PG 7
      and locale changes (Zoltan Boszormenyi)
    * Fix problem with SQLSetConnectAttr and unicode 
      operation
    * Apply patch to DataManager from Christian.Werner which 
      fixes truncated query result rows, formatting errors in 
      HTML output, and adds a leading blank to each where 
      expression in order to prevent SQL syntax errors in 
      e.g. LIKE '..' or MATCHES '..'cases.
    * Add support for SQLDriverLoad and SQLDriverUnload functions

Release 2.0.3

2001-01-13 Peter Harvey <pharvey@codebydesign.com> and
    Nick Gorham <nick@lurcher.org>

    * sqp: added a yywrap() to eliminate link dependency
    * sqi: home dir default if no path with database file name
    * sqi: creates database file if not exists
    * ini: open fails if existing file appears not be an ini  
    * Fixed problem where null row status array could be 
      passed into SQLExtendedFetch
    * Fixed further bug in unicode_to_ansi 
      (thanks Martin Edlman)
    * Fixed bug in UNICODE converison in SQLGetInfo
    * Added sqi/test to build tree, its moved to exe
    * Add extra checks for readline to see if -lcurses is needed
    * Add check for -lpthreads that should be ok on Tru64
    * Replace printf with puts in isql to cope with columns
      containing '%'

Release 2.0.2

2001-01-08 Peter Harvey <pharvey@codebydesign.com>

    * ODBCConfig: Repurposed 'Tracing' tab. Now is 'Advanced'
      and contains both Tracing and Pooling options.
    * Fixed bug in __info that caused SQLGetDiagRec to fail

Release 2.0.1

2001-01-06 Nick Gorham <nick@lurcher.org> 

    * Fix bug introduced with UNICODE that corrupted the SQLSTATE
      from SQLError

Release 2.0.0

2001-01-04 Nick Gorham <nick@lurcher.org> 

    * Added table browse for DataManager
    * Fix problem in template driver with Solaris compiler
    * Add msql-include option to specify search path
    * Fix compile problem in MiniSQL code with Solaris compiler
    * Fix conditional include of strings.h in ODBCConfig build
    * Fix tracing in SQLConnect
    * Alter check for DSN length in SQLConnect
    * Validate input handle before setting output handle
    * Fix error code from SQLSpecialColumns and null table names
    * Fix potential deadlock in SQLFreeHandle
    * Add change to make the Postgres driver look for the
      local socket in two places to cope with debian distrib
    * Fiddle with the MiniSQL searching again
    * Add sqlucode.h to headers
    * Fix threaded race condition in __handles.c
    * Revamped Credits page in ODBCConfig.
    * Show more useful info in DataManager tree-view
    * Fixed problem with DataManager 'hanging' upon exit
    * Added -pthread option to gcc calls when needed
    * Now needs QT 2.2.x, changed configure to check
    * Add missing identifier_type in SQLSpecialColumns log
    * Add some checks for long columns in isql and DataManager
    * Add connection pooling support to driver manager
    * ODBCConfig; Code cleanup. Removed extra class layer 
      created by QtArch
    * ODBCConfig.Drivers.Config; driver specific options
      now accepted, if already exist in odbcinst.ini, as simple
      text fields in GUI
    * ODBCConfig and DataManager now attempt to save and restore
      state... such as window geometry.
    * ODBCConfig now supports connection pooling options.
    * ODBCConfig now has a Stats tab which is similar to CPU 
      or mem monitor. This will be improved upon and the code
      will likley make its way into a dock widget
    * Add UNICODE support
    * Disable the default building of static libs
    * Add support for GNU portable threads

Release 1.8.13

2000-11-14  Nick Gorham <nick@lurcher.org>

    * Add missing line continuation char in SQLGetDiagField.c
    * Add fix to SQLGetDiagField to return the server name on 
      statements and descriptors
    * Remove -lcrypt from all but the Postgres driver build
    * Remove CR/LF expansion in Postgres driver
    * odbctest was calling SQLPrimaryKeys when it should have been
      calling SQLTablePrivileges
    * Add SQL_DRIVER_HDESC support to SQLGetInfo
    * Add display of returned error text in log file
    * Take notice of DontDLClose when calling ConfigDataSource.
    * Fix duplicated log messages on failed connect
    * Fix incorrect arg to SQLError, change from SQLINTEGER to
      SQLSMALLINT (Thanks Ralf)
    * Updated libtool to 1.3.5
    * Fixed crash in SQLConnect when NULL server and SQL_NTS 
      passed in (Thanks Venu for the next four changes)
    * The error code mapping was wrong, it should only map 
      ODBC 3 errors to ODBC 2, not the other way around
    * Fixed a incorrect error return in SQLPrepare when a NULL
      string was passed 
    * Zero the handles when released, just to avoid reuse of
      values
    * Added readline support to isql, (thanks Tomas Zellerin)
    * Support the setting of SQL_AUTOCOMMIT before connecting
    * Fixed bug in odbctest's SQLColAttributes call
    * Add test in configure for localtime_r and use if present

2000-08-18  Nick Gorham <nick@lurcher.org>

Release 1.8.12

    * Fix typo in Postgres driver.
    * Add i18n support to the Postgres driver (thanks Zoltan)
    * Remove fix for Postgres driver and large objects, it
      breaks the SQLColumns call :-(

Release 1.8.11

2000-08-16  Nick Gorham <nick@lurcher.org>

    * Add --enable-fastvalidate option. This reduces the safety of the 
      handle checking but improves performance when using many handles
    * If SQLDriverConnect is called with a NULL con_str_in look for
      the DEFAULT DSN entry
    * Remove a underscore from odbcinst_system_file_path, it seem's to
      cause the linker on AIX to have problems
    * Remove some additional C++ comments from the postgres driver
    * Call SQLSetConfigMode before calling SQLConfigDataSource
    * Fix error handling in case of referential integrity violations
      in Postgres driver
    * Fix problem with SQLColAttributes swapping its args, and don't
      check the driver version before mapping to ODBC 3 values.
      (thanks Tomas)
    * Make SQLDescribeParam work in state S4 and above, when in ODBC 2
      mode
    * Avoid potential buffer overrun in __info.c when reporting errors
      from SQLConnect/SQLDriverConnect
    * Fix potential mem corruption in SQLGetDiagField (thanks Jay)
    * Add fix to allow the Postgres driver to receive large objects
      (thanks Bill)
    * Fix buffer overrun in SQLGetDiagField (thanks again Jay)
    * Fix for SQLGetDiagField(SQL_DIAG_SUBCLASS_ORIGIN) returning a null 
      string, it now returns something meaningful
    * The Postgres driver didn't shupdown the connection to the database
      before dropping the socket
    * Fix incorrect return from SQLDataSources
    * Make SQLDriverConnect return all errors from the driver not just 
      the first one
    * Add Oracle setup lib for http://www.easysoft.org/projects/oracle
    * Stop isql calling SQLFetch if the query doesn't generate a result
      set. This stops the function sequence error
    * Add missing break in postgres password authentication
    * Add fix in SQLTables for broken version of EXCEL
    * Fix a bug that caused SQLTransact to fail if called with a 
      connection handle in state C4. This caused Corel Paradox to fall 
      over

Release 1.8.10

2000-06-15  Nick Gorham <nick@lurcher.org>

    * Add some fixes to make it work and compile on IRIX (Murad)
    * Add a couple of missing casts in odbctest (Michael)
    * Fix BOOL bug in postgres driver (Dmitriy)
    * use setenv rather that putenv if available
    * Fix a couple of bugs in odbctest/attr.cpp
    * Fix problem where info warnings could be lost
    * Fix a couple of problems in the Postgres driver
    * Fix bug that caused a success with info message from SQLExecute 
      or SQLExecDirect to be lost if used with a ODBC 3 driver and 
      the application called SQLGetDiagRec
    * Fix problem where bookmarks were failing for StarOffice 5.2
    * Stop SQLDriverConnect dumping core when passed a null dsn string
    * Map ODBC 2 SQLSTATE values to ODBC 3
    * Add missing odbcconfig.h to the install include in gODBCConfig
    * Fix incorrect state from Postgres Driver
    * Fix integer length problem with SQLExtendedFetch that manifested
      on big endian platforms (Sparc,Aix,HPUX etc) (Alex)
    * Avoid clash with definition of CHAR in GNOME XML layer
    * odbctest SQLExtendedFetch was using the wrong orentation value
    * Add define for SQLTCHAR
    * Fix problem in setting tracing on, and a core dump when loading
      the cursor lib failed (Steve)

Release 1.8.9

2000-06-13  Nick Gorham <nick@lurcher.org>

    * Fix a State problem when coming out of a SQLParamData cycle
    * Fix bug where SQLBrowseConnect may leave a connection in C1
      not C2
    * Pass LOGIN_TIMEOUT onto driver if it is set before the connect
    * Reverse the test to set DIAG_CLASS_ORIGIN
    * Return SQL_DIAG_SERVER_NAME and SQL_DIAG_RETURNCODE
    * Allow explicit allocation of Descriptors
    * Fix a problem with the SQLFetchScroll -> SQLExtendedFetch
      mapping
    * Fix a problem in the MiniSQL Makefile.am
    * Call SQLSetConfigMode before calling ConfigDSN
    * Fix problem in SQLCopyDesc and complete case when DM does the
      work
    * Return SQL_SUCCESS_WITH_INFO messages from SQLConnect
    * Added MetaDataBlockFetch connection attribute to esoob driver
    * Fix bug in __info.c that caused a small memory corruption
      when logging was on
    * Enable the reporting of errors on descriptors
    * Fix extra ] in the msql part of configure.in
    * Add error reporting to DataManager (Tim)
    * Assorted fixes to text driver (Peter)
    * odbctest now ready to use (hopefully)

2000-05-03  Nick Gorham <nick@lurcher.org>

    * Fix bug in configure.in where disabling build of drivers 
      also disabled build of GUI bits.
    * SQLDataSources should return the Driver Description,
      not the data source description
    * Add partly written odbctest GUI to project
    * Remove conditional around VOID typedef in sqltypes.h by default

Release 1.8.8

2000-04-27  Nick Gorham <nick@lurcher.org>

    * Add extra include for unixware
    * Added some fixes to the template driver found by
      Nikolai Afanasiev, and also fix the logging code
      to recongnise 'On'
    * Alter distrib to not include moc generated files
    * Using the env var ODBCHOME was a "real bad idea" for perl
      I have changed it to ODBCSYSINI
    * Alter logging so that if the log file fails to open stderr
      is not used. This caused problems in server processes.
    * Fix a problem with SQLDrivers
    * Fix a potential leak, that stopped SQLDisconnect being
      called
    * Fix problems with text driver
    * Improve isql (thanks Ralf)
    * Make gODBCConfig a proper gtk widget
    * Remove stray printf in the DM code
    * Fix a couple of daft bugs, thanks to Tim Roepken
    * Fix a problem where handles were not being free'd
    * Fix a problem that stopped StarOffice 5.2 working with a
      ODBC 2 driver, it failed to set SQLGetDiagRec in the output
      of SQLGetFunctions

2000-03-11  Nick Gorham <nick@lurcher.org>

    * Adjust configure to check for limits, and use this
      to find max file path. It was only 14 char before under
      HP-UX
    * Make ODBCCOnfig try calling SQLConfigureDSN, for setup 
      libs that can do it themself
    * Make the mutex functions static
    * Remove some unwanted X functions from the lib line
    * Remove dlfcn.h in ODBCConfig
    * Rationalise environment vars, ODBCHOME points to
      where odbc.ini and odbcinst.ini are. ODBCINI points to 
      the user ini file (normally ~/.odbc.ini)
    * Fix bug causing all connection errors to be lost after
      connecting
    * Add GTK+ Based gODBCConfig
    
2000-03-01  Nick Gorham <nick@lurcher.org>

    * Add extra defines to sqltypes.h
    * Fix bug in the Postgres driver with the use if the
      SQL_DATA_AT_EXEC value
    * Replace the ODBCINI with ODBCHOME environment var

2000-02-23  Nick Gorham <nick@lurcher.org>

    * Remove the GLOBAL flag from the dlopen in the libtool
      lib. This caused problems with perl DBD::ODBC
    * Fix the support for threads and Solaris
    * Add odbcinst.ini flag to disable unloading the driver,
      this enables the IBM DB2 lib to be used

Release 1.8.6

2000-02-21  Nick Gorham <nick@lurcher.org>

    * Fix memory leak in the Postgres driver
    * Fix a bug in the DM when using threads and ODBC 3 drivers,
      SQLGetDiagField fails
    * Fix a situation where PHP can crash the DM by calling 
      SQLFreeStmt after SQLDisconnect
    * Add support for Solaris Threada
    * Make building with thread support the default

2000-02-12  Nick Gorham <nick@lurcher.org>

    * Add option to use ODBCINI to move the odbcinst and odbc ini 
      file. This was asked for by applix
    * Add setup lib for Easysoft ODBC-ODBC bridge
     
2000-02-02  Nick Gorham <nick@lurcher.org>

    * Add flag in odbcinst.ini to disable the SQLFetch -> 
      SQLExtendedFetch mapping for broken drivers
    * Alter the ini file parsing so the right hand side can
      contain extra ='s
    * Fix a bug in SQLGetStmtAttr with a missing '&'
    * Added a couple of patches from Manush to improve working
      with the solid driver

Release 1.8.4

2000-01-18  Nick Gorham <nick@lurcher.org>

    * Fix bug in SQLAllocHandle where a failed stmt alloc would
      report a error on the statement not the connection and
      dump core
    * Make the default path when adding a driver in ODBCConfig
      $prefix\lib
    * Add the missing [unixODBC] prefix to error messages
    * Fix a problem in template/SQLDriverConnect found by
      Charles Overbeck
    * Update to libtool 1.3.4
    * Fix problem in ODBCConfig where a cast to const char * 
      was needed

Release 1.8.3

1999-12-28  Nick Gorham <nick@lurcher.org>

    * Fix a bug where a SQLDisconnect was not releasing the 
      lib handle

1999-12-11  Nick Gorham <nick@lurcher.org>

    * Merge in changes from the Postgres ODBC people to fix a
      problem with LONGBIN's
    * Mask out the password fields in log for SQLConnect and 
      SQLDriverConnect
    * Change a incorrent HY004 error return to IM004 in SQLConnect

Release 1.8.2 For AlphaLinux Distribution

1999-12-02  Nick Gorham <nick@lurcher.org>

    * Fix some daft mistakes in odbcinst.c, and the template driver
    * Remove the C++ comments from the Postgres driver so it can
      be compiled with a C compiler
    * Add LIBSOCKET to the Postgres driver link line
    * Add strncasecmp to extras
    * Make the Postgres driver use the socket lib if needed

1999-11-23  Nick Gorham <nick@lurcher.org>

    * Add support for encrypted passwords in the Postgre driber
    * Remove some remaining non-libtool dlopen code
    * Fix some threading problems

1999-11-19  Nick Gorham <nick@lurcher.org>

Release 1.8.1 **********

    * Make the code more portable
    * Remove CR from Postgres source

1999-11-17  Nick Gorham <nick@lurcher.org>

    * Fix a bug with the ODBC 3 error functions.
    * Fix a missing function_entry from SQLExecDirect().

Release 1.8 *************

1999-11-13  Nick Gorham <nick@lurcher.org>

    * Fix bug with logging that killed StarOffice
    * Upgrade the Postgres driver to 6.4.6, this fixes
      a problem with fields containing cr/lf combinations.
    * Change the logging so that the logging info comes
      from a special [ODBC] section in odbcinst.ini. This 
      means that what goes on before the connect can be logged
      
1999-11-10  Nick Gorham <nick@lurcher.org>

    * Make SQLError,SQLGetDiagField and SQLGetDiagRec usable
      with all versions of application and driver.
    * Add configure flag to specify where to look for the
      MiniSQL lib.
    * Add configure flag to disable the building of the drivers.

1999-11-02  Nick Gorham <nick@lurcher.org>

    * Fix bug in the cursor lib introduced by the fix for the glibc
      bugs.
    * Fix bug where SQLSetConnectAttr/Option can return without
      clearing a connection thread lock.

1999-10-29  Nick Gorham <nick@lurcher.org>

    * Make the postgres driver able to connect via UNIX domain
      sockets

1999-10-29  Holger Bischoff <holger.bischoff@sap.com>

    * Assorted stupid bugs fixed in the DM

1999-10-26  Nick Gorham <nick@lurcher.org>

    * Started rewrite of the SQLError/SQLGetDiagSupport in the
      driver manager
    * Fix isql so that SQL_SUCCESS_WITH_INFO is a success for
      SQLConnect

1999-10-20  Greg Bentz <greg@freedomintelligence.com>

    * Added fix for SQLTransact, it was checking for a non null henv
      first, it now checks the hdbc first (Thanks Greg)
    * The connection_count in the environment handle was only
      incremented on the first connection, but decremented on all
      free dbc's, this caused the count to go negative at time.

1999-10-09  Nick Gorham <nick@lurcher.org>

    * Added Manush's patch to map ODBC 3-2 datetime values

1999-10-05  Nick Gorham <nick@lurcher.org>

    * working on getting the build to be more portable
    * added --enable-gui configure option to turn off all c++ and GUI bits
    * improved performance by removing logging core when logging is off
    * added extras dir to contain code for missing functions on certain
      platforms
    * first day out for the cursor lib, read only at the moment, a sample
      program is included in samples/cursor.c
    * fixed problem that if the user .odbc.ini was not found the
      code failed to go on to the system odbc.ini
    * fixed problem caused by some versions of dlsym reporting function
      that should be in the driver and returning the entry from the DM

Release 1.7 *************

1999-07-26  Nick Gorham <nick@lurcher.org>

    * New config added, now using autoconf.
    * Thread safe support added.
    * Assorted Driver Manager bug fixes added.
    * default location for odbcinst.ini and odbc.ini is now /usr/local/etc
      to conform to GNU standards.

1999-05-15  Peter Harvey <pharvey@codebydesign.com>
	
	* Drivers: nn driver added

1999-05-10  Nick

	* DM: New Dm added.

1999-04-04  Martin Evans <martin@easysoft.com>

	* Makefiles: Some changes to; a) use gcc, and b) build into other than /usr

1999-03-30  Peter Harvey <pharvey@codebydesign.com>

	* ChangeLog: Started ChangeLog

PK㰐\�Z�55NEWSnuȯ��Release History
===============

NOTE: I have moved what was here into ChangeLog, it seemed to 
make more sense that way (NG).

Release 2.2.10 29-Sep-2004
Release 2.2.9 24-Jan-2004
Release 2.2.8 17-Feb-2004
Release 2.2.7 02-Dec-2003
Release 2.2.6 21-July-2003
Release 2.2.5 26-Feb-2003
Release 2.2.4 24-January-2003
Release 2.2.3 23-August-2002
Release 2.2.2 8-July-2002
Release 2.2.1 23-Mar-2002 
Release 2.2.0 30-Jan-2002
Release 2.1.1 2001-12-21
Release 2.1.0 2001-11-27
Release 2.0.10 2001-10-14
Release 2.0.9 2001-08-14
Release 2.0.8 2001-06-25
Release 2.0.7 2001-06-06
Release 2.0.6 2001-04-18
Release 2.0.5 2001-03-21
Release 2.0.4 2001-02-02
Release 2.0.3 2001-01-13
Release 2.0.2 2001-01-08
Release 2.0.1 2001-01-06
Release 2.0.0 2001-01-04
Release 1.8.13 2000-11-14
Release 1.8.12 2000-08-18 
Release 1.8.11 2000-08-16
Release 1.8.10 2000-06-15
Release 1.8.9 2000-06-13
Release 1.8.8 2000-05-03
Release 1.8.6 2000-02-21
Release 1.8.4 2000-02-12 
Release 1.8.3 1999-12-28
Release 1.8.2 1999-12-11
Release 1.8.1 1999-11-17
Release 1.8 1999-11-13
Release 1.7 1999-07-26
PK㰐\u�^DDREADMEnuȯ��+-------------------------------------------------------------+
| unixODBC                                                    |
+-------------------------------------------------------------+

README
---------------------------------------------------------------

Description:

	unixODBC is an Open Source ODBC sub-system and an ODBC SDK
	for Linux, Mac OSX, and UNIX. 
	
License:
	
	All libraries are LGPL Version 2.1
	
	All programs are GPL Version 2.1.

Parts:
	unixODBC includes the following;
	
	- Driver Manager
	- Installer Library and command line tool
	- Command Line Tools to help install a driver and work with SQL
	

How To Start:

	Look for and read README files with extensions of interest. Then
	read the INSTALL file.
	
	You can also jump into the doc directory and browse information 
	there. And do not forget the online stuff.
	
	Some documentation may be a bit out of date the vast majority of
	it should be ok.
	
Config Files:

	The ODBC Installer Library is responsible for reading and writing
	the unixODBC config files. 
	
	The savvy can look at;
	 
	_odbcinst_SystemINI.c
	_odbcinst_UserINI.c
	
	In any case; you can override where unixODBC looks for its system
	config files by setting the ODBCSYSINI environment variable during 
	the use of unixODBC.
      
Resources:

        http://sourceforge.net/projects/unixodbc/
PK㰐\�����README.distnu�[���About unixODBC in this distribution
-----------------------------------

In addition to the unixODBC package itself, you will want to install some
or all of these related packages:

mysql-connector-odbc	MySQL driver, needed to connect to MySQL databases
postgresql-odbc		PostgreSQL driver, needed to connect to PostgreSQL
unixODBC-gui-qt		Optional configuration management and test programs


The recommended driver definition for MySQL is:

[MySQL]
Description	= ODBC for MySQL
Driver		= /usr/lib/libmyodbc5.so
Setup		= /usr/lib/libodbcmyS.so
Driver64	= /usr/lib64/libmyodbc5.so
Setup64		= /usr/lib64/libodbcmyS.so
FileUsage	= 1

You can adjust the name (in square brackets) and the description, but
the other items should usually be used verbatim.

The recommended driver definition for PostgreSQL is:

[PostgreSQL]
Description	= ODBC for PostgreSQL
Driver		= /usr/lib/psqlodbcw.so
Setup		= /usr/lib/libodbcpsqlS.so
Driver64	= /usr/lib64/psqlodbcw.so
Setup64		= /usr/lib64/libodbcpsqlS.so
FileUsage	= 1
PK㰐\a��00"doc/AdministratorManual/index.htmlnuȯ��PK㰐\#9�T�%�%%i0doc/AdministratorManual/odbcinst.htmlnuȯ��PK㰐\d]H��!wVdoc/AdministratorManual/php3.htmlnuȯ��PK㰐\Z��!ZZ$�^doc/AdministratorManual/unixODBC.gifnuȯ��PK㰐\�{o�[2[2*>bdoc/AdministratorManual/unixODBCsetup.htmlnuȯ��PK㰐\v8��(�doc/ProgrammerManual/Tutorial/close.htmlnu�[���PK㰐\�����(�doc/ProgrammerManual/Tutorial/conne.htmlnu�[���PK㰐\�W��\
\
&�doc/ProgrammerManual/Tutorial/dsn.htmlnu�[���PK㰐\C��N�N(ùdoc/ProgrammerManual/Tutorial/gloss.htmlnu�[���PK㰐\J��(�doc/ProgrammerManual/Tutorial/index.htmlnu�[���PK㰐\=PߪF	F	(
doc/ProgrammerManual/Tutorial/intro.htmlnu�[���PK㰐\�r#8��'�doc/ProgrammerManual/Tutorial/navi.htmlnu�[���PK㰐\l÷���&doc/ProgrammerManual/Tutorial/odbc.cssnuȯ��PK㰐\��Q�(�2doc/ProgrammerManual/Tutorial/query.htmlnu�[���PK㰐\���;,,(]Adoc/ProgrammerManual/Tutorial/resul.htmlnu�[���PK㰐\h����\doc/ProgrammerManual/index.htmlnuȯ��PK㰐\Bv3~��!pdoc/ProgrammerManual/unixODBC.gifnuȯ��PK㰐\n�����	qdoc/UserManual/Figure1.gifnuȯ��PK㰐\ą_nnB�doc/UserManual/Figure2.gifnuȯ��PK㰐\'���))��doc/UserManual/Figure3.gifnuȯ��PK㰐\����)
)
m�doc/UserManual/Figure4.gifnuȯ��PK㰐\�ǁ�.�.��doc/UserManual/Figure6.gifnuȯ��PK㰐\�����doc/UserManual/My.sqlnuȯ��PK㰐\�l?��%,�doc/UserManual/StarOfficeDataGrid.gifnuȯ��PK㰐\�.��kIkIIdoc/UserManual/index.htmlnuȯ��PK㰐\Z��!ZZ�Tdoc/UserManual/unixODBC.gifnuȯ��PK㰐\1��(	(	�Xdoc/lst/InternalStructure.gifnu�[���PK㰐\�����bdoc/lst/InternalStructure.htmlnu�[���PK㰐\n,��;hdoc/lst/InternalStructure.vsdnu�[���PK㰐\�w����hdoc/lst/InternalStructure2.gifnu�[���PK㰐\����dldoc/lst/InternalStructure2.htmlnu�[���PK㰐\��q�sdoc/lst/InternalStructure3.gifnu�[���PK㰐\j��A{{ydoc/lst/InternalStructure3.htmlnu�[���PK㰐\Dq����ۀdoc/lst/InternalStructure4.gifnu�[���PK㰐\h�i��doc/lst/InternalStructure4.htmlnu�[���PK㰐\�''��<�doc/lst/InternalStructure5.gifnu�[���PK㰐\r%':HH��doc/lst/InternalStructure5.htmlnu�[���PK㰐\N/�3���doc/lst/InternalStructure6.gifnu�[���PK㰐\��%���doc/lst/InternalStructure6.htmlnu�[���PK㰐\κ[���+�doc/lst/InternalStructure7.gifnu�[���PK㰐\�����J�doc/lst/InternalStructure7.htmlnu�[���PK㰐\l 8%

>�doc/lst/InternalStructure8.gifnu�[���PK㰐\��u����doc/lst/InternalStructure8.htmlnu�[���PK㰐\�Y†kkl�doc/lst/InternalStructure9.gifnu�[���PK㰐\�Jn2��%�doc/lst/InternalStructure9.htmlnu�[���PK㰐\��T{��q�doc/lst/back.gifnu�[���PK㰐\%{����u�doc/lst/next.gifnu�[���PK㰐\0m�\� � }�doc/index.htmlnuȯ��PK㰐\~�؏�b�doc/smallbook.gifnuȯ��PK㰐\Bv3~��2�doc/unixODBC.gifnuȯ��PK㰐\�T�//�AUTHORSnu�[���PK㰐\��Ko_o_t�COPYINGnuȯ��PK㰐\+J���#�#	VChangeLognu�[���PK㰐\�Z�557zNEWSnuȯ��PK㰐\u�^DD�~READMEnuȯ��PK㰐\������README.distnu�[���PK88,B�