]> git.saurik.com Git - wxWidgets.git/commitdiff
iODBC v2.5
authorRobert Roebling <robert@roebling.de>
Fri, 22 Jan 1999 10:52:42 +0000 (10:52 +0000)
committerRobert Roebling <robert@roebling.de>
Fri, 22 Jan 1999 10:52:42 +0000 (10:52 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1446 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

49 files changed:
configure
configure.in
include/wx/db.h
include/wx/gtk/dataobj.h
include/wx/gtk1/dataobj.h
src/Makefile.in
src/gtk/dataobj.cpp
src/gtk1/dataobj.cpp
src/iodbc/COPYING [new file with mode: 0644]
src/iodbc/Changes.log
src/iodbc/Config.mk [deleted file]
src/iodbc/IAFA-PACKAGE
src/iodbc/INSTALL [new file with mode: 0644]
src/iodbc/Makefile [deleted file]
src/iodbc/NEWS [new file with mode: 0644]
src/iodbc/README
src/iodbc/Version.mk [deleted file]
src/iodbc/build [deleted file]
src/iodbc/catalog.c
src/iodbc/config.h
src/iodbc/connect.c
src/iodbc/dlf.c
src/iodbc/dlf.h
src/iodbc/dlproc.c
src/iodbc/dlproc.h
src/iodbc/execute.c
src/iodbc/fetch.c
src/iodbc/hdbc.c
src/iodbc/hdbc.h
src/iodbc/henv.c
src/iodbc/henv.ci
src/iodbc/henv.h
src/iodbc/herr.c
src/iodbc/herr.ci
src/iodbc/herr.h
src/iodbc/hstmt.c
src/iodbc/hstmt.h
src/iodbc/info.c
src/iodbc/isql.h
src/iodbc/isqlext.h
src/iodbc/itrace.c
src/iodbc/itrace.h
src/iodbc/main.c [deleted file]
src/iodbc/misc.c
src/iodbc/odbc_funcs.h [deleted file]
src/iodbc/odbc_types.h [deleted file]
src/iodbc/prepare.c
src/iodbc/result.c
src/iodbc/windows.h [deleted file]

index dc1f6630a936b466a4108fd5c5e204a35e0abe57..7e4dd540fdb4721758ad2083e7d3954ff4b0e6e0 100755 (executable)
--- a/configure
+++ b/configure
@@ -4296,6 +4296,340 @@ fi
 
 
 
+DL_LIBRARY=
+for ac_func in dlopen
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:4304: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4309 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4332: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+ cat >> confdefs.h <<\EOF
+#define HAVE_LIBDL 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
+echo "configure:4357: checking for dlopen in -ldl" >&5
+ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ldl  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4365 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char dlopen();
+
+int main() {
+dlopen()
+; return 0; }
+EOF
+if { (eval echo configure:4376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_LIBDL 1
+EOF
+ DL_LIBRARY="-ldl"
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
+echo "configure:4398: checking for dld_link in -ldld" >&5
+ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ldld  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4406 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char dld_link();
+
+int main() {
+dld_link()
+; return 0; }
+EOF
+if { (eval echo configure:4417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_DLD 1
+EOF
+ DL_LIBRARY="-ldld"
+else
+  echo "$ac_t""no" 1>&6
+for ac_func in shl_load
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:4441: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4446 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+ cat >> confdefs.h <<\EOF
+#define HAVE_SHL_LOAD 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+  
+fi
+
+fi
+
+
+fi
+done
+
+
+
+echo $ac_n "checking for underscore before symbols""... $ac_c" 1>&6
+echo "configure:4509: checking for underscore before symbols" >&5
+if eval "test \"`echo '$''{'libltdl_cv_uscore'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+  echo "main(){int i=1;} fnord(){int i=23; int ltuae=42;}" > conftest.c
+  ${CC} -c conftest.c > /dev/null
+  if (nm conftest.o | grep _fnord) > /dev/null; then
+    libltdl_cv_uscore=yes
+  else
+    libltdl_cv_uscore=no
+  fi
+  rm -f conftest*
+
+fi
+
+echo "$ac_t""$libltdl_cv_uscore" 1>&6
+
+if test x"$libltdl_cv_uscore" = xyes; then
+  if test x"$ac_cv_func_dlopen" = xyes ||
+     test x"$ac_cv_lib_dl_dlopen" = xyes ; then
+       echo $ac_n "checking whether we have to add an underscore for dlsym""... $ac_c" 1>&6
+echo "configure:4531: checking whether we have to add an underscore for dlsym" >&5
+if eval "test \"`echo '$''{'libltdl_cv_need_uscore'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+               if test "$cross_compiling" = yes; then
+  libltdl_cv_need_uscore=no
+
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4540 "configure"
+#include "confdefs.h"
+
+#include <dlfcn.h>
+#include <stdio.h>
+fnord() { int i=42;}
+main() { void *self, *ptr1, *ptr2; self=dlopen(NULL,RTLD_LAZY);
+    if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
+    if(ptr1 && !ptr2) exit(0); } exit(1); } 
+
+EOF
+if { (eval echo configure:4551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+  libltdl_cv_need_uscore=no
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  libltdl_cv_need_uscore=yes
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$libltdl_cv_need_uscore" 1>&6
+  fi
+fi
+
+if test x"$libltdl_cv_need_uscore" = xyes; then
+   cat >> confdefs.h <<\EOF
+#define NEED_USCORE 1
+EOF
+
+fi
+
+
+for ac_func in strerror
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:4580: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4585 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+
 CHECK_INCLUDE="-I/usr/include $X_CFLAGS"
 CHECK_LIB="-L/lib -L/usr/lib $X_LIBS"
 
@@ -4307,7 +4641,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:4311: checking host system type" >&5
+echo "configure:4645: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -4550,7 +4884,7 @@ DEFAULT_wxUSE_WCSRTOMBS=0
 
 
 echo $ac_n "checking "for gtk"""... $ac_c" 1>&6
-echo "configure:4554: checking "for gtk"" >&5
+echo "configure:4888: checking "for gtk"" >&5
 # Check whether --with-gtk or --without-gtk was given.
 if test "${with_gtk+set}" = set; then
   withval="$with_gtk"
@@ -4580,7 +4914,7 @@ fi
 
 
 echo $ac_n "checking "for qt"""... $ac_c" 1>&6
-echo "configure:4584: checking "for qt"" >&5
+echo "configure:4918: checking "for qt"" >&5
 # Check whether --with-qt or --without-qt was given.
 if test "${with_qt+set}" = set; then
   withval="$with_qt"
@@ -4610,7 +4944,7 @@ fi
 
 
 echo $ac_n "checking "for motif"""... $ac_c" 1>&6
-echo "configure:4614: checking "for motif"" >&5
+echo "configure:4948: checking "for motif"" >&5
 # Check whether --with-motif or --without-motif was given.
 if test "${with_motif+set}" = set; then
   withval="$with_motif"
@@ -4641,7 +4975,7 @@ fi
 
 
 echo $ac_n "checking "for shared"""... $ac_c" 1>&6
-echo "configure:4645: checking "for shared"" >&5
+echo "configure:4979: checking "for shared"" >&5
 # Check whether --with-shared or --without-shared was given.
 if test "${with_shared+set}" = set; then
   withval="$with_shared"
@@ -4671,7 +5005,7 @@ fi
 
 
 echo $ac_n "checking "for optimise"""... $ac_c" 1>&6
-echo "configure:4675: checking "for optimise"" >&5
+echo "configure:5009: checking "for optimise"" >&5
 # Check whether --with-optimise or --without-optimise was given.
 if test "${with_optimise+set}" = set; then
   withval="$with_optimise"
@@ -4701,7 +5035,7 @@ fi
 
 
 echo $ac_n "checking "for debug_flag"""... $ac_c" 1>&6
-echo "configure:4705: checking "for debug_flag"" >&5
+echo "configure:5039: checking "for debug_flag"" >&5
 # Check whether --with-debug_flag or --without-debug_flag was given.
 if test "${with_debug_flag+set}" = set; then
   withval="$with_debug_flag"
@@ -4731,7 +5065,7 @@ fi
 
 
 echo $ac_n "checking "for debug_info"""... $ac_c" 1>&6
-echo "configure:4735: checking "for debug_info"" >&5
+echo "configure:5069: checking "for debug_info"" >&5
 # Check whether --with-debug_info or --without-debug_info was given.
 if test "${with_debug_info+set}" = set; then
   withval="$with_debug_info"
@@ -4761,7 +5095,7 @@ fi
 
 
 echo $ac_n "checking "for debug_gdb"""... $ac_c" 1>&6
-echo "configure:4765: checking "for debug_gdb"" >&5
+echo "configure:5099: checking "for debug_gdb"" >&5
 # Check whether --with-debug_gdb or --without-debug_gdb was given.
 if test "${with_debug_gdb+set}" = set; then
   withval="$with_debug_gdb"
@@ -4791,7 +5125,7 @@ fi
 
 
 echo $ac_n "checking "for mem_tracing"""... $ac_c" 1>&6
-echo "configure:4795: checking "for mem_tracing"" >&5
+echo "configure:5129: checking "for mem_tracing"" >&5
 # Check whether --with-mem_tracing or --without-mem_tracing was given.
 if test "${with_mem_tracing+set}" = set; then
   withval="$with_mem_tracing"
@@ -4821,7 +5155,7 @@ fi
 
 
 echo $ac_n "checking "for dmalloc"""... $ac_c" 1>&6
-echo "configure:4825: checking "for dmalloc"" >&5
+echo "configure:5159: checking "for dmalloc"" >&5
 # Check whether --with-dmalloc or --without-dmalloc was given.
 if test "${with_dmalloc+set}" = set; then
   withval="$with_dmalloc"
@@ -4851,7 +5185,7 @@ fi
 
 
 echo $ac_n "checking "for profile"""... $ac_c" 1>&6
-echo "configure:4855: checking "for profile"" >&5
+echo "configure:5189: checking "for profile"" >&5
 # Check whether --with-profile or --without-profile was given.
 if test "${with_profile+set}" = set; then
   withval="$with_profile"
@@ -4881,7 +5215,7 @@ fi
 
 
 echo $ac_n "checking "for apple_ieee"""... $ac_c" 1>&6
-echo "configure:4885: checking "for apple_ieee"" >&5
+echo "configure:5219: checking "for apple_ieee"" >&5
 # Check whether --with-apple_ieee or --without-apple_ieee was given.
 if test "${with_apple_ieee+set}" = set; then
   withval="$with_apple_ieee"
@@ -4911,7 +5245,7 @@ fi
 
 
 echo $ac_n "checking "for threads"""... $ac_c" 1>&6
-echo "configure:4915: checking "for threads"" >&5
+echo "configure:5249: checking "for threads"" >&5
 # Check whether --with-threads or --without-threads was given.
 if test "${with_threads+set}" = set; then
   withval="$with_threads"
@@ -4942,7 +5276,7 @@ fi
 
 
 echo $ac_n "checking "for zlib"""... $ac_c" 1>&6
-echo "configure:4946: checking "for zlib"" >&5
+echo "configure:5280: checking "for zlib"" >&5
 # Check whether --with-zlib or --without-zlib was given.
 if test "${with_zlib+set}" = set; then
   withval="$with_zlib"
@@ -4972,7 +5306,7 @@ fi
 
 
 echo $ac_n "checking "for libpng"""... $ac_c" 1>&6
-echo "configure:4976: checking "for libpng"" >&5
+echo "configure:5310: checking "for libpng"" >&5
 # Check whether --with-libpng or --without-libpng was given.
 if test "${with_libpng+set}" = set; then
   withval="$with_libpng"
@@ -5002,7 +5336,7 @@ fi
 
 
 echo $ac_n "checking "for odbc"""... $ac_c" 1>&6
-echo "configure:5006: checking "for odbc"" >&5
+echo "configure:5340: checking "for odbc"" >&5
 # Check whether --with-odbc or --without-odbc was given.
 if test "${with_odbc+set}" = set; then
   withval="$with_odbc"
@@ -5033,7 +5367,7 @@ fi
 
 
 echo $ac_n "checking "for timedate"""... $ac_c" 1>&6
-echo "configure:5037: checking "for timedate"" >&5
+echo "configure:5371: checking "for timedate"" >&5
 # Check whether --with-timedate or --without-timedate was given.
 if test "${with_timedate+set}" = set; then
   withval="$with_timedate"
@@ -5063,7 +5397,7 @@ fi
 
 
 echo $ac_n "checking "for intl"""... $ac_c" 1>&6
-echo "configure:5067: checking "for intl"" >&5
+echo "configure:5401: checking "for intl"" >&5
 # Check whether --with-intl or --without-intl was given.
 if test "${with_intl+set}" = set; then
   withval="$with_intl"
@@ -5093,7 +5427,7 @@ fi
 
 
 echo $ac_n "checking "for config"""... $ac_c" 1>&6
-echo "configure:5097: checking "for config"" >&5
+echo "configure:5431: checking "for config"" >&5
 # Check whether --with-config or --without-config was given.
 if test "${with_config+set}" = set; then
   withval="$with_config"
@@ -5123,7 +5457,7 @@ fi
 
 
 echo $ac_n "checking "for streams"""... $ac_c" 1>&6
-echo "configure:5127: checking "for streams"" >&5
+echo "configure:5461: checking "for streams"" >&5
 # Check whether --with-streams or --without-streams was given.
 if test "${with_streams+set}" = set; then
   withval="$with_streams"
@@ -5153,7 +5487,7 @@ fi
 
 
 echo $ac_n "checking "for serial"""... $ac_c" 1>&6
-echo "configure:5157: checking "for serial"" >&5
+echo "configure:5491: checking "for serial"" >&5
 # Check whether --with-serial or --without-serial was given.
 if test "${with_serial+set}" = set; then
   withval="$with_serial"
@@ -5184,7 +5518,7 @@ fi
 
 
 echo $ac_n "checking "for afmfonts"""... $ac_c" 1>&6
-echo "configure:5188: checking "for afmfonts"" >&5
+echo "configure:5522: checking "for afmfonts"" >&5
 # Check whether --with-afmfonts or --without-afmfonts was given.
 if test "${with_afmfonts+set}" = set; then
   withval="$with_afmfonts"
@@ -5214,7 +5548,7 @@ fi
 
 
 echo $ac_n "checking "for normalized"""... $ac_c" 1>&6
-echo "configure:5218: checking "for normalized"" >&5
+echo "configure:5552: checking "for normalized"" >&5
 # Check whether --with-normalized or --without-normalized was given.
 if test "${with_normalized+set}" = set; then
   withval="$with_normalized"
@@ -5244,7 +5578,7 @@ fi
 
 
 echo $ac_n "checking "for postscript"""... $ac_c" 1>&6
-echo "configure:5248: checking "for postscript"" >&5
+echo "configure:5582: checking "for postscript"" >&5
 # Check whether --with-postscript or --without-postscript was given.
 if test "${with_postscript+set}" = set; then
   withval="$with_postscript"
@@ -5275,7 +5609,7 @@ fi
 
 
 echo $ac_n "checking "for unicode"""... $ac_c" 1>&6
-echo "configure:5279: checking "for unicode"" >&5
+echo "configure:5613: checking "for unicode"" >&5
 # Check whether --with-unicode or --without-unicode was given.
 if test "${with_unicode+set}" = set; then
   withval="$with_unicode"
@@ -5305,7 +5639,7 @@ fi
 
 
 echo $ac_n "checking "for wcsrtombs"""... $ac_c" 1>&6
-echo "configure:5309: checking "for wcsrtombs"" >&5
+echo "configure:5643: checking "for wcsrtombs"" >&5
 # Check whether --with-wcsrtombs or --without-wcsrtombs was given.
 if test "${with_wcsrtombs+set}" = set; then
   withval="$with_wcsrtombs"
@@ -5336,7 +5670,7 @@ fi
 
 
 echo $ac_n "checking "for wxresources"""... $ac_c" 1>&6
-echo "configure:5340: checking "for wxresources"" >&5
+echo "configure:5674: checking "for wxresources"" >&5
 # Check whether --with-wxresources or --without-wxresources was given.
 if test "${with_wxresources+set}" = set; then
   withval="$with_wxresources"
@@ -5366,7 +5700,7 @@ fi
 
 
 echo $ac_n "checking "for prologio"""... $ac_c" 1>&6
-echo "configure:5370: checking "for prologio"" >&5
+echo "configure:5704: checking "for prologio"" >&5
 # Check whether --with-prologio or --without-prologio was given.
 if test "${with_prologio+set}" = set; then
   withval="$with_prologio"
@@ -5396,7 +5730,7 @@ fi
 
 
 echo $ac_n "checking "for RPC"""... $ac_c" 1>&6
-echo "configure:5400: checking "for RPC"" >&5
+echo "configure:5734: checking "for RPC"" >&5
 # Check whether --with-rpc or --without-rpc was given.
 if test "${with_rpc+set}" = set; then
   withval="$with_rpc"
@@ -5427,7 +5761,7 @@ fi
 
 
 echo $ac_n "checking "for IPC"""... $ac_c" 1>&6
-echo "configure:5431: checking "for IPC"" >&5
+echo "configure:5765: checking "for IPC"" >&5
 # Check whether --with-ipc or --without-ipc was given.
 if test "${with_ipc+set}" = set; then
   withval="$with_ipc"
@@ -5457,7 +5791,7 @@ fi
 
 
 echo $ac_n "checking "for resources"""... $ac_c" 1>&6
-echo "configure:5461: checking "for resources"" >&5
+echo "configure:5795: checking "for resources"" >&5
 # Check whether --with-resources or --without-resources was given.
 if test "${with_resources+set}" = set; then
   withval="$with_resources"
@@ -5487,7 +5821,7 @@ fi
 
 
 echo $ac_n "checking "for clipboard"""... $ac_c" 1>&6
-echo "configure:5491: checking "for clipboard"" >&5
+echo "configure:5825: checking "for clipboard"" >&5
 # Check whether --with-clipboard or --without-clipboard was given.
 if test "${with_clipboard+set}" = set; then
   withval="$with_clipboard"
@@ -5517,7 +5851,7 @@ fi
 
 
 echo $ac_n "checking "for dnd"""... $ac_c" 1>&6
-echo "configure:5521: checking "for dnd"" >&5
+echo "configure:5855: checking "for dnd"" >&5
 # Check whether --with-dnd or --without-dnd was given.
 if test "${with_dnd+set}" = set; then
   withval="$with_dnd"
@@ -5548,7 +5882,7 @@ fi
 
 
 echo $ac_n "checking "for mdi"""... $ac_c" 1>&6
-echo "configure:5552: checking "for mdi"" >&5
+echo "configure:5886: checking "for mdi"" >&5
 # Check whether --with-mdi or --without-mdi was given.
 if test "${with_mdi+set}" = set; then
   withval="$with_mdi"
@@ -5578,7 +5912,7 @@ fi
 
 
 echo $ac_n "checking "for docview"""... $ac_c" 1>&6
-echo "configure:5582: checking "for docview"" >&5
+echo "configure:5916: checking "for docview"" >&5
 # Check whether --with-docview or --without-docview was given.
 if test "${with_docview+set}" = set; then
   withval="$with_docview"
@@ -5608,7 +5942,7 @@ fi
 
 
 echo $ac_n "checking "for printarch"""... $ac_c" 1>&6
-echo "configure:5612: checking "for printarch"" >&5
+echo "configure:5946: checking "for printarch"" >&5
 # Check whether --with-printarch or --without-printarch was given.
 if test "${with_printarch+set}" = set; then
   withval="$with_printarch"
@@ -5638,7 +5972,7 @@ fi
 
 
 echo $ac_n "checking "for help"""... $ac_c" 1>&6
-echo "configure:5642: checking "for help"" >&5
+echo "configure:5976: checking "for help"" >&5
 # Check whether --with-help or --without-help was given.
 if test "${with_help+set}" = set; then
   withval="$with_help"
@@ -5676,7 +6010,7 @@ fi
 
 if test "$USE_LINUX" = 1; then
        echo $ac_n "checking for gettext in -lc""... $ac_c" 1>&6
-echo "configure:5680: checking for gettext in -lc" >&5
+echo "configure:6014: checking for gettext in -lc" >&5
 ac_lib_var=`echo c'_'gettext | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5684,7 +6018,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5688 "configure"
+#line 6022 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5695,7 +6029,7 @@ int main() {
 gettext()
 ; return 0; }
 EOF
-if { (eval echo configure:5699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:6033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5766,7 +6100,7 @@ fi
   # Extract the first word of "gtk-config", so it can be a program name with args.
 set dummy gtk-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5770: checking for $ac_word" >&5
+echo "configure:6104: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5797,7 +6131,7 @@ fi
 
   min_gtk_version=1.0.4
   echo $ac_n "checking for GTK - version >= $min_gtk_version""... $ac_c" 1>&6
-echo "configure:5801: checking for GTK - version >= $min_gtk_version" >&5
+echo "configure:6135: checking for GTK - version >= $min_gtk_version" >&5
   no_gtk=""
   if test "$GTK_CONFIG" != "no" ; then
     GTK_CFLAGS=`$GTK_CONFIG --cflags`
@@ -5810,7 +6144,7 @@ echo "configure:5801: checking for GTK - version >= $min_gtk_version" >&5
   echo $ac_n "cross compiling; assumed OK... $ac_c"
 else
   cat > conftest.$ac_ext <<EOF
-#line 5814 "configure"
+#line 6148 "configure"
 #include "confdefs.h"
 
 #include <gtk/gtk.h>
@@ -5834,7 +6168,7 @@ main ()
 }
 
 EOF
-if { (eval echo configure:5838: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -5874,7 +6208,7 @@ fi
 
 if test "$wxUSE_QT" = 1; then
    echo $ac_n "checking for Qt includes""... $ac_c" 1>&6
-echo "configure:5878: checking for Qt includes" >&5
+echo "configure:6212: checking for Qt includes" >&5
    
 ac_find_includes=
 for ac_dir in $SEARCH_INCLUDE;
@@ -5888,7 +6222,7 @@ for ac_dir in $SEARCH_INCLUDE;
    if test "$ac_find_includes" != "" ; then
      echo "$ac_t""found $ac_find_includes" 1>&6
      echo $ac_n "checking for Qt library""... $ac_c" 1>&6
-echo "configure:5892: checking for Qt library" >&5
+echo "configure:6226: checking for Qt library" >&5
      
 ac_find_libraries=
 for ac_dir in $SEARCH_LIB;
@@ -5939,7 +6273,7 @@ fi
 
 if test "$wxUSE_MOTIF" = 1; then
    echo $ac_n "checking for Motif/Lesstif includes""... $ac_c" 1>&6
-echo "configure:5943: checking for Motif/Lesstif includes" >&5
+echo "configure:6277: checking for Motif/Lesstif includes" >&5
    
 ac_find_includes=
 for ac_dir in $SEARCH_INCLUDE;
@@ -5953,7 +6287,7 @@ for ac_dir in $SEARCH_INCLUDE;
    if test "$ac_find_includes" != "" ; then
      echo "$ac_t""found $ac_find_includes" 1>&6
      echo $ac_n "checking for Motif/Lesstif library""... $ac_c" 1>&6
-echo "configure:5957: checking for Motif/Lesstif library" >&5
+echo "configure:6291: checking for Motif/Lesstif library" >&5
      
 ac_find_libraries=
 for ac_dir in $SEARCH_LIB;
@@ -5990,7 +6324,7 @@ for ac_dir in $SEARCH_LIB;
        CHECK_INCLUDE="$CHECK_INCLUDE $ac_path_to_include"
        echo "$ac_t""found at $ac_find_libraries" 1>&6
        echo $ac_n "checking for Xt library""... $ac_c" 1>&6
-echo "configure:5994: checking for Xt library" >&5
+echo "configure:6328: checking for Xt library" >&5
        
 ac_find_libraries=
 for ac_dir in $SEARCH_LIB;
@@ -6016,7 +6350,7 @@ for ac_dir in $SEARCH_LIB;
          CHECK_LINK="$CHECK_LIB $ac_path_to_link"
          echo "$ac_t""found at $ac_find_libraries" 1>&6
          echo $ac_n "checking for Xpm library""... $ac_c" 1>&6
-echo "configure:6020: checking for Xpm library" >&5
+echo "configure:6354: checking for Xpm library" >&5
          
 ac_find_libraries=
 for ac_dir in $SEARCH_LIB;
@@ -6345,46 +6679,6 @@ fi
 
 
 
-echo $ac_n "checking for main in -ldl""... $ac_c" 1>&6
-echo "configure:6350: checking for main in -ldl" >&5
-ac_lib_var=`echo dl'_'main | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-ldl  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 6358 "configure"
-#include "confdefs.h"
-
-int main() {
-main()
-; return 0; }
-EOF
-if { (eval echo configure:6365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  DL_LIBRARY=-ldl
-else
-  echo "$ac_t""no" 1>&6
-DL_LIBRARY=
-fi
-
-
-
-
 THREADS_LINK=""
 UNIX_THREAD=""
 
@@ -6392,7 +6686,7 @@ if test "$wxUSE_THREADS" = "1"; then
 
      
      echo $ac_n "checking for pthread_create in -lpthread-0.7""... $ac_c" 1>&6
-echo "configure:6396: checking for pthread_create in -lpthread-0.7" >&5
+echo "configure:6690: checking for pthread_create in -lpthread-0.7" >&5
 ac_lib_var=`echo pthread-0.7'_'pthread_create | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6400,7 +6694,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpthread-0.7  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6404 "configure"
+#line 6698 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6411,7 +6705,7 @@ int main() {
 pthread_create()
 ; return 0; }
 EOF
-if { (eval echo configure:6415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:6709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6435,17 +6729,17 @@ else
 
        ac_safe=`echo "sys/prctl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/prctl.h""... $ac_c" 1>&6
-echo "configure:6439: checking for sys/prctl.h" >&5
+echo "configure:6733: checking for sys/prctl.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6444 "configure"
+#line 6738 "configure"
 #include "confdefs.h"
 #include <sys/prctl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6449: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6743: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6471,7 +6765,7 @@ fi
 
           
      echo $ac_n "checking for pthread_setcanceltype in -lpthread""... $ac_c" 1>&6
-echo "configure:6475: checking for pthread_setcanceltype in -lpthread" >&5
+echo "configure:6769: checking for pthread_setcanceltype in -lpthread" >&5
 ac_lib_var=`echo pthread'_'pthread_setcanceltype | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6479,7 +6773,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpthread  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6483 "configure"
+#line 6777 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6490,7 +6784,7 @@ int main() {
 pthread_setcanceltype()
 ; return 0; }
 EOF
-if { (eval echo configure:6494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:6788: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6526,7 +6820,7 @@ EOF
 
     
     echo $ac_n "checking for printf in -lposix4""... $ac_c" 1>&6
-echo "configure:6530: checking for printf in -lposix4" >&5
+echo "configure:6824: checking for printf in -lposix4" >&5
 ac_lib_var=`echo posix4'_'printf | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6534,7 +6828,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lposix4  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6538 "configure"
+#line 6832 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6545,7 +6839,7 @@ int main() {
 printf()
 ; return 0; }
 EOF
-if { (eval echo configure:6549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:6843: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6700,7 +6994,7 @@ EOF
 esac
 
 if test "x$GCC" = xyes; then
-  CFLAGS="${CFLAGS} -Wall -Wno-unused -Wno-uninitialized -D_REENTRANT -DLEX_SCANNER"
+  CFLAGS="${CFLAGS} -Wall -Wno-unused -Wno-uninitialized -D_REENTRANT -DLEX_SCANNER -DHAVE_LIBDL"
 fi
 
 if test "x$GXX" = xyes; then
@@ -6876,6 +7170,7 @@ s%@YACC@%$YACC%g
 s%@LEX@%$LEX%g
 s%@LEXLIB@%$LEXLIB%g
 s%@LEX_OUTPUT_ROOT@%$LEX_OUTPUT_ROOT%g
+s%@DL_LIBRARY@%$DL_LIBRARY%g
 s%@host@%$host%g
 s%@host_alias@%$host_alias%g
 s%@host_cpu@%$host_cpu%g
@@ -6900,7 +7195,6 @@ s%@Z_C_SRC@%$Z_C_SRC%g
 s%@PNG_C_SRC@%$PNG_C_SRC%g
 s%@IODBC_C_SRC@%$IODBC_C_SRC%g
 s%@HELP@%$HELP%g
-s%@DL_LIBRARY@%$DL_LIBRARY%g
 s%@UNIX_THREAD@%$UNIX_THREAD%g
 s%@THREADS_LINK@%$THREADS_LINK%g
 s%@OS@%$OS%g
index 3a2e876435b8347d212b302f33f4195ecde79d71..c40297ad141c83b1ba6c9a36819d5b44b3871284 100644 (file)
@@ -559,6 +559,60 @@ dnl   defines YYTEXT_POINTER  if yytext is char*
 dnl   defines LEX_OUTPUT_ROOT as to the base of the 
 dnl                           filename output by the lexer
 
+dnl ###################################
+dnl ##  Check for dynamic load module #
+dnl ###################################
+
+DL_LIBRARY=
+AC_CHECK_FUNCS(dlopen, AC_DEFINE(HAVE_LIBDL),
+[AC_CHECK_LIB(dl, dlopen, [AC_DEFINE(HAVE_LIBDL) DL_LIBRARY="-ldl"],
+ [AC_CHECK_LIB(dld, dld_link, [AC_DEFINE(HAVE_DLD) DL_LIBRARY="-ldld"],
+   [AC_CHECK_FUNCS(shl_load, AC_DEFINE(HAVE_SHL_LOAD) )]
+  )]
+ )]
+)
+AC_SUBST(DL_LIBRARY)
+
+AC_CACHE_CHECK([for underscore before symbols], libltdl_cv_uscore, [
+  echo "main(){int i=1;} fnord(){int i=23; int ltuae=42;}" > conftest.c
+  ${CC} -c conftest.c > /dev/null
+  if (nm conftest.o | grep _fnord) > /dev/null; then
+    libltdl_cv_uscore=yes
+  else
+    libltdl_cv_uscore=no
+  fi
+  rm -f conftest*
+])
+
+if test x"$libltdl_cv_uscore" = xyes; then
+  if test x"$ac_cv_func_dlopen" = xyes ||
+     test x"$ac_cv_lib_dl_dlopen" = xyes ; then
+       AC_CACHE_CHECK([whether we have to add an underscore for dlsym],
+               libltdl_cv_need_uscore, [dnl
+               AC_TRY_RUN([
+#include <dlfcn.h>
+#include <stdio.h>
+fnord() { int i=42;}
+main() { void *self, *ptr1, *ptr2; self=dlopen(NULL,RTLD_LAZY);
+    if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
+    if(ptr1 && !ptr2) exit(0); } exit(1); } 
+],     libltdl_cv_need_uscore=no, libltdl_cv_need_uscore=yes,
+       libltdl_cv_need_uscore=no
+)])
+  fi
+fi
+
+if test x"$libltdl_cv_need_uscore" = xyes; then
+   AC_DEFINE(NEED_USCORE)
+fi
+
+dnl ##########################################
+dnl ##  Check for specific library functions #
+dnl ##########################################
+
+dnl Checks for library functions.
+AC_CHECK_FUNCS(strerror)
+
 dnl ------------------------------------------------------------------------
 dnl main includes
 dnl ------------------------------------------------------------------------
@@ -1243,13 +1297,6 @@ if test "$wxUSE_HELP" = 1 ; then
 fi
 AC_SUBST(HELP)
 
-dnl ----------------------------------------------------------------
-dnl select  dynamic loader (used by iODBC to load drivers)
-dnl ----------------------------------------------------------------
-
-AC_CHECK_LIB(dl,main,[DL_LIBRARY=-ldl],[DL_LIBRARY=])
-AC_SUBST(DL_LIBRARY)
-
 dnl ----------------------------------------------------------------
 dnl thread support
 dnl ----------------------------------------------------------------
@@ -1405,7 +1452,7 @@ case "${canonical}" in
 esac
 
 if test "x$GCC" = xyes; then
-  CFLAGS="${CFLAGS} -Wall -Wno-unused -Wno-uninitialized -D_REENTRANT -DLEX_SCANNER"
+  CFLAGS="${CFLAGS} -Wall -Wno-unused -Wno-uninitialized -D_REENTRANT -DLEX_SCANNER -DHAVE_LIBDL"
 fi
 
 if test "x$GXX" = xyes; then
index bb718ba3bb295bcf49d0cf12a724d4a9ee9e1e4c..8d29a834e5f055785becc2bb7a88ee258d758ab8 100644 (file)
 extern "C" {
 #include <../iodbc/isql.h>
 #include <../iodbc/isqlext.h>
-#include <../iodbc/odbc_funcs.h>
-#include <../iodbc/odbc_types.h>
-
-typedef float   SFLOAT;
-typedef double  SDOUBLE;
+typedef float         SFLOAT;
+typedef double        SDOUBLE;
+typedef unsigned int  UINT;
 #define ULONG UDWORD
 
 }
index 2a9bc78242c8b28fe472dc6667ce9b7f9d3d924f..13c80135ca038c1a2fba27b6d6fdef3d5ff26523 100644 (file)
@@ -63,22 +63,26 @@ class wxDataFormat : public wxObject
   
 public:
   
+  wxDataFormat();
   wxDataFormat( wxDataType type );
   wxDataFormat( const wxString &id );
   wxDataFormat( wxDataFormat &format );
   wxDataFormat( const GdkAtom atom );
-    
-  int GetType() const;
+
+  void SetType( wxDataType type );    
+  wxDataType GetType() const;
+  
   wxString GetId() const;
   void SetId( const wxString &id );
+  
   GdkAtom GetAtom();
       
 private:
 
-  int       m_type;
-  wxString  m_id;
-  bool      m_hasAtom;
-  GdkAtom   m_atom;
+  wxDataType  m_type;
+  wxString    m_id;
+  bool        m_hasAtom;
+  GdkAtom     m_atom;
 };
 
 //-------------------------------------------------------------------------
@@ -151,9 +155,13 @@ public:
   
   /* implementation */
   
-  virtual wxDataFormat &GetFormat() const;
+  wxDataFormat &GetFormat();
+  
+  wxDataType GetFormatType() const;
+  wxString   GetFormatId() const;
+  GdkAtom    GetFormatAtom() const;
   
-  wxDataFormat *m_format;
+  wxDataFormat m_format;
 };
 
 //----------------------------------------------------------------------------
index 2a9bc78242c8b28fe472dc6667ce9b7f9d3d924f..13c80135ca038c1a2fba27b6d6fdef3d5ff26523 100644 (file)
@@ -63,22 +63,26 @@ class wxDataFormat : public wxObject
   
 public:
   
+  wxDataFormat();
   wxDataFormat( wxDataType type );
   wxDataFormat( const wxString &id );
   wxDataFormat( wxDataFormat &format );
   wxDataFormat( const GdkAtom atom );
-    
-  int GetType() const;
+
+  void SetType( wxDataType type );    
+  wxDataType GetType() const;
+  
   wxString GetId() const;
   void SetId( const wxString &id );
+  
   GdkAtom GetAtom();
       
 private:
 
-  int       m_type;
-  wxString  m_id;
-  bool      m_hasAtom;
-  GdkAtom   m_atom;
+  wxDataType  m_type;
+  wxString    m_id;
+  bool        m_hasAtom;
+  GdkAtom     m_atom;
 };
 
 //-------------------------------------------------------------------------
@@ -151,9 +155,13 @@ public:
   
   /* implementation */
   
-  virtual wxDataFormat &GetFormat() const;
+  wxDataFormat &GetFormat();
+  
+  wxDataType GetFormatType() const;
+  wxString   GetFormatId() const;
+  GdkAtom    GetFormatAtom() const;
   
-  wxDataFormat *m_format;
+  wxDataFormat m_format;
 };
 
 //----------------------------------------------------------------------------
index bfd94286f9944a9e49ba3b15398cf63daa974652..4d34f7e9c2cfa9956ccc0aa8c4e72a96052a357a 100644 (file)
@@ -27,7 +27,6 @@ IODBC_C_SRC=\
   iodbc/hstmt.c \
   iodbc/info.c \
   iodbc/itrace.c \
-  iodbc/main.c \
   iodbc/misc.c \
   iodbc/prepare.c \
   iodbc/result.c
index e6b756326a8ad02f6ec27e4388f5a075d49b0fa2..6f8a442e140df4ff8c115d0b664794f7a07b887d 100644 (file)
 
 IMPLEMENT_CLASS(wxDataFormat, wxObject)
 
-wxDataFormat::wxDataFormat( wxDataType type )
+wxDataFormat::wxDataFormat()
 {
-    m_type = type;
-    
-    if (m_type == wxDF_TEXT)
-    {
-        m_id = "STRING";
-    } 
-    else
-    if (m_type == wxDF_BITMAP)
-    {
-        m_id = "BITMAP";
-    } 
-    else
-    if (m_type == wxDF_FILENAME)
-    {
-        m_id = "file:ALL";
-    }
-    else
-    {
-       wxFAIL_MSG( "invalid dataformat" );
-    }
-    
+    m_type = wxDF_INVALID;
     m_hasAtom = FALSE;
+    m_atom = (GdkAtom) 0;
+}
+
+wxDataFormat::wxDataFormat( wxDataType type )
+{
+    SetType( type );
 }
 
 wxDataFormat::wxDataFormat( const wxString &id )
 {
-    m_type = wxDF_PRIVATE;
-    m_id = id;
-    m_hasAtom = FALSE;
+    SetId( id );
 }
 
 wxDataFormat::wxDataFormat( wxDataFormat &format )
@@ -89,7 +73,33 @@ wxDataFormat::wxDataFormat( const GdkAtom atom )
     }
 }
 
-int wxDataFormat::GetType() const
+void wxDataFormat::SetType( wxDataType type )
+{
+    m_type = type;
+    
+    if (m_type == wxDF_TEXT)
+    {
+        m_id = "STRING";
+    } 
+    else
+    if (m_type == wxDF_BITMAP)
+    {
+        m_id = "BITMAP";
+    } 
+    else
+    if (m_type == wxDF_FILENAME)
+    {
+        m_id = "file:ALL";
+    }
+    else
+    {
+       wxFAIL_MSG( "invalid dataformat" );
+    }
+    
+    m_hasAtom = FALSE;
+}
+  
+wxDataType wxDataFormat::GetType() const
 {
     return m_type;
 }
@@ -246,21 +256,33 @@ IMPLEMENT_ABSTRACT_CLASS( wxDataObject, wxObject )
 
 wxDataObject::wxDataObject()
 {
-    m_format = (wxDataFormat*) NULL;
 }
   
 wxDataObject::~wxDataObject()
 {
-    if (m_format) delete m_format;
 }
 
-wxDataFormat &wxDataObject::GetFormat() const
+wxDataFormat &wxDataObject::GetFormat()
 {
-    wxASSERT( m_format );
+    return m_format;
+}
 
-    return (*m_format);
+wxDataType wxDataObject::GetFormatType() const
+{
+    return m_format.GetType();
+}
+
+wxString wxDataObject::GetFormatId() const
+{
+    return m_format.GetId();
 }
 
+GdkAtom wxDataObject::GetFormatAtom() const
+{
+    GdkAtom ret = m_format.GetAtom();
+    return ret;
+}  
+
 // ----------------------------------------------------------------------------
 // wxTextDataObject
 // ----------------------------------------------------------------------------
@@ -269,12 +291,12 @@ IMPLEMENT_DYNAMIC_CLASS( wxTextDataObject, wxDataObject )
 
 wxTextDataObject::wxTextDataObject()
 {
-    m_format = new wxDataFormat( wxDF_TEXT );
+    m_format.SetType( wxDF_TEXT );
 }
 
 wxTextDataObject::wxTextDataObject( const wxString& data )
 {
-    m_format = new wxDataFormat( wxDF_TEXT );
+    m_format.SetType( wxDF_TEXT );
     
     m_data = data;
 }
@@ -310,9 +332,9 @@ void wxTextDataObject::WriteString( const wxString &str, void *dest ) const
 
 IMPLEMENT_DYNAMIC_CLASS( wxFileDataObject, wxDataObject )
 
-wxFileDataObject::wxFileDataObject(void)
+wxFileDataObject::wxFileDataObject()
 {
-    m_format = new wxDataFormat( wxDF_FILENAME );
+    m_format.SetType( wxDF_FILENAME );
 }
 
 void wxFileDataObject::AddFile( const wxString &file )
@@ -344,12 +366,12 @@ IMPLEMENT_DYNAMIC_CLASS( wxBitmapDataObject, wxDataObject )
 
 wxBitmapDataObject::wxBitmapDataObject()
 {
-    m_format = new wxDataFormat( wxDF_BITMAP );
+    m_format.SetType( wxDF_BITMAP );
 }
 
 wxBitmapDataObject::wxBitmapDataObject( const wxBitmap& bitmap )
 {
-    m_format = new wxDataFormat( wxDF_BITMAP );
+    m_format.SetType( wxDF_BITMAP );
     
     m_bitmap = bitmap;
 }
@@ -390,7 +412,7 @@ wxPrivateDataObject::wxPrivateDataObject()
     m_id = "application/";
     m_id += wxTheApp->GetAppName();
     
-    m_format = new wxDataFormat( m_id );
+    m_format.SetId( m_id );
     
     m_size = 0; 
     m_data = (char*) NULL; 
@@ -404,7 +426,7 @@ wxPrivateDataObject::~wxPrivateDataObject()
 void wxPrivateDataObject::SetId( const wxString& id )
 { 
     m_id = id;
-    m_format->SetId( m_id );
+    m_format.SetId( m_id );
 }
     
 wxString wxPrivateDataObject::GetId() const
index e6b756326a8ad02f6ec27e4388f5a075d49b0fa2..6f8a442e140df4ff8c115d0b664794f7a07b887d 100644 (file)
 
 IMPLEMENT_CLASS(wxDataFormat, wxObject)
 
-wxDataFormat::wxDataFormat( wxDataType type )
+wxDataFormat::wxDataFormat()
 {
-    m_type = type;
-    
-    if (m_type == wxDF_TEXT)
-    {
-        m_id = "STRING";
-    } 
-    else
-    if (m_type == wxDF_BITMAP)
-    {
-        m_id = "BITMAP";
-    } 
-    else
-    if (m_type == wxDF_FILENAME)
-    {
-        m_id = "file:ALL";
-    }
-    else
-    {
-       wxFAIL_MSG( "invalid dataformat" );
-    }
-    
+    m_type = wxDF_INVALID;
     m_hasAtom = FALSE;
+    m_atom = (GdkAtom) 0;
+}
+
+wxDataFormat::wxDataFormat( wxDataType type )
+{
+    SetType( type );
 }
 
 wxDataFormat::wxDataFormat( const wxString &id )
 {
-    m_type = wxDF_PRIVATE;
-    m_id = id;
-    m_hasAtom = FALSE;
+    SetId( id );
 }
 
 wxDataFormat::wxDataFormat( wxDataFormat &format )
@@ -89,7 +73,33 @@ wxDataFormat::wxDataFormat( const GdkAtom atom )
     }
 }
 
-int wxDataFormat::GetType() const
+void wxDataFormat::SetType( wxDataType type )
+{
+    m_type = type;
+    
+    if (m_type == wxDF_TEXT)
+    {
+        m_id = "STRING";
+    } 
+    else
+    if (m_type == wxDF_BITMAP)
+    {
+        m_id = "BITMAP";
+    } 
+    else
+    if (m_type == wxDF_FILENAME)
+    {
+        m_id = "file:ALL";
+    }
+    else
+    {
+       wxFAIL_MSG( "invalid dataformat" );
+    }
+    
+    m_hasAtom = FALSE;
+}
+  
+wxDataType wxDataFormat::GetType() const
 {
     return m_type;
 }
@@ -246,21 +256,33 @@ IMPLEMENT_ABSTRACT_CLASS( wxDataObject, wxObject )
 
 wxDataObject::wxDataObject()
 {
-    m_format = (wxDataFormat*) NULL;
 }
   
 wxDataObject::~wxDataObject()
 {
-    if (m_format) delete m_format;
 }
 
-wxDataFormat &wxDataObject::GetFormat() const
+wxDataFormat &wxDataObject::GetFormat()
 {
-    wxASSERT( m_format );
+    return m_format;
+}
 
-    return (*m_format);
+wxDataType wxDataObject::GetFormatType() const
+{
+    return m_format.GetType();
+}
+
+wxString wxDataObject::GetFormatId() const
+{
+    return m_format.GetId();
 }
 
+GdkAtom wxDataObject::GetFormatAtom() const
+{
+    GdkAtom ret = m_format.GetAtom();
+    return ret;
+}  
+
 // ----------------------------------------------------------------------------
 // wxTextDataObject
 // ----------------------------------------------------------------------------
@@ -269,12 +291,12 @@ IMPLEMENT_DYNAMIC_CLASS( wxTextDataObject, wxDataObject )
 
 wxTextDataObject::wxTextDataObject()
 {
-    m_format = new wxDataFormat( wxDF_TEXT );
+    m_format.SetType( wxDF_TEXT );
 }
 
 wxTextDataObject::wxTextDataObject( const wxString& data )
 {
-    m_format = new wxDataFormat( wxDF_TEXT );
+    m_format.SetType( wxDF_TEXT );
     
     m_data = data;
 }
@@ -310,9 +332,9 @@ void wxTextDataObject::WriteString( const wxString &str, void *dest ) const
 
 IMPLEMENT_DYNAMIC_CLASS( wxFileDataObject, wxDataObject )
 
-wxFileDataObject::wxFileDataObject(void)
+wxFileDataObject::wxFileDataObject()
 {
-    m_format = new wxDataFormat( wxDF_FILENAME );
+    m_format.SetType( wxDF_FILENAME );
 }
 
 void wxFileDataObject::AddFile( const wxString &file )
@@ -344,12 +366,12 @@ IMPLEMENT_DYNAMIC_CLASS( wxBitmapDataObject, wxDataObject )
 
 wxBitmapDataObject::wxBitmapDataObject()
 {
-    m_format = new wxDataFormat( wxDF_BITMAP );
+    m_format.SetType( wxDF_BITMAP );
 }
 
 wxBitmapDataObject::wxBitmapDataObject( const wxBitmap& bitmap )
 {
-    m_format = new wxDataFormat( wxDF_BITMAP );
+    m_format.SetType( wxDF_BITMAP );
     
     m_bitmap = bitmap;
 }
@@ -390,7 +412,7 @@ wxPrivateDataObject::wxPrivateDataObject()
     m_id = "application/";
     m_id += wxTheApp->GetAppName();
     
-    m_format = new wxDataFormat( m_id );
+    m_format.SetId( m_id );
     
     m_size = 0; 
     m_data = (char*) NULL; 
@@ -404,7 +426,7 @@ wxPrivateDataObject::~wxPrivateDataObject()
 void wxPrivateDataObject::SetId( const wxString& id )
 { 
     m_id = id;
-    m_format->SetId( m_id );
+    m_format.SetId( m_id );
 }
     
 wxString wxPrivateDataObject::GetId() const
diff --git a/src/iodbc/COPYING b/src/iodbc/COPYING
new file mode 100644 (file)
index 0000000..79d009a
--- /dev/null
@@ -0,0 +1,482 @@
+                 GNU LIBRARY GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+                    675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+\f
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+\f
+                 GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  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.
+\f
+  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.
+\f
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  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
+\f
+     Appendix: How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free
+    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
index 68e651b9a2add6624356fee5a67581ddb26250aa..e7c359f2b3dc777d7cc7b672b97d87262db962a4 100644 (file)
@@ -1,58 +1,67 @@
-July 30, 1995, v2.00.beta:
-        0. the first release and beta version.
+January 18, 1999, V2.50:
+       * Added autoconf/automake/libtool support
+       * Licensing moved to LGPL 
+       * Added OpenLink code enhancements and bug fixes
+
+------------------------------------------------------------------------
+Original Changelog from Ke Jin
+------------------------------------------------------------------------
+July 30, 1995, v2.00.beta: 
+       0. the first release and beta version. 
 
 Sep. 11, 1995, v2.10:
-        1. Porting to AIX 3.x and 4.x, by writing dlopen(),
-           dlsym(), dlclose() interface.
-        2. Tested on SCO OpenServer 5.x
-        3. Awared of that, unlike s700/s800, exported function
-           symbols on HP9000 s300/s400 will be prepended with
-           a '_' prefix by compiler(and this '_' prefix is not
-           automatically handled by shl_findsym()). Now, it works
-           fine on s300/s400.
-        4. Support driver ODBC call tracing.
+       1. Porting to AIX 3.x and 4.x, by writing dlopen(),
+          dlsym(), dlclose() interface. 
+       2. Tested on SCO OpenServer 5.x 
+       3. Awared of that, unlike s700/s800, exported function 
+          symbols on HP9000 s300/s400 will be prepended with 
+          a '_' prefix by compiler(and this '_' prefix is not
+          automatically handled by shl_findsym()). Now, it works
+          fine on s300/s400.
+       4. Support driver ODBC call tracing.
 
 Oct. 12, 1995, v2.11:
-        5. Driver's SQLNumResultCols() will automatically be
-           invoked in driver manager's SQLExecute(),
-           SQLExecDirect() and SQLParamData() after successfully
-           (i.e. return SQL_SUCCESS or SQL_SUCCESS_WITH_INFO )
-           calling of their correspondent driver functions. This
-           simplifies the state tracing/checking of the driver
-           manager a lot and allows store procedures to return
-           result set and also make iODBC driver manager work
-           properly with SELECT INTO statements which actually
-           don't return result sets.
-        6. Memory leaks are cleared.
-        7. Two bugs in dld.c for AIX are fixed
-        8. A bug of setting tracing option is fixed.
-        9. The driver will not be unloaded by SQLDisconnect()
-           but by SQLFreeConnect() or next SQLConnect()/
-           SQLDriverConnect()/SQLBrowsConnect() on a different
-           driver. This will save driver's loading time if it
-           has been used by a previous connection(even there
-           is no active connection on this driver).
-        10.Another three platforms are supported:
-                FreeBSD                 2.x
-                Concurrent Max/OS SVR4  1.x
-                DG/UX                   5.x
-        11.autoconfig and build -- shell scripts to help modifying
-           Config.mk and building iodbc driver manager
+       5. Driver's SQLNumResultCols() will automatically be 
+          invoked in driver manager's SQLExecute(),
+          SQLExecDirect() and SQLParamData() after successfully 
+          (i.e. return SQL_SUCCESS or SQL_SUCCESS_WITH_INFO )
+          calling of their correspondent driver functions. This 
+          simplifies the state tracing/checking of the driver 
+          manager a lot and allows store procedures to return 
+          result set and also make iODBC driver manager work 
+          properly with SELECT INTO statements which actually 
+          don't return result sets.
+       6. Memory leaks are cleared.
+       7. Two bugs in dld.c for AIX are fixed 
+       8. A bug of setting tracing option is fixed.
+       9. The driver will not be unloaded by SQLDisconnect() 
+          but by SQLFreeConnect() or next SQLConnect()/
+          SQLDriverConnect()/SQLBrowsConnect() on a different 
+          driver. This will save driver's loading time if it
+          has been used by a previous connection(even there
+          is no active connection on this driver).
+       10.Another three platforms are supported:
+               FreeBSD                 2.x 
+               Concurrent Max/OS SVR4  1.x
+               DG/UX                   5.x
+       11.autoconfig and build -- shell scripts to help modifying 
+          Config.mk and building iodbc driver manager
 
 Nov. 12, 1995, v2.12
-        12.I realized that a driver manager doesn't aware of
-           difference between a C5 (i.e. hstmt) and a C6
-           (i.e. transaction) states.
-        13.The link flags "-lc" has been droped from Linux ELF
-           section of Config.mk to fix a segment fault problem.
-           Now, it works fine on Slackware 2.3 and Red Hat 2.0
-           (kernel version are 1.2.xx and 1.3.xx respectively).
-        14.On FreeBSD 2.x, dlsym() doesn't handle the '_' prefix
-           prepended to an exportting function symbol by compiler.
-           So, CLI_NAME_PREFIX needs to be defined as "_SQL" for
-           FreeBSD 2.x.
-        15.Some files are renamed
-                dld.c   -> dlf.c
-                dld.h   -> dlf.h
-                confg.h -> config.h
-        16. Fix a bug on setting tracing options.
+       12.I realized that a driver manager doesn't aware of 
+          difference between a C5 (i.e. hstmt) and a C6 
+          (i.e. transaction) states. 
+       13.The link flags "-lc" has been droped from Linux ELF
+          section of Config.mk to fix a segment fault problem.
+          Now, it works fine on Slackware 2.3 and Red Hat 2.0
+          (kernel version are 1.2.xx and 1.3.xx respectively).
+       14.On FreeBSD 2.x, dlsym() doesn't handle the '_' prefix 
+          prepended to an exportting function symbol by compiler. 
+          So, CLI_NAME_PREFIX needs to be defined as "_SQL" for 
+          FreeBSD 2.x. 
+       15.Some files are renamed
+               dld.c   -> dlf.c
+               dld.h   -> dlf.h
+               confg.h -> config.h
+       16. Fix a bug on setting tracing options.
+
diff --git a/src/iodbc/Config.mk b/src/iodbc/Config.mk
deleted file mode 100644 (file)
index 35511a7..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-#  Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-#
-
-#============ Default for all system ==============
-SHELL   =
-SHELL   = /bin/sh
-DLDAPI  = DLDAPI_SVR4_DLFCN
-DLSUFFIX= so
-OUTFILE = iodbc
-OBJX    =
-
-#============= Linux ELF =========================
-#      Slackware 2.x,(kernel 1.3.x) on i386
-#      Red Hat   2.x (kernel 1.2.x) on i486
-#
-ANSI    = -ansi
-CC      = gcc
-PIC     = -fPIC
-LDFLAGS = -shared
-LIBS    = -ldl
index 488ec4c71160042cc67a6944c0b1164bad7bfc68..a53af75fecb46f6bb6ed15771fa52c0eb427f81c 100644 (file)
@@ -1,23 +1,26 @@
-Title:         iODBC Driver Manager for Unix
+Title:         iODBC Driver Manager 
 
-Version:       2.12.0
+Version:       2.50
 
 Description:   iODBC (intrinsic Open Database Connectivity) driver manager
-               is compatible with ODBC 2.0 specification and performs exactly
-               same jobs of ODBC 2.0 driver manager(i.e driver loading, 
-               parameters and function sequence checking, driver's function 
-               invoking, etc.). Any ODBC driver works with ODBC 2.0 driver 
-               manager will also work with iODBC driver manager and vice versa. 
-               Applications(which using ODBC function calls) linked with 
+               is compatible with ODBC 2.x specification and performs exactly
+               same jobs of ODBC 2.x driver manager(i.e. driver loading, 
+               Parameters and function sequence checking, driver's function 
+               Invoking, etc.). Any ODBC driver works with ODBC 2.0 driver 
+               Manager will also work with iODBC driver manager and vice versa. 
+               Applications (using ODBC function calls) linked with 
                iODBC driver manager will be able to simultaneously access 
                different type of data sources within one process through 
-               suitable ODBC drivers. 
+               suitable iODBC drivers. 
                
-Author:                Jin, Ke <kejin@empress.com>
+Original Author:       Jin, Ke 
+Source Code Enhancement Contributors: OpenLink Software
+Maintainers:   OpenLink Software
+Web Site:      http://www.openlinksw.com
 
 Platforms:     SunOS (Sparc)           4.1.x
                HP/UX (s700/s800)       9.x, 10.x
-               HP/UX (s300/s400)       9.x 
+               HP/UX (s300/s400)       9.x 
                IBM AIX                 3.x, 4.x 
                Solaris (Sparc)         2.x
                Solaris (PCx86)         2.x
@@ -32,6 +35,6 @@ Platforms:    SunOS (Sparc)           4.1.x
                Concurrent MAX/OS       1.x 
                DG/UX                   5.x
 
-Copying-Policy:        Freely Redistributable under GNU General Public License
+License Policy:        Freely Redistributable under GNU Library General Public License (LGPL)
 
-Keywords:      ODBC, database, SQL
+Keywords:      ODBC, database, SQL, OpenLink
diff --git a/src/iodbc/INSTALL b/src/iodbc/INSTALL
new file mode 100644 (file)
index 0000000..b42a17a
--- /dev/null
@@ -0,0 +1,182 @@
+Basic Installation
+==================
+
+   These are generic installation instructions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+   The file `configure.in' is used to create `configure' by a program
+called `autoconf'.  You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.  If you're
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  You can give `configure'
+initial values for variables by setting them in the environment.  Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory.  After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+   By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc.  You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on.  Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+     CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+   If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+     Use and save the results of the tests in FILE instead of
+     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
+     debugging `configure'.
+
+`--help'
+     Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--version'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
diff --git a/src/iodbc/Makefile b/src/iodbc/Makefile
deleted file mode 100644 (file)
index d899c15..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-include ../Version.mk
-include ../Config.mk
-
-
-
-
-
-INCDIR  = .
-OUTFILE = iodbc
-
-CFLAGS = -O $(PIC) $(ANSI) -I$(INCDIR) -D$(DLDAPI) $(CFLAGSX)\
-       -DVERSION=\"$(VERSION)$(EXTVER)\"
-
-# ODBC adminiatator is statically linked on BSDI 3.1
-# On this one can comment the following line:
-#
-ODBCDM = $(ODBC_LIBPATH)/$(OUTFILE).$(DLSUFFIX)
-
-OBJS =  dlf.o dlproc.o herr.o henv.o hdbc.o hstmt.o connect.o prepare.o\
-       execute.o result.o fetch.o info.o catalog.o misc.o itrace.o $(OBJX)
-
-all:    $(OBJS) $(ODBCDM) $(ODBC_LIBPATH)/lib$(OUTFILE).a
-       @rm -f $(ODBC_INCLUDE)/isql.h
-       @rm -f $(ODBC_INCLUDE)/isqlext.h
-       @rm -f $(ODBC_INCLUDE)/odbc_types.h
-       @rm -f $(ODBC_INCLUDE)/odbc_funcs.h
-       cp isql.h    $(ODBC_INCLUDE)/
-       cp isqlext.h $(ODBC_INCLUDE)/
-       cp odbc_types.h $(ODBC_INCLUDE)/
-       cp odbc_funcs.h $(ODBC_INCLUDE)/
-       @echo 
-       @echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-       @echo 
-       @echo Don\'t forget tu update $(ODBC_LIBPATH)/iodbc.ini with your conf
-       @echo 
-       @echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-       @echo 
-
-clean:
-       \rm -f $(OBJS)
-
-delete: clean
-
-delete_all: delete
-
-misc.o:        misc.c
-       $(CC) $(CFLAGS) -DFIX_INI_FILE -DDIR_INI_FILE=\"$(ODBC_LIBPATH)\" -c $<
-
-$(ODBC_LIBPATH)/lib$(OUTFILE).a: $(OBJS)
-       $(AR) $(ODBC_LIBPATH)/lib$(OUTFILE).a $(OBJS)
-       $(RANLIB) $(ODBC_LIBPATH)/lib$(OUTFILE).a
-
-$(ODBCDM): $(OBJS)
-       @echo "Generating iODBC driver manager -->" $(ODBCDM)
-       @rm -f $(ODBCDM)
-       $(LD) $(LDFLAGS) -L$(ODBC_LIBPATH) $(OBJS) -o $(ODBCDM) $(LIBS)
-       if [ ! -f $(ODBC_LIBPATH)/iodbc.ini ]; then cp  iodbc.$(OS)  $(ODBC_LIBPATH)/iodbc.ini; fi
-
diff --git a/src/iodbc/NEWS b/src/iodbc/NEWS
new file mode 100644 (file)
index 0000000..27eb6d4
--- /dev/null
@@ -0,0 +1,8 @@
+Version: 2.5
+-------------
+Added OpenLink enhancements
+
+
+Version: 2.12
+-------------
+Original version of Ke Jin
index ed0f3008a0919bc768ce450a2d13676ba5b24ef0..23cb2a5e827eeb1e2e45505a363e714ada8cd5d2 100644 (file)
 0. Changes
-        a. I realized that a driver manager doesn't aware of
-           difference between a C5 (i.e. hstmt) and a C6
-           (i.e. transaction) states.
-
-        b. The link flags "-lc" has been removed from Linux ELF
-           section of Config.mk to fix a segment fault problem.
-           Now, it works fine on Slackware 2.3 and Red Hat 2.0
-           (kernel version are 1.2.xx and 1.3.xx respectively).
-
-        c. On FreeBSD 2.x, dlsym() doesn't handle the '_'
-           prepended before a exporting function symbol. So,
-           CLI_NAME_PREFIX needs to be defined as "_SQL" for
-           FreeBSD.
-
-        d. Some files are renamed
-                dld.c   -> dlf.c
-                dld.h   -> dlf.h
-                confg.h -> config.h
+       a. I realized that a driver manager doesn't aware of 
+          difference between a C5 (i.e. hstmt) and a C6 
+          (i.e. transaction) states. 
+
+       b. The link flags "-lc" has been removed from Linux ELF
+          section of Config.mk to fix a segment fault problem.
+          Now, it works fine on Slackware 2.3 and Red Hat 2.0
+          (kernel version are 1.2.xx and 1.3.xx respectively).
+          
+       c. On FreeBSD 2.x, dlsym() doesn't handle the '_' 
+          prepended before a exporting function symbol. So, 
+          CLI_NAME_PREFIX needs to be defined as "_SQL" for 
+          FreeBSD. 
+
+       d. Some files are renamed
+               dld.c   -> dlf.c
+               dld.h   -> dlf.h
+               confg.h -> config.h
 
 1. iODBC driver manager platform availability
 
-   iODBC driver manager has been ported to following Unix platforms:
-
-        SunOS           4.1.x           Sun Sparc
-        HP/UX           9.x, 10.x       HP9000 s700/s800
-        HP/UX           9.x             HP9000 s300/s400
-        IBM AIX         3.x, 4.x        IBM RS6000, PowerPC
-        Sun Solaris     2.x             Sun Sparc, PCx86
-        SGI Irix SVR4   5.x, 6.x        IP12 MIPS, IP22 MIPS
-        NCR SVR4        3.x             NCR 3435
-        UnixWare SVR4.2 1.x, 2.x        x86
-        DEC Unix(OSF/1) 3.x, 4.x        DEC Alpha
-        FreeBSD         2.x             x86
-        BSDI BSD/OS     2.x             ?
-        Linux ELF       1.2.x, 1.3.x    x86
-        SCO OpenServer  5.x             x86
-        Max/OS SVR4     1.x             Concurrent Maxion 9200 MP
-        DG/UX           5.x             Aviion
+   iODBC driver manager has been ported to following Unix platforms: 
+
+       SunOS           4.1.x           Sun Sparc
+       HP/UX           9.x, 10.x       HP9000 s700/s800
+       HP/UX           9.x             HP9000 s300/s400                
+       IBM AIX         3.x, 4.x        IBM RS6000, PowerPC
+       Sun Solaris     2.x             Sun Sparc, PCx86
+       SGI Irix SVR4   5.x, 6.x        IP12 MIPS, IP22 MIPS
+       NCR SVR4        3.x             NCR 3435
+       UnixWare SVR4.2 1.x, 2.x        x86
+       DEC Unix(OSF/1) 3.x, 4.x        DEC Alpha
+       FreeBSD         2.x             x86
+       BSDI BSD/OS     2.x             ?
+       Linux ELF       1.2.x, 1.3.x    x86
+       SCO OpenServer  5.x             x86
+       Max/OS SVR4     1.x             Concurrent Maxion 9200 MP
+       DG/UX           5.x             Aviion
 
    Porting of iODBC driver manager to some non-unix operating systems
-   such as Windows family(3.x, 95, NT), OS/2 and Mac is supported but
-   has never compiled and tested yet :). Of cause, you need to supply
+   such as Windows family(3.x, 95, NT), OS/2 and Mac is supported but 
+   has never compiled and tested yet :). Of cause, you need to supply 
    a make/build file and a short LibMain for creating the iodbc.dll.
 
 2. How to build iODBC driver manager:
 
-        step 1. Identify your system
-        step 2. Run build with a suitable option
-
+       step 1. Identify your system
+       step 2. Run build with a suitable option
+   
    Here is an example:
 
-        %[1]: sh iodbc-2.12.shar
-        ....
-        %[2]: cd iodbc-2.12
-        %[3]: uname -s -v -r -m
-        HP-UX B.10.01 A 9000/710
-        %[4]: ./build hp700
-        autoconfig hp700
-        make
-        ....
-        Generating iODBC driver manager --> /home/kejin/iodbc-2.12.sl
+       %[1]: sh iodbc-2.12.shar
+       ....
+       %[2]: cd iodbc-2.12
+       %[3]: uname -s -v -r -m
+       HP-UX B.10.01 A 9000/710
+       %[4]: ./build hp700
+       autoconfig hp700
+       make
+       ....
+       Generating iODBC driver manager --> /home/kejin/iodbc-2.12.sl
 
 3. odbc.ini( ~/.odbc.ini )
 
-   Driver manager and drivers use odbc.ini(or ~/.odbc.ini on Unix) file
+   Driver manager and drivers use odbc.ini(or ~/.odbc.ini on Unix) file 
    or connection string when establishing a data source connection. On
-   Windows, odbc.ini is located in Windows directory. On unix, iODBC driver
-   manager(and all other ODBC drivers and driver managers I awared) looks
-   .odbc.ini file in real user's home directory (it could be a softlink to
-   the file located somewhere else). Make sure your driver will look into
-   the same file (or a file which is a symbolic link to the same file).
+   Windows, odbc.ini is located in Windows directory. On unix, iODBC driver 
+   manager(and all other ODBC drivers and driver managers I awared) looks 
+   .odbc.ini file in real user's home directory (it could be a softlink to 
+   the file located somewhere else). Make sure your driver will look into 
+   the same file (or a file which is a symbolic link to the same file).  
    The format of odbc.ini( or ~/.odbc.ini ) is defined as:
 
-        odbc.ini(or .odbc.ini) ::= data_source_list
+       odbc.ini(or .odbc.ini) ::= data_source_list
 
-        data_source_list ::= /* empty */
-                           | data_source '\n' data_source_list
+       data_source_list ::= /* empty */
+                          | data_source '\n' data_source_list
 
-        data_source ::= '[' data_source_name ']' '\n' data_source_desc
+       data_source ::= '[' data_source_name ']' '\n' data_source_desc
 
-        data_source_name ::= 'default' | [A-Za-z]*[A-Za-z0-9_]*
+       data_source_name ::= 'default' | [A-Za-z]*[A-Za-z0-9_]*
 
-        data_source_desc ::= /* empty */
-                           | attrib_desc '\n' data_source_desc
+       data_source_desc ::= /* empty */
+                          | attrib_desc '\n' data_source_desc
 
-        addrib_desc ::= Attrib '=' attrib_value
+       addrib_desc ::= Attrib '=' attrib_value
 
-        Attrib ::= 'Driver' | 'PID' | 'UID' | driver_def_attrib
+       Attrib ::= 'Driver' | 'PID' | 'UID' | driver_def_attrib
 
-        driver_def_attrib ::= [A-Za-z]*[A-Za-z0-9_]*
+       driver_def_attrib ::= [A-Za-z]*[A-Za-z0-9_]*
 
    An example of .odbc.ini file:
 
-        [toronto_yp]
-        # yellow page of metro Toronto
-        Driver = /usr/lib/odbc/oracle.so
-        <....>
+       [toronto_yp]
+       # yellow page of metro Toronto
+       Driver = /usr/lib/odbc/oracle.so
+       <....>
 
-        [toronto_wp]
-        # white page of metro Toronto
-        Driver = /usr/lib/odbc/oracle.so
-        <....>
+       [toronto_wp]
+       # white page of metro Toronto
+       Driver = /usr/lib/odbc/oracle.so
+       <....>
 
-        [contract]
-        # all contract documents
-        Driver = /usr/lib/odbc/informix.so
-        <....>
+       [contract]
+       # all contract documents
+       Driver = /usr/lib/odbc/informix.so
+       <....>
 
-        [netnews]
-        # NNTP netnews group
-        Driver = /usr/lib/odbc/nnodbc.so
-        Server = news.empress.com
+       [netnews]
+       # NNTP netnews group 
+       Driver = /usr/lib/odbc/nnodbc.so
+       Server = news.empress.com
 
-        [rnd_test]
-        # data source for R&D test
-        Driver = /home/r_d/odbc/empodbc.so
-        URL = empodbc://rnd.empress.com:6322/rnd_test/testdb
+       [rnd_test]
+       # data source for R&D test
+       Driver = /home/r_d/odbc/empodbc.so
+       URL = empodbc://rnd.empress.com:6322/rnd_test/testdb
 
-        [default]
-        # default to odbc gateway
-        Driver = /usr/lib/odbc/gateway.so
+       [default]
+       # default to odbc gateway
+       Driver = /usr/lib/odbc/gateway.so
 
 4. Tracing
 
-   iODBC driver manager traces driver's ODBC call invoked by the driver
-   manager. Default tracing file is ./odbc.log. Tracing option (i.e.
-   on/off or optional tracing file name) can be set in ~/.odbc.ini
+   iODBC driver manager traces driver's ODBC call invoked by the driver 
+   manager. Default tracing file is ./odbc.log. Tracing option (i.e. 
+   on/off or optional tracing file name) can be set in ~/.odbc.ini 
    file (under a data source section) as:
 
-        TraceFile = <optional_trace_file>
-        Trace = ON | On | on | 1 | OFF | Off | off | 0
+       TraceFile = <optional_trace_file>
+       Trace = ON | On | on | 1 | OFF | Off | off | 0
 
    If <optional_trace_file> is stderr or stdout, i.e.
-
-        TraceFile = stderr
-
+   
+        TraceFile = stderr 
+   
    or
 
-        TraceFile = stdout
+       TraceFile = stdout
 
    the tracing message will go to the terminal screen(if it is available).
 
    iODBC driver manager allows one to tune on/off tracing on selected
-   connection(s). Different connections can share one or use different
+   connection(s). Different connections can share one or use different 
    tracing file(s). ODBC calls on connections without tuning tracing on
-   will not be traced.
-
+   will not be traced. 
+       
 5. File list:
 
-        README          This file
-        IAFA-PACKAGE    Version and copyright information
-        Changes.log     Source changes log
-        Version.mk      Version make include file
-        Config.mk       Config  make include file
-        Makefile        make file
-        config.h        system config include file
-        isql.h          ODBC 1.0 macro
-        isqlext.h       ODBC 2.0 macro
-        dlf.h           general dynamic loader module interface
-        dlf.c           general dynamic loader module (mapping to svr4)
-        dlproc.h        simple dynamic loader module interface
-        dlproc.c        simple dynamic loader on top of dlf module
-        herr.h          error handling module interface
-        herr.c          error handling module
-        herr.ci         error handling source include
-        henv.h          environment handle interface
-        henv.c          environment handle module
-        henv.ci         environment handle source include
-        hdbc.h          connection handle interface
-        hdbc.c          connection handle module
-        hstmt.h         statement  handle interface
-        hstmt.c         statement  handle module
-        connect.c       connect functions
-        prepare.c       query prepare functions
-        execute.c       query executing functions
-        result.c        query result property functions
-        fetch.c         query result fetch functions
-        info.c          driver information functions
-        catalog.c       catalog functions
-        misc.c          miscellaneous functions
-        itrace.h        macro
-        itrace.c        trace function
-        main.c          entry function used to build a share library on AIX
-        shrsub.exp      export symbol list used on AIX
-        autoconfig      shell script for creating Config.mk
-        build           shell script for building iodbc driver manager
+       README          This file
+       IAFA-PACKAGE    Version and copyright information
+       Changes.log     Source changes log
+       Version.mk      Version make include file
+       Config.mk       Config  make include file
+       Makefile        make file
+       config.h        system config include file
+       isql.h          ODBC 1.0 macro 
+       isqlext.h       ODBC 2.0 macro
+       dlf.h           general dynamic loader module interface
+       dlf.c           general dynamic loader module (mapping to svr4)
+       dlproc.h        simple dynamic loader module interface 
+       dlproc.c        simple dynamic loader on top of dlf module
+       herr.h          error handling module interface
+       herr.c          error handling module
+       herr.ci         error handling source include
+       henv.h          environment handle interface
+       henv.c          environment handle module
+       henv.ci         environment handle source include 
+       hdbc.h          connection handle interface
+       hdbc.c          connection handle module
+       hstmt.h         statement  handle interface
+       hstmt.c         statement  handle module
+       connect.c       connect functions
+       prepare.c       query prepare functions
+       execute.c       query executing functions
+       result.c        query result property functions
+       fetch.c         query result fetch functions
+       info.c          driver information functions
+       catalog.c       catalog functions
+       misc.c          miscellaneous functions
+       itrace.h        macro
+       itrace.c        trace function
+       main.c          entry function used to build a share library on AIX
+       shrsub.exp      export symbol list used on AIX
+       autoconfig      shell script for creating Config.mk
+       build           shell script for building iodbc driver manager 
diff --git a/src/iodbc/Version.mk b/src/iodbc/Version.mk
deleted file mode 100644 (file)
index c61ab27..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-VERSION = 2.12
-EXTVER  = .0
diff --git a/src/iodbc/build b/src/iodbc/build
deleted file mode 100755 (executable)
index eb47c38..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#! /bin/sh
-
-echo autoconfig $1
-
-if sh ./autoconfig $1 
-then 
-echo make
-make 
-fi
index 6c28eabdcfd9545fbe0bbab0d79eb121d06fc9e7..2e7a25ac54f01a217d4b9bc405f93b3357587bd2 100644 (file)
-/** Catalog functions of iODBC driver manager
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-#include       <../iodbc/iodbc.h>
-
-#include       <../iodbc/isql.h>
-#include       <../iodbc/isqlext.h>
-
-#include        <../iodbc/dlproc.h>
-
-#include       <../iodbc/herr.h>
-#include       <../iodbc/henv.h>
-#include       <../iodbc/hdbc.h>
-#include       <../iodbc/hstmt.h>
-
-#include       <../iodbc/itrace.h>
-
-static RETCODE  _iodbcdm_cata_state_ok (
-                                HSTMT   hstmt,
-                                int     fidx )
+/*
+ *  catalog.c
+ *
+ *  $Id$
+ *
+ *  Catalog functions
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include       <config.h>
+
+#include       <isql.h>
+#include       <isqlext.h>
+
+#include        <dlproc.h>
+
+#include       <herr.h>
+#include       <henv.h>
+#include       <hdbc.h>
+#include       <hstmt.h>
+
+#include       <itrace.h>
+
+static RETCODE 
+_iodbcdm_cata_state_ok (
+    HSTMT hstmt,
+    int fidx)
 /* check state for executing catalog functions */
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        int             sqlstat = en_00000;
-
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                switch( pstmt->state )
-                {
-                        case en_stmt_needdata:
-                        case en_stmt_mustput:
-                        case en_stmt_canput:
-                                sqlstat = en_S1010;
-                                break;
-
-                        case en_stmt_fetched:
-                        case en_stmt_xfetched:
-                                sqlstat = en_24000;
-                                break;
-
-                        default:
-                                break;
-                }
-        }
-        else if( pstmt->asyn_on != fidx )
-        {
-                sqlstat = en_S1010;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        return SQL_SUCCESS;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  int sqlstat = en_00000;
+
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      switch (pstmt->state)
+        {
+        case en_stmt_needdata:
+        case en_stmt_mustput:
+        case en_stmt_canput:
+          sqlstat = en_S1010;
+          break;
+
+        case en_stmt_fetched:
+        case en_stmt_xfetched:
+          sqlstat = en_24000;
+          break;
+
+        default:
+          break;
+        }
+    }
+  else if (pstmt->asyn_on != fidx)
+    {
+      sqlstat = en_S1010;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  return SQL_SUCCESS;
 }
 
-static RETCODE  _iodbcdm_cata_state_tr(
-                        HSTMT           hstmt,
-                        int             fidx,
-                        RETCODE         result )
+
+static RETCODE 
+_iodbcdm_cata_state_tr (
+    HSTMT hstmt,
+    int fidx,
+    RETCODE result)
 /* state transition for catalog function */
 {
-        STMT_t FAR*     pstmt = (STMT_t FAR*)hstmt;
-        DBC_t  FAR*     pdbc;
-
-        pdbc = (DBC_t FAR*)(pstmt->hdbc);
-
-        if( pstmt->asyn_on == fidx )
-        {
-                switch( result )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-                                break;
-
-                        case SQL_STILL_EXECUTING:
-                        default:
-                                return result;
-                }
-        }
-
-        if( pstmt->state <= en_stmt_executed )
-        {
-                switch( result )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                                pstmt->state = en_stmt_cursoropen;
-                                break;
-
-                        case SQL_ERROR:
-                                pstmt->state = en_stmt_allocated;
-                                pstmt->prep_state = 0;
-                                break;
-
-                        case SQL_STILL_EXECUTING:
-                                pstmt->asyn_on = fidx;
-                                break;
-
-                        default:
-                                break;
-                }
-        }
-
-        return result;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  DBC_t FAR *pdbc;
+
+  pdbc = (DBC_t FAR *) (pstmt->hdbc);
+
+  if (pstmt->asyn_on == fidx)
+    {
+      switch (result)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+          break;
+
+        case SQL_STILL_EXECUTING:
+        default:
+          return result;
+        }
+    }
+
+  if (pstmt->state <= en_stmt_executed)
+    {
+      switch (result)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+          pstmt->state = en_stmt_cursoropen;
+          break;
+
+        case SQL_ERROR:
+          pstmt->state = en_stmt_allocated;
+          pstmt->prep_state = 0;
+          break;
+
+        case SQL_STILL_EXECUTING:
+          pstmt->asyn_on = fidx;
+          break;
+
+        default:
+          break;
+        }
+    }
+
+  return result;
 }
 
-RETCODE SQL_API SQLGetTypeInfo(
-                        HSTMT           hstmt,
-                        SWORD           fSqlType )
+
+RETCODE SQL_API 
+SQLGetTypeInfo (
+    HSTMT hstmt,
+    SWORD fSqlType)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        int             sqlstat = en_00000;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        for(;;)
-        {
-                if( fSqlType > SQL_TYPE_MAX )
-                {
-                        sqlstat = en_S1004;
-                        break;
-                }
-
-                if( fSqlType < SQL_TYPE_MIN
-                 && fSqlType > SQL_TYPE_DRIVER_START )
-                /* Note: SQL_TYPE_DRIVER_START is a nagtive
-                 * number So, we use ">" */
-                {
-                        sqlstat = en_S1004;
-                        break;
-                }
-
-                retcode = _iodbcdm_cata_state_ok( hstmt, en_GetTypeInfo );
-
-                if( retcode != SQL_SUCCESS )
-                {
-                        return SQL_ERROR;
-                }
-
-                hproc = _iodbcdm_getproc ( pstmt->hdbc, en_GetTypeInfo );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                        break;
-                }
-
-                sqlstat = en_00000;
-                if( 1 ) /* turn off solaris warning message */
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc,
-                en_GetTypeInfo, ( pstmt->dhstmt, fSqlType) )
-
-#if 0
-        retcode = hproc ( pstmt->dhstmt, fSqlType );
-#endif
-
-        return _iodbcdm_cata_state_tr( hstmt, en_GetTypeInfo, retcode );
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  int sqlstat = en_00000;
+  RETCODE retcode;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  for (;;)
+    {
+      if (fSqlType > SQL_TYPE_MAX)
+       {
+         sqlstat = en_S1004;
+         break;
+       }
+
+      /* Note: SQL_TYPE_DRIVER_START is a negative number So, we use ">" */
+      if (fSqlType < SQL_TYPE_MIN && fSqlType > SQL_TYPE_DRIVER_START)
+       {
+         sqlstat = en_S1004;
+         break;
+       }
+
+      retcode = _iodbcdm_cata_state_ok (hstmt, en_GetTypeInfo);
+
+      if (retcode != SQL_SUCCESS)
+       {
+         return SQL_ERROR;
+       }
+
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_GetTypeInfo);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+         break;
+       }
+
+      sqlstat = en_00000;
+      if (1)                   /* turn off solaris warning message */
+       break;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_GetTypeInfo, 
+    (pstmt->dhstmt, fSqlType))
+
+  return _iodbcdm_cata_state_tr (hstmt, en_GetTypeInfo, retcode);
 }
 
-RETCODE SQL_API SQLSpecialColumns(
-                        HSTMT           hstmt,
-                        UWORD           fColType,
-                        UCHAR FAR*      szTableQualifier,
-                        SWORD           cbTableQualifier,
-                        UCHAR FAR*      szTableOwner,
-                        SWORD           cbTableOwner,
-                        UCHAR FAR*      szTableName,
-                        SWORD           cbTableName,
-                        UWORD           fScope,
-                        UWORD           fNullable )
+
+RETCODE SQL_API 
+SQLSpecialColumns (
+    HSTMT hstmt,
+    UWORD fColType,
+    UCHAR FAR * szTableQualifier,
+    SWORD cbTableQualifier,
+    UCHAR FAR * szTableOwner,
+    SWORD cbTableOwner,
+    UCHAR FAR * szTableName,
+    SWORD cbTableName,
+    UWORD fScope,
+    UWORD fNullable)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        for(;;)
-        {
-                if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS )
-                 || ( cbTableOwner     < 0 && cbTableOwner     != SQL_NTS )
-                 || ( cbTableName      < 0 && cbTableName      != SQL_NTS ) )
-                {
-                        sqlstat = en_S1090;
-                        break;
-                }
-
-                if( fColType != SQL_BEST_ROWID
-                 && fColType != SQL_ROWVER )
-                {
-                        sqlstat = en_S1097;
-                        break;
-                }
-
-                if( fScope != SQL_SCOPE_CURROW
-                 && fScope != SQL_SCOPE_TRANSACTION
-                 && fScope != SQL_SCOPE_SESSION )
-                {
-                        sqlstat = en_S1098;
-                        break;
-                }
-
-                if( fNullable != SQL_NO_NULLS
-                 && fNullable != SQL_NULLABLE )
-                {
-                        sqlstat = en_S1099;
-                        break;
-                }
-
-                retcode = _iodbcdm_cata_state_ok ( hstmt, en_SpecialColumns );
-
-                if( retcode != SQL_SUCCESS )
-                {
-                        return SQL_ERROR;
-                }
-
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_SpecialColumns );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                        break;
-                }
-
-                sqlstat = en_00000;
-                if( 1 ) /* turn off solaris warning message */
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SpecialColumns, (
-                        pstmt->dhstmt,
-                        fColType,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName,
-                        fScope,
-                        fNullable ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        fColType,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName,
-                        fScope,
-                        fNullable );
-#endif
-
-        return _iodbcdm_cata_state_tr( hstmt, en_SpecialColumns, retcode );
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  for (;;)
+    {
+      if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS)
+         || (cbTableOwner < 0 && cbTableOwner != SQL_NTS)
+         || (cbTableName < 0 && cbTableName != SQL_NTS))
+       {
+         sqlstat = en_S1090;
+         break;
+       }
+
+      if (fColType != SQL_BEST_ROWID && fColType != SQL_ROWVER)
+       {
+         sqlstat = en_S1097;
+         break;
+       }
+
+      if (fScope != SQL_SCOPE_CURROW
+         && fScope != SQL_SCOPE_TRANSACTION
+         && fScope != SQL_SCOPE_SESSION)
+       {
+         sqlstat = en_S1098;
+         break;
+       }
+
+      if (fNullable != SQL_NO_NULLS && fNullable != SQL_NULLABLE)
+       {
+         sqlstat = en_S1099;
+         break;
+       }
+
+      retcode = _iodbcdm_cata_state_ok (hstmt, en_SpecialColumns);
+
+      if (retcode != SQL_SUCCESS)
+       {
+         return SQL_ERROR;
+       }
+
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_SpecialColumns);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+         break;
+       }
+
+      sqlstat = en_00000;
+      if (1)                   /* turn off solaris warning message */
+       break;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_SpecialColumns, (
+         pstmt->dhstmt,
+         fColType,
+         szTableQualifier,
+         cbTableQualifier,
+         szTableOwner,
+         cbTableOwner,
+         szTableName,
+         cbTableName,
+         fScope,
+         fNullable))
+
+  return _iodbcdm_cata_state_tr (hstmt, en_SpecialColumns, retcode);
 }
 
-RETCODE SQL_API SQLStatistics(
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szTableQualifier,
-                        SWORD           cbTableQualifier,
-                        UCHAR FAR*      szTableOwner,
-                        SWORD           cbTableOwner,
-                        UCHAR FAR*      szTableName,
-                        SWORD           cbTableName,
-                        UWORD           fUnique,
-                        UWORD           fAccuracy )
+
+RETCODE SQL_API 
+SQLStatistics (
+    HSTMT hstmt,
+    UCHAR FAR * szTableQualifier,
+    SWORD cbTableQualifier,
+    UCHAR FAR * szTableOwner,
+    SWORD cbTableOwner,
+    UCHAR FAR * szTableName,
+    SWORD cbTableName,
+    UWORD fUnique,
+    UWORD fAccuracy)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        for(;;)
-        {
-                if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS )
-                 || ( cbTableOwner     < 0 && cbTableOwner     != SQL_NTS )
-                 || ( cbTableName      < 0 && cbTableName      != SQL_NTS ) )
-                {
-                        sqlstat = en_S1090;
-                        break;
-                }
-
-                if( fUnique != SQL_INDEX_UNIQUE
-                 && fUnique != SQL_INDEX_ALL )
-                {
-                        sqlstat = en_S1100;
-                        break;
-                }
-
-                if( fAccuracy != SQL_ENSURE
-                 && fAccuracy != SQL_QUICK )
-                {
-                        sqlstat = en_S1101;
-                        break;
-                }
-
-                retcode = _iodbcdm_cata_state_ok ( hstmt, en_Statistics );
-
-                if( retcode != SQL_SUCCESS )
-                {
-                        return SQL_ERROR;
-                }
-
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_Statistics );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                        break;
-                }
-
-                sqlstat = en_00000;
-
-                if( 1 ) /* turn off solaris warning message */
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Statistics, (
-                        pstmt->dhstmt,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName,
-                        fUnique,
-                        fAccuracy ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName,
-                        fUnique,
-                        fAccuracy );
-#endif
-
-        return _iodbcdm_cata_state_tr( hstmt, en_Statistics, retcode );
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  for (;;)
+    {
+      if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS)
+         || (cbTableOwner < 0 && cbTableOwner != SQL_NTS)
+         || (cbTableName < 0 && cbTableName != SQL_NTS))
+       {
+         sqlstat = en_S1090;
+         break;
+       }
+
+      if (fUnique != SQL_INDEX_UNIQUE && fUnique != SQL_INDEX_ALL)
+       {
+         sqlstat = en_S1100;
+         break;
+       }
+
+      if (fAccuracy != SQL_ENSURE && fAccuracy != SQL_QUICK)
+       {
+         sqlstat = en_S1101;
+         break;
+       }
+
+      retcode = _iodbcdm_cata_state_ok (hstmt, en_Statistics);
+
+      if (retcode != SQL_SUCCESS)
+       {
+         return SQL_ERROR;
+       }
+
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_Statistics);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+         break;
+       }
+
+      sqlstat = en_00000;
+
+      if (1)                   /* turn off solaris warning message */
+       break;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_Statistics, (
+         pstmt->dhstmt,
+         szTableQualifier,
+         cbTableQualifier,
+         szTableOwner,
+         cbTableOwner,
+         szTableName,
+         cbTableName,
+         fUnique,
+         fAccuracy))
+
+  return _iodbcdm_cata_state_tr (hstmt, en_Statistics, retcode);
 }
 
-RETCODE SQL_API SQLTables(
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szTableQualifier,
-                        SWORD           cbTableQualifier,
-                        UCHAR FAR*      szTableOwner,
-                        SWORD           cbTableOwner,
-                        UCHAR FAR*      szTableName,
-                        SWORD           cbTableName,
-                        UCHAR FAR*      szTableType,
-                        SWORD           cbTableType )
+
+RETCODE SQL_API 
+SQLTables (
+    HSTMT hstmt,
+    UCHAR FAR * szTableQualifier,
+    SWORD cbTableQualifier,
+    UCHAR FAR * szTableOwner,
+    SWORD cbTableOwner,
+    UCHAR FAR * szTableName,
+    SWORD cbTableName,
+    UCHAR FAR * szTableType,
+    SWORD cbTableType)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        for(;;)
-        {
-                if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS )
-                 || ( cbTableOwner     < 0 && cbTableOwner     != SQL_NTS )
-                 || ( cbTableName      < 0 && cbTableName      != SQL_NTS )
-                 || ( cbTableType      < 0 && cbTableType      != SQL_NTS ) )
-                {
-                        sqlstat = en_S1090;
-                        break;
-                }
-
-                retcode = _iodbcdm_cata_state_ok ( hstmt, en_Tables );
-
-                if( retcode != SQL_SUCCESS )
-                {
-                        return SQL_ERROR;
-                }
-
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_Tables );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                        break;
-                }
-
-                sqlstat = en_00000;
-
-                if( 1 ) /* turn off solaris warning message */
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Tables, (
-                        pstmt->dhstmt,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName,
-                        szTableType,
-                        cbTableType ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName,
-                        szTableType,
-                        cbTableType );
-#endif
-
-        return _iodbcdm_cata_state_tr( hstmt, en_Tables, retcode );
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  for (;;)
+    {
+      if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS)
+         || (cbTableOwner < 0 && cbTableOwner != SQL_NTS)
+         || (cbTableName < 0 && cbTableName != SQL_NTS)
+         || (cbTableType < 0 && cbTableType != SQL_NTS))
+       {
+         sqlstat = en_S1090;
+         break;
+       }
+
+      retcode = _iodbcdm_cata_state_ok (hstmt, en_Tables);
+
+      if (retcode != SQL_SUCCESS)
+       {
+         return SQL_ERROR;
+       }
+
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_Tables);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+         break;
+       }
+
+      sqlstat = en_00000;
+
+      if (1)                   /* turn off solaris warning message */
+       break;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_Tables, (
+         pstmt->dhstmt,
+         szTableQualifier,
+         cbTableQualifier,
+         szTableOwner,
+         cbTableOwner,
+         szTableName,
+         cbTableName,
+         szTableType,
+         cbTableType))
+
+  return _iodbcdm_cata_state_tr (hstmt, en_Tables, retcode);
 }
 
-RETCODE SQL_API SQLColumnPrivileges(
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szTableQualifier,
-                        SWORD           cbTableQualifier,
-                        UCHAR FAR*      szTableOwner,
-                        SWORD           cbTableOwner,
-                        UCHAR FAR*      szTableName,
-                        SWORD           cbTableName,
-                        UCHAR FAR*      szColumnName,
-                        SWORD           cbColumnName )
+
+RETCODE SQL_API 
+SQLColumnPrivileges (
+    HSTMT hstmt,
+    UCHAR FAR * szTableQualifier,
+    SWORD cbTableQualifier,
+    UCHAR FAR * szTableOwner,
+    SWORD cbTableOwner,
+    UCHAR FAR * szTableName,
+    SWORD cbTableName,
+    UCHAR FAR * szColumnName,
+    SWORD cbColumnName)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        for(;;)
-        {
-                if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS )
-                 || ( cbTableOwner     < 0 && cbTableOwner     != SQL_NTS )
-                 || ( cbTableName      < 0 && cbTableName      != SQL_NTS )
-                 || ( cbColumnName     < 0 && cbColumnName     != SQL_NTS ) )
-                {
-                        sqlstat = en_S1090;
-                        break;
-                }
-
-                retcode = _iodbcdm_cata_state_ok ( hstmt, en_ColumnPrivileges );
-
-                if( retcode != SQL_SUCCESS )
-                {
-                        return SQL_ERROR;
-                }
-
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_ColumnPrivileges );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                        break;
-                }
-
-                sqlstat = en_00000;
-
-                if( 1 ) /* turn off solaris warning message */
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ColumnPrivileges, (
-                        pstmt->dhstmt,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName,
-                        szColumnName,
-                        cbColumnName ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName,
-                        szColumnName,
-                        cbColumnName );
-#endif
-
-        return _iodbcdm_cata_state_tr( hstmt, en_ColumnPrivileges, retcode );
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  for (;;)
+    {
+      if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS)
+         || (cbTableOwner < 0 && cbTableOwner != SQL_NTS)
+         || (cbTableName < 0 && cbTableName != SQL_NTS)
+         || (cbColumnName < 0 && cbColumnName != SQL_NTS))
+       {
+         sqlstat = en_S1090;
+         break;
+       }
+
+      retcode = _iodbcdm_cata_state_ok (hstmt, en_ColumnPrivileges);
+
+      if (retcode != SQL_SUCCESS)
+       {
+         return SQL_ERROR;
+       }
+
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_ColumnPrivileges);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+         break;
+       }
+
+      sqlstat = en_00000;
+
+      if (1)                   /* turn off solaris warning message */
+       break;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_ColumnPrivileges, (
+         pstmt->dhstmt,
+         szTableQualifier,
+         cbTableQualifier,
+         szTableOwner,
+         cbTableOwner,
+         szTableName,
+         cbTableName,
+         szColumnName,
+         cbColumnName))
+
+  return _iodbcdm_cata_state_tr (hstmt, en_ColumnPrivileges, retcode);
 }
 
-RETCODE SQL_API SQLColumns(
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szTableQualifier,
-                        SWORD           cbTableQualifier,
-                        UCHAR FAR*      szTableOwner,
-                        SWORD           cbTableOwner,
-                        UCHAR FAR*      szTableName,
-                        SWORD           cbTableName,
-                        UCHAR FAR*      szColumnName,
-                        SWORD           cbColumnName )
+
+RETCODE SQL_API 
+SQLColumns (
+    HSTMT hstmt,
+    UCHAR FAR * szTableQualifier,
+    SWORD cbTableQualifier,
+    UCHAR FAR * szTableOwner,
+    SWORD cbTableOwner,
+    UCHAR FAR * szTableName,
+    SWORD cbTableName,
+    UCHAR FAR * szColumnName,
+    SWORD cbColumnName)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        for(;;)
-        {
-                if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS )
-                 || ( cbTableOwner     < 0 && cbTableOwner     != SQL_NTS )
-                 || ( cbTableName      < 0 && cbTableName      != SQL_NTS )
-                 || ( cbColumnName     < 0 && cbColumnName     != SQL_NTS ) )
-                {
-                        sqlstat = en_S1090;
-                        break;
-                }
-
-                retcode = _iodbcdm_cata_state_ok ( hstmt, en_Columns );
-
-                if( retcode != SQL_SUCCESS )
-                {
-                        return SQL_ERROR;
-                }
-
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_Columns );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                        break;
-                }
-
-                sqlstat = en_00000;
-
-                if( 1 ) /* turn off solaris warning message */
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Columns, (
-                        pstmt->dhstmt,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName,
-                        szColumnName,
-                        cbColumnName ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName,
-                        szColumnName,
-                        cbColumnName );
-#endif
-
-        return _iodbcdm_cata_state_tr( hstmt, en_Columns, retcode );
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  for (;;)
+    {
+      if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS)
+         || (cbTableOwner < 0 && cbTableOwner != SQL_NTS)
+         || (cbTableName < 0 && cbTableName != SQL_NTS)
+         || (cbColumnName < 0 && cbColumnName != SQL_NTS))
+       {
+         sqlstat = en_S1090;
+         break;
+       }
+
+      retcode = _iodbcdm_cata_state_ok (hstmt, en_Columns);
+
+      if (retcode != SQL_SUCCESS)
+       {
+         return SQL_ERROR;
+       }
+
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_Columns);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+         break;
+       }
+
+      sqlstat = en_00000;
+
+      if (1)                   /* turn off solaris warning message */
+       break;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_Columns, (
+         pstmt->dhstmt,
+         szTableQualifier,
+         cbTableQualifier,
+         szTableOwner,
+         cbTableOwner,
+         szTableName,
+         cbTableName,
+         szColumnName,
+         cbColumnName))
+
+  return _iodbcdm_cata_state_tr (hstmt, en_Columns, retcode);
 }
 
-RETCODE SQL_API SQLForeignKeys(
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szPkTableQualifier,
-                        SWORD           cbPkTableQualifier,
-                        UCHAR FAR*      szPkTableOwner,
-                        SWORD           cbPkTableOwner,
-                        UCHAR FAR*      szPkTableName,
-                        SWORD           cbPkTableName,
-                        UCHAR FAR*      szFkTableQualifier,
-                        SWORD           cbFkTableQualifier,
-                        UCHAR FAR*      szFkTableOwner,
-                        SWORD           cbFkTableOwner,
-                        UCHAR FAR*      szFkTableName,
-                        SWORD           cbFkTableName )
+
+RETCODE SQL_API 
+SQLForeignKeys (
+    HSTMT hstmt,
+    UCHAR FAR * szPkTableQualifier,
+    SWORD cbPkTableQualifier,
+    UCHAR FAR * szPkTableOwner,
+    SWORD cbPkTableOwner,
+    UCHAR FAR * szPkTableName,
+    SWORD cbPkTableName,
+    UCHAR FAR * szFkTableQualifier,
+    SWORD cbFkTableQualifier,
+    UCHAR FAR * szFkTableOwner,
+    SWORD cbFkTableOwner,
+    UCHAR FAR * szFkTableName,
+    SWORD cbFkTableName)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        for(;;)
-        {
-                if( ( cbPkTableQualifier < 0 && cbPkTableQualifier != SQL_NTS )
-                 || ( cbPkTableOwner     < 0 && cbPkTableOwner     != SQL_NTS )
-                 || ( cbPkTableName      < 0 && cbPkTableName      != SQL_NTS )
-                 || ( cbFkTableQualifier < 0 && cbFkTableQualifier != SQL_NTS )
-                 || ( cbFkTableOwner     < 0 && cbFkTableOwner     != SQL_NTS )
-                 || ( cbFkTableName      < 0 && cbFkTableName      != SQL_NTS ) )
-                {
-                        sqlstat = en_S1090;
-                        break;
-                }
-
-                retcode = _iodbcdm_cata_state_ok ( hstmt, en_ForeignKeys );
-
-                if( retcode != SQL_SUCCESS )
-                {
-                        return SQL_ERROR;
-                }
-
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_ForeignKeys );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                        break;
-                }
-
-                sqlstat = en_00000;
-
-                if( 1 ) /* turn off solaris warning message */
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ForeignKeys, (
-                        pstmt->dhstmt,
-                        szPkTableQualifier,
-                        cbPkTableQualifier,
-                        szPkTableOwner,
-                        cbPkTableOwner,
-                        szPkTableName,
-                        cbPkTableName,
-                        szFkTableQualifier,
-                        cbFkTableQualifier,
-                        szFkTableOwner,
-                        cbFkTableOwner,
-                        szFkTableName,
-                        cbFkTableName ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        szPkTableQualifier,
-                        cbPkTableQualifier,
-                        szPkTableOwner,
-                        cbPkTableOwner,
-                        szPkTableName,
-                        cbPkTableName,
-                        szFkTableQualifier,
-                        cbFkTableQualifier,
-                        szFkTableOwner,
-                        cbFkTableOwner,
-                        szFkTableName,
-                        cbFkTableName );
-#endif
-
-        return _iodbcdm_cata_state_tr( hstmt, en_ForeignKeys, retcode );
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  for (;;)
+    {
+      if ((cbPkTableQualifier < 0 && cbPkTableQualifier != SQL_NTS)
+         || (cbPkTableOwner < 0 && cbPkTableOwner != SQL_NTS)
+         || (cbPkTableName < 0 && cbPkTableName != SQL_NTS)
+         || (cbFkTableQualifier < 0 && cbFkTableQualifier != SQL_NTS)
+         || (cbFkTableOwner < 0 && cbFkTableOwner != SQL_NTS)
+         || (cbFkTableName < 0 && cbFkTableName != SQL_NTS))
+       {
+         sqlstat = en_S1090;
+         break;
+       }
+
+      retcode = _iodbcdm_cata_state_ok (hstmt, en_ForeignKeys);
+
+      if (retcode != SQL_SUCCESS)
+       {
+         return SQL_ERROR;
+       }
+
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_ForeignKeys);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+         break;
+       }
+
+      sqlstat = en_00000;
+
+      if (1)                   /* turn off solaris warning message */
+       break;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_ForeignKeys, (
+         pstmt->dhstmt,
+         szPkTableQualifier,
+         cbPkTableQualifier,
+         szPkTableOwner,
+         cbPkTableOwner,
+         szPkTableName,
+         cbPkTableName,
+         szFkTableQualifier,
+         cbFkTableQualifier,
+         szFkTableOwner,
+         cbFkTableOwner,
+         szFkTableName,
+         cbFkTableName))
+
+  return _iodbcdm_cata_state_tr (hstmt, en_ForeignKeys, retcode);
 }
 
-RETCODE SQL_API SQLPrimaryKeys(
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szTableQualifier,
-                        SWORD           cbTableQualifier,
-                        UCHAR FAR*      szTableOwner,
-                        SWORD           cbTableOwner,
-                        UCHAR FAR*      szTableName,
-                        SWORD           cbTableName )
+
+RETCODE SQL_API 
+SQLPrimaryKeys (
+    HSTMT hstmt,
+    UCHAR FAR * szTableQualifier,
+    SWORD cbTableQualifier,
+    UCHAR FAR * szTableOwner,
+    SWORD cbTableOwner,
+    UCHAR FAR * szTableName,
+    SWORD cbTableName)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        for(;;)
-        {
-                if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS )
-                 || ( cbTableOwner     < 0 && cbTableOwner     != SQL_NTS )
-                 || ( cbTableName      < 0 && cbTableName      != SQL_NTS ) )
-                {
-                        sqlstat = en_S1090;
-                        break;
-                }
-
-                retcode = _iodbcdm_cata_state_ok ( hstmt, en_PrimaryKeys );
-
-                if( retcode != SQL_SUCCESS )
-                {
-                        return SQL_ERROR;
-                }
-
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_PrimaryKeys );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                        break;
-                }
-
-                sqlstat = en_00000;
-
-                if( 1 ) /* turn off solaris warning message */
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_PrimaryKeys, (
-                        pstmt->dhstmt,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName );
-#endif
-
-        return _iodbcdm_cata_state_tr( hstmt, en_PrimaryKeys, retcode );
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  for (;;)
+    {
+      if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS)
+         || (cbTableOwner < 0 && cbTableOwner != SQL_NTS)
+         || (cbTableName < 0 && cbTableName != SQL_NTS))
+       {
+         sqlstat = en_S1090;
+         break;
+       }
+
+      retcode = _iodbcdm_cata_state_ok (hstmt, en_PrimaryKeys);
+
+      if (retcode != SQL_SUCCESS)
+       {
+         return SQL_ERROR;
+       }
+
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_PrimaryKeys);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+         break;
+       }
+
+      sqlstat = en_00000;
+
+      if (1)                   /* turn off solaris warning message */
+       break;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_PrimaryKeys, (
+         pstmt->dhstmt,
+         szTableQualifier,
+         cbTableQualifier,
+         szTableOwner,
+         cbTableOwner,
+         szTableName,
+         cbTableName))
+
+  return _iodbcdm_cata_state_tr (hstmt, en_PrimaryKeys, retcode);
 }
 
-RETCODE SQL_API SQLProcedureColumns(
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szProcQualifier,
-                        SWORD           cbProcQualifier,
-                        UCHAR FAR*      szProcOwner,
-                        SWORD           cbProcOwner,
-                        UCHAR FAR*      szProcName,
-                        SWORD           cbProcName,
-                        UCHAR FAR*      szColumnName,
-                        SWORD           cbColumnName )
+
+RETCODE SQL_API 
+SQLProcedureColumns (
+    HSTMT hstmt,
+    UCHAR FAR * szProcQualifier,
+    SWORD cbProcQualifier,
+    UCHAR FAR * szProcOwner,
+    SWORD cbProcOwner,
+    UCHAR FAR * szProcName,
+    SWORD cbProcName,
+    UCHAR FAR * szColumnName,
+    SWORD cbColumnName)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        for(;;)
-        {
-                if( ( cbProcQualifier < 0 && cbProcQualifier != SQL_NTS )
-                 || ( cbProcOwner     < 0 && cbProcOwner     != SQL_NTS )
-                 || ( cbProcName      < 0 && cbProcName      != SQL_NTS )
-                 || ( cbColumnName    < 0 && cbColumnName    != SQL_NTS ) )
-                {
-                        sqlstat = en_S1090;
-                        break;
-                }
-
-                retcode = _iodbcdm_cata_state_ok ( hstmt, en_ProcedureColumns );
-
-                if( retcode != SQL_SUCCESS )
-                {
-                        return SQL_ERROR;
-                }
-
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_ProcedureColumns );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                        break;
-                }
-
-                sqlstat = en_00000;
-
-                if( 1 ) /* turn off solaris warning message */
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ProcedureColumns, (
-                        pstmt->dhstmt,
-                        szProcQualifier,
-                        cbProcQualifier,
-                        szProcOwner,
-                        cbProcOwner,
-                        szProcName,
-                        cbProcName,
-                        szColumnName,
-                        cbColumnName ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        szProcQualifier,
-                        cbProcQualifier,
-                        szProcOwner,
-                        cbProcOwner,
-                        szProcName,
-                        cbProcName,
-                        szColumnName,
-                        cbColumnName );
-#endif
-
-        return _iodbcdm_cata_state_tr( hstmt, en_ProcedureColumns, retcode );
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  for (;;)
+    {
+      if ((cbProcQualifier < 0 && cbProcQualifier != SQL_NTS)
+         || (cbProcOwner < 0 && cbProcOwner != SQL_NTS)
+         || (cbProcName < 0 && cbProcName != SQL_NTS)
+         || (cbColumnName < 0 && cbColumnName != SQL_NTS))
+       {
+         sqlstat = en_S1090;
+         break;
+       }
+
+      retcode = _iodbcdm_cata_state_ok (hstmt, en_ProcedureColumns);
+
+      if (retcode != SQL_SUCCESS)
+       {
+         return SQL_ERROR;
+       }
+
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_ProcedureColumns);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+         break;
+       }
+
+      sqlstat = en_00000;
+
+      if (1)                   /* turn off solaris warning message */
+       break;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_ProcedureColumns, (
+         pstmt->dhstmt,
+         szProcQualifier,
+         cbProcQualifier,
+         szProcOwner,
+         cbProcOwner,
+         szProcName,
+         cbProcName,
+         szColumnName,
+         cbColumnName))
+
+  return _iodbcdm_cata_state_tr (hstmt, en_ProcedureColumns, retcode);
 }
 
-RETCODE SQL_API SQLProcedures(
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szProcQualifier,
-                        SWORD           cbProcQualifier,
-                        UCHAR FAR*      szProcOwner,
-                        SWORD           cbProcOwner,
-                        UCHAR FAR*      szProcName,
-                        SWORD           cbProcName )
+
+RETCODE SQL_API 
+SQLProcedures (
+    HSTMT hstmt,
+    UCHAR FAR * szProcQualifier,
+    SWORD cbProcQualifier,
+    UCHAR FAR * szProcOwner,
+    SWORD cbProcOwner,
+    UCHAR FAR * szProcName,
+    SWORD cbProcName)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        for(;;)
-        {
-                if( ( cbProcQualifier < 0 && cbProcQualifier != SQL_NTS )
-                 || ( cbProcOwner     < 0 && cbProcOwner     != SQL_NTS )
-                 || ( cbProcName      < 0 && cbProcName      != SQL_NTS ) )
-                {
-                        sqlstat = en_S1090;
-                        break;
-                }
-
-                retcode = _iodbcdm_cata_state_ok ( hstmt, en_Procedures );
-
-                if( retcode != SQL_SUCCESS )
-                {
-                        return SQL_ERROR;
-                }
-
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_Procedures );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                        break;
-                }
-
-                sqlstat = en_00000;
-
-                if( 1 ) /* turn off solaris warning message */
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Procedures, (
-                        pstmt->dhstmt,
-                        szProcQualifier,
-                        cbProcQualifier,
-                        szProcOwner,
-                        cbProcOwner,
-                        szProcName,
-                        cbProcName ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        szProcQualifier,
-                        cbProcQualifier,
-                        szProcOwner,
-                        cbProcOwner,
-                        szProcName,
-                        cbProcName );
-#endif
-
-        return _iodbcdm_cata_state_tr( hstmt, en_Procedures, retcode );
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  for (;;)
+    {
+      if ((cbProcQualifier < 0 && cbProcQualifier != SQL_NTS)
+         || (cbProcOwner < 0 && cbProcOwner != SQL_NTS)
+         || (cbProcName < 0 && cbProcName != SQL_NTS))
+       {
+         sqlstat = en_S1090;
+         break;
+       }
+
+      retcode = _iodbcdm_cata_state_ok (hstmt, en_Procedures);
+
+      if (retcode != SQL_SUCCESS)
+       {
+         return SQL_ERROR;
+       }
+
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_Procedures);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+         break;
+       }
+
+      sqlstat = en_00000;
+
+      if (1)                   /* turn off solaris warning message */
+       break;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_Procedures, (
+         pstmt->dhstmt,
+         szProcQualifier,
+         cbProcQualifier,
+         szProcOwner,
+         cbProcOwner,
+         szProcName,
+         cbProcName))
+
+  return _iodbcdm_cata_state_tr (hstmt, en_Procedures, retcode);
 }
 
-RETCODE SQL_API SQLTablePrivileges(
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szTableQualifier,
-                        SWORD           cbTableQualifier,
-                        UCHAR FAR*      szTableOwner,
-                        SWORD           cbTableOwner,
-                        UCHAR FAR*      szTableName,
-                        SWORD           cbTableName )
+
+RETCODE SQL_API 
+SQLTablePrivileges (
+    HSTMT hstmt,
+    UCHAR FAR * szTableQualifier,
+    SWORD cbTableQualifier,
+    UCHAR FAR * szTableOwner,
+    SWORD cbTableOwner,
+    UCHAR FAR * szTableName,
+    SWORD cbTableName)
 {
 
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        for(;;)
-        {
-                if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS )
-                 || ( cbTableOwner     < 0 && cbTableOwner     != SQL_NTS )
-                 || ( cbTableName      < 0 && cbTableName      != SQL_NTS ) )
-                {
-                        sqlstat = en_S1090;
-                        break;
-                }
-
-                retcode = _iodbcdm_cata_state_ok ( hstmt, en_TablePrivileges );
-
-                if( retcode != SQL_SUCCESS )
-                {
-                        return SQL_ERROR;
-                }
-
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_TablePrivileges );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                        break;
-                }
-
-                sqlstat = en_00000;
-
-                if( 1 ) /* turn off solaris warning message */
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_TablePrivileges, (
-                        pstmt->dhstmt,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        szTableQualifier,
-                        cbTableQualifier,
-                        szTableOwner,
-                        cbTableOwner,
-                        szTableName,
-                        cbTableName );
-#endif
-
-        return _iodbcdm_cata_state_tr( hstmt, en_TablePrivileges, retcode );
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  for (;;)
+    {
+      if ((cbTableQualifier < 0 && cbTableQualifier != SQL_NTS)
+         || (cbTableOwner < 0 && cbTableOwner != SQL_NTS)
+         || (cbTableName < 0 && cbTableName != SQL_NTS))
+       {
+         sqlstat = en_S1090;
+         break;
+       }
+
+      retcode = _iodbcdm_cata_state_ok (hstmt, en_TablePrivileges);
+
+      if (retcode != SQL_SUCCESS)
+       {
+         return SQL_ERROR;
+       }
+
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_TablePrivileges);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+         break;
+       }
+
+      sqlstat = en_00000;
+
+      if (1)                   /* turn off solaris warning message */
+       break;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_TablePrivileges,
+    (pstmt->dhstmt, szTableQualifier, cbTableQualifier, szTableOwner,
+       cbTableOwner, szTableName, cbTableName))
+
+  return _iodbcdm_cata_state_tr (hstmt, en_TablePrivileges, retcode);
 }
index 6cd62312c3966746e2392b33226ba647cf8e44e5..1fb5ac1b82cc64c904490e4cf6c08d2f5fd2396f 100644 (file)
-#ifndef _CONFIG_H
-#define _CONFIG_H
-
-# if    !defined(WINDOWS) && !defined(WIN32_SYSTEM) && !defined(OS2)
-#  define       _UNIX_
-
-#  include      <stdlib.h>
-#  include      <sys/types.h>
-#  include      <string.h>
-#  include      <stdio.h>
-
-#  define       MEM_ALLOC(size) (malloc((size_t)(size)))
-#  define       MEM_FREE(ptr)   {if(ptr) free(ptr);}
-
-#  define       STRCPY(t, s)    (strcpy((char*)(t), (char*)(s)))
-#  define       STRNCPY(t,s,n)  (strncpy((char*)(t), (char*)(s), (size_t)(n)))
-#  define       STRCAT(t, s)    (strcat((char*)(t), (char*)(s)))
-#  define       STRNCAT(t,s,n)  (strncat((char*)(t), (char*)(s), (size_t)(n)))
-#  define       STREQ(a, b)     (strcmp((char*)(a), (char*)(b)) == 0)
-#  define       STRLEN(str)     ((str)? strlen((char*)(str)):0)
-
-#  define       EXPORT
-#  define       CALLBACK
-#  define       FAR
-
-   typedef      signed short    SSHOR;
-   typedef      short           WORD;
-   typedef      long            DWORD;
-
-   typedef      WORD            WPARAM;
-   typedef      DWORD           LPARAM;
-// KB: I don't see where HWND and BOOL could get defined before here,
-// but putting in the #ifndef's solved the compilation problem on Solaris.
-#ifndef HWND
-typedef      void*           HWND;
-#endif
-#ifndef BOOL
-typedef      int             BOOL;
+/*
+ *
+ *  config.h
+ *
+ *  $Id$
+ *
+ *  Configuration
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef        _CONFIG_H
+#define        _CONFIG_H
+
+#if    !defined(WINDOWS) && !defined(WIN32_SYSTEM)
+#define        _UNIX_
+
+#include "wx/setup.h"
+
+#include       <stdlib.h>
+#include       <sys/types.h>
+#include        <string.h>
+#include        <stdio.h>
+
+#define        MEM_ALLOC(size) (malloc((size_t)(size)))
+#define        MEM_FREE(ptr)   {if(ptr) free(ptr);}
+
+#define        STRCPY(t, s)    (strcpy((char*)(t), (char*)(s)))
+#define        STRNCPY(t,s,n)  (strncpy((char*)(t), (char*)(s), (size_t)(n)))
+#define        STRCAT(t, s)    (strcat((char*)(t), (char*)(s)))
+#define        STRNCAT(t,s,n)  (strncat((char*)(t), (char*)(s), (size_t)(n)))
+#define        STREQ(a, b)     (strcmp((char*)(a), (char*)(b)) == 0)
+#define        STRLEN(str)     ((str)? strlen((char*)(str)):0)
+
+#define        EXPORT
+#define        CALLBACK
+#define        FAR
+
+typedef signed short SSHOR;
+typedef short WORD;
+typedef long DWORD;
+
+typedef WORD WPARAM;
+typedef DWORD LPARAM;
+typedef int BOOL;
+#endif /* _UNIX_ */
+
+#if    defined(WINDOWS) || defined(WIN32_SYSTEM)
+#include       <windows.h>
+#include       <windowsx.h>
+
+#ifdef _MSVC_
+#define        MEM_ALLOC(size) (fmalloc((size_t)(size)))
+#define        MEM_FREE(ptr)   ((ptr)? ffree((PTR)(ptr)):0))
+#define        STRCPY(t, s)    (fstrcpy((char FAR*)(t), (char FAR*)(s)))
+#define        STRNCPY(t,s,n)  (fstrncpy((char FAR*)(t), (char FAR*)(s), (size_t)(n)))
+#define        STRLEN(str)     ((str)? fstrlen((char FAR*)(str)):0)
+#define        STREQ(a, b)     (fstrcmp((char FAR*)(a), (char FAR*)(b) == 0)
 #endif
 
-# endif /* _UNIX_ */
-
-# if    defined(WINDOWS) || defined(WIN32_SYSTEM)
-
-#  include      <windows.h>
-#  include      <windowsx.h>
-
-#  ifdef        _MSVC_
-#   define      MEM_ALLOC(size) (fmalloc((size_t)(size)))
-#   define      MEM_FREE(ptr)   ((ptr)? ffree((PTR)(ptr)):0))
-#   define      STRCPY(t, s)    (fstrcpy((char FAR*)(t), (char FAR*)(s)))
-#   define      STRNCPY(t,s,n)  (fstrncpy((char FAR*)(t), (char FAR*)(s), (size_t)(n)))
-#   define      STRLEN(str)     ((str)? fstrlen((char FAR*)(str)):0)
-#   define      STREQ(a, b)     (fstrcmp((char FAR*)(a), (char FAR*)(b) == 0)
-#  endif
-
-#  ifdef        _BORLAND_
-#   define      MEM_ALLOC(size) (farmalloc((unsigned long)(size))
-#   define      MEM_FREE(ptr)   ((ptr)? farfree((void far*)(ptr)):0)
-#   define      STRCPY(t, s)    (_fstrcpy((char FAR*)(t), (char FAR*)(s)))
-#   define      STRNCPY(t,s,n)  (_fstrncpy((char FAR*)(t), (char FAR*)(s), (size_t)(n)))
-#   define      STRLEN(str)     ((str)? _fstrlen((char FAR*)(str)):0)
-#   define      STREQ(a, b)     (_fstrcmp((char FAR*)(a), (char FAR*)(b) == 0)
-#  endif
-
-# endif /* WINDOWS */
-
-# if    defined(OS2)
-
-#  include      <stdlib.h>
-#  include      <stdio.h>
-#  include      <string.h>
-#  include      <memory.h>
-#  define INCL_DOSMODULEMGR                 /* Module Manager values */
-#  define INCL_DOSERRORS                    /* Error values          */
-#  include      <os2.h>
-
-#  ifndef FAR
-#    define     FAR
-#  endif
-
-#  define       MEM_ALLOC(size) (malloc((size_t)(size)))
-#  define       MEM_FREE(ptr)   (free((ptr)))
-#  define       STRCPY(t, s)    (strcpy((char*)(t), (char*)(s)))
-#  define       STRNCPY(t,s,n)  (strncpy((char*)(t), (char*)(s), (size_t)(n)))
-#  define       STRCAT(t, s)    (strcat((char*)(t), (char*)(s)))
-#  define       STRNCAT(t,s,n)  (strncat((char*)(t), (char*)(s), (size_t)(n)))
-#  define       STRLEN(str)     ((str)? strlen((char*)(str)):0)
-#  define       STREQ(a, b)     (0 == strcmp((char *)(a), (char *)(b)))
-
-   typedef      signed short    SSHOR;
-   typedef      short           WORD;
-   typedef      long            DWORD;
-
-   typedef      WORD            WPARAM;
-   typedef      DWORD           LPARAM;
+#ifdef _BORLAND_
+#define        MEM_ALLOC(size) (farmalloc((unsigned long)(size))
+#define        MEM_FREE(ptr)   ((ptr)? farfree((void far*)(ptr)):0)
+#define        STRCPY(t, s)    (_fstrcpy((char FAR*)(t), (char FAR*)(s)))
+#define        STRNCPY(t,s,n)  (_fstrncpy((char FAR*)(t), (char FAR*)(s), (size_t)(n)))
+#define      STRLEN(str)     ((str)? _fstrlen((char FAR*)(str)):0)
+#define      STREQ(a, b)     (_fstrcmp((char FAR*)(a), (char FAR*)(b) == 0)
+#endif
 
-# endif /* OS2 */
+#endif /* WINDOWS */
 
-# define        SYSERR          (-1)
+#define        SYSERR          (-1)
 
-# ifndef        NULL
-#   define      NULL            ((void FAR*)0UL)
-# endif
+#ifndef        NULL
+#define        NULL            ((void FAR*)0UL)
+#endif
 
 #endif
index 11a5bbd0c9a79568995ad76c7e9fa9ad81d4dff6..be9e0f604153395ce6fc2826e98500f71a6bbed6 100644 (file)
-/** Connect(load) driver
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-#include       <../iodbc/iodbc.h>
+/*
+ *  connect.c
+ *
+ *  $Id$
+ *
+ *  Connect (load) driver
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
 
-#include       <../iodbc/isql.h>
-#include       <../iodbc/isqlext.h>
+#include       <config.h>
 
-#include        <../iodbc/dlproc.h>
+#include       <isql.h>
+#include       <isqlext.h>
 
-#include       <../iodbc/herr.h>
-#include       <../iodbc/henv.h>
-#include       <../iodbc/hdbc.h>
-#include       <../iodbc/hstmt.h>
+#include        <dlproc.h>
 
-#include       <../iodbc/itrace.h>
+#include       <herr.h>
+#include       <henv.h>
+#include       <hdbc.h>
+#include       <hstmt.h>
 
-#include        <strings.h>
-#include        <stdio.h>
+#include       <itrace.h>
 
-extern  char*   _iodbcdm_getkeyvalbydsn();
-extern  char*   _iodbcdm_getkeyvalinstr();
-extern  RETCODE _iodbcdm_driverunload();
+extern char*   _iodbcdm_getkeyvalbydsn();
+extern char*   _iodbcdm_getkeyvalinstr();
+extern RETCODE _iodbcdm_driverunload();
 
 /*
- *   Following id string is a copyright mark. Removing(i.e. use
- *   souce code of this package without it or make it not appear
- *   in the final object file) or modifing it without permission
- *   from original author(kejin@empress.com) are copyright
+ *   Following id string is a copyright mark. Removing(i.e. use 
+ *   souce code of this package without it or make it not appear 
+ *   in the final object file) or modifing it without permission 
+ *   from original author(kejin@empress.com) are copyright 
  *   violation.
  */
-static  char sccsid[]
-        = "@(#)iODBC driver manager " "2.12" ", Copyright(c) 1995 by Ke Jin";
+static char sccsid[] 
+       = "@(#)iODBC driver manager 2.5, Copyright(c) 1995 by Ke Jin";
 
-static RETCODE  _iodbcdm_driverload(
-                        char FAR*       path,
-                        HDBC            hdbc )
-/* - Load driver share library( or increase its reference count
+/* - Load driver share library( or increase its reference count 
  *   if it has already been loaded by another active connection)
  * - Call driver's SQLAllocEnv() (for the first reference only)
  * - Call driver's SQLAllocConnect()
  * - Call driver's SQLSetConnectOption() (set login time out)
  * - Increase the bookkeeping reference count
  */
+static RETCODE 
+_iodbcdm_driverload (
+    char FAR * path,
+    HDBC hdbc)
 {
-        DBC_t  FAR*     pdbc = (DBC_t FAR*)hdbc;
-        GENV_t FAR*     genv;
-        ENV_t  FAR*     penv = NULL;
-        HDLL            hdll;
-        HPROC           hproc;
-        RETCODE         retcode = SQL_SUCCESS;
-        int             sqlstat = en_00000;
-
-       if(pdbc->trace)
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  GENV_t FAR *genv;
+  ENV_t FAR *penv = NULL;
+  HDLL hdll;
+  HPROC hproc;
+  RETCODE retcode = SQL_SUCCESS;
+  int sqlstat = en_00000;
+
+  if (path == NULL || path[0] == '\0')
+    {
+      PUSHSQLERR (pdbc->herr, en_IM002);
+
+      return SQL_ERROR;
+    }
+
+  if (hdbc == SQL_NULL_HDBC || pdbc->genv == SQL_NULL_HENV)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  genv = (GENV_t FAR *) pdbc->genv;
+
+  /* This will either load the driver dll or increase its reference count */
+  hdll = _iodbcdm_dllopen ((char FAR *) path);
+
+  if (hdll == SQL_NULL_HDLL)
+    {
+      PUSHSYSERR (pdbc->herr, _iodbcdm_dllerror ());
+      PUSHSQLERR (pdbc->herr, en_IM003);
+      return SQL_ERROR;
+    }
+
+  penv = (ENV_t FAR *) (pdbc->henv);
+
+  if (penv != NULL)
+    {
+      if (penv->hdll != hdll)
        {
-         fprintf(pdbc->tstm, "_iodbcdm_driverload(%s, 0x%x)\n", path, (int)hdbc);
+         _iodbcdm_driverunload (hdbc);
+       }
+      else
+       {
+         /* 
+          * this will not unload the driver but only decrease its internal
+          * reference count 
+          */
+         _iodbcdm_dllclose (hdll);
+       }
+    }
+
+  if (penv == NULL)
+    {
+      /* 
+       * find out whether this dll has already been loaded on another 
+       * connection 
+       */
+      for (penv = (ENV_t FAR *) genv->henv; 
+         penv != NULL;
+         penv = (ENV_t FAR *) penv->next)
+       {
+         if (penv->hdll == hdll)
+           {
+             /* 
+              * this will not unload the driver but only decrease its internal
+              * reference count 
+              */
+             _iodbcdm_dllclose (hdll);
+             break;
+           }
        }
 
-        if( path == NULL || path[0] == '\0' )
-        {
-                PUSHSQLERR ( pdbc->herr, en_IM002 );
-
-                return SQL_ERROR;
-        }
-
-        if( hdbc == SQL_NULL_HDBC
-         || pdbc->genv == SQL_NULL_HENV )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        genv = (GENV_t FAR*)pdbc->genv;
-
-        hdll = _iodbcdm_dllopen( (char FAR*) path );
-                                 /* This will either load the
-                                  * driver dll or increase its
-                                  * reference count */
-
-        if( hdll == SQL_NULL_HDLL )
-        {
-         if(pdbc->trace)
-         {
-           fprintf(pdbc->tstm, "ERROR: _iodbcdm_driverload cannot load driver - '%s'\n", _iodbcdm_dllerror());
-         }
-
-                PUSHSYSERR ( pdbc->herr, _iodbcdm_dllerror() );
-                PUSHSQLERR ( pdbc->herr, en_IM003 );
-                return SQL_ERROR;
-        }
-
-        penv = (ENV_t FAR*)(pdbc->henv);
-
-        if( penv != NULL )
-        {
-                if( penv->hdll != hdll )
-                {
-                        _iodbcdm_driverunload(hdbc);
-                }
-                else
-                {
-                        _iodbcdm_dllclose( hdll );
-                        /* this will not unload the driver
-                         * but only decrease its internal
-                         * reference count
-                         */
-                }
-        }
-
-        if(penv == NULL )
-        {
-                /* find out whether this dll has already
-                 * been loaded on another connection */
-                for( penv  = (ENV_t FAR*)genv->henv;
-                     penv != NULL;
-                     penv  = (ENV_t FAR*)penv->next )
-                {
-                        if( penv->hdll == hdll )
-                        {
-                                _iodbcdm_dllclose( hdll );
-                                /* this will not unload the driver
-                                 * but only decrease its internal
-                                 * reference count
-                                 */
-                                break;
-                        }
-                }
-
-                if( penv == NULL )
-                /* no connection attaching with this dll */
-                {
-                        int     i;
-
-                        /* create a new dll env instance */
-                        penv = (ENV_t FAR*)MEM_ALLOC ( sizeof(ENV_t) );
-
-                        if( penv == NULL )
-                        {
-                                _iodbcdm_dllclose(hdll);
-
-                                PUSHSQLERR ( pdbc->herr, en_S1001 );
-
-                                return SQL_ERROR;
-                        }
-
-                        for( i = 0; i< SQL_EXT_API_LAST + 1; i++)
-                        {
-                                (penv->dllproc_tab)[i] = SQL_NULL_HPROC;
-                        }
-
-                        pdbc->henv = penv;
-                        penv->hdll = hdll;
-
-                        /* call driver's SQLAllocHandle() or SQLAllocEnv() */
+      if (penv == NULL)
+       /* no connection attaching with this dll */
+       {
+         int i;
+
+         /* create a new dll env instance */
+         penv = (ENV_t FAR *) MEM_ALLOC (sizeof (ENV_t));
+
+         if (penv == NULL)
+           {
+             _iodbcdm_dllclose (hdll);
+
+             PUSHSQLERR (pdbc->herr, en_S1001);
+
+             return SQL_ERROR;
+           }
+
+         for (i = 0; i < SQL_EXT_API_LAST + 1; i++)
+           {
+             (penv->dllproc_tab)[i] = SQL_NULL_HPROC;
+           }
+
+         pdbc->henv = penv;
+         penv->hdll = hdll;
+
+         /* call driver's SQLAllocHandle() or SQLAllocEnv() */
+
 #if (ODBCVER >= 0x0300)
-                        hproc = _iodbcdm_getproc( hdbc, en_AllocHandle );
-
-                        if( hproc )
-                        {
-                                CALL_DRIVER ( hdbc, retcode, hproc, en_AllocHandle,
-                                        ( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &(penv->dhenv) )
-                        }
-                        else /* try driver's SQLAllocEnv() */
+         hproc = _iodbcdm_getproc (hdbc, en_AllocHandle);
+
+         if (hproc)
+           {
+             CALL_DRIVER (hdbc, retcode, hproc, en_AllocHandle,
+                 (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &(penv->dhenv)))
+           }
+         else                  /* try driver's SQLAllocEnv() */
 #endif
-                        {
-                                hproc = _iodbcdm_getproc( hdbc, en_AllocEnv );
-
-                                if( hproc == SQL_NULL_HPROC)
-                                {
-                                        sqlstat = en_IM004;
-                                }
-                                else
-                                {
-                                        CALL_DRIVER ( hdbc, retcode, hproc,
-                                        en_AllocEnv, (&(penv->dhenv)) )
-                                }
-                        }
-
-                        if( retcode == SQL_ERROR )
-                        {
-                                sqlstat = en_IM004;
-                        }
-
-                        if( sqlstat != en_00000 )
-                        {
-                                _iodbcdm_dllclose ( hdll );
-                                MEM_FREE ( penv );
-                                PUSHSQLERR ( pdbc->herr, en_IM004 );
-
-                                return SQL_ERROR;
-                        }
-
-                        /* insert into dll env list */
-                        penv->next = (ENV_t FAR*)genv->henv;
-                        genv->henv = penv;
-
-                        /* initiate this new env entry */
-                        penv->refcount = 0;     /* we will increase it after
-                                                 * driver's SQLAllocConnect()
-                                                 * success
-                                                 */
-                }
-
-                pdbc->henv = penv;
-
-                if( pdbc->dhdbc == SQL_NULL_HDBC )
-                {
+           {
+             hproc = _iodbcdm_getproc (hdbc, en_AllocEnv);
+
+             if (hproc == SQL_NULL_HPROC)
+               {
+                 sqlstat = en_IM004;
+               }
+             else
+               {
+                 CALL_DRIVER (hdbc, retcode, hproc,
+                     en_AllocEnv, (&(penv->dhenv)))
+               }
+           }
+
+         if (retcode == SQL_ERROR)
+           {
+             sqlstat = en_IM004;
+           }
+
+         if (sqlstat != en_00000)
+           {
+             _iodbcdm_dllclose (hdll);
+             MEM_FREE (penv);
+             PUSHSQLERR (pdbc->herr, en_IM004);
+
+             return SQL_ERROR;
+           }
+
+         /* insert into dll env list */
+         penv->next = (ENV_t FAR *) genv->henv;
+         genv->henv = penv;
+
+         /* initiate this new env entry */
+         penv->refcount = 0;   /* we will increase it after
+                                * driver's SQLAllocConnect()
+                                * success
+                                */
+       }
+
+      pdbc->henv = penv;
+
+      if (pdbc->dhdbc == SQL_NULL_HDBC)
+       {
+
 #if (ODBCVER >= 0x0300)
-                        hproc = _iodbcdm_getproc( hdbc, en_AllocHandle );
-
-                        if( hproc )
-                        {
-                                CALL_DRIVER( hdbc, retcode, hproc, en_AllocHandle,
-                                (SQL_HANDLE_DBC, penv->dhenv, &(pdbc->dhdbc)) )
-                        }
-                        else
+         hproc = _iodbcdm_getproc (hdbc, en_AllocHandle);
+
+         if (hproc)
+           {
+             CALL_DRIVER (hdbc, retcode, hproc, en_AllocHandle,
+                 (SQL_HANDLE_DBC, penv->dhenv, &(pdbc->dhdbc)))
+           }
+         else
 #endif
-                        {
-                                hproc = _iodbcdm_getproc( hdbc, en_AllocConnect );
-
-                                if( hproc == SQL_NULL_HPROC )
-                                {
-                                        sqlstat = en_IM005;
-                                }
-                                else
-                                {
-                                        CALL_DRIVER ( hdbc, retcode, hproc,
-                                        en_AllocConnect, (penv->dhenv, &(pdbc->dhdbc)) )
-                                }
-                        }
-
-                        if( retcode == SQL_ERROR )
-                        {
-                                sqlstat = en_IM005;
-                        }
-
-                        if( sqlstat != en_00000 )
-                        {
-                                _iodbcdm_driverunload(hdbc);
-
-                                pdbc->dhdbc = SQL_NULL_HDBC;
-                                PUSHSQLERR ( pdbc->herr, en_IM005 );
-
-                                return SQL_ERROR;
-                        }
-                }
-
-                pdbc->henv = penv;
-                penv->refcount ++;  /* bookkeeping reference count on this driver */
-        }
-
-        /* driver's login timeout option must been set before
-         * its SQLConnect() call */
-        if( pdbc->login_timeout != 0UL )
-        {
-                hproc = _iodbcdm_getproc( hdbc, en_SetConnectOption );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM004;
-                }
-                else
-                {
-                        CALL_DRIVER ( hdbc, retcode, hproc,
-                        en_SetConnectOption, (
-                                pdbc->dhdbc,
-                                SQL_LOGIN_TIMEOUT,
-                                pdbc->login_timeout ) )
-
-                        if( retcode == SQL_ERROR )
-                        {
-                                PUSHSQLERR ( pdbc->herr, en_IM006 );
-
-                                return SQL_SUCCESS_WITH_INFO;
-                        }
-                }
-        }
-
-        return SQL_SUCCESS;
+
+           {
+             hproc = _iodbcdm_getproc (hdbc, en_AllocConnect);
+
+             if (hproc == SQL_NULL_HPROC)
+               {
+                 sqlstat = en_IM005;
+               }
+             else
+               {
+                 CALL_DRIVER (hdbc, retcode, hproc,
+                     en_AllocConnect, (penv->dhenv, &(pdbc->dhdbc)))
+               }
+           }
+
+         if (retcode == SQL_ERROR)
+           {
+             sqlstat = en_IM005;
+           }
+
+         if (sqlstat != en_00000)
+           {
+             _iodbcdm_driverunload (hdbc);
+
+             pdbc->dhdbc = SQL_NULL_HDBC;
+             PUSHSQLERR (pdbc->herr, en_IM005);
+
+             return SQL_ERROR;
+           }
+       }
+
+      pdbc->henv = penv;
+      penv->refcount++;                /* bookkeeping reference count on this driver */
+    }
+
+  /* driver's login timeout option must been set before 
+   * its SQLConnect() call */
+  if (pdbc->login_timeout != 0UL)
+    {
+      hproc = _iodbcdm_getproc (hdbc, en_SetConnectOption);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM004;
+       }
+      else
+       {
+         CALL_DRIVER (hdbc, retcode, hproc,
+             en_SetConnectOption, (
+                 pdbc->dhdbc,
+                 SQL_LOGIN_TIMEOUT,
+                 pdbc->login_timeout))
+
+             if (retcode == SQL_ERROR)
+           {
+             PUSHSQLERR (pdbc->herr, en_IM006);
+
+             return SQL_SUCCESS_WITH_INFO;
+           }
+       }
+    }
+
+  return SQL_SUCCESS;
 }
 
-RETCODE _iodbcdm_driverunload( HDBC     hdbc )
+
 /* - Call driver's SQLFreeConnect()
  * - Call driver's SQLFreeEnv() ( for the last reference only)
  * - Unload the share library( or decrease its reference
@@ -298,1079 +299,948 @@ RETCODE _iodbcdm_driverunload( HDBC     hdbc )
  * - decrease bookkeeping reference count
  * - state transition to allocated
  */
+RETCODE 
+_iodbcdm_driverunload (HDBC hdbc)
 {
-        DBC_t  FAR*     pdbc = (DBC_t FAR*)hdbc;
-        ENV_t  FAR*     penv;
-        ENV_t  FAR*     tpenv;
-        GENV_t FAR*     genv;
-        HPROC           hproc;
-        RETCODE         retcode = SQL_SUCCESS;
-        int             sqlstat = en_00000;
-
-        if( hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* no pointer check will be performed in this function */
-        penv = (ENV_t  FAR*)pdbc->henv;
-        genv = (GENV_t FAR*)pdbc->genv;
-
-        if( penv == NULL
-         || penv->hdll == SQL_NULL_HDLL )
-        {
-                return SQL_SUCCESS;
-        }
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  ENV_t FAR *penv;
+  ENV_t FAR *tpenv;
+  GENV_t FAR *genv;
+  HPROC hproc;
+  RETCODE retcode = SQL_SUCCESS;
+  int sqlstat = en_00000;
+
+  if (hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* no pointer check will be performed in this function */
+  penv = (ENV_t FAR *) pdbc->henv;
+  genv = (GENV_t FAR *) pdbc->genv;
+
+  if (penv == NULL || penv->hdll == SQL_NULL_HDLL)
+    {
+      return SQL_SUCCESS;
+    }
 
 #if (ODBCVER >= 0x0300)
-        hproc = _iodbcdm_getproc( hdbc, en_FreeHandle );
-
-        if( hproc )
-        {
-                CALL_DRIVER ( hdbc, retcode, hproc, en_FreeHandle,
-                        ( SQL_HANDLE_DBC, pdbc->dhdbc ) )
-        }
-        else
+  hproc = _iodbcdm_getproc (hdbc, en_FreeHandle);
+
+  if (hproc)
+    {
+      CALL_DRIVER (hdbc, retcode, hproc, en_FreeHandle,
+         (SQL_HANDLE_DBC, pdbc->dhdbc))
+    }
+  else
 #endif
-        {
-                hproc = _iodbcdm_getproc( hdbc, en_FreeConnect );
 
-                if( hproc != SQL_NULL_HPROC )
-                {
-                        CALL_DRIVER ( hdbc, retcode, hproc,
-                        en_FreeConnect, ( pdbc->dhdbc ) )
+    {
+      hproc = _iodbcdm_getproc (hdbc, en_FreeConnect);
+
+      if (hproc != SQL_NULL_HPROC)
+       {
+         CALL_DRIVER (hdbc, retcode, hproc,
+             en_FreeConnect, (pdbc->dhdbc))
+
+             pdbc->dhdbc = SQL_NULL_HDBC;
+       }
+    }
 
-                        pdbc->dhdbc = SQL_NULL_HDBC;
-                }
-        }
+  penv->refcount--;
 
-        penv->refcount --;
+  if (!penv->refcount)
+    /* no other connections still attaching with this driver */
+    {
 
-        if( ! penv->refcount )
-        /* no other connections still attaching with this driver */
-        {
 #if (ODBCVER >= 0x0300)
-                hproc = _iodbcdm_getproc( hdbc, en_FreeHandle );
-
-                if( hproc )
-                {
-                        CALL_DRIVER ( hdbc, retcode, hproc, en_FreeHandle,
-                                ( SQL_HANDLE_ENV, penv->dhenv ) )
-                }
-                else
+      hproc = _iodbcdm_getproc (hdbc, en_FreeHandle);
+
+      if (hproc)
+       {
+         CALL_DRIVER (hdbc, retcode, hproc, en_FreeHandle,
+             (SQL_HANDLE_ENV, penv->dhenv))
+       }
+      else
 #endif
-                {
-                        hproc = _iodbcdm_getproc( hdbc, en_FreeEnv );
-
-                        if( hproc != SQL_NULL_HPROC )
-                        {
-                                CALL_DRIVER ( hdbc, retcode, hproc, en_FreeEnv,
-                                                ( penv->dhenv ) )
-
-                                penv->dhenv = SQL_NULL_HENV;
-                        }
-                }
-
-                _iodbcdm_dllclose ( penv->hdll );
-
-                penv->hdll == SQL_NULL_HDLL;
-
-                for( tpenv  = (ENV_t FAR*)genv->henv;
-                     tpenv != NULL;
-                     tpenv  = (ENV_t FAR*)penv->next )
-                {
-                        if( tpenv == penv )
-                        {
-                                genv->henv = penv->next;
-                                break;
-                        }
-
-                        if( tpenv->next == penv )
-                        {
-                                tpenv->next = penv->next;
-                                break;
-                        }
-                }
-
-                MEM_FREE( penv );
-        }
-
-        pdbc->henv = SQL_NULL_HENV;
-        pdbc->hstmt= SQL_NULL_HSTMT;
-        /* pdbc->herr = SQL_NULL_HERR;
-                -- delay to DM's SQLFreeConnect() */
-        pdbc->dhdbc= SQL_NULL_HDBC;
-        pdbc->state= en_dbc_allocated;
-
-        /* set connect options to default values */
-        /**********
-        pdbc->access_mode       = SQL_MODE_DEFAULT;
-        pdbc->autocommit        = SQL_AUTOCOMMIT_DEFAULT;
-        pdbc->login_timeout     = 0UL;
-        **********/
-        pdbc->odbc_cursors      = SQL_CUR_DEFAULT;
-        pdbc->packet_size       = 0UL;
-        pdbc->quiet_mode        = (UDWORD)NULL;
-        pdbc->txn_isolation     = SQL_TXN_READ_UNCOMMITTED;
-
-        if( pdbc->current_qualifier != NULL )
-        {
-                MEM_FREE ( pdbc->current_qualifier );
-                pdbc->current_qualifier = NULL;
-        }
-
-        return SQL_SUCCESS;
+
+       {
+         hproc = _iodbcdm_getproc (hdbc, en_FreeEnv);
+
+         if (hproc != SQL_NULL_HPROC)
+           {
+             CALL_DRIVER (hdbc, retcode, hproc, en_FreeEnv,
+                 (penv->dhenv))
+
+                 penv->dhenv = SQL_NULL_HENV;
+           }
+       }
+
+      _iodbcdm_dllclose (penv->hdll);
+
+      penv->hdll = SQL_NULL_HDLL;
+
+      for (tpenv = (ENV_t FAR *) genv->henv;
+         tpenv != NULL;
+         tpenv = (ENV_t FAR *) penv->next)
+       {
+         if (tpenv == penv)
+           {
+             genv->henv = penv->next;
+             break;
+           }
+
+         if (tpenv->next == penv)
+           {
+             tpenv->next = penv->next;
+             break;
+           }
+       }
+
+      MEM_FREE (penv);
+    }
+
+  pdbc->henv = SQL_NULL_HENV;
+  pdbc->hstmt = SQL_NULL_HSTMT;
+  /* pdbc->herr = SQL_NULL_HERR; 
+     -- delay to DM's SQLFreeConnect() */
+  pdbc->dhdbc = SQL_NULL_HDBC;
+  pdbc->state = en_dbc_allocated;
+
+  /* set connect options to default values */
+       /**********
+       pdbc->access_mode       = SQL_MODE_DEFAULT;
+       pdbc->autocommit        = SQL_AUTOCOMMIT_DEFAULT;
+       pdbc->login_timeout     = 0UL;
+       **********/
+  pdbc->odbc_cursors = SQL_CUR_DEFAULT;
+  pdbc->packet_size = 0UL;
+  pdbc->quiet_mode = (UDWORD) NULL;
+  pdbc->txn_isolation = SQL_TXN_READ_UNCOMMITTED;
+
+  if (pdbc->current_qualifier != NULL)
+    {
+      MEM_FREE (pdbc->current_qualifier);
+      pdbc->current_qualifier = NULL;
+    }
+
+  return SQL_SUCCESS;
 }
 
-static RETCODE  _iodbcdm_dbcdelayset( HDBC hdbc )
+
+static RETCODE 
+_iodbcdm_dbcdelayset (HDBC hdbc)
 {
-        DBC_t FAR*      pdbc    = (DBC_t FAR*)hdbc;
-        ENV_t FAR*      penv;
-        HPROC           hproc;
-        RETCODE         retcode = SQL_SUCCESS;
-        RETCODE         ret;
-
-        penv = pdbc->henv;
-
-        hproc = _iodbcdm_getproc( hdbc, en_SetConnectOption );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pdbc->herr, en_IM006 );
-
-                return SQL_SUCCESS_WITH_INFO;
-        }
-
-        if( pdbc->access_mode != SQL_MODE_DEFAULT )
-        {
-                CALL_DRIVER ( hdbc, ret, hproc,
-                        en_SetConnectOption, (
-                                SQL_ACCESS_MODE,
-                                pdbc->access_mode) )
-
-                retcode |= ret;
-        }
-
-        if( pdbc->autocommit != SQL_AUTOCOMMIT_DEFAULT )
-        {
-                CALL_DRIVER ( hdbc, ret, hproc,
-                        en_SetConnectOption, (
-                                pdbc->dhdbc,
-                                SQL_AUTOCOMMIT,
-                                pdbc->autocommit ) )
-
-                retcode |= ret;
-        }
-
-        if( pdbc->current_qualifier != NULL )
-        {
-                CALL_DRIVER ( hdbc, ret, hproc,
-                        en_SetConnectOption, (
-                                pdbc->dhdbc,
-                                SQL_CURRENT_QUALIFIER,
-                                pdbc->current_qualifier ) )
-
-                retcode |= ret;
-        }
-
-        if( pdbc->packet_size != 0UL )
-        {
-                CALL_DRIVER ( hdbc, ret, hproc,
-                        en_SetConnectOption, (
-                                pdbc->dhdbc,
-                                SQL_PACKET_SIZE,
-                                pdbc->packet_size ) )
-
-                retcode |= ret;
-        }
-
-        if( pdbc->quiet_mode != (UDWORD)NULL )
-        {
-                CALL_DRIVER ( hdbc, ret, hproc,
-                        en_SetConnectOption, (
-                                pdbc->dhdbc,
-                                SQL_QUIET_MODE,
-                                pdbc->quiet_mode ) )
-
-                retcode |= ret;
-        }
-
-        if( pdbc->txn_isolation != SQL_TXN_READ_UNCOMMITTED )
-        {
-                CALL_DRIVER ( hdbc, ret, hproc,
-                        en_SetConnectOption, (
-                                pdbc->dhdbc,
-                                SQL_TXN_ISOLATION,
-                                pdbc->txn_isolation ) )
-        }
-
-        /* check error code for driver's SQLSetConnectOption() call */
-        if( retcode != SQL_SUCCESS
-         && retcode != SQL_SUCCESS_WITH_INFO )
-        {
-                PUSHSQLERR ( pdbc->herr, en_IM006 );
-
-                retcode = SQL_ERROR;
-        }
-
-        /* get cursor behavior on transaction commit or rollback */
-        hproc = _iodbcdm_getproc( hdbc, en_GetInfo );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pdbc->herr, en_01000 );
-
-                return retcode;
-        }
-
-        CALL_DRIVER ( hdbc, ret, hproc,
-                en_GetInfo, (
-                        pdbc->dhdbc,
-                        SQL_CURSOR_COMMIT_BEHAVIOR,
-                        (PTR)&(pdbc->cb_commit),
-                        sizeof(pdbc->cb_commit),
-                        NULL ) )
-
-        retcode |= ret;
-
-        CALL_DRIVER ( hdbc, ret, hproc,
-                en_GetInfo, (
-                        pdbc->dhdbc,
-                        SQL_CURSOR_ROLLBACK_BEHAVIOR,
-                        (PTR)&(pdbc->cb_rollback),
-                        sizeof(pdbc->cb_rollback),
-                        NULL ) )
-
-        retcode |= ret;
-
-        if( retcode != SQL_SUCCESS
-         && retcode != SQL_SUCCESS_WITH_INFO )
-        {
-                return SQL_ERROR;
-        }
-
-        return retcode;
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  ENV_t FAR *penv;
+  HPROC hproc;
+  RETCODE retcode = SQL_SUCCESS;
+  RETCODE ret;
+
+  penv = pdbc->henv;
+
+  hproc = _iodbcdm_getproc (hdbc, en_SetConnectOption);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pdbc->herr, en_IM006);
+
+      return SQL_SUCCESS_WITH_INFO;
+    }
+
+  if (pdbc->access_mode != SQL_MODE_DEFAULT)
+    {
+      CALL_DRIVER (hdbc, ret, hproc,
+         en_SetConnectOption, (
+             SQL_ACCESS_MODE,
+             pdbc->access_mode))
+
+         retcode |= ret;
+    }
+
+  if (pdbc->autocommit != SQL_AUTOCOMMIT_DEFAULT)
+    {
+      CALL_DRIVER (hdbc, ret, hproc,
+         en_SetConnectOption, (
+             pdbc->dhdbc,
+             SQL_AUTOCOMMIT,
+             pdbc->autocommit))
+
+         retcode |= ret;
+    }
+
+  if (pdbc->current_qualifier != NULL)
+    {
+      CALL_DRIVER (hdbc, ret, hproc,
+         en_SetConnectOption, (
+             pdbc->dhdbc,
+             SQL_CURRENT_QUALIFIER,
+             pdbc->current_qualifier))
+
+         retcode |= ret;
+    }
+
+  if (pdbc->packet_size != 0UL)
+    {
+      CALL_DRIVER (hdbc, ret, hproc,
+         en_SetConnectOption, (
+             pdbc->dhdbc,
+             SQL_PACKET_SIZE,
+             pdbc->packet_size))
+
+         retcode |= ret;
+    }
+
+  if (pdbc->quiet_mode != (UDWORD) NULL)
+    {
+      CALL_DRIVER (hdbc, ret, hproc,
+         en_SetConnectOption, (
+             pdbc->dhdbc,
+             SQL_QUIET_MODE,
+             pdbc->quiet_mode))
+
+         retcode |= ret;
+    }
+
+  if (pdbc->txn_isolation != SQL_TXN_READ_UNCOMMITTED)
+    {
+      CALL_DRIVER (hdbc, ret, hproc,
+         en_SetConnectOption, (
+             pdbc->dhdbc,
+             SQL_TXN_ISOLATION,
+             pdbc->txn_isolation))
+    }
+
+  /* check error code for driver's SQLSetConnectOption() call */
+  if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
+    {
+      PUSHSQLERR (pdbc->herr, en_IM006);
+
+      retcode = SQL_ERROR;
+    }
+
+  /* get cursor behavior on transaction commit or rollback */
+  hproc = _iodbcdm_getproc (hdbc, en_GetInfo);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pdbc->herr, en_01000);
+
+      return retcode;
+    }
+
+  CALL_DRIVER (hdbc, ret, hproc,
+      en_GetInfo, (
+         pdbc->dhdbc,
+         SQL_CURSOR_COMMIT_BEHAVIOR,
+         (PTR) & (pdbc->cb_commit),
+         sizeof (pdbc->cb_commit),
+         NULL))
+
+      retcode |= ret;
+
+  CALL_DRIVER (hdbc, ret, hproc,
+      en_GetInfo, (
+         pdbc->dhdbc,
+         SQL_CURSOR_ROLLBACK_BEHAVIOR,
+         (PTR) & (pdbc->cb_rollback),
+         sizeof (pdbc->cb_rollback),
+         NULL))
+
+      retcode |= ret;
+
+  if (retcode != SQL_SUCCESS
+      && retcode != SQL_SUCCESS_WITH_INFO)
+    {
+      return SQL_ERROR;
+    }
+
+  return retcode;
 }
 
-static RETCODE  _iodbcdm_settracing( HDBC hdbc, char* dsn, int dsnlen )
+
+static RETCODE 
+_iodbcdm_settracing (HDBC hdbc, char *dsn, int dsnlen)
 {
-        char    buf[256];
-        char*   ptr;
-        RETCODE setopterr = SQL_SUCCESS;
-
-        /* Get Driver's DLL path from specificed or default dsn section */
-        ptr = _iodbcdm_getkeyvalbydsn( dsn, dsnlen, "TraceFile",
-                                (char FAR*)buf, sizeof(buf));
-
-        if( ptr == NULL || ptr[0] == '\0' )
-        {
-                ptr = (char FAR*)(SQL_OPT_TRACE_FILE_DEFAULT);
-        }
-
-        setopterr |= SQLSetConnectOption( hdbc,
-                SQL_OPT_TRACEFILE, (UDWORD)(ptr));
-
-        ptr = _iodbcdm_getkeyvalbydsn( dsn, dsnlen, "Trace",
-                                (char FAR*)buf, sizeof(buf));
-
-        if( ptr != NULL )
-        {
-                UDWORD  opt = (UDWORD)(-1L);
-
-                if( STREQ(ptr, "ON")
-                 || STREQ(ptr, "On")
-                 || STREQ(ptr, "on")
-                 || STREQ(ptr, "1" ) )
-                {
-                        opt = SQL_OPT_TRACE_ON;
-                }
-
-                if( STREQ(ptr, "OFF")
-                 || STREQ(ptr, "Off")
-                 || STREQ(ptr, "off")
-                 || STREQ(ptr, "0"  ) )
-                {
-                        opt = SQL_OPT_TRACE_OFF;
-                }
-
-                if( opt != (UDWORD)(-1L) )
-                {
-                        setopterr |= SQLSetConnectOption( hdbc,
-                                SQL_OPT_TRACE, opt);
-                }
-        }
-       return SQL_SUCCESS;
+  char buf[256];
+  char *ptr;
+  RETCODE setopterr = SQL_SUCCESS;
+
+  /* Get Driver's DLL path from specificed or default dsn section */
+  ptr = _iodbcdm_getkeyvalbydsn (dsn, dsnlen, "TraceFile",
+      (char FAR *) buf, sizeof (buf));
+
+  if (ptr == NULL || ptr[0] == '\0')
+    {
+      ptr = (char FAR *) (SQL_OPT_TRACE_FILE_DEFAULT);
+    }
+
+  setopterr |= SQLSetConnectOption (hdbc, SQL_OPT_TRACEFILE, (UDWORD) (ptr));
+
+  ptr = _iodbcdm_getkeyvalbydsn (dsn, dsnlen, "Trace",
+      (char FAR *) buf, sizeof (buf));
+
+  if (ptr != NULL)
+    {
+      UDWORD opt = (UDWORD) (-1L);
+
+      if (STREQ (ptr, "ON")
+         || STREQ (ptr, "On")
+         || STREQ (ptr, "on")
+         || STREQ (ptr, "1"))
+       {
+         opt = SQL_OPT_TRACE_ON;
+       }
+
+      if (STREQ (ptr, "OFF")
+         || STREQ (ptr, "Off")
+         || STREQ (ptr, "off")
+         || STREQ (ptr, "0"))
+       {
+         opt = SQL_OPT_TRACE_OFF;
+       }
+
+      if (opt != (UDWORD) (-1L))
+       {
+         setopterr |= SQLSetConnectOption (hdbc,
+             SQL_OPT_TRACE, opt);
+       }
+    }
+
+  return setopterr;
 }
 
-RETCODE SQL_API SQLConnect (
-                        HDBC            hdbc,
-                        UCHAR FAR*      szDSN,
-                        SWORD           cbDSN,
-                        UCHAR FAR*      szUID,
-                        SWORD           cbUID,
-                        UCHAR FAR*      szAuthStr,
-                        SWORD           cbAuthStr)
+
+RETCODE SQL_API 
+SQLConnect (
+    HDBC hdbc,
+    UCHAR FAR * szDSN,
+    SWORD cbDSN,
+    UCHAR FAR * szUID,
+    SWORD cbUID,
+    UCHAR FAR * szAuthStr,
+    SWORD cbAuthStr)
 {
-        DBC_t  FAR*     pdbc    = (DBC_t FAR*)hdbc;
-        RETCODE         retcode = SQL_SUCCESS;
-        RETCODE         setopterr = SQL_SUCCESS;
-        char            driver[1024] = { '\0' }; /* MS SDK Guide
-                                                  * specifies driver
-                                                  * path can't longer
-                                                  * than 255. */
-        char            szNewDSN[256];                  /* OS/2 !!! */
-        char            *ptr;
-        HPROC           hproc;
-
-        if( hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check arguments */
-        if( ( cbDSN < 0 && cbDSN != SQL_NTS )
-         || ( cbUID < 0 && cbUID != SQL_NTS )
-         || ( cbAuthStr < 0 && cbAuthStr != SQL_NTS )
-         || ( cbDSN > SQL_MAX_DSN_LENGTH ) )
-        {
-                PUSHSQLERR ( pdbc->herr, en_S1090 );
-
-                return SQL_ERROR;
-        }
-
-        if( szDSN == NULL || cbDSN == 0 )
-        {
-                PUSHSQLERR ( pdbc->herr, en_IM002 );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pdbc->state != en_dbc_allocated )
-        {
-                PUSHSQLERR ( pdbc->herr, en_08002 );
-
-                return SQL_ERROR;
-        }
-
-        setopterr |= _iodbcdm_settracing( hdbc,
-                                (char*)szDSN, cbDSN );
-
-        ptr = _iodbcdm_getkeyvalbydsn( szDSN, cbDSN, "Driver",
-                                (char FAR*)driver, sizeof(driver));
-
-        if( ptr == NULL )
-        /* No specified or default dsn section or
-         * no driver specification in this dsn section */
-        {
-                PUSHSQLERR ( pdbc->herr, en_IM002 );
-
-                return SQL_ERROR;
-        }
-
-        /*
-        ** OS/2 !!!
-        **
-        ** get new szDSN from INI file, if existing
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  RETCODE retcode = SQL_SUCCESS;
+  RETCODE setopterr = SQL_SUCCESS;
+  char driver[1024] = {'\0'};  /* MS SDK Guide 
+                                * specifies driver
+                                * path can't longer
+                                * than 255. */
+  char *ptr;
+  HPROC hproc;
+
+  if (hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check arguments */
+  if ((cbDSN < 0 && cbDSN != SQL_NTS)
+      || (cbUID < 0 && cbUID != SQL_NTS)
+      || (cbAuthStr < 0 && cbAuthStr != SQL_NTS)
+      || (cbDSN > SQL_MAX_DSN_LENGTH))
+    {
+      PUSHSQLERR (pdbc->herr, en_S1090);
+
+      return SQL_ERROR;
+    }
+
+  if (szDSN == NULL || cbDSN == 0)
+    {
+      PUSHSQLERR (pdbc->herr, en_IM002);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pdbc->state != en_dbc_allocated)
+    {
+      PUSHSQLERR (pdbc->herr, en_08002);
+
+      return SQL_ERROR;
+    }
+
+  setopterr |= _iodbcdm_settracing (hdbc,
+      (char *) szDSN, cbDSN);
+
+  ptr = _iodbcdm_getkeyvalbydsn (szDSN, cbDSN, "Driver",
+      (char FAR *) driver, sizeof (driver));
+
+  if (ptr == NULL)
+    /* No specified or default dsn section or
+     * no driver specification in this dsn section */
+    {
+      PUSHSQLERR (pdbc->herr, en_IM002);
+
+      return SQL_ERROR;
+    }
+
+  retcode = _iodbcdm_driverload (driver, hdbc);
+
+  switch (retcode)
+     {
+     case SQL_SUCCESS:
+       break;
+
+     case SQL_SUCCESS_WITH_INFO:
+       setopterr = SQL_ERROR;
+       /* unsuccessed in calling driver's 
+        * SQLSetConnectOption() to set login
+        * timeout.
         */
-        if( NULL != _iodbcdm_getkeyvalbydsn( szDSN, cbDSN, "DSN",
-                                             (char FAR*) &szNewDSN,
-                                             sizeof(szNewDSN) ) )
-        {
-                szDSN = &szNewDSN[0];
-                cbDSN = SQL_NTS;
-        }
-
-        retcode = _iodbcdm_driverload( driver, hdbc );
-
-        switch( retcode )
-        {
-                case SQL_SUCCESS:
-                        break;
-
-                case SQL_SUCCESS_WITH_INFO:
-                        setopterr = SQL_ERROR;
-                        /* unsuccessed in calling driver's
-                         * SQLSetConnectOption() to set login
-                         * timeout.
-                         */
-                        break;
-
-                default:
-                        return retcode;
-        }
-
-        hproc = _iodbcdm_getproc( hdbc, en_Connect );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                _iodbcdm_driverunload( hdbc );
-
-                PUSHSQLERR ( pdbc->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( hdbc, retcode, hproc, en_Connect, (
-                        pdbc->dhdbc,
-                        szDSN,     cbDSN,
-                        szUID,     cbUID,
-                        szAuthStr, cbAuthStr ) )
-
-#if 0
-        retcode = hproc(pdbc->dhdbc,
-                        szDSN,     cbDSN,
-                        szUID,     cbUID,
-                        szAuthStr, cbAuthStr );
-#endif
+       break;
+
+     default:
+       return retcode;
+     }
+
+  hproc = _iodbcdm_getproc (hdbc, en_Connect);
 
-        if( retcode != SQL_SUCCESS
-         && retcode != SQL_SUCCESS_WITH_INFO )
-        {
-                /* not unload driver for retrive error
-                 * messge from driver */
-                /*********
-                _iodbcdm_driverunload( hdbc );
-                **********/
+  if (hproc == SQL_NULL_HPROC)
+    {
+      _iodbcdm_driverunload (hdbc);
 
-                return retcode;
-        }
+      PUSHSQLERR (pdbc->herr, en_IM001);
 
-        /* state transition */
-        pdbc->state = en_dbc_connected;
+      return SQL_ERROR;
+    }
 
-        /* do delaid option setting */
-        setopterr |= _iodbcdm_dbcdelayset( hdbc );
+  CALL_DRIVER (hdbc, retcode, hproc, en_Connect, (
+         pdbc->dhdbc,
+         szDSN, cbDSN,
+         szUID, cbUID,
+         szAuthStr, cbAuthStr))
 
-        if( setopterr != SQL_SUCCESS )
-        {
-                return SQL_SUCCESS_WITH_INFO;
-        }
+  if (retcode != SQL_SUCCESS
+      && retcode != SQL_SUCCESS_WITH_INFO)
+    {
+      /* not unload driver for retrive error 
+       * messge from driver */
+               /*********
+               _iodbcdm_driverunload( hdbc );
+               **********/
 
-        return retcode;
+      return retcode;
+    }
+
+  /* state transition */
+  pdbc->state = en_dbc_connected;
+
+  /* do delaid option setting */
+  setopterr |= _iodbcdm_dbcdelayset (hdbc);
+
+  if (setopterr != SQL_SUCCESS)
+    {
+      return SQL_SUCCESS_WITH_INFO;
+    }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLDriverConnect (
-                        HDBC            hdbc,
-                        HWND            hwnd,
-                        UCHAR FAR*      szConnStrIn,
-                        SWORD           cbConnStrIn,
-                        UCHAR FAR*      szConnStrOut,
-                        SWORD           cbConnStrOutMax,
-                        SWORD FAR*      pcbConnStrOut,
-                        UWORD           fDriverCompletion )
+
+RETCODE SQL_API 
+SQLDriverConnect (
+    HDBC hdbc,
+    HWND hwnd,
+    UCHAR FAR * szConnStrIn,
+    SWORD cbConnStrIn,
+    UCHAR FAR * szConnStrOut,
+    SWORD cbConnStrOutMax,
+    SWORD FAR * pcbConnStrOut,
+    UWORD fDriverCompletion)
 {
-        DBC_t FAR*      pdbc    = (DBC_t FAR*)hdbc;
-        HDLL            hdll;
-        char  FAR*      drv;
-        char            drvbuf[1024];
-        char  FAR*      dsn;
-        char            dsnbuf[SQL_MAX_DSN_LENGTH + 1];
-        char            szNewDSN[256];                    /* OS/2 !!! */
-        UCHAR           cnstr2drv[1024];
-
-        HPROC           hproc, dialproc;
-
-        int             sqlstat = en_00000;
-        RETCODE         retcode = SQL_SUCCESS;
-        RETCODE         setopterr = SQL_SUCCESS;
-
-        if( hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check arguments */
-        if( ( cbConnStrIn < 0 && cbConnStrIn != SQL_NTS )
-         || cbConnStrOutMax < 0 )
-        {
-                PUSHSQLERR (pdbc->herr, en_S1090 );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pdbc->state != en_dbc_allocated )
-        {
-                PUSHSQLERR (pdbc->herr, en_08002 );
-
-                return SQL_ERROR;
-        }
-
-        drv = _iodbcdm_getkeyvalinstr(szConnStrIn, cbConnStrIn,
-                                "DRIVER", drvbuf, sizeof(drvbuf));
-
-        dsn = _iodbcdm_getkeyvalinstr(szConnStrIn, cbConnStrIn,
-                                "DSN",    dsnbuf, sizeof(dsnbuf));
-
-        switch( fDriverCompletion )
-        {
-                case SQL_DRIVER_NOPROMPT:
-                        break;
-
-                case SQL_DRIVER_COMPLETE:
-                case SQL_DRIVER_COMPLETE_REQUIRED:
-                        if( dsn != NULL )
-                        {
-                                break;
-                        }
-                        /* fall to next case */
-                case SQL_DRIVER_PROMPT:
-                        /* Get data source dialog box function from
-                         * current executable */
-                        hdll = _iodbcdm_dllopen((char FAR*)NULL);
-                        dialproc = _iodbcdm_dllproc( hdll,
-                                        "_iodbcdm_drvconn_dialbox");
-
-                        if( dialproc == SQL_NULL_HPROC )
-                        {
-                                sqlstat = en_IM008;
-                                break;
-                        }
-
-                        retcode = dialproc(
-                                        hwnd,   /* window or display handle */
-                                        dsnbuf, /* input/output dsn buf */
-                                        sizeof(dsnbuf), /* buf size */
-                                        &sqlstat);      /* error code */
-
-                        if( retcode != SQL_SUCCESS )
-                        {
-                                break;
-                        }
-
-                        if( cbConnStrIn == SQL_NTS )
-                        {
-                                cbConnStrIn = STRLEN(szConnStrIn );
-                        }
-
-                        dsn = dsnbuf;
-
-                        if( dsn[0] == '\0' )
-                        {
-                                dsn = "default";
-                        }
-
-                        if( cbConnStrIn > sizeof(cnstr2drv)
-                                        - STRLEN(dsn) - STRLEN("DSN=;") -1 )
-                        {
-                                sqlstat = en_S1001; /* a lazy way to avoid
-                                                     * using heap memory */
-                                break;
-                        }
-
-                        sprintf(cnstr2drv, "DSN=%s;", dsn);
-                        cbConnStrIn += STRLEN(cnstr2drv);
-                        STRNCAT( cnstr2drv, szConnStrIn, cbConnStrIn );
-                        szConnStrIn = cnstr2drv;
-                        break;
-
-                default:
-                        sqlstat = en_S1110;
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR( pdbc->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        if( dsn == NULL || dsn[0] == '\0' )
-        {
-                dsn = "default";
-        }
-        else    /* if you want tracing, you must use a DSN */
-        {
-                setopterr |= _iodbcdm_settracing( hdbc,
-                                        (char*)dsn, SQL_NTS );
-        }
-
-        if( drv == NULL || drv[0] == '\0' )
-        {
-                drv = _iodbcdm_getkeyvalbydsn( dsn, SQL_NTS, "Driver",
-                                        drvbuf, sizeof(drvbuf));
-        }
-
-        if( drv == NULL )
-        {
-                PUSHSQLERR( pdbc->herr, en_IM002 );
-
-                return SQL_ERROR;
-        }
-
-        retcode = _iodbcdm_driverload( drv, hdbc );
-
-        switch( retcode )
-        {
-                case SQL_SUCCESS:
-                        break;
-
-                case SQL_SUCCESS_WITH_INFO:
-                        setopterr = SQL_ERROR;
-                        /* unsuccessed in calling driver's
-                         * SQLSetConnectOption() to set login
-                         * timeout.
-                         */
-                        break;
-
-                default:
-                        return retcode;
-        }
-
-        hproc = _iodbcdm_getproc( hdbc, en_DriverConnect );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                _iodbcdm_driverunload( hdbc );
-
-                PUSHSQLERR ( pdbc->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
- /* giovanni */
-        /*
-        ** OS/2 !!!
-        **
-        ** get new szDSN from INI file, if existing
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  HDLL hdll;
+  char FAR *drv;
+  char drvbuf[1024];
+  char FAR *dsn;
+  char dsnbuf[SQL_MAX_DSN_LENGTH + 1];
+  UCHAR cnstr2drv[1024];
+
+  HPROC hproc;
+  HPROC dialproc;
+
+  int sqlstat = en_00000;
+  RETCODE retcode = SQL_SUCCESS;
+  RETCODE setopterr = SQL_SUCCESS;
+
+  if (hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check arguments */
+  if ((cbConnStrIn < 0 && cbConnStrIn != SQL_NTS)
+      || cbConnStrOutMax < 0)
+    {
+      PUSHSQLERR (pdbc->herr, en_S1090);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pdbc->state != en_dbc_allocated)
+    {
+      PUSHSQLERR (pdbc->herr, en_08002);
+
+      return SQL_ERROR;
+    }
+
+  drv = _iodbcdm_getkeyvalinstr (szConnStrIn, cbConnStrIn,
+      "DRIVER", drvbuf, sizeof (drvbuf));
+
+  dsn = _iodbcdm_getkeyvalinstr (szConnStrIn, cbConnStrIn,
+      "DSN", dsnbuf, sizeof (dsnbuf));
+
+  switch (fDriverCompletion)
+     {
+     case SQL_DRIVER_NOPROMPT:
+       break;
+
+     case SQL_DRIVER_COMPLETE:
+     case SQL_DRIVER_COMPLETE_REQUIRED:
+       if (dsn != NULL || drv != NULL)
+        {
+          break;
+        }
+       /* fall to next case */
+     case SQL_DRIVER_PROMPT:
+       /* Get data source dialog box function from
+        * current executable */
+       hdll = _iodbcdm_dllopen ((char FAR *) NULL);
+       dialproc = _iodbcdm_dllproc (hdll,
+          "_iodbcdm_drvconn_dialbox");
+
+       if (dialproc == SQL_NULL_HPROC)
+        {
+          sqlstat = en_IM008;
+          break;
+        }
+
+       retcode = dialproc (
+          hwnd,                /* window or display handle */
+          dsnbuf,              /* input/output dsn buf */
+          sizeof (dsnbuf),     /* buf size */
+          &sqlstat);           /* error code */
+
+       if (retcode != SQL_SUCCESS)
+        {
+          break;
+        }
+
+       if (cbConnStrIn == SQL_NTS)
+        {
+          cbConnStrIn = STRLEN (szConnStrIn);
+        }
+
+       dsn = dsnbuf;
+
+       if (dsn[0] == '\0')
+        {
+          dsn = "default";
+        }
+
+       if (cbConnStrIn > sizeof (cnstr2drv)
+          - STRLEN (dsn) - STRLEN ("DSN=;") - 1)
+        {
+          sqlstat = en_S1001;  /* a lazy way to avoid
+                                * using heap memory */
+          break;
+        }
+
+       sprintf (cnstr2drv, "DSN=%s;", dsn);
+       cbConnStrIn += STRLEN (cnstr2drv);
+       STRNCAT (cnstr2drv, szConnStrIn, cbConnStrIn);
+       szConnStrIn = cnstr2drv;
+       break;
+
+     default:
+       sqlstat = en_S1110;
+       break;
+     }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pdbc->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  if (dsn == NULL || dsn[0] == '\0')
+    {
+      dsn = "default";
+    }
+  else
+    /* if you want tracing, you must use a DSN */
+    {
+      setopterr |= _iodbcdm_settracing (hdbc,
+         (char *) dsn, SQL_NTS);
+    }
+
+  if (drv == NULL || drv[0] == '\0')
+    {
+      drv = _iodbcdm_getkeyvalbydsn (dsn, SQL_NTS, "Driver",
+         drvbuf, sizeof (drvbuf));
+    }
+
+  if (drv == NULL)
+    {
+      PUSHSQLERR (pdbc->herr, en_IM002);
+
+      return SQL_ERROR;
+    }
+
+  retcode = _iodbcdm_driverload (drv, hdbc);
+
+  switch (retcode)
+     {
+     case SQL_SUCCESS:
+       break;
+
+     case SQL_SUCCESS_WITH_INFO:
+       setopterr = SQL_ERROR;
+       /* unsuccessed in calling driver's 
+        * SQLSetConnectOption() to set login
+        * timeout.
         */
-        strcpy( szNewDSN, "DSN=" );
-        if( NULL != _iodbcdm_getkeyvalbydsn( dsn, SQL_NTS, "DSN",
-                                             (char FAR*) &szNewDSN[4],
-                                             sizeof(szNewDSN) - 4 ) )
-        {
-                char   *psz;
+       break;
 
-                strcat( szNewDSN, ";UID=" );
-                psz = strtok( szNewDSN, "\0" );
+     default:
+       return retcode;
+     }
 
+  hproc = _iodbcdm_getproc (hdbc, en_DriverConnect);
 
+  if (hproc == SQL_NULL_HPROC)
+    {
+      _iodbcdm_driverunload (hdbc);
 
+      PUSHSQLERR (pdbc->herr, en_IM001);
 
-       if(NULL ==  _iodbcdm_getkeyvalinstr( szConnStrIn, cbConnStrIn,
-                                       /*
-                                         "UID", psz, sizeof(szNewDSN) ))
-                                        */
-                                         "UID", (char FAR*) &szNewDSN[strlen(psz)],
-                                         (sizeof(szNewDSN) - strlen(psz)) ) )
-               {
-                _iodbcdm_getkeyvalbydsn( dsn, SQL_NTS,
-                                         "UID", (char FAR*) &szNewDSN[strlen(psz)],
-                                         (sizeof(szNewDSN) - strlen(psz)) );
-               }
-                strcat( szNewDSN, ";PWD=" );
-                psz = strtok( szNewDSN, "\0" );
-       if(NULL ==  _iodbcdm_getkeyvalinstr( szConnStrIn, cbConnStrIn,
-                                        /*
-                                         "PWD", psz, sizeof(szNewDSN) ))
-                                        */
-                                         "PWD", (char FAR*) &szNewDSN[strlen(psz)],
-                                         (sizeof(szNewDSN) - strlen(psz)) ) )
-               {
+      return SQL_ERROR;
+    }
 
-                _iodbcdm_getkeyvalbydsn( dsn, SQL_NTS,
-                                         "PWD", (char FAR*) &szNewDSN[strlen(psz)],
-                                         (sizeof(szNewDSN) - strlen(psz)) );
-               }
-/*
-new from dirk
-       {
-                register char   *psz;
-
-                strcat( szNewDSN, ";UID=" );
-                psz = strtok( szNewDSN, "\0" );
-                _iodbcdm_getkeyvalinstr( szConnStrIn, cbConnStrIn,
-                                         "UID", psz, sizeof(szNewDSN) );
-                strcat( szNewDSN, ";PWD=" );
-                psz = strtok( szNewDSN, "\0" );
-                _iodbcdm_getkeyvalinstr( szConnStrIn, cbConnStrIn,
-                                         "PWD", psz, sizeof(szNewDSN) );
-                szConnStrIn = &szNewDSN[0];
-                cbConnStrIn = SQL_NTS;
-        }
-
-
-*/
-       /******** giovanni & monty ********/
-       /* Add a lot of optional keywords */
-       {
-         static char *keywords[]= { "SERVER","PORT","SOCKET","OPTION","DB",0 };
-         char buff[80],**key,*end;
-
-         psz= szNewDSN+strlen(szNewDSN);
-         end= szNewDSN+sizeof(szNewDSN);
-         for (key=keywords ; *key ; key++)
-         {
-           if (_iodbcdm_getkeyvalbydsn(dsn, SQL_NTS,
-                                       *key, (char FAR*) buff,
-                                       sizeof(buff)) &&
-               strlen(*key)+strlen(buff)+2 < (int) (end - psz))
-           {
-             *psz++=';';
-             strcpy(psz,*key); psz+=strlen(*key);
-             *psz++='=';
-             strcpy(psz,buff); psz+=strlen(buff);            
-           }
-         }
-       }
-       *psz=0;
-       /******** giovanni */
-       szConnStrIn = szNewDSN;  /*giovanni, era &szNewDSN */
-       cbConnStrIn = SQL_NTS;
-        }
- /* giovanni */
-        CALL_DRIVER ( hdbc, retcode, hproc, en_DriverConnect, (
-                        pdbc->dhdbc, hwnd,
-                        szConnStrIn, cbConnStrIn,
-                        szConnStrOut, cbConnStrOutMax,
-                        pcbConnStrOut, fDriverCompletion ) )
-#if 0
-        retcode = hproc(pdbc->dhdbc, hwnd,
-                        szConnStrIn, cbConnStrIn,
-                        szConnStrOut, cbConnStrOutMax,
-                        pcbConnStrOut, fDriverCompletion );
-#endif
+  CALL_DRIVER (hdbc, retcode, hproc, en_DriverConnect, (
+         pdbc->dhdbc, hwnd,
+         szConnStrIn, cbConnStrIn,
+         szConnStrOut, cbConnStrOutMax,
+         pcbConnStrOut, fDriverCompletion))
 
-        if( retcode != SQL_SUCCESS
-         && retcode != SQL_SUCCESS_WITH_INFO )
-        {
-                /* don't unload driver here for retrive
-                 * error message from driver */
-                /********
-                _iodbcdm_driverunload( hdbc );
-                *********/
+  if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
+    {
+      /* don't unload driver here for retrive 
+       * error message from driver */
+               /********
+               _iodbcdm_driverunload( hdbc );
+               *********/
 
-                return retcode;
-        }
+      return retcode;
+    }
 
-        /* state transition */
-        pdbc->state = en_dbc_connected;
+  /* state transition */
+  pdbc->state = en_dbc_connected;
 
-        /* do delaid option setting */
-        setopterr |= _iodbcdm_dbcdelayset( hdbc );
+  /* do delaid option setting */
+  setopterr |= _iodbcdm_dbcdelayset (hdbc);
 
-        if( setopterr != SQL_SUCCESS )
-        {
-                return SQL_SUCCESS_WITH_INFO;
-        }
+  if (setopterr != SQL_SUCCESS)
+    {
+      return SQL_SUCCESS_WITH_INFO;
+    }
 
-        return retcode;
+  return retcode;
 }
 
-RETCODE SQL_API SQLBrowseConnect (
-                        HDBC            hdbc,
-                        HWND            hwnd,
-                        UCHAR FAR*      szConnStrIn,
-                        SWORD           cbConnStrIn,
-                        UCHAR FAR*      szConnStrOut,
-                        SWORD           cbConnStrOutMax,
-                        SWORD FAR*      pcbConnStrOut )
+
+RETCODE SQL_API 
+SQLBrowseConnect (
+    HDBC hdbc,
+    UCHAR FAR * szConnStrIn,
+    SWORD cbConnStrIn,
+    UCHAR FAR * szConnStrOut,
+    SWORD cbConnStrOutMax,
+    SWORD FAR * pcbConnStrOut)
 {
-        DBC_t FAR*      pdbc    = (DBC_t FAR*)hdbc;
-        HDLL            hdll;
-        char  FAR*      drv;
-        char            drvbuf[1024];
-        char  FAR*      dsn;
-        char            dsnbuf[SQL_MAX_DSN_LENGTH + 1];
-        UCHAR           cnstr2drv[1024];
-
-        HPROC           hproc, dialproc;
-
-        int             sqlstat = en_00000;
-        RETCODE         retcode = SQL_SUCCESS;
-        RETCODE         setopterr = SQL_SUCCESS;
-
-        if( hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check arguments */
-        if( ( cbConnStrIn < 0 && cbConnStrIn != SQL_NTS )
-         || cbConnStrOutMax < 0 )
-        {
-                PUSHSQLERR (pdbc->herr, en_S1090 );
-
-                return SQL_ERROR;
-        }
-
-        if( pdbc->state == en_dbc_allocated )
-        {
-                drv = _iodbcdm_getkeyvalinstr(szConnStrIn, cbConnStrIn,
-                                "DRIVER", drvbuf, sizeof(drvbuf));
-
-                dsn = _iodbcdm_getkeyvalinstr(szConnStrIn, cbConnStrIn,
-                                "DSN",    dsnbuf, sizeof(dsnbuf));
-
-                if( dsn == NULL || dsn[0] == '\0' )
-                {
-                        dsn = "default";
-                }
-                else    /* if you want tracing, you must use a DSN */
-                {
-                        setopterr |= _iodbcdm_settracing( hdbc,
-                                                (char*)dsn, SQL_NTS );
-                }
-
-                if( drv == NULL || drv[0] == '\0' )
-                {
-                        drv = _iodbcdm_getkeyvalbydsn( dsn, SQL_NTS, "Driver",
-                                                drvbuf, sizeof(drvbuf));
-                }
-
-                if( drv == NULL )
-                {
-                        PUSHSQLERR( pdbc->herr, en_IM002 );
-
-                        return SQL_ERROR;
-                }
-
-                retcode = _iodbcdm_driverload( drv, hdbc );
-
-                switch( retcode )
-                {
-                        case SQL_SUCCESS:
-                                break;
-
-                        case SQL_SUCCESS_WITH_INFO:
-                                setopterr = SQL_ERROR;
-                                /* unsuccessed in calling driver's
-                                 * SQLSetConnectOption() to set login
-                                 * timeout.
-                                 */
-                                break;
-
-                        default:
-                                return retcode;
-                }
-        }
-        else if( pdbc->state != en_dbc_needdata )
-        {
-                PUSHSQLERR ( pdbc->herr, en_08002 );
-
-                return SQL_ERROR;
-        }
-
-        hproc = _iodbcdm_getproc( hdbc, en_BrowseConnect);
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                _iodbcdm_driverunload( hdbc );
-
-                pdbc->state = en_dbc_allocated;
-
-                PUSHSQLERR( pdbc->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( hdbc, retcode, hproc, en_BrowseConnect, (
-                        pdbc->dhdbc, hwnd,
-                        szConnStrIn, cbConnStrIn,
-                        szConnStrOut, cbConnStrOutMax,
-                        pcbConnStrOut ) )
-
-#if 0
-        retcode = hproc(pdbc->dhdbc, hwnd,
-                        szConnStrIn, cbConnStrIn,
-                        szConnStrOut, cbConnStrOutMax,
-                        pcbConnStrOut );
-#endif
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  HDLL hdll;
+  char FAR *drv;
+  char drvbuf[1024];
+  char FAR *dsn;
+  char dsnbuf[SQL_MAX_DSN_LENGTH + 1];
+  UCHAR cnstr2drv[1024];
+
+  HPROC hproc;
+  HPROC dialproc;
+
+  int sqlstat = en_00000;
+  RETCODE retcode = SQL_SUCCESS;
+  RETCODE setopterr = SQL_SUCCESS;
+
+  if (hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check arguments */
+  if ((cbConnStrIn < 0 && cbConnStrIn != SQL_NTS) || cbConnStrOutMax < 0)
+    {
+      PUSHSQLERR (pdbc->herr, en_S1090);
+
+      return SQL_ERROR;
+    }
+
+  if (pdbc->state == en_dbc_allocated)
+    {
+      drv = _iodbcdm_getkeyvalinstr (szConnStrIn, cbConnStrIn,
+         "DRIVER", drvbuf, sizeof (drvbuf));
+
+      dsn = _iodbcdm_getkeyvalinstr (szConnStrIn, cbConnStrIn,
+         "DSN", dsnbuf, sizeof (dsnbuf));
+
+      if (dsn == NULL || dsn[0] == '\0')
+       {
+         dsn = "default";
+       }
+      else
+       /* if you want tracing, you must use a DSN */
+       {
+         setopterr |= _iodbcdm_settracing (hdbc,
+             (char *) dsn, SQL_NTS);
+       }
 
-        switch( retcode )
-        {
-                case SQL_SUCCESS:
-                case SQL_SUCCESS_WITH_INFO:
-                        pdbc->state = en_dbc_connected;
-                        setopterr |= _iodbcdm_dbcdelayset( hdbc );
-                        if( setopterr != SQL_SUCCESS )
-                        {
-                                retcode = SQL_SUCCESS_WITH_INFO;
-                        }
-                        break;
-
-                case SQL_NEED_DATA:
-                        pdbc->state = en_dbc_needdata;
-                        break;
-
-                case SQL_ERROR:
-                        pdbc->state = en_dbc_allocated;
-                        /* but the driver will not unloaded
-                         * to allow application retrive err
-                         * message from driver
-                         */
-                        break;
-
-                default:
-                        break;
-        }
-
-        return retcode;
-}
+      if (drv == NULL || drv[0] == '\0')
+       {
+         drv = _iodbcdm_getkeyvalbydsn (dsn, SQL_NTS, "Driver",
+             drvbuf, sizeof (drvbuf));
+       }
 
-RETCODE SQL_API SQLDisconnect ( HDBC hdbc )
-{
-        DBC_t   FAR*    pdbc    = (DBC_t*)hdbc;
-        STMT_t  FAR*    pstmt;
-        RETCODE         retcode;
-        HPROC           hproc;
-
-        int             sqlstat = en_00000;
-
-        if( hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check hdbc state */
-        if ( pdbc->state == en_dbc_allocated )
-        {
-                sqlstat = en_08003;
-        }
-
-        /* check stmt(s) state */
-        for( pstmt  = (STMT_t FAR*)pdbc->hstmt;
-             pstmt != NULL && sqlstat == en_00000;
-             pstmt  = (STMT_t FAR*)pstmt->next )
-        {
-                if( pstmt->state >= en_stmt_needdata
-                 || pstmt->asyn_on != en_NullProc )
-                /* In this case one need to call
-                 * SQLCancel() first */
-                {
-                        sqlstat = en_S1010;
-                }
-        }
-
-        if( sqlstat == en_00000 )
-        {
-                hproc = _iodbcdm_getproc( hdbc, en_Disconnect );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                }
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pdbc->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( hdbc, retcode, hproc, en_Disconnect, (
-                        pdbc->dhdbc ) )
-
-#if 0
-        retcode = hproc( pdbc->dhdbc );
-#endif
+      if (drv == NULL)
+       {
+         PUSHSQLERR (pdbc->herr, en_IM002);
 
-        if( retcode == SQL_SUCCESS
-         || retcode == SQL_SUCCESS_WITH_INFO )
-        {
-                /* diff from MS specs. We disallow
-                 * driver SQLDisconnect() return
-                 * SQL_SUCCESS_WITH_INFO and post
-                 * error message.
-                 */
-                retcode = SQL_SUCCESS;
-        }
-        else
-        {
-                return retcode;
-        }
-
-        /* free all statement handle(s) on this connection */
-        for(;pdbc->hstmt;)
-        {
-                _iodbcdm_dropstmt( pdbc->hstmt );
-        }
-
-#if 0
-        retcode = _iodbcdm_driverunload( hdbc );
-#endif
+         return SQL_ERROR;
+       }
 
-        /* state transition */
-        if( retcode == SQL_SUCCESS )
-        {
-                pdbc->state = en_dbc_allocated;
-        }
+      retcode = _iodbcdm_driverload (drv, hdbc);
+
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+          break;
+
+        case SQL_SUCCESS_WITH_INFO:
+          setopterr = SQL_ERROR;
+          /* unsuccessed in calling driver's 
+           * SQLSetConnectOption() to set login
+           * timeout.
+           */
+          break;
+
+        default:
+          return retcode;
+        }
+    }
+  else if (pdbc->state != en_dbc_needdata)
+    {
+      PUSHSQLERR (pdbc->herr, en_08002);
+
+      return SQL_ERROR;
+    }
+
+  hproc = _iodbcdm_getproc (hdbc, en_BrowseConnect);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      _iodbcdm_driverunload (hdbc);
+
+      pdbc->state = en_dbc_allocated;
+
+      PUSHSQLERR (pdbc->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (hdbc, retcode, hproc, en_BrowseConnect, (
+         pdbc->dhdbc, 
+         szConnStrIn, cbConnStrIn, 
+         szConnStrOut, cbConnStrOutMax,
+         pcbConnStrOut))
+
+  switch (retcode)
+     {
+     case SQL_SUCCESS:
+     case SQL_SUCCESS_WITH_INFO:
+       pdbc->state = en_dbc_connected;
+       setopterr |= _iodbcdm_dbcdelayset (hdbc);
+       if (setopterr != SQL_SUCCESS)
+        {
+          retcode = SQL_SUCCESS_WITH_INFO;
+        }
+       break;
+
+     case SQL_NEED_DATA:
+       pdbc->state = en_dbc_needdata;
+       break;
+
+     case SQL_ERROR:
+       pdbc->state = en_dbc_allocated;
+       /* but the driver will not unloaded 
+        * to allow application retrive err
+        * message from driver 
+        */
+       break;
 
-        return retcode;
+     default:
+       break;
+     }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLNativeSql(
-                        HDBC            hdbc,
-                        UCHAR  FAR*     szSqlStrIn,
-                        SDWORD          cbSqlStrIn,
-                        UCHAR  FAR*     szSqlStr,
-                        SDWORD          cbSqlStrMax,
-                        SDWORD FAR*     pcbSqlStr )
+
+RETCODE SQL_API 
+SQLDisconnect (HDBC hdbc)
 {
-        DBC_t FAR*      pdbc    = (DBC_t FAR*)hdbc;
-        HPROC           hproc;
-        int             sqlstat = en_00000;
-        RETCODE         retcode;
-
-        if( hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check argument */
-        if( szSqlStrIn == NULL )
-        {
-                sqlstat = en_S1009;
-        }
-        else if( cbSqlStrIn < 0
-              && cbSqlStrIn != SQL_NTS )
-        {
-                sqlstat = en_S1090;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pdbc->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pdbc->state <= en_dbc_needdata )
-        {
-                PUSHSQLERR ( pdbc->herr, en_08003 );
-
-                return SQL_ERROR;
-        }
-
-        /* call driver */
-        hproc = _iodbcdm_getproc( hdbc, en_NativeSql );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pdbc->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( hdbc, retcode, hproc, en_NativeSql, (
-                        pdbc->dhdbc,
-                        szSqlStrIn,
-                        cbSqlStrIn,
-                        szSqlStr,
-                        cbSqlStrMax,
-                        pcbSqlStr ) )
-
-#if 0
-        retcode = hproc(pdbc->dhdbc,
-                        szSqlStrIn,
-                        cbSqlStrIn,
-                        szSqlStr,
-                        cbSqlStrMax,
-                        pcbSqlStr );
-#endif
+  DBC_t FAR *pdbc = (DBC_t *) hdbc;
+  STMT_t FAR *pstmt;
+  RETCODE retcode;
+  HPROC hproc;
+
+  int sqlstat = en_00000;
+
+  if (hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check hdbc state */
+  if (pdbc->state == en_dbc_allocated)
+    {
+      sqlstat = en_08003;
+    }
+
+  /* check stmt(s) state */
+  for (pstmt = (STMT_t FAR *) pdbc->hstmt;
+      pstmt != NULL && sqlstat == en_00000;
+      pstmt = (STMT_t FAR *) pstmt->next)
+    {
+      if (pstmt->state >= en_stmt_needdata
+         || pstmt->asyn_on != en_NullProc)
+       /* In this case one need to call 
+        * SQLCancel() first */
+       {
+         sqlstat = en_S1010;
+       }
+    }
+
+  if (sqlstat == en_00000)
+    {
+      hproc = _iodbcdm_getproc (hdbc, en_Disconnect);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+       }
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pdbc->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (hdbc, retcode, hproc, en_Disconnect, (
+         pdbc->dhdbc))
+
+  if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
+    {
+      /* diff from MS specs. We disallow
+       * driver SQLDisconnect() return
+       * SQL_SUCCESS_WITH_INFO and post
+       * error message.
+       */
+      retcode = SQL_SUCCESS;
+    }
+  else
+    {
+      return retcode;
+    }
+
+  /* free all statement handle(s) on this connection */
+  for (; pdbc->hstmt;)
+    {
+      _iodbcdm_dropstmt (pdbc->hstmt);
+    }
+
+  /* state transition */
+  if (retcode == SQL_SUCCESS)
+    {
+      pdbc->state = en_dbc_allocated;
+    }
+
+  return retcode;
+}
 
-        return retcode;
+
+RETCODE SQL_API 
+SQLNativeSql (
+    HDBC hdbc,
+    UCHAR FAR * szSqlStrIn,
+    SDWORD cbSqlStrIn,
+    UCHAR FAR * szSqlStr,
+    SDWORD cbSqlStrMax,
+    SDWORD FAR * pcbSqlStr)
+{
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  HPROC hproc;
+  int sqlstat = en_00000;
+  RETCODE retcode;
+
+  if (hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check argument */
+  if (szSqlStrIn == NULL)
+    {
+      sqlstat = en_S1009;
+    }
+  else if (cbSqlStrIn < 0 && cbSqlStrIn != SQL_NTS)
+    {
+      sqlstat = en_S1090;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pdbc->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pdbc->state <= en_dbc_needdata)
+    {
+      PUSHSQLERR (pdbc->herr, en_08003);
+
+      return SQL_ERROR;
+    }
+
+  /* call driver */
+  hproc = _iodbcdm_getproc (hdbc, en_NativeSql);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pdbc->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (hdbc, retcode, hproc, en_NativeSql,
+    (pdbc->dhdbc, szSqlStrIn, cbSqlStrIn, szSqlStr, cbSqlStrMax, pcbSqlStr))
+
+  return retcode;
 }
index 9c5ed6427214fe8270d64d9e55ca7e9142954dac..8797c4b6bd4f55b22d02acdc57ec10a8a06b1135 100644 (file)
-/** dynamic library loader (mapping to svr4)
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-#ifdef DLDAPI_OS2
-#  define INCL_DOSMODULEMGR                 /* Module Manager values */
-#  define INCL_DOSERRORS                    /* Error values          */
-#  include      <os2.h>
-#  include      <stdio.h>
-#endif
+/*
+ *  dlf.c
+ *
+ *  $Id$
+ *
+ *  Dynamic Library Loader (mapping to SVR4)
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
 
-#include  "wx/setup.h"
-#include       <../iodbc/dlf.h>
+#include       <dlf.h>
 #include       <errno.h>
 
-#ifdef  DLDAPI_DEFINED
-# undef DLDAPI_DEFINED
+#ifdef DLDAPI_DEFINED
+#undef DLDAPI_DEFINED
 #endif
 
-#ifdef  DLDAPI_SVR4_DLFCN
-# define DLDAPI_DEFINED
-static  char sccsid[] = "@(#)dynamic load interface -- SVR4 dlfcn";
+#ifdef DLDAPI_SVR4_DLFCN
+#define DLDAPI_DEFINED
+static char sccsid[] = "@(#)dynamic load interface -- SVR4 dlfcn";
 #endif
 
-/*********************************
+/********************************* 
  *
- *      HP/UX
+ *     HP/UX 
  *
  *********************************/
-#ifdef  DLDAPI_HP_SHL
-# define        DLDAPI_DEFINED
-# include       <dl.h>
 
-static  char sccsid[] = "@(#)dynamic load interface -- HP/UX dl(shl)";
+#ifdef DLDAPI_HP_SHL
+#define        DLDAPI_DEFINED
+#include       <dl.h>
 
-void*   dlopen(char* path, int mode)
+static char sccsid[] = "@(#)dynamic load interface -- HP/UX dl(shl)";
+
+void *
+dlopen (char *path, int mode)
 {
-        return (void*)shl_load((char*)(path), BIND_DEFERRED, 0L);
+  return (void *) shl_load ((char *) (path), BIND_DEFERRED, 0L);
 }
 
-void*   dlsym(void* hdll, char* sym)
+
+void *
+dlsym (void *hdll, char *sym)
 {
-        void*   symaddr = 0;
-        int     ret;
+  void *symaddr = 0;
+  int ret;
 
-        if( ! hdll )
-                hdll = (void*)PROG_HANDLE;
+  if (!hdll)
+    hdll = (void *) PROG_HANDLE;
 
-        /* Remember, a driver may export calls as function pointers
-         * (i.e. with type TYPE_DATA) rather than as functions
-         * (i.e. with type TYPE_PROCEDURE). Thus, to be safe, we
-         * uses TYPE_UNDEFINED to cover all of them.
-         */
-        ret = shl_findsym((shl_t*)&hdll, sym, TYPE_UNDEFINED, &symaddr);
+  /* Remember, a driver may export calls as function pointers 
+   * (i.e. with type TYPE_DATA) rather than as functions 
+   * (i.e. with type TYPE_PROCEDURE). Thus, to be safe, we 
+   * uses TYPE_UNDEFINED to cover all of them. 
+   */
+  ret = shl_findsym ((shl_t *) & hdll, sym, TYPE_UNDEFINED, &symaddr);
 
-        if( ret == -1 )
-                return 0;
+  if (ret == -1)
+    return 0;
 
-        return symaddr;
+  return symaddr;
 }
 
-char*   dlerror()
+
+char *
+dlerror ()
 {
-        extern char*    strerror();
+  extern char *strerror ();
 
-        return strerror(errno);
+  return strerror (errno);
 }
 
-int     dlclose(void* hdll)
+
+int 
+dlclose (void *hdll)
 {
-        return shl_unload((shl_t)hdll);
+  return shl_unload ((shl_t) hdll);
 }
+#endif /* end of HP/UX Seection */
 
-#endif  /* end of HP/UX Seection */
 
 /*********************************
  *
- *      IBM AIX
+ *     IBM AIX
  *
  *********************************/
-#ifdef  DLDAPI_AIX_LOAD
-# define        DLDAPI_DEFINED
-# include       <sys/ldr.h>
-# include       <sys/stat.h>
-# include       <nlist.h>
+
+#ifdef DLDAPI_AIX_LOAD
+#define        DLDAPI_DEFINED
+#include       <sys/types.h>
+#include       <sys/ldr.h>
+#include       <sys/stat.h>
+#include       <nlist.h>
 
 /*
- *   Following id sting is a copyright mark. Removing(i.e. use the
+ *   Following id sting is a copyright mark. Removing(i.e. use the 
  *   source code in this .c file without include it or make it not
- *   appear in the final object file of AIX platform) or modifing
- *   it without permission from original author(kejin@empress.com)
+ *   appear in the final object file of AIX platform) or modifing 
+ *   it without permission from original author(kejin@empress.com) 
  *   are copyright violation.
  */
-static  char sccsid[]
-        = "@(#)dynamic load interface, Copyright(c) 1995 by Ke Jin";
+static char sccsid[]
+= "@(#)dynamic load interface, Copyright(c) 1995 by Ke Jin";
 
-# ifndef        HTAB_SIZE
-#  define       HTAB_SIZE       256
-# endif
+#ifndef        HTAB_SIZE
+#define        HTAB_SIZE       256
+#endif
 
-# define        FACTOR          0.618039887 /* i.e. (sqrt(5) - 1)/2 */
+#define        FACTOR          0.618039887     /* i.e. (sqrt(5) - 1)/2 */
 
-# ifndef        ENTRY_SYM
-#  define       ENTRY_SYM       ".__start" /* default entry point for aix */
-# endif
+#ifndef        ENTRY_SYM
+#define        ENTRY_SYM       ".__start"      /* default entry point for aix */
+#endif
 
 typedef struct slot_s
-{
-        char*           sym;
-        long            fdesc[3]; /* 12 bytes function descriptor */
-        struct slot_s*  next;
-} slot_t;
+  {
+    char *sym;
+    long fdesc[3];             /* 12 bytes function descriptor */
+    struct slot_s *next;
+  }
+slot_t;
 
 /* Note: on AIX, a function pointer actually points to a
  * function descriptor, a 12 bytes data. The first 4 bytes
- * is the virtual address of the function. The next 4 bytes
+ * is the virtual address of the function. The next 4 bytes 
  * is the virtual address of TOC (Table of Contents) of the
- * object module the function belong to. The last 4 bytes
- * are always 0 for C and Fortran functions. Every object
+ * object module the function belong to. The last 4 bytes 
+ * are always 0 for C and Fortran functions. Every object 
  * module has an entry point (which can be specified at link
  * time by -e ld option). iODBC driver manager requires ODBC
  * driver shared library always use the default entry point
  * (so you shouldn't use -e ld option when creating a driver
- * share library). load() returns the function descriptor of
+ * share library). load() returns the function descriptor of 
  * a module's entry point. From which we can calculate function
  * descriptors of other functions in the same module by using
- * the fact that the load() doesn't change the relative
- * offset of functions to their module entry point(i.e the
- * offset in memory loaded by load() will be as same as in
- * the module library file).
+ * the fact that the load() doesn't change the relative 
+ * offset of functions to their module entry point(i.e the 
+ * offset in memory loaded by load() will be as same as in 
+ * the module library file). 
  */
 
-typedef slot_t*         hent_t;
-typedef struct nlist    nlist_t;
-typedef struct stat     stat_t;
+typedef slot_t *hent_t;
+typedef struct nlist nlist_t;
+typedef struct stat stat_t;
 
 typedef struct obj
-{
-        int     dev;    /* device id */
-        int     ino;    /* inode number */
-        char*   path;   /* file name */
-        int     (*pentry)();    /* entry point of this share library */
-        int     refn;   /* number of reference */
-        hent_t  htab[HTAB_SIZE];
-        struct obj*
-                next;
-} obj_t;
-
-static char*    errmsg = 0;
-
-static void init_htab(hent_t* ht)
+  {
+    int dev;                   /* device id */
+    int ino;                   /* inode number */
+    char *path;                        /* file name */
+    int (*pentry) ();          /* entry point of this share library */
+    int refn;                  /* number of reference */
+    hent_t htab[HTAB_SIZE];
+    struct obj * next;
+  }
+obj_t;
+
+static char *errmsg = 0;
+
+static void 
+init_htab (hent_t * ht)
 /* initate a hashing table */
 {
-        int     i;
+  int i;
 
-        for(i=0; i<HTAB_SIZE; i++)
-                ht[i] = (slot_t*)0;
+  for (i = 0; i < HTAB_SIZE; i++)
+    ht[i] = (slot_t *) 0;
 
-        return;
+  return;
 }
 
-static void clean_htab(hent_t* ht)
+
+static void 
+clean_htab (hent_t * ht)
 /* free all slots */
 {
-        int     i;
-        slot_t* ent;
-        slot_t* tent;
+  int i;
+  slot_t *ent;
+  slot_t *tent;
 
-        for(i = 0; i< HTAB_SIZE; i++)
-        {
-                for( ent = ht[i]; ent; )
-                {
-                        tent = ent->next;
+  for (i = 0; i < HTAB_SIZE; i++)
+    {
+      for (ent = ht[i]; ent;)
+       {
+         tent = ent->next;
 
-                        free(ent->sym);
-                        free(ent);
+         free (ent->sym);
+         free (ent);
 
-                        ent = tent;
-                }
+         ent = tent;
+       }
 
-                ht[i] = 0;
-        }
+      ht[i] = 0;
+    }
 
-        return;
+  return;
 }
 
-static int      hash(char* sym )
+
+static int 
+hash (char *sym)
 {
-        int     a, key;
-        double  f;
+  int a, key;
+  double f;
 
-        if( !sym || !*sym )
-                return 0;
+  if (!sym || !*sym)
+    return 0;
 
-        for(key=*sym;*sym;sym++)
-        {
-                key += *sym;
-                a = key;
+  for (key = *sym; *sym; sym++)
+    {
+      key += *sym;
+      a = key;
 
-                key = (int)( (a<<8) + (key>>8) );
-                key = (key>0)? key:-key;
-        }
+      key = (int) ((a << 8) + (key >> 8));
+      key = (key > 0) ? key : -key;
+    }
 
-        f = key*FACTOR;
-        a = (int)f;
+  f = key * FACTOR;
+  a = (int) f;
 
-        return (int)((HTAB_SIZE - 1)*( f - a ));
+  return (int) ((HTAB_SIZE - 1) * (f - a));
 }
 
-static hent_t   search(hent_t* htab, char* sym)
+
+static hent_t 
+search (hent_t * htab, char *sym)
 /* search hashing table to find a matched slot */
 {
-        int     key;
-        slot_t* ent;
+  int key;
+  slot_t *ent;
 
-        key = hash(sym);
+  key = hash (sym);
 
-        for(ent = htab[key]; ent; ent = ent->next )
-        {
-                if(!strcmp(ent->sym, sym))
-                        return ent;
-        }
+  for (ent = htab[key]; ent; ent = ent->next)
+    {
+      if (!strcmp (ent->sym, sym))
+       return ent;
+    }
 
-        return 0;       /* no match */
+  return 0;                    /* no match */
 }
 
-static void     insert(hent_t* htab, slot_t* ent)
+
+static void 
+insert (hent_t * htab, slot_t * ent)
 /* insert a new slot to hashing table */
 {
-        int     key;
+  int key;
 
-        key = hash(ent->sym);
+  key = hash (ent->sym);
 
-        ent->next = htab[key];
-        htab[key] = ent;
+  ent->next = htab[key];
+  htab[key] = ent;
 
-        return;
+  return;
 }
 
-static slot_t*  slot_alloc(char* sym)
+
+static slot_t *
+slot_alloc (char *sym)
 /* allocate a new slot with symbol */
 {
-        slot_t* ent;
+  slot_t *ent;
 
-        ent = (slot_t*)malloc(sizeof(slot_t));
+  ent = (slot_t *) malloc (sizeof (slot_t));
 
-        ent->sym = (char*)malloc(strlen(sym)+1);
+  ent->sym = (char *) malloc (strlen (sym) + 1);
 
-        if( ! ent->sym )
-        {
-                free(ent);
-                return 0;
-        }
+  if (!ent->sym)
+    {
+      free (ent);
+      return 0;
+    }
 
-        strcpy( ent->sym, sym );
+  strcpy (ent->sym, sym);
 
-        return ent;
+  return ent;
 }
 
-static obj_t* obj_list = 0;
-
-void*   dlopen(char* file, int mode )
-{
-        stat_t  st;
-        obj_t*  pobj;
-        char    buf[1024];
-
-        if( ! file || ! *file )
-        {
-                errno = EINVAL;
-                return 0;
-        }
-
-        errno = 0;
-        errmsg = 0;
-
-#if 0
-        if( file[0] != '/' && file[0] != '.' )
-        {
-                for(;;)
-                {
-                        sprintf(buf, "/lib/%s", file);
-
-                        if( stat( buf, &st ) )
-                        {
-                                file = buf;
-                                break;
-                        }
-
-                        sprintf(buf, "/usr/lib/%s", file);
-
-                        if( stat( buf, &st ) )
-                        {
-                                file = buf;
-                                break;
-                        }
-
-                        if( stat( file, &st ) )
-                                break;
-
-                        return 0;
-                }
-        }
-        else
-#endif
-        if( stat( file, &st ) )
-                return 0;
-
-        for( pobj = obj_list; pobj; pobj = pobj->next )
-        /* find a match object */
-        {
-                if( pobj->ino == st.st_ino
-                 && pobj->dev == st.st_dev )
-                {
-                        /* found a match. increase its
-                         * reference count and return
-                         * its address */
-                        pobj->refn ++;
-                        return pobj;
-                }
-        }
-
-        pobj = (obj_t*)malloc( sizeof(obj_t) );
-
-        if( ! pobj )
-                return 0;
-
-        pobj->path = (char*)malloc( strlen(file) + 1);
-
-        if( ! pobj->path )
-        {
-                free( pobj );
-                return 0;
-        }
-
-        strcpy( pobj->path, file );
-
-        pobj->dev = st.st_dev;
-        pobj->ino = st.st_ino;
-        pobj->refn = 1;
-
-        pobj->pentry = (int(*)())load(file, 0, 0);
 
-        if( ! pobj->pentry )
-        {
-                free( pobj->path );
-                free( pobj );
-                return 0;
-        }
+static obj_t *obj_list = 0;
 
-        init_htab(pobj->htab);
-
-        pobj->next = obj_list;
-        obj_list = pobj;
-
-        return pobj;
+void *
+dlopen (char *file, int mode)
+{
+  stat_t st;
+  obj_t *pobj;
+  char buf[1024];
+
+  if (!file || !*file)
+    {
+      errno = EINVAL;
+      return 0;
+    }
+
+  errno = 0;
+  errmsg = 0;
+
+  if (stat (file, &st))
+    return 0;
+
+  for (pobj = obj_list; pobj; pobj = pobj->next)
+    /* find a match object */
+    {
+      if (pobj->ino == st.st_ino
+         && pobj->dev == st.st_dev)
+       {
+         /* found a match. increase its
+          * reference count and return 
+          * its address */
+         pobj->refn++;
+         return pobj;
+       }
+    }
+
+  pobj = (obj_t *) malloc (sizeof (obj_t));
+
+  if (!pobj)
+    return 0;
+
+  pobj->path = (char *) malloc (strlen (file) + 1);
+
+  if (!pobj->path)
+    {
+      free (pobj);
+      return 0;
+    }
+
+  strcpy (pobj->path, file);
+
+  pobj->dev = st.st_dev;
+  pobj->ino = st.st_ino;
+  pobj->refn = 1;
+
+  pobj->pentry = (int (*)()) load (file, 0, 0);
+
+  if (!pobj->pentry)
+    {
+      free (pobj->path);
+      free (pobj);
+      return 0;
+    }
+
+  init_htab (pobj->htab);
+
+  pobj->next = obj_list;
+  obj_list = pobj;
+
+  return pobj;
 }
 
-int     dlclose(void* hobj)
+
+int 
+dlclose (void *hobj)
 {
-        obj_t*  pobj = (obj_t*)hobj;
-        obj_t*  tpobj;
-        int     match = 0;
-
-        if( ! hobj )
-        {
-                errno = EINVAL;
-                return -1;
-        }
-
-        errno = 0;
-        errmsg = 0;
-
-        if( pobj == obj_list )
-        {
-                pobj->refn --;
-
-                if( pobj->refn )
-                        return 0;
-
-                match = 1;
-                obj_list = pobj->next;
-        }
-
-        for( tpobj = obj_list; !match && tpobj; tpobj = tpobj->next )
-        {
-                if( tpobj->next == pobj )
-                {
-                        pobj->refn --;
-
-                        if( pobj->refn )
-                                return 0;
-
-                        match = 1;
-                        tpobj->next = pobj->next;
-                }
-        }
-
-        if(match)
-        {
-                unload((void*)(pobj->pentry));
-                clean_htab(pobj->htab);
-                free(pobj->path);
-                free(pobj);
-        }
-
-        return 0;
+  obj_t *pobj = (obj_t *) hobj;
+  obj_t *tpobj;
+  int match = 0;
+
+  if (!hobj)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  errno = 0;
+  errmsg = 0;
+
+  if (pobj == obj_list)
+    {
+      pobj->refn--;
+
+      if (pobj->refn)
+       return 0;
+
+      match = 1;
+      obj_list = pobj->next;
+    }
+
+  for (tpobj = obj_list; !match && tpobj; tpobj = tpobj->next)
+    {
+      if (tpobj->next == pobj)
+       {
+         pobj->refn--;
+
+         if (pobj->refn)
+           return 0;
+
+         match = 1;
+         tpobj->next = pobj->next;
+       }
+    }
+
+  if (match)
+    {
+      unload ((void *) (pobj->pentry));
+      clean_htab (pobj->htab);
+      free (pobj->path);
+      free (pobj);
+    }
+
+  return 0;
 }
 
-char*   dlerror()
+
+char *
+dlerror ()
 {
-        extern char*    sys_errlist[];
+  extern char *sys_errlist[];
 
-        if( ! errmsg || ! errmsg[0] )
-        {
-                if( errno >= 0 )
-                        return sys_errlist[errno];
+  if (!errmsg || !errmsg[0])
+    {
+      if (errno >= 0)
+       return sys_errlist[errno];
 
-                return "";
-        }
+      return "";
+    }
 
-        return errmsg;
+  return errmsg;
 }
 
-void*   dlsym(void* hdl, char* sym)
+
+void *
+dlsym (void *hdl, char *sym)
 {
-        nlist_t nl[3];
-        obj_t*  pobj = (obj_t*)hdl;
-        slot_t* ent;
-        int     (*fp)();
-        long    lbuf[3];
-
-        if( !hdl || !(pobj->htab) || !sym || ! *sym )
-        {
-                errno = EINVAL;
-                return 0;
-        }
-
-        errno = 0;
-        errmsg = 0;
-
-        ent = search( pobj->htab, sym );
-
-        if( ent )
-                return ent->fdesc;
-
-#define n_name  _n._n_name
-
-        nl[0].n_name = ENTRY_SYM;
-        nl[1].n_name = sym;
-        nl[2].n_name = 0;
-
-        /* There is a potential problem here. If application
-         * did not pass a full path name, and changed the
-         * working directory after the load(), then nlist()
-         * will be unable to open the original shared library
-         * file to resolve the symbols. there are 3 ways to working
-         * round this: 1. convert to full pathname in driver
-         * manager. 2. applications always pass driver's full
-         * path name. 3. if driver itself don't support
-         * SQLGetFunctions(), call it with SQL_ALL_FUNCTIONS
-         * as flag immidately after SQLConnect(), SQLDriverConnect()
-         * and SQLBrowseConnect() to force the driver manager
-         * resolving all will be used symbols.
-         */
-        if( nlist( pobj->path, nl) == -1 )
-                return 0;
-
-        if( ! nl[0].n_type && ! nl[0].n_value )
-        {
-                errmsg = "can't locate module entry symbol";
-                return 0;
-        }
-
-        /* Note: On AIX 3.x if the object library is not
-         * built with -g compiling option, .n_type field
-         * is always 0. While on 4.x it will be 32.
-         * On AIX 4.x, if the symbol is a entry point,
-         * n_value will be 0. However, one thing is for sure
-         * that if a symbol is not existance in the file,
-         * both .n_type and .n_value would be 0.
-         */
-
-        if( ! nl[1].n_type && ! nl[1].n_value )
-        {
-                errmsg = "symbol not existance in this module";
-                return 0;
-        }
-
-        ent = slot_alloc(sym);
-
-        if( ! ent )
-                return 0;
-
-        /* catch it with a slot in the hashing table */
-        insert(pobj->htab, ent);
-
-        memcpy(ent->fdesc, pobj->pentry, sizeof(ent->fdesc));
-
-        /* now ent->fdesc[0] is the virtual address of entry point
-         * and ent->fdesc[1] is the TOC of the module
-         */
-
-        /* let's calculate the virtual address of the symbol
-         * by adding a relative offset getting from the module
-         * file symbol table, i.e
-         *
-         *  functin virtual address = entry point virtual address +
-         *     + ( function offset in file - entry point offset in file )
-         */
-
-        (ent->fdesc)[0] = (ent->fdesc)[0] +
-                ( nl[1].n_value - nl[0].n_value );
-
-        /* return the function descriptor */
-        return ent->fdesc;
+  nlist_t nl[3];
+  obj_t *pobj = (obj_t *) hdl;
+  slot_t *ent;
+  int (*fp) ();
+  long lbuf[3];
+
+  if (!hdl || !(pobj->htab) || !sym || !*sym)
+    {
+      errno = EINVAL;
+      return 0;
+    }
+
+  errno = 0;
+  errmsg = 0;
+
+  ent = search (pobj->htab, sym);
+
+  if (ent)
+    return ent->fdesc;
+
+#define        n_name  _n._n_name
+
+  nl[0].n_name = ENTRY_SYM;
+  nl[1].n_name = sym;
+  nl[2].n_name = 0;
+
+  /* There is a potential problem here. If application
+   * did not pass a full path name, and changed the
+   * working directory after the load(), then nlist()
+   * will be unable to open the original shared library
+   * file to resolve the symbols. there are 3 ways to working 
+   * round this: 1. convert to full pathname in driver
+   * manager. 2. applications always pass driver's full 
+   * path name. 3. if driver itself don't support 
+   * SQLGetFunctions(), call it with SQL_ALL_FUNCTIONS
+   * as flag immidately after SQLConnect(), SQLDriverConnect()
+   * and SQLBrowseConnect() to force the driver manager
+   * resolving all will be used symbols. 
+   */
+  if (nlist (pobj->path, nl) == -1)
+    return 0;
+
+  if (!nl[0].n_type && !nl[0].n_value)
+    {
+      errmsg = "can't locate module entry symbol";
+      return 0;
+    }
+
+  /* Note: On AIX 3.x if the object library is not
+   * built with -g compiling option, .n_type field
+   * is always 0. While on 4.x it will be 32. 
+   * On AIX 4.x, if the symbol is a entry point,
+   * n_value will be 0. However, one thing is for sure 
+   * that if a symbol is not existance in the file,
+   * both .n_type and .n_value would be 0.
+   */
+
+  if (!nl[1].n_type && !nl[1].n_value)
+    {
+      errmsg = "symbol not existance in this module";
+      return 0;
+    }
+
+  ent = slot_alloc (sym);
+
+  if (!ent)
+    return 0;
+
+  /* catch it with a slot in the hashing table */
+  insert (pobj->htab, ent);
+
+  memcpy (ent->fdesc, pobj->pentry, sizeof (ent->fdesc));
+
+  /* now ent->fdesc[0] is the virtual address of entry point
+   * and ent->fdesc[1] is the TOC of the module
+   */
+
+  /* let's calculate the virtual address of the symbol 
+   * by adding a relative offset getting from the module 
+   * file symbol table, i.e
+   *
+   *  functin virtual address = entry point virtual address +
+   *     + ( function offset in file - entry point offset in file )
+   */
+
+  (ent->fdesc)[0] = (ent->fdesc)[0] +
+      (nl[1].n_value - nl[0].n_value);
+
+  /* return the function descriptor */
+  return ent->fdesc;
 }
-
-#endif  /* end of IBM AIX Section */
+#endif /* end of IBM AIX Section */
 
 
-/*********************************
+/********************************* 
  *
- *      Windows 3.x, 95, NT
+ *     Windows 3.x, 95, NT
  *
  *********************************/
-#ifdef  DLDAPI_WINDOWS
-# define        DLDAPI_DEFINED
-# include       <windows.h>
 
-void FAR*       dlopen(char FAR* dll, int mode)
-{
-        HINSTANCE       hint;
+#ifdef DLDAPI_WINDOWS
+#define        DLDAPI_DEFINED
+#include       <windows.h>
 
-        if( dll == NULL )
-        {
-                return GetWindowWord( NULL, GWW_HINSTANCE );
-        }
+void FAR *
+dlopen (char FAR * dll, int mode)
+{
+  HINSTANCE hint;
 
-        hint = LoadLibrary(dll);
+  if (dll == NULL)
+    {
+      return GetWindowWord (NULL, GWW_HINSTANCE);
+    }
 
-        if( hint < HINSTANCE_ERROR )
-        {
-                return NULL;
-        }
+  hint = LoadLibrary (dll);
 
-        return (void FAR*)hint;
-}
+  if (hint < HINSTANCE_ERROR)
+    {
+      return NULL;
+    }
 
-void FAR*       dlsym( void FAR* hdll, char FAR* sym )
-{
-        return (void FAR*)GetProcAddress(hdll, sym);
+  return (void FAR *) hint;
 }
 
-char FAR*       dlerror()
-{
-        return 0L; /* unimplemented yet */
-}
 
-int     dlclose(void FAR* hdll)
+void FAR *
+dlsym (void FAR * hdll, char FAR * sym)
 {
-        FreeLibrary((HINSTANCE)hdll);
+  return (void FAR *) GetProcAddress (hdll, sym);
 }
 
-#endif  /* end of Windows family */
 
-/*********************************
- *
- *      OS/2 2.x, 3.x
- *
- *********************************/
-#ifdef DLDAPI_OS2
-# define        DLDAPI_DEFINED
-/*
- *      DosLoadModule(), DosQueryProcAddress(), DosFreeModule(), ...
- */
-
-void FAR*       dlopen(char FAR* dll, int mode)
+char FAR *
+dlerror ()
 {
-        APIRET  rc             = NO_ERROR;       /* API return code          */
-        UCHAR   LoadError[256] = "";             /* Area for Load fail. info */
-        HMODULE ModuleHandle   = NULLHANDLE;     /* Module handle            */
-
-        if( dll == NULL || '\0' == *dll )
-        {
-                return NULL;
-        }
-
-        rc = NO_ERROR;
-        rc = DosLoadModule( LoadError,           /* Failure info buffer      */
-                            sizeof(LoadError),   /* Size of buffer           */
-                            dll,                 /* Module to load           */
-                            &ModuleHandle );     /* Module handle returned   */
-        if (rc != NO_ERROR)
-        {
-#ifdef DEBUG
-                fprintf( stderr,
-                         "[dlf.c] dlopen: DosLoadModule(0x%08lX, %d, \"%s\", 0x%08lX) = %d\n",
-                         &LoadError, sizeof(LoadError), dll, &ModuleHandle, rc
-                       );
-                fprintf( stderr,
-                         "                ---> missing module '%s'\n",
-                         LoadError );
-#endif
-                return NULL;
-        }
-
-        return (void FAR*) ModuleHandle;
-
+  return 0L;                   /* unimplemented yet */
 }
 
-void FAR*       dlsym( void FAR* hdll, char FAR* sym )
-{
-        APIRET  rc             = NO_ERROR;       /* API return code          */
-        PFN     ModuleAddress  = NULL;           /* Module address           */
-
-        rc = DosQueryProcAddr( (HMODULE) hdll, 0, sym, &ModuleAddress );
 
-        return (void FAR*) (NO_ERROR == rc) ? ModuleAddress
-                                            : NULL;
-}
-
-char FAR*       dlerror()
+int 
+dlclose (void FAR * hdll)
 {
-        return 0L; /* unimplemented yet */
+  FreeLibrary ((HINSTANCE) hdll);
 }
+#endif /* end of Windows family */
 
-int     dlclose(void FAR* hdll)
-{
-        return DosFreeModule( (HMODULE) hdll );
-}
-
-#endif
 
 /***********************************
  *
- *      other platforms
+ *     other platforms
  *
  ***********************************/
-#ifdef  DLDAPI_MAC
-# define        DLDAPI_DEFINED
+
+#ifdef DLDAPI_OS2
+#define        DLDAPI_DEFINED
+/*
+ *    DosLoadModule(), DosQueryProcAddress(), DosFreeModule(), ...
+ */
+#endif
+
+#ifdef DLDAPI_MAC
+#define        DLDAPI_DEFINED
 #endif
 
 #ifdef DLDAPI_NEXT
-# define        DLDAPI_DEFINED
+#define        DLDAPI_DEFINED
 #endif
 
 #ifndef DLDAPI_DEFINED
-# error "dynamic load editor undefined"
+#error "dynamic load editor undefined"
 #endif
index 2d04cf39b281b274a5385ef129d7a561793bb24a..b56e326460d25fd4c2519fce8695c18411700280 100644 (file)
@@ -1,24 +1,55 @@
-#ifndef _DLF_H
-# define _DLF_H
+/*
+ *  dlf.h
+ *
+ *  $Id$
+ *
+ *  Dynamic Library Loader (mapping to SVR4)
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef        _DLF_H
+#define _DLF_H
+#include       <config.h>
 
+#if defined(HAVE_LIBDL)
 #define DLDAPI_SVR4_DLFCN
+#elif defined(HAVE_SHL_LOAD)
+#define DLDAPI_HP_SHL
+#endif
 
-# ifdef DLDAPI_SVR4_DLFCN
-#    include    <dlfcn.h>
-# else
-     extern void FAR*   dlopen(char FAR* path, int mode);
-     extern void FAR*   dlsym(void FAR* hdll, char FAR* sym);
-     extern char FAR*   dlerror();
-     extern int         dlclose(void FAR* hdll);
-# endif
-
-# ifndef        RTLD_LAZY
-#    define     RTLD_LAZY       1
-# endif
+#ifdef DLDAPI_SVR4_DLFCN
+#include       <dlfcn.h>
+#elif DLDAPI_AIX_LOAD
+#include       <dlfcn.h>
+#else
+extern void FAR *dlopen (char FAR * path, int mode);
+extern void FAR *dlsym (void FAR * hdll, char FAR * sym);
+extern char FAR *dlerror ();
+extern int dlclose (void FAR * hdll);
+#endif
 
-# define        DLL_OPEN(dll)           (void*)dlopen((char*)(path), RTLD_LAZY)
-# define        DLL_PROC(hdll, sym)     (void*)dlsym((void*)(hdll), (char*)sym)
-# define        DLL_ERROR()             (char*)dlerror()
-# define        DLL_CLOSE(hdll)         dlclose((void*)(hdll))
+#ifndef        RTLD_LAZY
+#define        RTLD_LAZY       1
+#endif
 
+#define        DLL_OPEN(dll)           (void*)dlopen((char*)(path), RTLD_LAZY)
+#define        DLL_PROC(hdll, sym)     (void*)dlsym((void*)(hdll), (char*)sym)
+#define        DLL_ERROR()             (char*)dlerror()
+#define        DLL_CLOSE(hdll)         dlclose((void*)(hdll))
 #endif
index 24f1bfda9cee849f2de647d89792325ad00876d2..85b04fad42ad2db6cc759f444d00a2ee9be8a8a7 100644 (file)
-/** Load driver and resolve driver's function entry point
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-
-#include       <../iodbc/iodbc.h>
-
-#include       <../iodbc/isql.h>
-#include       <../iodbc/isqlext.h>
-
-#include        <../iodbc/dlproc.h>
-
-#include       <../iodbc/herr.h>
-#include       <../iodbc/henv.h>
-#include       <../iodbc/hdbc.h>
-
-#include       <../iodbc/itrace.h>
-
-#include       "../iodbc/henv.ci"
-
-HPROC   _iodbcdm_getproc( HDBC hdbc, int idx )
+/*
+ *  dlproc.c
+ *
+ *  $Id$
+ *
+ *  Load driver and resolve driver's function entry point
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include       <config.h>
+
+#include       <isql.h>
+#include       <isqlext.h>
+
+#include        <dlproc.h>
+
+#include       <herr.h>
+#include       <henv.h>
+#include       <hdbc.h>
+
+#include       <itrace.h>
+
+#include       "henv.ci"
+
+HPROC 
+_iodbcdm_getproc (HDBC hdbc, int idx)
 {
-        DBC_t FAR*      pdbc    = (DBC_t FAR*)hdbc;
-        ENV_t FAR*      penv;
-        HDLL            hdll;
static HPROC FAR*      phproc;
-
-        if( idx <= 0 || idx > SQL_EXT_API_LAST )
-        /* first entry never used */
-        {
-                return SQL_NULL_HPROC;
-        }
-
-        penv = (ENV_t FAR*)(pdbc->henv);
-
-        if( penv == NULL )
-        {
-                return SQL_NULL_HPROC;
-        }
-
-        phproc = penv->dllproc_tab + idx;
-
-        if( *phproc == SQL_NULL_HPROC )
-        {
-                int     i, en_idx;
-
-                for( i=0 ; ; i++ )
-                {
-                        en_idx = odbcapi_symtab[i].en_idx;
-
-                        if( en_idx == en_NullProc )
-                        {
-                                break;
-                        }
-
-                        if( en_idx == idx )
-                        {
-                                *phproc = _iodbcdm_dllproc( penv->hdll,
-                                        odbcapi_symtab[i].symbol );
-
-                                break;
-                        }
-                }
-        }
-
-        return *phproc;
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  ENV_t FAR *penv;
+  HDLL hdll;
 HPROC FAR *phproc;
+
+  if (idx <= 0 || idx > SQL_EXT_API_LAST)
+    /* first entry naver used */
+    {
+      return SQL_NULL_HPROC;
+    }
+
+  penv = (ENV_t FAR *) (pdbc->henv);
+
+  if (penv == NULL)
+    {
+      return SQL_NULL_HPROC;
+    }
+
+  phproc = penv->dllproc_tab + idx;
+
+  if (*phproc == SQL_NULL_HPROC)
+    {
+      int i, en_idx;
+
+      for (i = 0;; i++)
+       {
+         en_idx = odbcapi_symtab[i].en_idx;
+
+         if (en_idx == en_NullProc)
+           {
+             break;
+           }
+
+         if (en_idx == idx)
+           {
+             *phproc = _iodbcdm_dllproc (penv->hdll,
+                 odbcapi_symtab[i].symbol);
+
+             break;
+           }
+       }
+    }
+
+  return *phproc;
 }
 
-HDLL    _iodbcdm_dllopen( char FAR* path )
+
+HDLL 
+_iodbcdm_dllopen (char FAR * path)
 {
-        return  (HDLL)DLL_OPEN( path );
+  return (HDLL) DLL_OPEN (path);
 }
 
-HPROC   _iodbcdm_dllproc( HDLL hdll, char FAR* sym )
+
+HPROC 
+_iodbcdm_dllproc (HDLL hdll, char FAR * sym)
 {
-        return (HPROC)DLL_PROC( hdll, sym );
+  return (HPROC) DLL_PROC (hdll, sym);
 }
 
-int     _iodbcdm_dllclose( HDLL hdll )
+
+int 
+_iodbcdm_dllclose (HDLL hdll)
 {
-        DLL_CLOSE( hdll );
+  DLL_CLOSE (hdll);
 
-        return 0;
+  return 0;
 }
 
-char*   _iodbcdm_dllerror( )
+
+char *
+_iodbcdm_dllerror ()
 {
-        return DLL_ERROR();
+  return DLL_ERROR ();
 }
+
index b757369a8b045bd62c83121c834f13c072cd94ef..34aeac6cd1bba1d250a4b9b7c2d17a5521cfb05c 100644 (file)
@@ -1,39 +1,55 @@
-#ifndef _DLPROC_H
-# define        _DLPROC_H
-
-# include       <../iodbc/dlf.h>
-
-# ifdef OS2
-  typedef       RETCODE         (FAR* _System HPROC)();
-# else
-  typedef       RETCODE         (FAR* HPROC)();
-# endif
-
-# ifdef DLDAPI_SVR4_DLFCN
-#  include      <dlfcn.h>
-   typedef void*        HDLL;
-# endif
-
-# ifdef DLDAPI_HP_SHL
-#  include      <dl.h>
-   typedef shl_t        HDLL;
-# endif
-
-# ifdef DLDAPI_AIX_LOAD
-    typedef void*        HDLL;
-# endif
+/*
+ *  dlproc.h
+ *
+ *  $Id$
+ *
+ *  Load driver and resolve driver's function entry point
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef        _DLPROC_H
+#define        _DLPROC_H
+
+#include       <dlf.h>
+
+typedef RETCODE (FAR * HPROC) ();
+
+#ifdef DLDAPI_SVR4_DLFCN
+#include       <dlfcn.h>
+typedef void *HDLL;
+#endif
 
-# ifdef DLDAPI_OS2
-  typedef HMODULE      HDLL;
-# endif
+#ifdef DLDAPI_HP_SHL
+#include       <dl.h>
+typedef shl_t HDLL;
+#endif
 
-extern  HPROC           _iodbcdm_getproc();
-extern  HDLL            _iodbcdm_dllopen(char FAR* dll);
-extern  HPROC           _iodbcdm_dllproc(HDLL hdll, char FAR* sym);
-extern  char FAR*       _iodbcdm_dllerror();
-extern  int             _iodbcdm_dllclose(HDLL hdll);
+#ifdef DLDAPI_AIX_LOAD
+typedef void *HDLL;
+#endif
 
-#define SQL_NULL_HDLL   ((HDLL)NULL)
-#define SQL_NULL_HPROC  ((HPROC)NULL)
+extern HPROC _iodbcdm_getproc ();
+extern HDLL _iodbcdm_dllopen (char FAR * dll);
+extern HPROC _iodbcdm_dllproc (HDLL hdll, char FAR * sym);
+extern char FAR *_iodbcdm_dllerror ();
+extern int _iodbcdm_dllclose (HDLL hdll);
 
+#define        SQL_NULL_HDLL   ((HDLL)NULL)
+#define        SQL_NULL_HPROC  ((HPROC)NULL)
 #endif
index bdb8f7dcd8933ebd98a7c073a3a78eec5e0d3a2c..bab022bc7e9e70a1c338834300884d09c15f4012 100644 (file)
-/** Invoke a query
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-#include       <../iodbc/iodbc.h>
-
-#include       <../iodbc/isql.h>
-#include       <../iodbc/isqlext.h>
-
-#include        <../iodbc/dlproc.h>
-
-#include       <../iodbc/herr.h>
-#include       <../iodbc/henv.h>
-#include       <../iodbc/hdbc.h>
-#include       <../iodbc/hstmt.h>
-
-#include       <../iodbc/itrace.h>
-
-static void     do_cursoropen(STMT_t FAR* pstmt)
+/*
+ *  execute.c
+ *
+ *  $Id$
+ *
+ *  Invoke a query
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include       <config.h>
+
+#include       <isql.h>
+#include       <isqlext.h>
+
+#include        <dlproc.h>
+
+#include       <herr.h>
+#include       <henv.h>
+#include       <hdbc.h>
+#include       <hstmt.h>
+
+#include       <itrace.h>
+
+static void 
+do_cursoropen (STMT_t FAR * pstmt)
 {
-        RETCODE retcode;
-        SWORD   ncol;
-
-        pstmt->state = en_stmt_executed;
-
-        retcode = SQLNumResultCols( pstmt, &ncol );
-
-        if( retcode == SQL_SUCCESS
-         || retcode == SQL_SUCCESS_WITH_INFO )
-        {
-                if( ncol )
-                {
-                        pstmt->state = en_stmt_cursoropen;
-                        pstmt->cursor_state = en_stmt_cursor_opened;
-                }
-                else
-                {
-                        pstmt->state = en_stmt_executed;
-                        pstmt->cursor_state = en_stmt_cursor_no;
-                }
-        }
+  RETCODE retcode;
+  SWORD ncol;
+
+  pstmt->state = en_stmt_executed;
+
+  retcode = SQLNumResultCols (pstmt, &ncol);
+
+  if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
+    {
+      if (ncol)
+       {
+         pstmt->state = en_stmt_cursoropen;
+         pstmt->cursor_state = en_stmt_cursor_opened;
+       }
+      else
+       {
+         pstmt->state = en_stmt_executed;
+         pstmt->cursor_state = en_stmt_cursor_no;
+       }
+    }
 }
 
-RETCODE SQL_API SQLExecute ( HSTMT hstmt )
+
+RETCODE SQL_API 
+SQLExecute (HSTMT hstmt)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc   = SQL_NULL_HPROC;
-        RETCODE         retcode;
-
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                switch( pstmt->state )
-                {
-                        case en_stmt_allocated:
-                                sqlstat = en_S1010;
-                                break;
-
-                        case en_stmt_executed:
-                                if( ! pstmt->prep_state )
-                                {
-                                        sqlstat = en_S1010;
-                                }
-                                break;
-
-                        case en_stmt_cursoropen:
-                                if( ! pstmt->prep_state )
-                                {
-                                        sqlstat = en_S1010;
-                                }
-                                break;
-
-                        case en_stmt_fetched:
-                        case en_stmt_xfetched:
-                                if( ! pstmt->prep_state )
-                                {
-                                        sqlstat = en_S1010;
-                                }
-                                else
-                                {
-                                        sqlstat = en_24000;
-                                }
-                                break;
-
-                        case en_stmt_needdata:
-                        case en_stmt_mustput:
-                        case en_stmt_canput:
-                                sqlstat = en_S1010;
-                                break;
-
-                        default:
-                                break;
-                }
-        }
-        else if( pstmt->asyn_on != en_Execute )
-        {
-                sqlstat = en_S1010;
-        }
-
-        if( sqlstat == en_00000 )
-        {
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_Execute );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                }
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc,
-                en_Execute, ( pstmt->dhstmt ) )
-
-#if 0
-        retcode = hproc ( pstmt->dhstmt );
-#endif
-
-        /* stmt state transition */
-        if( pstmt->asyn_on == en_Execute )
-        {
-                switch ( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_NEED_DATA:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-                                break;
-
-                        case SQL_STILL_EXECUTING:
-                        default:
-                                return retcode;
-                }
-        }
-
-        switch( pstmt->state )
-        {
-                case en_stmt_prepared:
-                        switch( retcode )
-                        {
-                                case SQL_SUCCESS:
-                                case SQL_SUCCESS_WITH_INFO:
-                                        do_cursoropen(hstmt);
-                                        break;
-
-                                case SQL_NEED_DATA:
-                                        pstmt->state = en_stmt_needdata;
-                                        pstmt->need_on = en_Execute;
-                                        break;
-
-                                case SQL_STILL_EXECUTING:
-                                        pstmt->asyn_on = en_Execute;
-                                        break;
-
-                                default:
-                                        break;
-                        }
-                        break;
-
-                case en_stmt_executed:
-                        switch( retcode )
-                        {
-                                case SQL_ERROR:
-                                        pstmt->state = en_stmt_allocated;
-                                        pstmt->cursor_state = en_stmt_cursor_no;
-                                        pstmt->prep_state = 0;
-                                        break;
-
-                                case SQL_NEED_DATA:
-                                        pstmt->state = en_stmt_needdata;
-                                        pstmt->need_on = en_Execute;
-                                        break;
-
-                                case SQL_STILL_EXECUTING:
-                                        pstmt->asyn_on = en_Execute;
-                                        break;
-
-                                default:
-                                        break;
-                        }
-                        break;
-
-                default:
-                        break;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      switch (pstmt->state)
+        {
+        case en_stmt_allocated:
+          sqlstat = en_S1010;
+          break;
+
+        case en_stmt_executed:
+          if (!pstmt->prep_state)
+            {
+              sqlstat = en_S1010;
+            }
+          break;
+
+        case en_stmt_cursoropen:
+          if (!pstmt->prep_state)
+            {
+              sqlstat = en_S1010;
+            }
+          break;
+
+        case en_stmt_fetched:
+        case en_stmt_xfetched:
+          if (!pstmt->prep_state)
+            {
+              sqlstat = en_S1010;
+            }
+          else
+            {
+              sqlstat = en_24000;
+            }
+          break;
+
+        case en_stmt_needdata:
+        case en_stmt_mustput:
+        case en_stmt_canput:
+          sqlstat = en_S1010;
+          break;
+
+        default:
+          break;
+        }
+    }
+  else if (pstmt->asyn_on != en_Execute)
+    {
+      sqlstat = en_S1010;
+    }
+
+  if (sqlstat == en_00000)
+    {
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_Execute);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+       }
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_Execute,
+    (pstmt->dhstmt))
+
+  /* stmt state transition */
+  if (pstmt->asyn_on == en_Execute)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_NEED_DATA:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+          break;
+
+        case SQL_STILL_EXECUTING:
+        default:
+          return retcode;
+        }
+    }
+
+  switch (pstmt->state)
+     {
+     case en_stmt_prepared:
+       switch (retcode)
+         {
+         case SQL_SUCCESS:
+         case SQL_SUCCESS_WITH_INFO:
+           do_cursoropen (hstmt);
+           break;
+
+         case SQL_NEED_DATA:
+           pstmt->state = en_stmt_needdata;
+           pstmt->need_on = en_Execute;
+           break;
+
+         case SQL_STILL_EXECUTING:
+           pstmt->asyn_on = en_Execute;
+           break;
+
+         default:
+           break;
+         }
+       break;
+
+     case en_stmt_executed:
+       switch (retcode)
+         {
+         case SQL_ERROR:
+           pstmt->state = en_stmt_allocated;
+           pstmt->cursor_state = en_stmt_cursor_no;
+           pstmt->prep_state = 0;
+           break;
+
+         case SQL_NEED_DATA:
+           pstmt->state = en_stmt_needdata;
+           pstmt->need_on = en_Execute;
+           break;
+
+         case SQL_STILL_EXECUTING:
+           pstmt->asyn_on = en_Execute;
+           break;
+
+         default:
+           break;
+         }
+       break;
+
+     default:
+       break;
+     }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLExecDirect (
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szSqlStr,
-                        SDWORD          cbSqlStr )
+
+RETCODE SQL_API 
+SQLExecDirect (
+    HSTMT hstmt,
+    UCHAR FAR * szSqlStr,
+    SDWORD cbSqlStr)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc   = SQL_NULL_HPROC;
-
-        int             sqlstat = en_00000;
-        RETCODE         retcode = SQL_SUCCESS;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check arguments */
-        if( szSqlStr == NULL )
-        {
-                sqlstat = en_S1009;
-        }
-        else if( cbSqlStr < 0 && cbSqlStr != SQL_NTS )
-        {
-                sqlstat = en_S1090;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                switch ( pstmt->state )
-                {
-                        case en_stmt_fetched:
-                        case en_stmt_xfetched:
-                                sqlstat = en_24000;
-                                break;
-
-                        case en_stmt_needdata:
-                        case en_stmt_mustput:
-                        case en_stmt_canput:
-                                sqlstat = en_S1010;
-                                break;
-
-                        default:
-                                break;
-                }
-        }
-        else if( pstmt->asyn_on != en_ExecDirect )
-        {
-                sqlstat = en_S1010;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_ExecDirect);
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ExecDirect, (
-                        pstmt->dhstmt, szSqlStr, cbSqlStr) )
-
-
-#if 0
-        retcode = hproc ( pstmt->dhstmt, szSqlStr, cbSqlStr );
-#endif
-
-        /* stmt state transition */
-        if( pstmt->asyn_on == en_ExecDirect )
-        {
-                switch ( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_NEED_DATA:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-                                break;
-
-                        case SQL_STILL_EXECUTING:
-                        default:
-                                return retcode;
-                }
-        }
-
-        if( pstmt->state <= en_stmt_executed )
-        {
-                switch( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                                do_cursoropen(hstmt);
-                                break;
-
-                        case SQL_NEED_DATA:
-                                pstmt->state = en_stmt_needdata;
-                                pstmt->need_on = en_ExecDirect;
-                                break;
-
-                        case SQL_STILL_EXECUTING:
-                                pstmt->asyn_on = en_ExecDirect;
-                                break;
-
-                        case SQL_ERROR:
-                                pstmt->state = en_stmt_allocated;
-                                pstmt->cursor_state = en_stmt_cursor_no;
-                                pstmt->prep_state = 0;
-                                break;
-
-                        default:
-                                break;
-                }
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+
+  int sqlstat = en_00000;
+  RETCODE retcode = SQL_SUCCESS;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check arguments */
+  if (szSqlStr == NULL)
+    {
+      sqlstat = en_S1009;
+    }
+  else if (cbSqlStr < 0 && cbSqlStr != SQL_NTS)
+    {
+      sqlstat = en_S1090;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      switch (pstmt->state)
+        {
+        case en_stmt_fetched:
+        case en_stmt_xfetched:
+          sqlstat = en_24000;
+          break;
+
+        case en_stmt_needdata:
+        case en_stmt_mustput:
+        case en_stmt_canput:
+          sqlstat = en_S1010;
+          break;
+
+        default:
+          break;
+        }
+    }
+  else if (pstmt->asyn_on != en_ExecDirect)
+    {
+      sqlstat = en_S1010;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_ExecDirect);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_ExecDirect,
+    (pstmt->dhstmt, szSqlStr, cbSqlStr))
+
+  /* stmt state transition */
+  if (pstmt->asyn_on == en_ExecDirect)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_NEED_DATA:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+          break;
+
+        case SQL_STILL_EXECUTING:
+        default:
+          return retcode;
+        }
+    }
+
+  if (pstmt->state <= en_stmt_executed)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+          do_cursoropen (hstmt);
+          break;
+
+        case SQL_NEED_DATA:
+          pstmt->state = en_stmt_needdata;
+          pstmt->need_on = en_ExecDirect;
+          break;
+
+        case SQL_STILL_EXECUTING:
+          pstmt->asyn_on = en_ExecDirect;
+          break;
+
+        case SQL_ERROR:
+          pstmt->state = en_stmt_allocated;
+          pstmt->cursor_state = en_stmt_cursor_no;
+          pstmt->prep_state = 0;
+          break;
+
+        default:
+          break;
+        }
+    }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLPutData(
-                        HSTMT   hstmt,
-                        PTR     rgbValue,
-                        SDWORD  cbValue )
+
+RETCODE SQL_API 
+SQLPutData (
+    HSTMT hstmt,
+    PTR rgbValue,
+    SDWORD cbValue)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check argument value */
-        if( rgbValue == NULL
-         && ( cbValue != SQL_DEFAULT_PARAM
-           && cbValue != SQL_NULL_DATA ) )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1009 );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                if( pstmt->state <= en_stmt_xfetched )
-                {
-                        PUSHSQLERR( pstmt->herr, en_S1010 );
-
-                        return SQL_ERROR;
-                }
-        }
-        else if( pstmt->asyn_on != en_PutData )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
-
-                return SQL_ERROR;
-        }
-
-        /* call driver */
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_PutData );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_PutData, (
-                        pstmt->dhstmt, rgbValue, cbValue ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt, rgbValue, cbValue );
-#endif
-
-        /* state transition */
-        if( pstmt->asyn_on == en_PutData )
-        {
-                switch( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-                                break;
-
-                        case SQL_STILL_EXECUTING:
-                        default:
-                                return retcode;
-                }
-        }
-
-        /* must in mustput or canput states */
-        switch( retcode )
-        {
-                case SQL_SUCCESS:
-                case SQL_SUCCESS_WITH_INFO:
-                        pstmt->state = en_stmt_canput;
-                        break;
-
-                case SQL_ERROR:
-                        switch( pstmt->need_on )
-                        {
-                                case en_ExecDirect:
-                                        pstmt->state = en_stmt_allocated;
-                                        pstmt->need_on = en_NullProc;
-                                        break;
-
-                                case en_Execute:
-                                        if( pstmt->prep_state )
-                                        {
-                                                pstmt->state = en_stmt_prepared;
-                                                pstmt->need_on = en_NullProc;
-                                        }
-                                        break;
-
-                                case en_SetPos:
-                                        /* Is this possible ???? */
-                                        pstmt->state = en_stmt_xfetched;
-                                        break;
-
-                                default:
-                                        break;
-                        }
-                        break;
-
-                case SQL_STILL_EXECUTING:
-                        pstmt->asyn_on = en_PutData;
-                        break;
-
-                default:
-                        break;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check argument value */
+  if (rgbValue == NULL && 
+       (cbValue != SQL_DEFAULT_PARAM && cbValue != SQL_NULL_DATA))
+    {
+      PUSHSQLERR (pstmt->herr, en_S1009);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      if (pstmt->state <= en_stmt_xfetched)
+       {
+         PUSHSQLERR (pstmt->herr, en_S1010);
+
+         return SQL_ERROR;
+       }
+    }
+  else if (pstmt->asyn_on != en_PutData)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
+
+      return SQL_ERROR;
+    }
+
+  /* call driver */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_PutData);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_PutData,
+    (pstmt->dhstmt, rgbValue, cbValue))
+
+  /* state transition */
+  if (pstmt->asyn_on == en_PutData)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+          break;
+
+        case SQL_STILL_EXECUTING:
+        default:
+          return retcode;
+        }
+    }
+
+  /* must in mustput or canput states */
+  switch (retcode)
+     {
+     case SQL_SUCCESS:
+     case SQL_SUCCESS_WITH_INFO:
+       pstmt->state = en_stmt_canput;
+       break;
+
+     case SQL_ERROR:
+       switch (pstmt->need_on)
+         {
+         case en_ExecDirect:
+           pstmt->state = en_stmt_allocated;
+           pstmt->need_on = en_NullProc;
+           break;
+
+         case en_Execute:
+           if (pstmt->prep_state)
+             {
+               pstmt->state = en_stmt_prepared;
+               pstmt->need_on = en_NullProc;
+             }
+           break;
+
+         case en_SetPos:
+           /* Is this possible ???? */
+           pstmt->state = en_stmt_xfetched;
+           break;
+
+         default:
+           break;
+         }
+       break;
+
+     case SQL_STILL_EXECUTING:
+       pstmt->asyn_on = en_PutData;
+       break;
+
+     default:
+       break;
+     }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLParamData (
-                        HSTMT           hstmt,
-                        PTR FAR*        prgbValue )
+
+RETCODE SQL_API 
+SQLParamData (
+    HSTMT hstmt,
+    PTR FAR * prgbValue)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check argument */
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                if( pstmt->state <= en_stmt_xfetched )
-                {
-                        PUSHSQLERR ( pstmt->herr, en_S1010 );
-
-                        return SQL_ERROR;
-                }
-        }
-        else if( pstmt->asyn_on != en_ParamData )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
-
-                return SQL_ERROR;
-        }
-
-        /* call driver */
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_ParamData );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ParamData, (
-                        pstmt->dhstmt, prgbValue ) )
-
-#if 0
-        retcode = hproc ( pstmt->dhstmt, prgbValue );
-#endif
-
-        /* state transition */
-        if( pstmt->asyn_on == en_ParamData )
-        {
-                switch( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-                                break;
-
-                        case SQL_STILL_EXECUTING:
-                        default:
-                                return retcode;
-                }
-        }
-
-        if( pstmt->state < en_stmt_needdata )
-        {
-                return retcode;
-        }
-
-        switch( retcode )
-        {
-                case SQL_ERROR:
-                        switch( pstmt->need_on )
-                        {
-                                case en_ExecDirect:
-                                        pstmt->state = en_stmt_allocated;
-                                        break;
-
-                                case en_Execute:
-                                        pstmt->state = en_stmt_prepared;
-                                        break;
-
-                                case en_SetPos:
-                                        pstmt->state = en_stmt_xfetched;
-                                        pstmt->cursor_state
-                                                = en_stmt_cursor_xfetched;
-                                        break;
-
-                                default:
-                                        break;
-                        }
-                        pstmt->need_on = en_NullProc;
-                        break;
-
-                case SQL_SUCCESS:
-                case SQL_SUCCESS_WITH_INFO:
-                        switch( pstmt->state )
-                        {
-                                case en_stmt_needdata:
-                                        pstmt->state = en_stmt_mustput;
-                                        break;
-
-                                case en_stmt_canput:
-                                        switch( pstmt->need_on )
-                                        {
-                                                case en_SetPos:
-                                                        pstmt->state
-                                                        = en_stmt_xfetched;
-                                                        pstmt->cursor_state
-                                                        = en_stmt_cursor_xfetched;
-                                                        break;
-
-                                                case en_ExecDirect:
-                                                case en_Execute:
-                                                        do_cursoropen(hstmt);
-                                                        break;
-
-                                                default:
-                                                        break;
-                                        }
-                                        break;
-
-                                default:
-                                        break;
-                        }
-                        pstmt->need_on = en_NullProc;
-                        break;
-
-                case SQL_NEED_DATA:
-                        pstmt->state = en_stmt_mustput;
-                        break;
-
-                default:
-                        break;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check argument */
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      if (pstmt->state <= en_stmt_xfetched)
+       {
+         PUSHSQLERR (pstmt->herr, en_S1010);
+
+         return SQL_ERROR;
+       }
+    }
+  else if (pstmt->asyn_on != en_ParamData)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
+
+      return SQL_ERROR;
+    }
+
+  /* call driver */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_ParamData);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_ParamData,
+    (pstmt->dhstmt, prgbValue))
+
+  /* state transition */
+  if (pstmt->asyn_on == en_ParamData)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+          break;
+
+        case SQL_STILL_EXECUTING:
+        default:
+          return retcode;
+        }
+    }
+
+  if (pstmt->state < en_stmt_needdata)
+    {
+      return retcode;
+    }
+
+  switch (retcode)
+     {
+     case SQL_ERROR:
+       switch (pstmt->need_on)
+         {
+         case en_ExecDirect:
+           pstmt->state = en_stmt_allocated;
+           break;
+
+         case en_Execute:
+           pstmt->state = en_stmt_prepared;
+           break;
+
+         case en_SetPos:
+           pstmt->state = en_stmt_xfetched;
+           pstmt->cursor_state
+               = en_stmt_cursor_xfetched;
+           break;
+
+         default:
+           break;
+         }
+       pstmt->need_on = en_NullProc;
+       break;
+
+     case SQL_SUCCESS:
+     case SQL_SUCCESS_WITH_INFO:
+       switch (pstmt->state)
+         {
+         case en_stmt_needdata:
+           pstmt->state = en_stmt_mustput;
+           break;
+
+         case en_stmt_canput:
+           switch (pstmt->need_on)
+              {
+              case en_SetPos:
+                pstmt->state
+                    = en_stmt_xfetched;
+                pstmt->cursor_state
+                    = en_stmt_cursor_xfetched;
+                break;
+
+              case en_ExecDirect:
+              case en_Execute:
+                do_cursoropen (hstmt);
+                break;
+
+              default:
+                break;
+              }
+           break;
+
+         default:
+           break;
+         }
+       pstmt->need_on = en_NullProc;
+       break;
+
+     case SQL_NEED_DATA:
+       pstmt->state = en_stmt_mustput;
+       break;
+
+     default:
+       break;
+     }
+
+  return retcode;
 }
 
 
-RETCODE SQL_API SQLNumParams (
-                        HSTMT           hstmt,
-                        SWORD FAR*      pcpar )
+RETCODE SQL_API 
+SQLNumParams (
+    HSTMT hstmt,
+    SWORD FAR * pcpar)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check argument */
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                switch( pstmt->state )
-                {
-                        case en_stmt_allocated:
-                        case en_stmt_needdata:
-                        case en_stmt_mustput:
-                        case en_stmt_canput:
-                                PUSHSQLERR ( pstmt->herr, en_S1010 );
-                                return SQL_ERROR;
-
-                        default:
-                                break;
-                }
-        }
-        else if( pstmt->asyn_on != en_NumParams )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
-
-                return SQL_ERROR;
-        }
-
-        /* call driver */
-        hproc = _iodbcdm_getproc ( pstmt->hdbc, en_NumParams );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_NumParams, (
-                        pstmt->dhstmt, pcpar) )
-
-
-#if 0
-        retcode = hproc ( pstmt->dhstmt, pcpar );
-#endif
-
-        /* state transition */
-        if( pstmt->asyn_on == en_NumParams )
-        {
-                switch ( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_ERROR:
-                                break;
-
-                        default:
-                                return retcode;
-                }
-        }
-
-        if( retcode == SQL_STILL_EXECUTING )
-        {
-                pstmt->asyn_on = en_NumParams;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check argument */
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      switch (pstmt->state)
+        {
+        case en_stmt_allocated:
+        case en_stmt_needdata:
+        case en_stmt_mustput:
+        case en_stmt_canput:
+          PUSHSQLERR (pstmt->herr, en_S1010);
+          return SQL_ERROR;
+
+        default:
+          break;
+        }
+    }
+  else if (pstmt->asyn_on != en_NumParams)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
+
+      return SQL_ERROR;
+    }
+
+  /* call driver */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_NumParams);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_NumParams,
+    (pstmt->dhstmt, pcpar))
+
+  /* state transition */
+  if (pstmt->asyn_on == en_NumParams)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_ERROR:
+          break;
+
+        default:
+          return retcode;
+        }
+    }
+
+  if (retcode == SQL_STILL_EXECUTING)
+    {
+      pstmt->asyn_on = en_NumParams;
+    }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLDescribeParam (
-                        HSTMT           hstmt,
-                        UWORD           ipar,
-                        SWORD  FAR*     pfSqlType,
-                        UDWORD FAR*     pcbColDef,
-                        SWORD  FAR*     pibScale,
-                        SWORD  FAR*     pfNullable )
+
+RETCODE SQL_API 
+SQLDescribeParam (
+    HSTMT hstmt,
+    UWORD ipar,
+    SWORD FAR * pfSqlType,
+    UDWORD FAR * pcbColDef,
+    SWORD FAR * pibScale,
+    SWORD FAR * pfNullable)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check argument */
-        if( ipar == 0 )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1093 );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                switch( pstmt->state )
-                {
-                        case en_stmt_allocated:
-                        case en_stmt_needdata:
-                        case en_stmt_mustput:
-                        case en_stmt_canput:
-                                PUSHSQLERR ( pstmt->herr, en_S1010 );
-                                return SQL_ERROR;
-
-                        default:
-                                break;
-                }
-        }
-        else if( pstmt->asyn_on != en_DescribeParam )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
-
-                return SQL_ERROR;
-        }
-
-        /* call driver */
-        hproc = _iodbcdm_getproc ( pstmt->hdbc, en_DescribeParam );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_DescribeParam, (
-                        pstmt->dhstmt,
-                        ipar,
-                        pfSqlType,
-                        pcbColDef,
-                        pibScale,
-                        pfNullable ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        ipar,
-                        pfSqlType,
-                        pcbColDef,
-                        pibScale,
-                        pfNullable );
-#endif
-
-        /* state transition */
-        if( pstmt->asyn_on == en_DescribeParam )
-        {
-                switch ( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_ERROR:
-                                break;
-
-                        default:
-                                return retcode;
-                }
-        }
-
-        if( retcode == SQL_STILL_EXECUTING )
-        {
-                pstmt->asyn_on = en_DescribeParam;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check argument */
+  if (ipar == 0)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1093);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      switch (pstmt->state)
+        {
+        case en_stmt_allocated:
+        case en_stmt_needdata:
+        case en_stmt_mustput:
+        case en_stmt_canput:
+          PUSHSQLERR (pstmt->herr, en_S1010);
+          return SQL_ERROR;
+
+        default:
+          break;
+        }
+    }
+  else if (pstmt->asyn_on != en_DescribeParam)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
+
+      return SQL_ERROR;
+    }
+
+  /* call driver */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_DescribeParam);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_DescribeParam,
+    (pstmt->dhstmt, ipar, pfSqlType, pcbColDef, pibScale, pfNullable))
+
+  /* state transition */
+  if (pstmt->asyn_on == en_DescribeParam)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_ERROR:
+          break;
+
+        default:
+          return retcode;
+        }
+    }
+
+  if (retcode == SQL_STILL_EXECUTING)
+    {
+      pstmt->asyn_on = en_DescribeParam;
+    }
+
+  return retcode;
 }
index d7c8db3e503232308e97c750b6bbabd5d208bf45..5c4227339ac7ea213131ee45e4c0438c292b8c00 100644 (file)
-/** Fetch query result
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-#include        <config.h>
-
-#include        <isql.h>
-#include        <isqlext.h>
+/*
+ *  fetch.c
+ *
+ *  $Id$
+ *
+ *  Fetch query result
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include       <config.h>
+
+#include       <isql.h>
+#include       <isqlext.h>
 
 #include        <dlproc.h>
 
-#include        <herr.h>
-#include        <henv.h>
-#include        <hdbc.h>
-#include        <hstmt.h>
+#include       <herr.h>
+#include       <henv.h>
+#include       <hdbc.h>
+#include       <hstmt.h>
 
-#include        <itrace.h>
+#include       <itrace.h>
 
-RETCODE SQL_API SQLFetch ( HSTMT hstmt )
+RETCODE SQL_API 
+SQLFetch (HSTMT hstmt)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc   = SQL_NULL_HPROC;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                switch( pstmt->state )
-                {
-                        case en_stmt_allocated:
-                        case en_stmt_prepared:
-                        case en_stmt_xfetched:
-                        case en_stmt_needdata:
-                        case en_stmt_mustput:
-                        case en_stmt_canput:
-                                PUSHSQLERR ( pstmt->herr, en_S1010 );
-                                return SQL_ERROR;
-
-                        default:
-                                break;
-                }
-        }
-        else if( pstmt->asyn_on != en_Fetch )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
-                return SQL_ERROR;
-        }
-
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_Fetch );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Fetch, (pstmt->dhstmt) )
-
-#if 0
-        retcode = hproc( pstmt->dhstmt );
-#endif
-        /* state transition */
-        if( pstmt->asyn_on == en_Fetch )
-        {
-                switch( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_NO_DATA_FOUND:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-                                break;
-
-                        case SQL_STILL_EXECUTING:
-                        default:
-                                return retcode;
-                }
-        }
-
-        switch( pstmt->state )
-        {
-                case en_stmt_cursoropen:
-                case en_stmt_fetched:
-                        switch( retcode )
-                        {
-                                case SQL_SUCCESS:
-                                case SQL_SUCCESS_WITH_INFO:
-                                        pstmt->state = en_stmt_fetched;
-                                        pstmt->cursor_state = en_stmt_cursor_fetched;
-                                        break;
-
-                                case SQL_NO_DATA_FOUND:
-                                        if( pstmt->prep_state )
-                                        {
-                                                pstmt->state = en_stmt_prepared;
-                                        }
-                                        else
-                                        {
-
-                                                pstmt->state = en_stmt_allocated;
-                                        }
-                                        pstmt->cursor_state = en_stmt_cursor_no;
-                                        break;
-
-                                case SQL_STILL_EXECUTING:
-                                        pstmt->asyn_on = en_Fetch;
-                                        break;
-
-                                default:
-                                        break;
-                        }
-                        break;
-
-                default:
-                        break;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      switch (pstmt->state)
+        {
+        case en_stmt_allocated:
+        case en_stmt_prepared:
+        case en_stmt_xfetched:
+        case en_stmt_needdata:
+        case en_stmt_mustput:
+        case en_stmt_canput:
+          PUSHSQLERR (pstmt->herr, en_S1010);
+          return SQL_ERROR;
+
+        default:
+          break;
+        }
+    }
+  else if (pstmt->asyn_on != en_Fetch)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
+      return SQL_ERROR;
+    }
+
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_Fetch);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_Fetch,
+    (pstmt->dhstmt))
+
+  /* state transition */
+  if (pstmt->asyn_on == en_Fetch)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_NO_DATA_FOUND:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+          break;
+
+        case SQL_STILL_EXECUTING:
+        default:
+          return retcode;
+        }
+    }
+
+  switch (pstmt->state)
+     {
+     case en_stmt_cursoropen:
+     case en_stmt_fetched:
+       switch (retcode)
+         {
+         case SQL_SUCCESS:
+         case SQL_SUCCESS_WITH_INFO:
+           pstmt->state = en_stmt_fetched;
+           pstmt->cursor_state = en_stmt_cursor_fetched;
+           break;
+
+         case SQL_NO_DATA_FOUND:
+           if (pstmt->prep_state)
+             {
+               pstmt->state = en_stmt_prepared;
+             }
+           else
+             {
+
+               pstmt->state = en_stmt_allocated;
+             }
+           pstmt->cursor_state = en_stmt_cursor_no;
+           break;
+
+         case SQL_STILL_EXECUTING:
+           pstmt->asyn_on = en_Fetch;
+           break;
+
+         default:
+           break;
+         }
+       break;
+
+     default:
+       break;
+     }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLExtendedFetch (
-                        HSTMT           hstmt,
-                        UWORD           fFetchType,
-                        SDWORD          irow,
-                        UDWORD FAR*     pcrow,
-                        UWORD  FAR*     rgfRowStatus )
+
+RETCODE SQL_API 
+SQLExtendedFetch (
+    HSTMT hstmt,
+    UWORD fFetchType,
+    SDWORD irow,
+    UDWORD FAR * pcrow,
+    UWORD FAR * rgfRowStatus)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc   = SQL_NULL_HPROC;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check fetch type */
-        if( fFetchType < SQL_FETCH_NEXT
-         || fFetchType > SQL_FETCH_BOOKMARK )
-        {
-                /* Unlike MS driver manager(i.e. DM),
-                 * we don't check driver's ODBC version
-                 * against SQL_FETCH_RESUME (only 1.0)
-                 * and SQL_FETCH_BOOKMARK (only 2.0).
-                 */
-                PUSHSQLERR ( pstmt->herr, en_S1106 );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                switch( pstmt->state )
-                {
-                        case en_stmt_allocated:
-                        case en_stmt_prepared:
-                        case en_stmt_fetched:
-                        case en_stmt_needdata:
-                        case en_stmt_mustput:
-                        case en_stmt_canput:
-                                PUSHSQLERR ( pstmt->herr, en_S1010 );
-                                return SQL_ERROR;
-
-                        default:
-                                break;
-                }
-        }
-        else if( pstmt->asyn_on != en_ExtendedFetch )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
-                return SQL_ERROR;
-        }
-
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_ExtendedFetch );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ExtendedFetch, (
-                        pstmt->dhstmt,
-                        fFetchType,
-                        irow,
-                        pcrow,
-                        rgfRowStatus ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        fFetchType,
-                        irow,
-                        pcrow,
-                        rgfRowStatus );
-#endif
-
-        /* state transition */
-        if( pstmt->asyn_on == en_ExtendedFetch )
-        {
-                switch( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_NO_DATA_FOUND:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-                                break;
-
-                        case SQL_STILL_EXECUTING:
-                        default:
-                                return retcode;
-                }
-        }
-
-        switch( pstmt->state )
-        {
-                case en_stmt_cursoropen:
-                case en_stmt_xfetched:
-                        switch( retcode )
-                        {
-                                case SQL_SUCCESS:
-                                case SQL_SUCCESS_WITH_INFO:
-                                case SQL_NO_DATA_FOUND:
-                                        pstmt->state = en_stmt_xfetched;
-                                        pstmt->cursor_state = en_stmt_cursor_xfetched;
-                                        break;
-
-                                case SQL_STILL_EXECUTING:
-                                        pstmt->asyn_on = en_ExtendedFetch;
-                                        break;
-
-                                default:
-                                        break;
-                        }
-                        break;
-
-                default:
-                        break;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check fetch type */
+  if (fFetchType < SQL_FETCH_NEXT || fFetchType > SQL_FETCH_BOOKMARK)
+    {
+      /* Unlike MS driver manager(i.e. DM),
+       * we don't check driver's ODBC version 
+       * against SQL_FETCH_RESUME (only 1.0)
+       * and SQL_FETCH_BOOKMARK (only 2.0).
+       */
+      PUSHSQLERR (pstmt->herr, en_S1106);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      switch (pstmt->state)
+        {
+        case en_stmt_allocated:
+        case en_stmt_prepared:
+        case en_stmt_fetched:
+        case en_stmt_needdata:
+        case en_stmt_mustput:
+        case en_stmt_canput:
+          PUSHSQLERR (pstmt->herr, en_S1010);
+          return SQL_ERROR;
+
+        default:
+          break;
+        }
+    }
+  else if (pstmt->asyn_on != en_ExtendedFetch)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
+      return SQL_ERROR;
+    }
+
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_ExtendedFetch);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_ExtendedFetch,
+    (pstmt->dhstmt, fFetchType, irow, pcrow, rgfRowStatus))
+
+  /* state transition */
+  if (pstmt->asyn_on == en_ExtendedFetch)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_NO_DATA_FOUND:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+          break;
+
+        case SQL_STILL_EXECUTING:
+        default:
+          return retcode;
+        }
+    }
+
+  switch (pstmt->state)
+     {
+     case en_stmt_cursoropen:
+     case en_stmt_xfetched:
+       switch (retcode)
+         {
+         case SQL_SUCCESS:
+         case SQL_SUCCESS_WITH_INFO:
+         case SQL_NO_DATA_FOUND:
+           pstmt->state = en_stmt_xfetched;
+           pstmt->cursor_state = en_stmt_cursor_xfetched;
+           break;
+
+         case SQL_STILL_EXECUTING:
+           pstmt->asyn_on = en_ExtendedFetch;
+           break;
+
+         default:
+           break;
+         }
+       break;
+
+     default:
+       break;
+     }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLGetData(
-                        HSTMT           hstmt,
-                        UWORD           icol,
-                        SWORD           fCType,
-                        PTR             rgbValue,
-                        SDWORD          cbValueMax,
-                        SDWORD FAR*     pcbValue )
+
+RETCODE SQL_API 
+SQLGetData (
+    HSTMT hstmt,
+    UWORD icol,
+    SWORD fCType,
+    PTR rgbValue,
+    SDWORD cbValueMax,
+    SDWORD FAR * pcbValue)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check argument */
-        if( rgbValue == NULL )
-        {
-                sqlstat = en_S1009;
-        }
-        else if( cbValueMax < 0 )
-        {
-                sqlstat = en_S1090;
-        }
-        else
-        {
-                switch(fCType)
-                {
-                        case SQL_C_DEFAULT:
-                        case SQL_C_CHAR:
-                        case SQL_C_BINARY:
-                        case SQL_C_BIT:
-                        case SQL_C_TINYINT:
-                        case SQL_C_STINYINT:
-                        case SQL_C_UTINYINT:
-                        case SQL_C_SHORT:
-                        case SQL_C_SSHORT:
-                        case SQL_C_USHORT:
-                        case SQL_C_LONG:
-                        case SQL_C_SLONG:
-                        case SQL_C_ULONG:
-                        case SQL_C_FLOAT:
-                        case SQL_C_DOUBLE:
-                        case SQL_C_DATE:
-                        case SQL_C_TIME:
-                        case SQL_C_TIMESTAMP:
-                                break;
-
-                        default:
-                                sqlstat = en_S1003;
-                                break;
-                }
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                switch( pstmt->state )
-                {
-                        case en_stmt_allocated:
-                        case en_stmt_prepared:
-                        case en_stmt_needdata:
-                        case en_stmt_mustput:
-                        case en_stmt_canput:
-                                sqlstat = en_S1010;
-                                break;
-
-                        case en_stmt_executed:
-                        case en_stmt_cursoropen:
-                                sqlstat = en_24000;
-                                break;
-
-                        default:
-                                break;
-                }
-        }
-        else if( pstmt->asyn_on != en_GetData )
-        {
-                sqlstat = en_S1010;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        /* call driver */
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_GetData );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_GetData, (
-                        pstmt->dhstmt,
-                        icol,
-                        fCType,
-                        rgbValue,
-                        cbValueMax,
-                        pcbValue ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        icol,
-                        fCType,
-                        rgbValue,
-                        cbValueMax,
-                        pcbValue );
-#endif
-
-        /* state transition */
-        if( pstmt->asyn_on == en_GetData )
-        {
-                switch ( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_NO_DATA_FOUND:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-                                break;
-
-                        case SQL_STILL_EXECUTING:
-                        default:
-                                return retcode;
-                }
-        }
-
-        switch( pstmt->state )
-        {
-                case en_stmt_fetched:
-                case en_stmt_xfetched:
-                        if( retcode == SQL_STILL_EXECUTING )
-                        {
-                                pstmt->asyn_on = en_GetData;
-                                break;
-                        }
-                        break;
-
-                default:
-                        break;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check argument */
+  if (rgbValue == NULL)
+    {
+      sqlstat = en_S1009;
+    }
+  else if (cbValueMax < 0)
+    {
+      sqlstat = en_S1090;
+    }
+  else
+    {
+      switch (fCType)
+        {
+        case SQL_C_DEFAULT:
+        case SQL_C_CHAR:
+        case SQL_C_BINARY:
+        case SQL_C_BIT:
+        case SQL_C_TINYINT:
+        case SQL_C_STINYINT:
+        case SQL_C_UTINYINT:
+        case SQL_C_SHORT:
+        case SQL_C_SSHORT:
+        case SQL_C_USHORT:
+        case SQL_C_LONG:
+        case SQL_C_SLONG:
+        case SQL_C_ULONG:
+        case SQL_C_FLOAT:
+        case SQL_C_DOUBLE:
+        case SQL_C_DATE:
+        case SQL_C_TIME:
+        case SQL_C_TIMESTAMP:
+          break;
+
+        default:
+          sqlstat = en_S1003;
+          break;
+        }
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      switch (pstmt->state)
+        {
+        case en_stmt_allocated:
+        case en_stmt_prepared:
+        case en_stmt_needdata:
+        case en_stmt_mustput:
+        case en_stmt_canput:
+          sqlstat = en_S1010;
+          break;
+
+        case en_stmt_executed:
+        case en_stmt_cursoropen:
+          sqlstat = en_24000;
+          break;
+
+        default:
+          break;
+        }
+    }
+  else if (pstmt->asyn_on != en_GetData)
+    {
+      sqlstat = en_S1010;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  /* call driver */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_GetData);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_GetData,
+    (pstmt->dhstmt, icol, fCType, rgbValue, cbValueMax, pcbValue))
+
+  /* state transition */
+  if (pstmt->asyn_on == en_GetData)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_NO_DATA_FOUND:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+          break;
+
+        case SQL_STILL_EXECUTING:
+        default:
+          return retcode;
+        }
+    }
+
+  switch (pstmt->state)
+     {
+     case en_stmt_fetched:
+     case en_stmt_xfetched:
+       if (retcode == SQL_STILL_EXECUTING)
+        {
+          pstmt->asyn_on = en_GetData;
+          break;
+        }
+       break;
+
+     default:
+       break;
+     }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLMoreResults( HSTMT   hstmt )
+
+RETCODE SQL_API 
+SQLMoreResults (HSTMT hstmt)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                switch( pstmt->state )
-                {
-                        case en_stmt_allocated:
-                        case en_stmt_prepared:
-                                return SQL_NO_DATA_FOUND;
-
-                        case en_stmt_needdata:
-                        case en_stmt_mustput:
-                        case en_stmt_canput:
-                                PUSHSQLERR ( pstmt->herr, en_S1010 );
-                                return SQL_ERROR;
-
-                        default:
-                                break;
-                }
-        }
-        else if( pstmt->asyn_on != en_MoreResults )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
-
-                return SQL_ERROR;
-        }
-
-        /* call driver */
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_MoreResults );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_MoreResults, (pstmt->dhstmt) )
-
-#if 0
-        retcode = hproc( pstmt->dhstmt );
-#endif
-
-        /* state transition */
-        if( pstmt->asyn_on == en_MoreResults )
-        {
-                switch( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_NO_DATA_FOUND:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-                                break;
-
-                        case SQL_STILL_EXECUTING:
-                        default:
-                                return retcode;
-                }
-        }
-
-        switch( pstmt->state )
-        {
-                case en_stmt_allocated:
-                case en_stmt_prepared:
-                        /* driver should return SQL_NO_DATA_FOUND */
-                        break;
-
-                case en_stmt_executed:
-                        if( retcode == SQL_NO_DATA_FOUND )
-                        {
-                                if( pstmt->prep_state )
-                                {
-                                        pstmt->state = en_stmt_prepared;
-                                }
-                                else
-                                {
-                                        pstmt->state = en_stmt_allocated;
-                                }
-                        }
-                        else if( retcode == SQL_STILL_EXECUTING )
-                        {
-                                pstmt->asyn_on = en_MoreResults;
-                        }
-                        break;
-
-                case en_stmt_cursoropen:
-                case en_stmt_fetched:
-                case en_stmt_xfetched:
-                        if( retcode == SQL_SUCCESS )
-                        {
-                                break;
-                        }
-                        else if( retcode == SQL_NO_DATA_FOUND )
-                        {
-                                if( pstmt->prep_state )
-                                {
-                                        pstmt->state = en_stmt_prepared;
-                                }
-                                else
-                                {
-                                        pstmt->state = en_stmt_allocated;
-                                }
-                        }
-                        else if( retcode == SQL_STILL_EXECUTING )
-                        {
-                                pstmt->asyn_on = en_MoreResults;
-                        }
-                        break;
-
-                default:
-                        break;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
+
+  if (hstmt == SQL_NULL_HSTMT
+      || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      switch (pstmt->state)
+        {
+        case en_stmt_allocated:
+        case en_stmt_prepared:
+          return SQL_NO_DATA_FOUND;
+
+        case en_stmt_needdata:
+        case en_stmt_mustput:
+        case en_stmt_canput:
+          PUSHSQLERR (pstmt->herr, en_S1010);
+          return SQL_ERROR;
+
+        default:
+          break;
+        }
+    }
+  else if (pstmt->asyn_on != en_MoreResults)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
+
+      return SQL_ERROR;
+    }
+
+  /* call driver */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_MoreResults);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_MoreResults,
+    (pstmt->dhstmt))
+
+  /* state transition */
+  if (pstmt->asyn_on == en_MoreResults)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_NO_DATA_FOUND:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+          break;
+
+        case SQL_STILL_EXECUTING:
+        default:
+          return retcode;
+        }
+    }
+
+  switch (pstmt->state)
+     {
+     case en_stmt_allocated:
+     case en_stmt_prepared:
+       /* driver should return SQL_NO_DATA_FOUND */
+       break;
+
+     case en_stmt_executed:
+       if (retcode == SQL_NO_DATA_FOUND)
+        {
+          if (pstmt->prep_state)
+            {
+              pstmt->state = en_stmt_prepared;
+            }
+          else
+            {
+              pstmt->state = en_stmt_allocated;
+            }
+        }
+       else if (retcode == SQL_STILL_EXECUTING)
+        {
+          pstmt->asyn_on = en_MoreResults;
+        }
+       break;
+
+     case en_stmt_cursoropen:
+     case en_stmt_fetched:
+     case en_stmt_xfetched:
+       if (retcode == SQL_SUCCESS)
+        {
+          break;
+        }
+       else if (retcode == SQL_NO_DATA_FOUND)
+        {
+          if (pstmt->prep_state)
+            {
+              pstmt->state = en_stmt_prepared;
+            }
+          else
+            {
+              pstmt->state = en_stmt_allocated;
+            }
+        }
+       else if (retcode == SQL_STILL_EXECUTING)
+        {
+          pstmt->asyn_on = en_MoreResults;
+        }
+       break;
+
+     default:
+       break;
+     }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLSetPos (
-                        HSTMT   hstmt,
-                        UWORD   irow,
-                        UWORD   fOption,
-                        UWORD   fLock )
+
+RETCODE SQL_API 
+SQLSetPos (
+    HSTMT hstmt,
+    UWORD irow,
+    UWORD fOption,
+    UWORD fLock)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check argument value */
-        if( fOption > SQL_ADD
-         || fLock > SQL_LOCK_UNLOCK )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1009 );
-        }
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                switch( pstmt->state )
-                {
-                        case en_stmt_allocated:
-                        case en_stmt_prepared:
-                        case en_stmt_fetched:
-                        case en_stmt_needdata:
-                        case en_stmt_mustput:
-                        case en_stmt_canput:
-                                sqlstat = en_S1010;
-                                break;
-
-                        case en_stmt_executed:
-                        case en_stmt_cursoropen:
-                                sqlstat = en_24000;
-                                break;
-
-                        default:
-                                break;
-                }
-        }
-        else if( pstmt->asyn_on != en_SetPos )
-        {
-                sqlstat = en_S1010;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        /* call driver */
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_SetPos );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SetPos, (
-                        pstmt->dhstmt,
-                        irow,
-                        fOption,
-                        fLock ) )
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        irow,
-                        fOption,
-                        fLock );
-#endif
-
-        /* state transition */
-        if( pstmt->asyn_on == en_SetPos )
-        {
-                switch( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_NEED_DATA:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-                                break;
-
-                        case SQL_STILL_EXECUTING:
-                        default:
-                                return retcode;
-                }
-        }
-
-        /* now, the only possible init state is 'xfetched' */
-        switch( retcode )
-        {
-                case SQL_SUCCESS:
-                case SQL_SUCCESS_WITH_INFO:
-                        break;
-
-                case SQL_NEED_DATA:
-                        pstmt->state = en_stmt_needdata;
-                        pstmt->need_on = en_SetPos;
-                        break;
-
-                case SQL_STILL_EXECUTING:
-                        pstmt->asyn_on = en_SetPos;
-                        break;
-
-                default:
-                        break;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check argument value */
+  if (fOption > SQL_ADD || fLock > SQL_LOCK_UNLOCK)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1009);
+    }
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      switch (pstmt->state)
+        {
+        case en_stmt_allocated:
+        case en_stmt_prepared:
+        case en_stmt_fetched:
+        case en_stmt_needdata:
+        case en_stmt_mustput:
+        case en_stmt_canput:
+          sqlstat = en_S1010;
+          break;
+
+        case en_stmt_executed:
+        case en_stmt_cursoropen:
+          sqlstat = en_24000;
+          break;
+
+        default:
+          break;
+        }
+    }
+  else if (pstmt->asyn_on != en_SetPos)
+    {
+      sqlstat = en_S1010;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  /* call driver */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_SetPos);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_SetPos,
+    (pstmt->dhstmt, irow, fOption, fLock))
+
+  /* state transition */
+  if (pstmt->asyn_on == en_SetPos)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_NEED_DATA:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+          break;
+
+        case SQL_STILL_EXECUTING:
+        default:
+          return retcode;
+        }
+    }
+
+  /* now, the only possible init state is 'xfetched' */
+  switch (retcode)
+     {
+     case SQL_SUCCESS:
+     case SQL_SUCCESS_WITH_INFO:
+       break;
+
+     case SQL_NEED_DATA:
+       pstmt->state = en_stmt_needdata;
+       pstmt->need_on = en_SetPos;
+       break;
+
+     case SQL_STILL_EXECUTING:
+       pstmt->asyn_on = en_SetPos;
+       break;
+
+     default:
+       break;
+     }
+
+  return retcode;
 }
index 1d47da84f53a4aa3c1034140f4f2ebc50597f6c9..67eb5e6865cbd36090978a0abd938c4502579517 100644 (file)
-/** data source connect object management functions
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-#include       <../iodbc/iodbc.h>
-
-#include       <../iodbc/isql.h>
-#include       <../iodbc/isqlext.h>
-
-#include        <../iodbc/dlproc.h>
-
-#include       <../iodbc/herr.h>
-#include       <../iodbc/henv.h>
-#include       <../iodbc/hdbc.h>
-#include       <../iodbc/hstmt.h>
-
-#include       <../iodbc/itrace.h>
+/*
+ *  hdbc.c
+ *
+ *  $Id$
+ *
+ *  Data source connect object management functions
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include       <config.h>
+
+#include       <isql.h>
+#include       <isqlext.h>
+
+#include        <dlproc.h>
+
+#include       <herr.h>
+#include       <henv.h>
+#include       <hdbc.h>
+#include       <hstmt.h>
+
+#include       <itrace.h>
 #include       <stdio.h>
 
 extern RETCODE _iodbcdm_driverunload();
 
-RETCODE SQL_API SQLAllocConnect(
-                        HENV            henv,
-                        HDBC FAR*       phdbc )
+
+RETCODE SQL_API 
+SQLAllocConnect (
+    HENV henv,
+    HDBC FAR * phdbc)
 {
-        GENV_t FAR*     genv = (GENV_t FAR*)henv;
-        DBC_t  FAR*     pdbc;
+  GENV_t FAR *genv = (GENV_t FAR *) henv;
+  DBC_t FAR *pdbc;
 
 #if (ODBCVER >= 0x0300)
-        if( henv == SQL_NULL_HENV
-         || genv->type != SQL_HANDLE_ENV )
+  if (henv == SQL_NULL_HENV || genv->type != SQL_HANDLE_ENV)
 #else
-        if( henv == SQL_NULL_HENV )
+  if (henv == SQL_NULL_HENV)
 #endif
-        {
-                return SQL_INVALID_HANDLE;
-        }
 
-        if( phdbc == NULL )
-        {
-                PUSHSQLERR ( genv->herr, en_S1009 );
+    {
+      return SQL_INVALID_HANDLE;
+    }
 
-                return SQL_ERROR;
-        }
+  if (phdbc == NULL)
+    {
+      PUSHSQLERR (genv->herr, en_S1009);
 
-        pdbc = (DBC_t FAR*)MEM_ALLOC (sizeof(DBC_t));
+      return SQL_ERROR;
+    }
 
-        if( pdbc == NULL )
-        {
-                *phdbc = SQL_NULL_HDBC;
+  pdbc = (DBC_t FAR *) MEM_ALLOC (sizeof (DBC_t));
 
-                PUSHSQLERR ( genv->herr, en_S1001 );
+  if (pdbc == NULL)
+    {
+      *phdbc = SQL_NULL_HDBC;
 
-                return SQL_ERROR;
-        }
+      PUSHSQLERR (genv->herr, en_S1001);
+
+      return SQL_ERROR;
+    }
 
 #if (ODBCVER >= 0x0300)
-        pdbc->type = SQL_HANDLE_DBC;
+  pdbc->type = SQL_HANDLE_DBC;
 #endif
-        /* insert this dbc entry into the link list */
-        pdbc->next = genv->hdbc;
-        genv->hdbc = pdbc;
-        pdbc->genv = henv;
-
-        pdbc->henv = SQL_NULL_HENV;
-        pdbc->hstmt= SQL_NULL_HSTMT;
-        pdbc->herr = SQL_NULL_HERR;
-        pdbc->dhdbc= SQL_NULL_HDBC;
-        pdbc->state= en_dbc_allocated;
-        pdbc->trace = 0;
-        pdbc->tstm  = NULL;
-        pdbc->tfile = NULL;
-
-        /* set connect options to default values */
-        pdbc->access_mode       = SQL_MODE_DEFAULT;
-        pdbc->autocommit        = SQL_AUTOCOMMIT_DEFAULT;
-        pdbc->current_qualifier = NULL;
-        pdbc->login_timeout     = 0UL;
-        pdbc->odbc_cursors      = SQL_CUR_DEFAULT;
-        pdbc->packet_size       = 0UL;
-        pdbc->quiet_mode        = (UDWORD)NULL;
-        pdbc->txn_isolation     = SQL_TXN_READ_UNCOMMITTED;
-        pdbc->cb_commit         = (SWORD)SQL_CB_DELETE;
-        pdbc->cb_rollback       = (SWORD)SQL_CB_DELETE;
-
-        *phdbc = (HDBC)pdbc;
-
-        return SQL_SUCCESS;
+
+  /* insert this dbc entry into the link list */
+  pdbc->next = genv->hdbc;
+  genv->hdbc = pdbc;
+  pdbc->genv = henv;
+
+  pdbc->henv = SQL_NULL_HENV;
+  pdbc->hstmt = SQL_NULL_HSTMT;
+  pdbc->herr = SQL_NULL_HERR;
+  pdbc->dhdbc = SQL_NULL_HDBC;
+  pdbc->state = en_dbc_allocated;
+  pdbc->trace = 0;
+  pdbc->tstm = NULL;
+  pdbc->tfile = NULL;
+
+  /* set connect options to default values */
+  pdbc->access_mode = SQL_MODE_DEFAULT;
+  pdbc->autocommit = SQL_AUTOCOMMIT_DEFAULT;
+  pdbc->current_qualifier = NULL;
+  pdbc->login_timeout = 0UL;
+  pdbc->odbc_cursors = SQL_CUR_DEFAULT;
+  pdbc->packet_size = 0UL;
+  pdbc->quiet_mode = (UDWORD) NULL;
+  pdbc->txn_isolation = SQL_TXN_READ_UNCOMMITTED;
+  pdbc->cb_commit = (SWORD) SQL_CB_DELETE;
+  pdbc->cb_rollback = (SWORD) SQL_CB_DELETE;
+
+  *phdbc = (HDBC) pdbc;
+
+  return SQL_SUCCESS;
 }
 
-RETCODE SQL_API SQLFreeConnect( HDBC    hdbc )
+
+RETCODE SQL_API 
+SQLFreeConnect (HDBC hdbc)
 {
-        GENV_t FAR*     genv;
-        DBC_t  FAR*     pdbc = (DBC_t FAR*)hdbc;
-        DBC_t  FAR*     tpdbc;
-
-        if( hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check state */
-        if( pdbc->state != en_dbc_allocated )
-        {
-                PUSHSQLERR ( pdbc->herr, en_S1010 );
-
-                return SQL_ERROR;
-        }
-
-        genv = (GENV_t FAR*)pdbc->genv;
-
-        for( tpdbc  = (DBC_t FAR*)genv->hdbc;
-             tpdbc != NULL;
-             tpdbc  = tpdbc->next )
-        {
-                if( pdbc == tpdbc )
-                {
-                        genv->hdbc = pdbc->next;
-                        break;
-                }
-
-                if( pdbc == tpdbc->next )
-                {
-                        tpdbc->next = pdbc->next;
-                        break;
-                }
-        }
-
-        /* free this dbc */
-        _iodbcdm_driverunload(pdbc);
-        _iodbcdm_freesqlerrlist( pdbc->herr );
-
-        if( pdbc->tfile )
-        {
-                MEM_FREE( pdbc->tfile );
-        }
-
-        SQLSetConnectOption( pdbc, SQL_OPT_TRACE, SQL_OPT_TRACE_OFF);
-
-        MEM_FREE ( pdbc );
-
-        return SQL_SUCCESS;
+  GENV_t FAR *genv;
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  DBC_t FAR *tpdbc;
+
+  if (hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check state */
+  if (pdbc->state != en_dbc_allocated)
+    {
+      PUSHSQLERR (pdbc->herr, en_S1010);
+
+      return SQL_ERROR;
+    }
+
+  genv = (GENV_t FAR *) pdbc->genv;
+
+  for (tpdbc = (DBC_t FAR *) genv->hdbc;
+      tpdbc != NULL;
+      tpdbc = tpdbc->next)
+    {
+      if (pdbc == tpdbc)
+       {
+         genv->hdbc = pdbc->next;
+         break;
+       }
+
+      if (pdbc == tpdbc->next)
+       {
+         tpdbc->next = pdbc->next;
+         break;
+       }
+    }
+
+  /* free this dbc */
+  _iodbcdm_driverunload (pdbc);
+  _iodbcdm_freesqlerrlist (pdbc->herr);
+
+  if (pdbc->tfile)
+    {
+      MEM_FREE (pdbc->tfile);
+    }
+
+  SQLSetConnectOption (pdbc, SQL_OPT_TRACE, SQL_OPT_TRACE_OFF);
+
+  MEM_FREE (pdbc);
+
+  return SQL_SUCCESS;
 }
 
-RETCODE SQL_API SQLSetConnectOption(
-                        HDBC    hdbc,
-                        UWORD   fOption,
-                        UDWORD  vParam )
+
+RETCODE SQL_API 
+SQLSetConnectOption (
+    HDBC hdbc,
+    UWORD fOption,
+    UDWORD vParam)
 {
-        GENV_t FAR*     genv;
-        DBC_t  FAR*     pdbc    = (DBC_t FAR*)hdbc;
-        STMT_t FAR*     pstmt;
-        HPROC           hproc   = SQL_NULL_HPROC;
-        int             sqlstat = en_00000;
-        RETCODE         retcode = SQL_SUCCESS;
-
-        if( hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check option */
-        if( fOption < SQL_CONN_OPT_MIN
-         || ( fOption > SQL_CONN_OPT_MAX
-           && fOption < SQL_CONNECT_OPT_DRVR_START ) )
-        {
-                PUSHSQLERR ( pdbc->herr, en_S1092 );
-
-                return SQL_ERROR;
-        }
-
-        /* check state of connection handle */
-        switch( pdbc->state )
-        {
-                case en_dbc_allocated:
-                        if( fOption == SQL_TRANSLATE_DLL
-                         || fOption == SQL_TRANSLATE_OPTION )
-                        {
-                                /* This two options are only meaningful
-                                 * for specified driver. So, has to be
-                                 * set after a dirver has been loaded.
-                                 */
-                                sqlstat = en_08003;
-                                break;
-                        }
-
-                        if( fOption >= SQL_CONNECT_OPT_DRVR_START
-                         && pdbc->henv == SQL_NULL_HENV )
-                        /* An option only meaningful for drivers
-                         * is passed before loading a driver.
-                         * We classify this as an invalid option error.
-                         * This is not documented by MS SDK guide.
-                         */
-                        {
-                                sqlstat = en_S1092;
-                                break;
-                        }
-                        break;
-
-                case en_dbc_needdata:
-                        sqlstat = en_S1010;
-                        break;
-
-                case en_dbc_connected:
-                case en_dbc_hstmt:
-                        if( fOption == SQL_ODBC_CURSORS )
-                        {
-                                sqlstat = en_08002;
-                        }
-                        break;
-
-                default:
-                        break;
-        }
-
-        /* check state of statement handle(s) */
-        for( pstmt  = (STMT_t FAR*)pdbc->hstmt;
-             pstmt != NULL && sqlstat == en_00000;
-             pstmt  = (STMT_t FAR*)pstmt->next )
-        {
-                if( pstmt->state >= en_stmt_needdata
-                 || pstmt->asyn_on != en_NullProc )
-                {
-                        sqlstat = en_S1010;
-                }
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pdbc->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        if( fOption == SQL_OPT_TRACE )
-        /* tracing flag can be set before and after connect
-         * and only meaningful for driver manager(actually
-         * there is only one tracing file under one global
-         * environment).
-         */
-        {
-                switch( vParam )
-                {
-                        case SQL_OPT_TRACE_ON:
-                                if( pdbc->tfile == NULL )
-                                {
-                                        pdbc->tfile = (char FAR*)MEM_ALLOC( 1 +
-                                                STRLEN(SQL_OPT_TRACE_FILE_DEFAULT) );
-
-                                        if( pdbc->tfile == NULL )
-                                        {
-                                                PUSHSQLERR( pdbc->herr, en_S1001 );
-
-                                                return SQL_ERROR;
-                                        }
-
-                                        STRCPY( pdbc->tfile, SQL_OPT_TRACE_FILE_DEFAULT );
-                                }
-
-                                if( pdbc->tstm == NULL )
-                                {
-#if     defined(stderr) && defined(stdout)
-                                        if(STREQ( pdbc->tfile, "stderr"))
-                                        {
-                                                pdbc->tstm = stderr;
-                                        }
-                                        else
-                                        if(STREQ(pdbc->tfile, "stdout"))
-                                        {
-                                                pdbc->tstm = stdout;
-                                        }
-                                        else
-#endif
-                                        {
-                                                pdbc->tstm
-                                                        = fopen(pdbc->tfile, "a+");
-                                        }
-
-                                        if(pdbc->tstm )
-                                        {
-                                                pdbc->trace = 1;
-                                        }
-                                        else
-                                        {
-                                                pdbc->trace = 0;
-
-                                                sqlstat = en_IM013;
-                                                retcode = SQL_ERROR;
-                                        }
-                                }
-                                break;
-
-                        case SQL_OPT_TRACE_OFF:
-                                if( pdbc->trace && pdbc->tstm )
-                                {
-#if     defined(stderr) && defined(stdout)
-                                        if( stderr != (FILE FAR*)(pdbc->tstm)
-                                         && stdout != (FILE FAR*)(pdbc->tstm) )
+  GENV_t FAR *genv;
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  STMT_t FAR *pstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  int sqlstat = en_00000;
+  RETCODE retcode = SQL_SUCCESS;
+
+  if (hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check option */
+  if (fOption < SQL_CONN_OPT_MIN || 
+       (fOption > SQL_CONN_OPT_MAX && fOption < SQL_CONNECT_OPT_DRVR_START))
+    {
+      PUSHSQLERR (pdbc->herr, en_S1092);
+
+      return SQL_ERROR;
+    }
+
+  /* check state of connection handle */
+  switch (pdbc->state)
+     {
+     case en_dbc_allocated:
+       if (fOption == SQL_TRANSLATE_DLL || fOption == SQL_TRANSLATE_OPTION)
+        {
+          /* This two options are only meaningful
+           * for specified driver. So, has to be
+           * set after a dirver has been loaded.
+           */
+          sqlstat = en_08003;
+          break;
+        }
+
+       if (fOption >= SQL_CONNECT_OPT_DRVR_START && pdbc->henv == SQL_NULL_HENV)
+        /* An option only meaningful for drivers
+         * is passed before loading a driver.
+         * We classify this as an invalid option error.
+         * This is not documented by MS SDK guide.
+         */
+        {
+          sqlstat = en_S1092;
+          break;
+        }
+       break;
+
+     case en_dbc_needdata:
+       sqlstat = en_S1010;
+       break;
+
+     case en_dbc_connected:
+     case en_dbc_hstmt:
+       if (fOption == SQL_ODBC_CURSORS)
+        {
+          sqlstat = en_08002;
+        }
+       break;
+
+     default:
+       break;
+     }
+
+  /* check state of statement handle(s) */
+  for (pstmt = (STMT_t FAR *) pdbc->hstmt;
+      pstmt != NULL && sqlstat == en_00000;
+      pstmt = (STMT_t FAR *) pstmt->next)
+    {
+      if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc)
+       {
+         sqlstat = en_S1010;
+       }
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pdbc->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  if (fOption == SQL_OPT_TRACE)
+    /* tracing flag can be set before and after connect 
+     * and only meaningful for driver manager(actually
+     * there is only one tracing file under one global
+     * environment).
+     */
+    {
+      switch (vParam)
+        {
+        case SQL_OPT_TRACE_ON:
+          if (pdbc->tfile == NULL)
+            {
+              pdbc->tfile = (char FAR *) MEM_ALLOC (1 +
+                  STRLEN (SQL_OPT_TRACE_FILE_DEFAULT));
+
+              if (pdbc->tfile == NULL)
+                {
+                  PUSHSQLERR (pdbc->herr, en_S1001);
+
+                  return SQL_ERROR;
+                }
+
+              STRCPY (pdbc->tfile, SQL_OPT_TRACE_FILE_DEFAULT);
+            }
+
+          if (pdbc->tstm == NULL)
+            {
+
+#if    defined(stderr) && defined(stdout)
+              if (STREQ (pdbc->tfile, "stderr"))
+                {
+                  pdbc->tstm = stderr;
+                }
+              else if (STREQ (pdbc->tfile, "stdout"))
+                {
+                  pdbc->tstm = stdout;
+                }
+              else
 #endif
-                                        {
-                                                fclose(pdbc->tstm);
-                                        }
-                                }
-                                pdbc->tstm = NULL;
-                                pdbc->trace = 0;
-                                break;
-
-                        default:
-                                PUSHSQLERR (pdbc->herr, en_S1009);
-                                retcode = SQL_ERROR;
-                }
-
-                if( sqlstat != en_00000 )
-                {
-                        PUSHSQLERR ( pdbc->herr, sqlstat );
-                }
-
-                return retcode;
-        }
-
-        if( fOption == SQL_OPT_TRACEFILE )
-        /* Tracing file can be set before and after connect
-         * and only meaningful for driver manager.
-         */
-        {
-                if( vParam == 0UL
-                 || ((char FAR*)vParam)[0] == 0 )
-                {
-                        PUSHSQLERR ( pdbc->herr, en_S1009 );
-
-                        return SQL_ERROR;
-                }
-
-                if( pdbc->tfile && STREQ (pdbc->tfile, vParam) )
-                {
-                        return SQL_SUCCESS;
-                }
-
-                if( pdbc->trace )
-                {
-                        PUSHSQLERR ( pdbc->herr, en_IM014 );
-
-                        return SQL_ERROR;
-                }
-
-                if( pdbc->tfile )
-                {
-                        MEM_FREE( pdbc->tfile );
-                }
-
-                pdbc->tfile = (char FAR*)MEM_ALLOC( 1 + STRLEN( vParam ) );
-
-                if( pdbc->tfile == NULL )
-                {
-                        PUSHSQLERR( pdbc->herr, en_S1001 );
-
-                        return SQL_ERROR;
-                }
-
-                STRCPY ( pdbc->tfile, vParam );
-
-                return SQL_SUCCESS;
-        }
-
-        if( pdbc->state != en_dbc_allocated )
-        {
-                /* If already connected, then, driver's odbc call
-                 * will be invoked. Otherwise, we only save the options
-                 * and delay the setting process until the connection
-                 * been established.
-                 */
-                hproc = _iodbcdm_getproc( hdbc, en_SetConnectOption );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        PUSHSQLERR ( pdbc->herr, en_IM001 );
-
-                        return SQL_ERROR;
-                }
-
-                CALL_DRIVER ( hdbc, retcode, hproc, en_SetConnectOption, (
-                                pdbc->dhdbc, fOption, vParam ) )
-
-#if 0
-                retcode = hproc( pdbc->dhdbc, fOption, vParam);
+
+                {
+                  pdbc->tstm
+                      = fopen (pdbc->tfile, "a+");
+                }
+
+              if (pdbc->tstm)
+                {
+                  pdbc->trace = 1;
+                }
+              else
+                {
+                  pdbc->trace = 0;
+
+                  sqlstat = en_IM013;
+                  retcode = SQL_ERROR;
+                }
+            }
+          break;
+
+        case SQL_OPT_TRACE_OFF:
+          if (pdbc->trace && pdbc->tstm)
+            {
+
+#if    defined(stderr) && defined(stdout)
+              if (stderr != (FILE FAR *) (pdbc->tstm)
+                  && stdout != (FILE FAR *) (pdbc->tstm))
 #endif
 
-                if( retcode != SQL_SUCCESS
-                 && retcode != SQL_SUCCESS_WITH_INFO )
-                {
-                        return retcode;
-                }
-        }
-
-        /*
-         * Now, either driver's odbc call was successed or
-         * driver has not been loaded yet. In the first case, we
-         * need flip flag for(such as access_mode, autocommit, ...)
-         * for our finit state machine. While in the second case,
-         * we need save option values(such as current_qualifier, ...)
-         * for delaied setting. So, ...
-         */
-
-        /* No matter what state we are(i.e. allocated or connected, ..)
-         * we need to flip the flag.
-         */
-        switch( fOption )
-        {
-                case SQL_ACCESS_MODE:
-                        pdbc->access_mode = vParam;
-                        break;
-
-                case SQL_AUTOCOMMIT:
-                        pdbc->autocommit  = vParam;
-                        break;
-        }
-
-        /* state transition */
-        if( pdbc->state != en_dbc_allocated )
-        {
-                return retcode;
-        }
-
-        /* Only 'allocated' state is possible here, and we need to
-         * save the options for delaied setting.
-         */
-        switch( fOption )
-        {
-                case SQL_CURRENT_QUALIFIER:
-                        if( pdbc->current_qualifier != NULL )
-                        {
-                                MEM_FREE ( pdbc->current_qualifier );
-                        }
-
-                        if( vParam == 0UL )
-                        {
-                                pdbc->current_qualifier = NULL;
-
-                                break;
-                        }
-
-                        pdbc->current_qualifier
-                                = (char FAR*)MEM_ALLOC (
-                                STRLEN (vParam) + 1 );
-
-                        if( pdbc->current_qualifier == NULL )
-                        {
-                                PUSHSQLERR ( pdbc->herr, en_S1001 );
-                                return SQL_ERROR;
-                        }
-
-                        STRCPY ( pdbc->current_qualifier, vParam );
-                        break;
-
-                case SQL_LOGIN_TIMEOUT:
-                        pdbc->login_timeout = vParam;
-                        break;
-
-                case SQL_ODBC_CURSORS:
-                        pdbc->odbc_cursors = vParam;
-                        break;
-
-                case SQL_PACKET_SIZE:
-                        pdbc->packet_size = vParam;
-                        break;
-
-                case SQL_QUIET_MODE:
-                        pdbc->quiet_mode = vParam;
-                        break;
-
-                case SQL_TXN_ISOLATION:
-                        pdbc->txn_isolation = vParam;
-                        break;
-
-                default:
-                        /* Since we didn't save the option value for delaied
-                         * setting, we should raise an error here.
-                         */
-                        break;
-        }
-
-        return retcode;
+                {
+                  fclose (pdbc->tstm);
+                }
+            }
+          pdbc->tstm = NULL;
+          pdbc->trace = 0;
+          break;
+
+        default:
+          PUSHSQLERR (pdbc->herr, en_S1009);
+          retcode = SQL_ERROR;
+        }
+
+      if (sqlstat != en_00000)
+       {
+         PUSHSQLERR (pdbc->herr, sqlstat);
+       }
+
+      return retcode;
+    }
+
+  if (fOption == SQL_OPT_TRACEFILE)
+    /* Tracing file can be set before and after connect 
+     * and only meaningful for driver manager. 
+     */
+    {
+      if (vParam == 0UL || ((char FAR *) vParam)[0] == 0)
+       {
+         PUSHSQLERR (pdbc->herr, en_S1009);
+
+         return SQL_ERROR;
+       }
+
+      if (pdbc->tfile && STREQ (pdbc->tfile, vParam))
+       {
+         return SQL_SUCCESS;
+       }
+
+      if (pdbc->trace)
+       {
+         PUSHSQLERR (pdbc->herr, en_IM014);
+
+         return SQL_ERROR;
+       }
+
+      if (pdbc->tfile)
+       {
+         MEM_FREE (pdbc->tfile);
+       }
+
+      pdbc->tfile = (char FAR *) MEM_ALLOC (1 + STRLEN (vParam));
+
+      if (pdbc->tfile == NULL)
+       {
+         PUSHSQLERR (pdbc->herr, en_S1001);
+
+         return SQL_ERROR;
+       }
+
+      STRCPY (pdbc->tfile, vParam);
+
+      return SQL_SUCCESS;
+    }
+
+  if (pdbc->state != en_dbc_allocated)
+    {
+      /* If already connected, then, driver's odbc call
+       * will be invoked. Otherwise, we only save the options
+       * and delay the setting process until the connection 
+       * been established.  
+       */
+      hproc = _iodbcdm_getproc (hdbc, en_SetConnectOption);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         PUSHSQLERR (pdbc->herr, en_IM001);
+
+         return SQL_ERROR;
+       }
+
+      CALL_DRIVER (hdbc, retcode, hproc, en_SetConnectOption, 
+        (pdbc->dhdbc, fOption, vParam))
+
+      if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
+       {
+         return retcode;
+       }
+    }
+
+  /* 
+   * Now, either driver's odbc call was successed or
+   * driver has not been loaded yet. In the first case, we
+   * need flip flag for(such as access_mode, autocommit, ...)
+   * for our finit state machine. While in the second case, 
+   * we need save option values(such as current_qualifier, ...)
+   * for delaied setting. So, ...
+   */
+
+  /* No matter what state we are(i.e. allocated or connected, ..)
+   * we need to flip the flag.
+   */
+  switch (fOption)
+     {
+     case SQL_ACCESS_MODE:
+       pdbc->access_mode = vParam;
+       break;
+
+     case SQL_AUTOCOMMIT:
+       pdbc->autocommit = vParam;
+       break;
+     }
+
+  /* state transition */
+  if (pdbc->state != en_dbc_allocated)
+    {
+      return retcode;
+    }
+
+  /* Only 'allocated' state is possible here, and we need to
+   * save the options for delaied setting.
+   */
+  switch (fOption)
+     {
+     case SQL_CURRENT_QUALIFIER:
+       if (pdbc->current_qualifier != NULL)
+        {
+          MEM_FREE (pdbc->current_qualifier);
+        }
+
+       if (vParam == 0UL)
+        {
+          pdbc->current_qualifier = NULL;
+
+          break;
+        }
+
+       pdbc->current_qualifier
+          = (char FAR *) MEM_ALLOC (
+          STRLEN (vParam) + 1);
+
+       if (pdbc->current_qualifier == NULL)
+        {
+          PUSHSQLERR (pdbc->herr, en_S1001);
+          return SQL_ERROR;
+        }
+
+       STRCPY (pdbc->current_qualifier, vParam);
+       break;
+
+     case SQL_LOGIN_TIMEOUT:
+       pdbc->login_timeout = vParam;
+       break;
+
+     case SQL_ODBC_CURSORS:
+       pdbc->odbc_cursors = vParam;
+       break;
+
+     case SQL_PACKET_SIZE:
+       pdbc->packet_size = vParam;
+       break;
+
+     case SQL_QUIET_MODE:
+       pdbc->quiet_mode = vParam;
+       break;
+
+     case SQL_TXN_ISOLATION:
+       pdbc->txn_isolation = vParam;
+       break;
+
+     default:
+       /* Since we didn't save the option value for delaied
+        * setting, we should raise an error here.
+        */
+       break;
+     }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLGetConnectOption(
-                        HDBC    hdbc,
-                        UWORD   fOption,
-                        PTR     pvParam )
-{
-        GENV_t FAR*     genv;
-        DBC_t  FAR*     pdbc = (DBC_t FAR*)hdbc;
-        int             sqlstat = en_00000;
-        HPROC           hproc   = SQL_NULL_HPROC;
-        RETCODE         retcode;
-
-        if( hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check option */
-        if( fOption < SQL_CONN_OPT_MIN
-         || ( fOption > SQL_CONN_OPT_MAX
-           && fOption < SQL_CONNECT_OPT_DRVR_START ) )
-        {
-                PUSHSQLERR ( pdbc->herr, en_S1092 );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        switch( pdbc->state )
-        {
-                case en_dbc_allocated:
-                        if( fOption != SQL_ACCESS_MODE
-                         && fOption != SQL_AUTOCOMMIT
-                         && fOption != SQL_LOGIN_TIMEOUT
-                         && fOption != SQL_OPT_TRACE
-                         && fOption != SQL_OPT_TRACEFILE )
-                        {
-                                sqlstat = en_08003;
-                        }
-                        /* MS ODBC SDK document only
-                         * allows SQL_ACCESS_MODE
-                         * and SQL_AUTOCOMMIT in this
-                         * dbc state. We allow another
-                         * two options, because they
-                         * are only meaningful for driver
-                         * manager.
-                         */
-                        break;
-
-                case en_dbc_needdata:
-                        sqlstat = en_S1010;
-                        break;
-
-                default:
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pdbc->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        /* Tracing and tracing file options are only
-         * meaningful for driver manager
-         */
-        if( fOption == SQL_OPT_TRACE )
-        {
-                if( pdbc->trace )
-                        *((UDWORD*)pvParam) = (UDWORD)SQL_OPT_TRACE_ON;
-                else
-                        *((UDWORD*)pvParam) = (UDWORD)SQL_OPT_TRACE_OFF;
-
-                return SQL_SUCCESS;
-        }
-
-        if( fOption == SQL_OPT_TRACEFILE )
-        {
-                STRCPY (pvParam, pdbc->tfile );
-
-                return SQL_ERROR;
-        }
-
-        if( pdbc->state !=  en_dbc_allocated )
-        /* if already connected, we will invoke driver's function */
-        {
-                hproc = _iodbcdm_getproc( hdbc, en_GetConnectOption );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        PUSHSQLERR( pdbc->herr, en_IM001 );
-
-                        return SQL_ERROR;
-                }
-
-                CALL_DRIVER ( hdbc, retcode, hproc, en_GetConnectOption, (
-                        pdbc->dhdbc, fOption, pvParam ) )
-
-#if 0
-                retcode = hproc(pdbc->dhdbc, fOption, pvParam);
-#endif
 
-                return retcode;
-        }
-
-        /* We needn't to handle options which are not allowed
-         * to be *get* at a allocated dbc state(and two tracing
-         * options which has been handled and returned). Thus,
-         * there are only two possible cases.
-         */
-        switch( fOption )
-        {
-                case SQL_ACCESS_MODE:
-                        *((UDWORD*)pvParam) = pdbc->access_mode;
-                        break;
-
-                case SQL_AUTOCOMMIT:
-                        *((UDWORD*)pvParam) = pdbc->autocommit;
-                        break;
-
-                case SQL_LOGIN_TIMEOUT:
-                        *((UDWORD*)pvParam) = pdbc->login_timeout;
-                        break;
-
-                default:
-                        break;
-        }
-
-        return SQL_SUCCESS;
+RETCODE SQL_API 
+SQLGetConnectOption (
+    HDBC hdbc,
+    UWORD fOption,
+    PTR pvParam)
+{
+  GENV_t FAR *genv;
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  int sqlstat = en_00000;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+
+  if (hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check option */
+  if (fOption < SQL_CONN_OPT_MIN || 
+       (fOption > SQL_CONN_OPT_MAX && fOption < SQL_CONNECT_OPT_DRVR_START))
+    {
+      PUSHSQLERR (pdbc->herr, en_S1092);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  switch (pdbc->state)
+     {
+     case en_dbc_allocated:
+       if (fOption != SQL_ACCESS_MODE
+          && fOption != SQL_AUTOCOMMIT
+          && fOption != SQL_LOGIN_TIMEOUT
+          && fOption != SQL_OPT_TRACE
+          && fOption != SQL_OPT_TRACEFILE)
+        {
+          sqlstat = en_08003;
+        }
+       /* MS ODBC SDK document only
+        * allows SQL_ACCESS_MODE
+        * and SQL_AUTOCOMMIT in this
+        * dbc state. We allow another 
+        * two options, because they 
+        * are only meaningful for driver 
+        * manager.  
+        */
+       break;
+
+     case en_dbc_needdata:
+       sqlstat = en_S1010;
+       break;
+
+     default:
+       break;
+     }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pdbc->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  /* Tracing and tracing file options are only 
+   * meaningful for driver manager
+   */
+  if (fOption == SQL_OPT_TRACE)
+    {
+      if (pdbc->trace)
+       *((UDWORD *) pvParam) = (UDWORD) SQL_OPT_TRACE_ON;
+      else
+       *((UDWORD *) pvParam) = (UDWORD) SQL_OPT_TRACE_OFF;
+
+      return SQL_SUCCESS;
+    }
+
+  if (fOption == SQL_OPT_TRACEFILE)
+    {
+      STRCPY (pvParam, pdbc->tfile);
+
+      return SQL_ERROR;
+    }
+
+  if (pdbc->state != en_dbc_allocated)
+    /* if already connected, we will invoke driver's function */
+    {
+      hproc = _iodbcdm_getproc (hdbc, en_GetConnectOption);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         PUSHSQLERR (pdbc->herr, en_IM001);
+
+         return SQL_ERROR;
+       }
+
+      CALL_DRIVER (hdbc, retcode, hproc, en_GetConnectOption,
+       (pdbc->dhdbc, fOption, pvParam))
+
+      return retcode;
+    }
+
+  /* We needn't to handle options which are not allowed 
+   * to be *get* at a allocated dbc state(and two tracing
+   * options which has been handled and returned). Thus, 
+   * there are only two possible cases. 
+   */
+  switch (fOption)
+     {
+     case SQL_ACCESS_MODE:
+       *((UDWORD *) pvParam) = pdbc->access_mode;
+       break;
+
+     case SQL_AUTOCOMMIT:
+       *((UDWORD *) pvParam) = pdbc->autocommit;
+       break;
+
+     case SQL_LOGIN_TIMEOUT:
+       *((UDWORD *) pvParam) = pdbc->login_timeout;
+       break;
+
+     default:
+       break;
+     }
+
+  return SQL_SUCCESS;
 }
 
-static RETCODE  _iodbcdm_transact(
-                        HDBC    hdbc,
-                        UWORD   fType )
-{
-        DBC_t  FAR*     pdbc = (DBC_t FAR*)hdbc;
-        STMT_t FAR*     pstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-
-        /* check state */
-        switch( pdbc->state )
-        {
-                case en_dbc_allocated:
-                case en_dbc_needdata:
-                        PUSHSQLERR ( pdbc->herr, en_08003 );
-                        return SQL_ERROR;
-
-                case en_dbc_connected:
-                        return SQL_SUCCESS;
-
-                case en_dbc_hstmt:
-                default:
-                        break;
-        }
-
-        for( pstmt  = (STMT_t FAR*)(pdbc->hstmt);
-             pstmt != NULL;
-             pstmt  = pstmt->next )
-        {
-                if( pstmt->state >= en_stmt_needdata
-                 || pstmt->asyn_on != en_NullProc )
-                {
-                        PUSHSQLERR ( pdbc->herr, en_S1010 );
-
-                        return SQL_ERROR;
-                }
-        }
-
-        hproc = _iodbcdm_getproc( hdbc, en_Transact );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pdbc->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( hdbc, retcode, hproc, en_Transact, (
-                        SQL_NULL_HENV, pdbc->dhdbc, fType ) )
-
-#if 0
-        retcode = hproc( SQL_NULL_HENV, pdbc->dhdbc, fType );
-#endif
 
-        /* state transition */
-        if( retcode != SQL_SUCCESS
-         && retcode != SQL_SUCCESS_WITH_INFO )
-        {
-                return retcode;
-        }
-
-        pdbc->state = en_dbc_hstmt;
-
-        for( pstmt  = (STMT_t FAR*)(pdbc->hstmt);
-             pstmt != NULL;
-             pstmt  = pstmt->next )
-        {
-                switch( pstmt->state )
-                {
-                        case en_stmt_prepared:
-                                if( pdbc->cb_commit   == SQL_CB_DELETE
-                                 || pdbc->cb_rollback == SQL_CB_DELETE )
-                                {
-                                        pstmt->state = en_stmt_allocated;
-                                        pstmt->prep_state = 0;
-                                        break;
-                                }
-                                break;
-
-                        case en_stmt_executed:
-                        case en_stmt_cursoropen:
-                        case en_stmt_fetched:
-                        case en_stmt_xfetched:
-                                if( ! pstmt->prep_state
-                                 && pdbc->cb_commit   != SQL_CB_PRESERVE
-                                 && pdbc->cb_rollback != SQL_CB_PRESERVE )
-                                {
-                                        pstmt->state = en_stmt_allocated;
-                                        pstmt->prep_state = 0;
-                                        pstmt->cursor_state = en_stmt_cursor_no;
-                                        break;
-                                }
-
-                                if( pstmt->prep_state )
-                                {
-                                        if( pdbc->cb_commit  == SQL_CB_DELETE
-                                         || pdbc->cb_rollback== SQL_CB_DELETE )
-                                        {
-                                                pstmt->state = en_stmt_allocated;
-                                                pstmt->prep_state = 0;
-                                                pstmt->cursor_state = en_stmt_cursor_no;
-                                                break;
-                                        }
-
-                                        if( pdbc->cb_commit  == SQL_CB_CLOSE
-                                         || pdbc->cb_rollback== SQL_CB_CLOSE )
-                                        {
-                                                pstmt->state
-                                                        = en_stmt_prepared;
-                                                pstmt->cursor_state
-                                                = en_stmt_cursor_no;
-                                                break;
-                                        }
-                                        break;
-                                }
-                                break;
-
-                        default:
-                                break;
-                }
-        }
-
-        return retcode;
+static RETCODE 
+_iodbcdm_transact (
+    HDBC hdbc,
+    UWORD fType)
+{
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  STMT_t FAR *pstmt;
+  HPROC hproc;
+  RETCODE retcode;
+
+  /* check state */
+  switch (pdbc->state)
+     {
+     case en_dbc_allocated:
+     case en_dbc_needdata:
+       PUSHSQLERR (pdbc->herr, en_08003);
+       return SQL_ERROR;
+
+     case en_dbc_connected:
+       return SQL_SUCCESS;
+
+     case en_dbc_hstmt:
+     default:
+       break;
+     }
+
+  for (pstmt = (STMT_t FAR *) (pdbc->hstmt);
+      pstmt != NULL;
+      pstmt = pstmt->next)
+    {
+      if (pstmt->state >= en_stmt_needdata
+         || pstmt->asyn_on != en_NullProc)
+       {
+         PUSHSQLERR (pdbc->herr, en_S1010);
+
+         return SQL_ERROR;
+       }
+    }
+
+  hproc = _iodbcdm_getproc (hdbc, en_Transact);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pdbc->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (hdbc, retcode, hproc, en_Transact,
+    (SQL_NULL_HENV, pdbc->dhdbc, fType))
+
+  /* state transition */
+  if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
+    {
+      return retcode;
+    }
+
+  pdbc->state = en_dbc_hstmt;
+
+  for (pstmt = (STMT_t FAR *) (pdbc->hstmt);
+      pstmt != NULL;
+      pstmt = pstmt->next)
+    {
+      switch (pstmt->state)
+        {
+        case en_stmt_prepared:
+          if (pdbc->cb_commit == SQL_CB_DELETE
+              || pdbc->cb_rollback == SQL_CB_DELETE)
+            {
+              pstmt->state = en_stmt_allocated;
+              pstmt->prep_state = 0;
+              break;
+            }
+          break;
+
+        case en_stmt_executed:
+        case en_stmt_cursoropen:
+        case en_stmt_fetched:
+        case en_stmt_xfetched:
+          if (!pstmt->prep_state
+              && pdbc->cb_commit != SQL_CB_PRESERVE
+              && pdbc->cb_rollback != SQL_CB_PRESERVE)
+            {
+              pstmt->state = en_stmt_allocated;
+              pstmt->prep_state = 0;
+              pstmt->cursor_state = en_stmt_cursor_no;
+              break;
+            }
+
+          if (pstmt->prep_state)
+            {
+              if (pdbc->cb_commit == SQL_CB_DELETE
+                  || pdbc->cb_rollback == SQL_CB_DELETE)
+                {
+                  pstmt->state = en_stmt_allocated;
+                  pstmt->prep_state = 0;
+                  pstmt->cursor_state = en_stmt_cursor_no;
+                  break;
+                }
+
+              if (pdbc->cb_commit == SQL_CB_CLOSE
+                  || pdbc->cb_rollback == SQL_CB_CLOSE)
+                {
+                  pstmt->state
+                      = en_stmt_prepared;
+                  pstmt->cursor_state
+                      = en_stmt_cursor_no;
+                  break;
+                }
+              break;
+            }
+          break;
+
+        default:
+          break;
+        }
+    }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLTransact(
-                HENV    henv,
-                HDBC    hdbc,
-                UWORD   fType )
+
+RETCODE SQL_API 
+SQLTransact (
+    HENV henv,
+    HDBC hdbc,
+    UWORD fType)
 {
-        GENV_t FAR*     genv    = (GENV_t FAR*)henv;
-        DBC_t  FAR*     pdbc    = (DBC_t FAR*)hdbc;
-        HERR            herr;
-        RETCODE         retcode;
-
-        if( hdbc != SQL_NULL_HDBC )
-        {
-                herr = pdbc->herr;
-        }
-        else if( henv != SQL_NULL_HENV )
-        {
-                herr = genv->herr;
-        }
-        else
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check argument */
-        if( fType != SQL_COMMIT
-         && fType != SQL_ROLLBACK )
-        {
-                PUSHSQLERR ( herr, en_S1012 );
-
-                return SQL_ERROR;
-        }
-
-        if( hdbc != SQL_NULL_HDBC )
-        {
-                retcode = _iodbcdm_transact( hdbc, fType );
-        }
-        else
-        {
-                for( pdbc  = (DBC_t FAR*)(genv->hdbc);
-                     pdbc != NULL;
-                     pdbc  = pdbc->next )
-                {
-                        retcode |= _iodbcdm_transact( hdbc, fType );
-                }
-        }
-
-        if( retcode != SQL_SUCCESS
-         && retcode != SQL_SUCCESS_WITH_INFO )
-        {
-                /* fail on one of the connection */
-                return SQL_ERROR;
-        }
-
-        return retcode;
+  GENV_t FAR *genv = (GENV_t FAR *) henv;
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  HERR herr;
+  RETCODE retcode;
+
+  if (hdbc != SQL_NULL_HDBC)
+    {
+      herr = pdbc->herr;
+    }
+  else if (henv != SQL_NULL_HENV)
+    {
+      herr = genv->herr;
+    }
+  else
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check argument */
+  if (fType != SQL_COMMIT
+      && fType != SQL_ROLLBACK)
+    {
+      PUSHSQLERR (herr, en_S1012);
+
+      return SQL_ERROR;
+    }
+
+  if (hdbc != SQL_NULL_HDBC)
+    {
+      retcode = _iodbcdm_transact (hdbc, fType);
+    }
+  else
+    {
+      for (pdbc = (DBC_t FAR *) (genv->hdbc);
+         pdbc != NULL;
+         pdbc = pdbc->next)
+       {
+         retcode |= _iodbcdm_transact (hdbc, fType);
+       }
+    }
+
+  if (retcode != SQL_SUCCESS
+      && retcode != SQL_SUCCESS_WITH_INFO)
+    {
+      /* fail on one of the connection */
+      return SQL_ERROR;
+    }
+
+  return retcode;
 }
index ef62292432722d9b6430785f5b140a7d24d6d710..659eadcc05ea96bf62f8d8d84b87eddb18a8c17c 100644 (file)
@@ -1,55 +1,81 @@
-#ifndef _HDBC_H
-#define _HDBC_H
+/*
+ *  hdbc.h
+ *
+ *  $Id$
+ *
+ *  Data source connect object management functions
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef        _HDBC_H
+#define        _HDBC_H
 
 typedef struct DBC
-{
-        int     type;           /* must be 1st field */
-        struct DBC FAR*
-                next;
+  {
+    int type;                  /* must be 1st field */
+    struct DBC FAR *
+     next;
 
-        HENV    genv;           /* back point to global env object */
+    HENV genv;                 /* back point to global env object */
 
-        HDBC    dhdbc;          /* driver's private dbc */
-        HENV    henv;           /* back point to instant env object */
-        HSTMT   hstmt;          /* list of statement object handle(s) */
-        HERR    herr;
+    HDBC dhdbc;                        /* driver's private dbc */
+    HENV henv;                 /* back point to instant env object */
+    HSTMT hstmt;               /* list of statement object handle(s) */
+    HERR herr;
 
-        int     state;
+    int state;
 
-        /* options */
-        UDWORD  access_mode;
-        UDWORD  autocommit;
+    /* options */
+    UDWORD access_mode;
+    UDWORD autocommit;
 
-        UDWORD  login_timeout;
-        UDWORD  odbc_cursors;
-        UDWORD  packet_size;
-        UDWORD  quiet_mode;
-        UDWORD  txn_isolation;
-        SWORD   cb_commit;
-        SWORD   cb_rollback;
+    UDWORD login_timeout;
+    UDWORD odbc_cursors;
+    UDWORD packet_size;
+    UDWORD quiet_mode;
+    UDWORD txn_isolation;
+    SWORD cb_commit;
+    SWORD cb_rollback;
 
-        char FAR*
-                current_qualifier;
+    char FAR *
+     current_qualifier;
 
-        int     trace;  /* trace flag */
-        char FAR*
-                tfile;
-        void FAR*
-                tstm;   /* trace stream */
-} DBC_t;
+    int trace;                 /* trace flag */
+    char FAR *
+     tfile;
+    void FAR *
+     tstm;                     /* trace stream */
+  }
+DBC_t;
 
-/*
+/* 
  * Note:
- *  - ODBC applications can see address of driver manager's
- *    connection object, i.e connection handle -- a void pointer,
- *    but not detail of it. ODBC applications can neither see
+ *  - ODBC applications can see address of driver manager's 
+ *    connection object, i.e connection handle -- a void pointer, 
+ *    but not detail of it. ODBC applications can neither see 
  *    detail driver's connection object nor its address.
  *
  *  - ODBC driver manager knows its own connection objects and
  *    exposes their address to an ODBC application. Driver manager
  *    also knows address of driver's connection objects and keeps
  *    it via dhdbc field in driver manager's connection object.
- *
+ * 
  *  - ODBC driver exposes address of its own connection object to
  *    driver manager without detail.
  *
@@ -57,11 +83,11 @@ typedef struct DBC
  *    SQLGetInfo() with fInfoType equals to SQL_DRIVER_HDBC.
  */
 
-enum    {
-        en_dbc_allocated,
-        en_dbc_needdata,
-        en_dbc_connected,
-        en_dbc_hstmt
-};
-
+enum
+  {
+    en_dbc_allocated,
+    en_dbc_needdata,
+    en_dbc_connected,
+    en_dbc_hstmt
+  };
 #endif
index 2ee89b2feb58c2ffcf873ff36a8bf74ed598245d..f0f8a018b09623b69ff1a71379786b7be36f3a9c 100644 (file)
@@ -1,75 +1,89 @@
-/** Environment object managment functions
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-#include       <../iodbc/iodbc.h>
-
-#include       <../iodbc/isql.h>
-#include       <../iodbc/isqlext.h>
-
-#include       <../iodbc/dlproc.h>
-
-#include       <../iodbc/herr.h>
-#include       <../iodbc/henv.h>
-
-#include       <../iodbc/itrace.h>
-
-RETCODE SQL_API SQLAllocEnv( HENV FAR* phenv )
+/*
+ *  henv.c
+ *
+ *  $Id$
+ *
+ *  Environment object management functions
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include       <config.h>
+
+#include       <isql.h>
+#include       <isqlext.h>
+
+#include       <dlproc.h>
+
+#include       <herr.h>
+#include       <henv.h>
+
+#include       <itrace.h>
+
+RETCODE SQL_API 
+SQLAllocEnv (HENV FAR * phenv)
 {
-        GENV_t FAR*     genv;
+  GENV_t FAR *genv;
 
-        genv = (GENV_t*)MEM_ALLOC( sizeof(GENV_t) );
+  genv = (GENV_t *) MEM_ALLOC (sizeof (GENV_t));
 
-        if( genv == NULL )
-        {
-                *phenv = SQL_NULL_HENV;
+  if (genv == NULL)
+    {
+      *phenv = SQL_NULL_HENV;
 
-                return SQL_ERROR;
-        }
+      return SQL_ERROR;
+    }
 
 #if (ODBCVER >= 0x0300 )
-        genv->type = SQL_HANDLE_ENV;
+  genv->type = SQL_HANDLE_ENV;
 #endif
 
-        genv->henv = SQL_NULL_HENV;     /* driver's env list */
-        genv->hdbc = SQL_NULL_HDBC;     /* driver's dbc list */
-        genv->herr = SQL_NULL_HERR;     /* err list          */
+  genv->henv = SQL_NULL_HENV;  /* driver's env list */
+  genv->hdbc = SQL_NULL_HDBC;  /* driver's dbc list */
+  genv->herr = SQL_NULL_HERR;  /* err list          */
 
-        *phenv = (HENV)genv;
+  *phenv = (HENV) genv;
 
-        return SQL_SUCCESS;
+  return SQL_SUCCESS;
 }
 
-RETCODE SQL_API SQLFreeEnv ( HENV henv )
+
+RETCODE SQL_API 
+SQLFreeEnv (HENV henv)
 {
-        GENV_t FAR*     genv = (GENV_t*)henv;
+  GENV_t FAR *genv = (GENV_t *) henv;
 
-        if( henv == SQL_NULL_HENV )
-        {
-                return SQL_INVALID_HANDLE;
-        }
+  if (henv == SQL_NULL_HENV)
+    {
+      return SQL_INVALID_HANDLE;
+    }
 
-        if( genv->hdbc != SQL_NULL_HDBC )
-        {
-                PUSHSQLERR ( genv->herr, en_S1010 );
+  if (genv->hdbc != SQL_NULL_HDBC)
+    {
+      PUSHSQLERR (genv->herr, en_S1010);
 
-                return SQL_ERROR;
-        }
+      return SQL_ERROR;
+    }
 
-        _iodbcdm_freesqlerrlist( genv->herr );
+  _iodbcdm_freesqlerrlist (genv->herr);
 
-        MEM_FREE( henv );
+  MEM_FREE (henv);
 
-        return SQL_SUCCESS;
+  return SQL_SUCCESS;
 }
index 46a2125d691981dbb821fc73609fd4ef0501c7eb..c320b45f8d0dca20bb774c1e52a0bd7474eb0fc6 100644 (file)
@@ -1,18 +1,49 @@
-#ifndef CLI_NAME_PREFIX
+/*
+ *  henv.ci
+ *
+ *  $Id$
+ *
+ *  Function names
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
 
 /* There are some exceptions :
  * on FreeBSD 2.x      CLI_NAME_PREFIX is defined in Config.mk as "_SQL"
- * on HP/UX s300/s400, CLI_NAME_PREFIX is defined in Config.mk as "_SQL"
- * on AIX 3.x 4.x,     CLI_NAME_PREFIX is defined in Config.mk as ".SQL"
+ * on HP/UX s300/s400, CLI_NAME_PREFIX is defined in Config.mk as "_SQL" 
+ * on AIX 3.x 4.x,     CLI_NAME_PREFIX is defined in Config.mk as ".SQL" 
  */
-
-#  define CLI_NAME_PREFIX       "SQL"   /* using call by value prefix */
+#ifndef        CLI_NAME_PREFIX
+#  define CLI_NAME_PREFIX      "SQL"   /* using call by value prefix */ 
+#else
+# ifdef NEED_USCORE
+#  define CLI_NAME_PREFIX      "_SQL"
+# endif
 #endif
 
-static struct {
-        int     en_idx;
-        char*   symbol;
-} odbcapi_symtab[] = {
+static struct
+  {
+    int en_idx;
+    char *symbol;
+  }
+odbcapi_symtab[] = {
+
 #if (ODBCVER >= 0x0300)
         { en_AllocHandle          CLI_NAME_PREFIX "AllocHandle" },
         { en_FreeHandle           CLI_NAME_PREFIX "FreeHandle" },
index 96b0b600a01153cc5e26c8a2322d6a10536e4e33..d4a175635dfb14862364d0c9ba5902b2bd24b898 100644 (file)
-#ifndef _HENV_H
-#define _HENV_H
+/*
+ *  henv.h
+ *
+ *  $Id$
+ *
+ *  Environment object management functions
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef        _HENV_H
+#define        _HENV_H
+
+#include       <config.h>
+#include       <dlproc.h>
 
-# include       "config.h"
-# include       <dlproc.h>
+#include       <isql.h>
+#include       <isqlext.h>
 
-# include       <isql.h>
-# include       <isqlext.h>
+enum
+  {
 
-enum {
 #if (ODBCVER >= 0x0300)
-        en_AllocHandle          = SQL_API_SQLALLOCHANDLE,
-        en_FreeHandle           = SQL_API_SQLFREEHANDLE,
+    en_AllocHandle = SQL_API_SQLALLOCHANDLE,
+    en_FreeHandle = SQL_API_SQLFREEHANDLE,
 #endif
-        en_AllocEnv             = SQL_API_SQLALLOCENV,
-        en_AllocConnect         = SQL_API_SQLALLOCCONNECT,
-        en_Connect              = SQL_API_SQLCONNECT,
-        en_DriverConnect        = SQL_API_SQLDRIVERCONNECT,
-        en_BrowseConnect        = SQL_API_SQLBROWSECONNECT,
-
-        en_DataSources          = SQL_API_SQLDATASOURCES,
-        en_Drivers              = SQL_API_SQLDRIVERS,
-        en_GetInfo              = SQL_API_SQLGETINFO,
-        en_GetFunctions         = SQL_API_SQLGETFUNCTIONS,
-        en_GetTypeInfo          = SQL_API_SQLGETTYPEINFO,
-
-        en_SetConnectOption     = SQL_API_SQLSETCONNECTOPTION,
-        en_GetConnectOption     = SQL_API_SQLGETCONNECTOPTION,
-        en_SetStmtOption        = SQL_API_SQLSETSTMTOPTION,
-        en_GetStmtOption        = SQL_API_SQLGETSTMTOPTION,
-
-        en_AllocStmt            = SQL_API_SQLALLOCSTMT,
-        en_Prepare              = SQL_API_SQLPREPARE,
-        en_BindParameter        = SQL_API_SQLBINDPARAMETER,
-        en_ParamOptions         = SQL_API_SQLPARAMOPTIONS,
-        en_GetCursorName        = SQL_API_SQLGETCURSORNAME,
-        en_SetCursorName        = SQL_API_SQLSETCURSORNAME,
-        en_SetScrollOptions     = SQL_API_SQLSETSCROLLOPTIONS,
-        en_SetParam             = SQL_API_SQLSETPARAM,
-
-        en_Execute              = SQL_API_SQLEXECUTE,
-        en_ExecDirect           = SQL_API_SQLEXECDIRECT,
-        en_NativeSql            = SQL_API_SQLNATIVESQL,
-        en_DescribeParam        = SQL_API_SQLDESCRIBEPARAM,
-        en_NumParams            = SQL_API_SQLNUMPARAMS,
-        en_ParamData            = SQL_API_SQLPARAMDATA,
-        en_PutData              = SQL_API_SQLPUTDATA,
-
-        en_RowCount             = SQL_API_SQLROWCOUNT,
-        en_NumResultCols        = SQL_API_SQLNUMRESULTCOLS,
-        en_DescribeCol          = SQL_API_SQLDESCRIBECOL,
-        en_ColAttributes        = SQL_API_SQLCOLATTRIBUTES,
-        en_BindCol              = SQL_API_SQLBINDCOL,
-        en_Fetch                = SQL_API_SQLFETCH,
-        en_ExtendedFetch        = SQL_API_SQLEXTENDEDFETCH,
-        en_GetData              = SQL_API_SQLGETDATA,
-        en_SetPos               = SQL_API_SQLSETPOS,
-        en_MoreResults          = SQL_API_SQLMORERESULTS,
-        en_Error                = SQL_API_SQLERROR,
-
-        en_ColumnPrivileges     = SQL_API_SQLCOLUMNPRIVILEGES,
-        en_Columns              = SQL_API_SQLCOLUMNS,
-        en_ForeignKeys          = SQL_API_SQLFOREIGNKEYS,
-        en_PrimaryKeys          = SQL_API_SQLPRIMARYKEYS,
-        en_ProcedureColumns     = SQL_API_SQLPROCEDURECOLUMNS,
-        en_Procedures           = SQL_API_SQLPROCEDURES,
-        en_SpecialColumns       = SQL_API_SQLSPECIALCOLUMNS,
-        en_Statistics           = SQL_API_SQLSTATISTICS,
-        en_TablePrivileges      = SQL_API_SQLTABLEPRIVILEGES,
-        en_Tables               = SQL_API_SQLTABLES,
-
-        en_FreeStmt             = SQL_API_SQLFREESTMT,
-        en_Cancel               = SQL_API_SQLCANCEL,
-        en_Transact             = SQL_API_SQLTRANSACT,
-
-        en_Disconnect           = SQL_API_SQLDISCONNECT,
-        en_FreeConnect          = SQL_API_SQLFREECONNECT,
-        en_FreeEnv              = SQL_API_SQLFREEENV,
-
-        en_NullProc             = SYSERR
-};
-
-typedef struct {
-        int     type;   /* must be 1st field */
-
-        HENV    henv;   /* driver's env list */
-        HDBC    hdbc;   /* driver's dbc list */
-        HERR    herr;   /* err list          */
-        int     state;
-} GENV_t;
-
-typedef struct {
-        HENV    next;                   /* next attached env handle */
-        int     refcount;               /* Driver's bookkeeping reference count */
-        HPROC   dllproc_tab[SQL_EXT_API_LAST + 1]; /* driver api calls  */
-
-        HENV    dhenv;                  /* driver env handle    */
-        HDLL    hdll;                   /* driver share library handle */
-} ENV_t;
+
+    en_AllocEnv = SQL_API_SQLALLOCENV,
+    en_AllocConnect = SQL_API_SQLALLOCCONNECT,
+    en_Connect = SQL_API_SQLCONNECT,
+    en_DriverConnect = SQL_API_SQLDRIVERCONNECT,
+    en_BrowseConnect = SQL_API_SQLBROWSECONNECT,
+
+    en_DataSources = SQL_API_SQLDATASOURCES,
+    en_Drivers = SQL_API_SQLDRIVERS,
+    en_GetInfo = SQL_API_SQLGETINFO,
+    en_GetFunctions = SQL_API_SQLGETFUNCTIONS,
+    en_GetTypeInfo = SQL_API_SQLGETTYPEINFO,
+
+    en_SetConnectOption = SQL_API_SQLSETCONNECTOPTION,
+    en_GetConnectOption = SQL_API_SQLGETCONNECTOPTION,
+    en_SetStmtOption = SQL_API_SQLSETSTMTOPTION,
+    en_GetStmtOption = SQL_API_SQLGETSTMTOPTION,
+
+    en_AllocStmt = SQL_API_SQLALLOCSTMT,
+    en_Prepare = SQL_API_SQLPREPARE,
+    en_BindParameter = SQL_API_SQLBINDPARAMETER,
+    en_ParamOptions = SQL_API_SQLPARAMOPTIONS,
+    en_GetCursorName = SQL_API_SQLGETCURSORNAME,
+    en_SetCursorName = SQL_API_SQLSETCURSORNAME,
+    en_SetScrollOptions = SQL_API_SQLSETSCROLLOPTIONS,
+    en_SetParam = SQL_API_SQLSETPARAM,
+
+    en_Execute = SQL_API_SQLEXECUTE,
+    en_ExecDirect = SQL_API_SQLEXECDIRECT,
+    en_NativeSql = SQL_API_SQLNATIVESQL,
+    en_DescribeParam = SQL_API_SQLDESCRIBEPARAM,
+    en_NumParams = SQL_API_SQLNUMPARAMS,
+    en_ParamData = SQL_API_SQLPARAMDATA,
+    en_PutData = SQL_API_SQLPUTDATA,
+
+    en_RowCount = SQL_API_SQLROWCOUNT,
+    en_NumResultCols = SQL_API_SQLNUMRESULTCOLS,
+    en_DescribeCol = SQL_API_SQLDESCRIBECOL,
+    en_ColAttributes = SQL_API_SQLCOLATTRIBUTES,
+    en_BindCol = SQL_API_SQLBINDCOL,
+    en_Fetch = SQL_API_SQLFETCH,
+    en_ExtendedFetch = SQL_API_SQLEXTENDEDFETCH,
+    en_GetData = SQL_API_SQLGETDATA,
+    en_SetPos = SQL_API_SQLSETPOS,
+    en_MoreResults = SQL_API_SQLMORERESULTS,
+    en_Error = SQL_API_SQLERROR,
+
+    en_ColumnPrivileges = SQL_API_SQLCOLUMNPRIVILEGES,
+    en_Columns = SQL_API_SQLCOLUMNS,
+    en_ForeignKeys = SQL_API_SQLFOREIGNKEYS,
+    en_PrimaryKeys = SQL_API_SQLPRIMARYKEYS,
+    en_ProcedureColumns = SQL_API_SQLPROCEDURECOLUMNS,
+    en_Procedures = SQL_API_SQLPROCEDURES,
+    en_SpecialColumns = SQL_API_SQLSPECIALCOLUMNS,
+    en_Statistics = SQL_API_SQLSTATISTICS,
+    en_TablePrivileges = SQL_API_SQLTABLEPRIVILEGES,
+    en_Tables = SQL_API_SQLTABLES,
+
+    en_FreeStmt = SQL_API_SQLFREESTMT,
+    en_Cancel = SQL_API_SQLCANCEL,
+    en_Transact = SQL_API_SQLTRANSACT,
+
+    en_Disconnect = SQL_API_SQLDISCONNECT,
+    en_FreeConnect = SQL_API_SQLFREECONNECT,
+    en_FreeEnv = SQL_API_SQLFREEENV,
+
+    en_NullProc = SYSERR
+  };
+
+typedef struct
+  {
+    int type;                  /* must be 1st field */
+
+    HENV henv;                 /* driver's env list */
+    HDBC hdbc;                 /* driver's dbc list */
+    HERR herr;                 /* err list          */
+    int state;
+  }
+GENV_t;
+
+typedef struct
+  {
+    HENV next;                 /* next attached env handle */
+    int refcount;              /* Driver's bookkeeping reference count */
+    HPROC dllproc_tab[SQL_EXT_API_LAST + 1];   /* driver api calls  */
+
+    HENV dhenv;                        /* driver env handle    */
+    HDLL hdll;                 /* drvier share library handle */
+  }
+ENV_t;
 
 /* Note:
- *
- *  - ODBC applications only know about global environment handle,
+
+ *  - ODBC applications only know about global environment handle, 
  *    a void pointer points to a GENV_t object. There is only one
  *    this object per process(however, to make the library reentrant,
- *    we still keep this object on heap). Applications only know
+ *    we still keep this object on heap). Applications only know 
  *    address of this object and needn't care about its detail.
  *
  *  - ODBC driver manager knows about instance environment handles,
@@ -121,5 +153,4 @@ typedef struct {
  *  - Applications can get driver's environment object handle by
  *    SQLGetInfo() with fInfoType equals to SQL_DRIVER_HENV
  */
-
 #endif
index b860b834b0998d0d05493e786c7a05ecd9b3331f..16d9e63dc5f30c4e9bcd04a13bcde5aaa3d00bfc 100644 (file)
-/** Error stack management functions
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-#include       <../iodbc/iodbc.h>
-
-#include       <../iodbc/isql.h>
-#include       <../iodbc/isqlext.h>
-
-#include        <../iodbc/dlproc.h>
-
-#include        <../iodbc/herr.h>
-#include       <../iodbc/henv.h>
-#include       <../iodbc/hdbc.h>
-#include       <../iodbc/hstmt.h>
-
-#include       <../iodbc/itrace.h>
-
-#include       "../iodbc/herr.ci"
-#include        <strings.h>
-#include        <stdio.h>
-
-static  HERR    _iodbcdm_popsqlerr( HERR herr )
+/*
+ *  herr.c
+ *
+ *  $Id$
+ *
+ *  Error stack management functions
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include       <config.h>
+
+#include       <isql.h>
+#include       <isqlext.h>
+
+#include        <dlproc.h>
+
+#include        <herr.h>
+#include       <henv.h>
+#include       <hdbc.h>
+#include       <hstmt.h>
+
+#include       <itrace.h>
+
+#include       "herr.ci"
+
+static HERR 
+_iodbcdm_popsqlerr (HERR herr)
 {
-        sqlerr_t*       list = (sqlerr_t*)herr;
-        sqlerr_t*       next;
+  sqlerr_t *list = (sqlerr_t *) herr;
+  sqlerr_t *next;
 
-        if( herr == SQL_NULL_HERR )
-        {
-                return herr;
-        }
+  if (herr == SQL_NULL_HERR)
+    {
+      return herr;
+    }
 
-        next = list->next;
+  next = list->next;
 
-        MEM_FREE (list);
+  MEM_FREE (list);
 
-        return next;
+  return next;
 }
 
-void    _iodbcdm_freesqlerrlist( HERR herrlist )
+
+void 
+_iodbcdm_freesqlerrlist (HERR herrlist)
 {
-        HERR    list;
+  HERR list;
 
-        for(list = herrlist; list!= 0; )
-        {
-                list = _iodbcdm_popsqlerr(list);
-        }
+  for (list = herrlist; list != 0;)
+    {
+      list = _iodbcdm_popsqlerr (list);
+    }
 }
 
-HERR    _iodbcdm_pushsqlerr (
-                HERR            herr,
-                sqlstcode_t     code,
-                char*           msg )
+
+HERR 
+_iodbcdm_pushsqlerr (
+    HERR herr,
+    sqlstcode_t code,
+    char *msg)
 {
-        sqlerr_t*       ebuf;
-        sqlerr_t*       perr    = (sqlerr_t*)herr;
-        int             idx     = 0;
+  sqlerr_t *ebuf;
+  sqlerr_t *perr = (sqlerr_t *) herr;
+  int idx = 0;
 
-        if(herr != SQL_NULL_HERR )
-        {
-                idx = perr->idx + 1;
-        }
+  if (herr != SQL_NULL_HERR)
+    {
+      idx = perr->idx + 1;
+    }
 
-        if( idx == 64 )
-        /* over wirte the top entry to prevent error stack blow out */
-        {
-                perr->code = code;
-                perr->msg  = msg;
+  if (idx == 64)
+    /* over wirte the top entry to prevent error stack blow out */
+    {
+      perr->code = code;
+      perr->msg = msg;
 
-                return herr;
-        }
+      return herr;
+    }
 
-        ebuf = (sqlerr_t*)MEM_ALLOC (sizeof(sqlerr_t));
+  ebuf = (sqlerr_t *) MEM_ALLOC (sizeof (sqlerr_t));
 
-        if( ebuf == NULL )
-        {
-                return NULL;
-        }
+  if (ebuf == NULL)
+    {
+      return NULL;
+    }
 
-        ebuf->msg       = msg;
-        ebuf->code      = code;
-        ebuf->idx       = idx;
-        ebuf->next      = (sqlerr_t*)herr;
+  ebuf->msg = msg;
+  ebuf->code = code;
+  ebuf->idx = idx;
+  ebuf->next = (sqlerr_t *) herr;
 
-        return (HERR)ebuf;
+  return (HERR) ebuf;
 }
 
-static  char FAR*       _iodbcdm_getsqlstate (
-                                HERR            herr,
-                                void FAR*       tab )
+
+static char FAR *
+_iodbcdm_getsqlstate (
+    HERR herr,
+    void FAR * tab)
 {
-        sqlerr_t*       perr = (sqlerr_t*)herr;
-        sqlerrmsg_t*    ptr;
-
-        if( herr == SQL_NULL_HERR || tab == NULL )
-        {
-                return (char FAR*)NULL;
-        }
-
-        for( ptr = tab;
-             ptr->code != en_sqlstat_total;
-             ptr++ )
-        {
-                if(ptr->code == perr->code)
-                {
-                        return (char FAR*)(ptr->stat);
-                }
-        }
-
-        return (char FAR*)NULL;
+  sqlerr_t *perr = (sqlerr_t *) herr;
+  sqlerrmsg_t *ptr;
+
+  if (herr == SQL_NULL_HERR || tab == NULL)
+    {
+      return (char FAR *) NULL;
+    }
+
+  for (ptr = tab;
+      ptr->code != en_sqlstat_total;
+      ptr++)
+    {
+      if (ptr->code == perr->code)
+       {
+         return (char FAR *) (ptr->stat);
+       }
+    }
+
+  return (char FAR *) NULL;
 }
 
-static char FAR*        _iodbcdm_getsqlerrmsg(
-                                HERR            herr,
-                                void FAR*       errtab )
+
+static char FAR *
+_iodbcdm_getsqlerrmsg (
+    HERR herr,
+    void FAR * errtab)
 {
-        sqlerr_t*       perr = (sqlerr_t*)herr;
-        sqlerrmsg_t*    ptr;
-
-        if( herr == SQL_NULL_HERR )
-        {
-                return NULL;
-        }
-
-        if( perr->msg == NULL && errtab == NULL )
-        {
-                return NULL;
-        }
-
-        if( perr->msg != NULL )
-        {
-                return perr->msg;
-        }
-
-        for( ptr = (sqlerrmsg_t*)errtab;
-             ptr->code != en_sqlstat_total;
-             ptr++ )
-        {
-                if( ptr->code == perr->code )
-                {
-                        return (char FAR*)ptr->msg;
-                }
-        }
-
-        return (char FAR*)NULL;
+  sqlerr_t *perr = (sqlerr_t *) herr;
+  sqlerrmsg_t *ptr;
+
+  if (herr == SQL_NULL_HERR)
+    {
+      return NULL;
+    }
+
+  if (perr->msg == NULL && errtab == NULL)
+    {
+      return NULL;
+    }
+
+  if (perr->msg != NULL)
+    {
+      return perr->msg;
+    }
+
+  for (ptr = (sqlerrmsg_t *) errtab;
+      ptr->code != en_sqlstat_total;
+      ptr++)
+    {
+      if (ptr->code == perr->code)
+       {
+         return (char FAR *) ptr->msg;
+       }
+    }
+
+  return (char FAR *) NULL;
 }
 
-RETCODE SQL_API SQLError (
-                        HENV            henv,
-                        HDBC            hdbc,
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szSqlstate,
-                        SDWORD FAR*     pfNativeError,
-                        UCHAR FAR*      szErrorMsg,
-                        SWORD           cbErrorMsgMax,
-                        SWORD FAR*      pcbErrorMsg )
+
+RETCODE SQL_API 
+SQLError (
+    HENV henv,
+    HDBC hdbc,
+    HSTMT hstmt,
+    UCHAR FAR * szSqlstate,
+    SDWORD FAR * pfNativeError,
+    UCHAR FAR * szErrorMsg,
+    SWORD cbErrorMsgMax,
+    SWORD FAR * pcbErrorMsg)
 {
-        GENV_t FAR*     genv    = (GENV_t FAR*) henv;
-        DBC_t  FAR*     pdbc    = (DBC_t FAR*) hdbc;
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HDBC            thdbc;
-
-        HENV            dhenv   = SQL_NULL_HENV;
-        HDBC            dhdbc   = SQL_NULL_HDBC;
-        HSTMT           dhstmt  = SQL_NULL_HSTMT;
-
-        HERR            herr    = SQL_NULL_HERR;
-        HPROC           hproc   = SQL_NULL_HPROC;
-
-        char   FAR*     errmsg  = NULL;
-        char   FAR*     ststr   = NULL;
-
-        int             handle  = 0;
-        RETCODE         retcode = SQL_SUCCESS;
-
-        if( hstmt != SQL_NULL_HSTMT )   /* retrive stmt err */
-        {
-                herr    = pstmt->herr;
-                thdbc   = pstmt->hdbc;
-
-                if( thdbc == SQL_NULL_HDBC )
-                {
-                        return SQL_INVALID_HANDLE;
-                }
-                hproc   = _iodbcdm_getproc( thdbc, en_Error );
-                dhstmt  = pstmt->dhstmt;
-                handle  = 3;
-        }
-        else if( hdbc != SQL_NULL_HDBC )        /* retrive dbc err */
-        {
-                herr    = pdbc->herr;
-                thdbc   = hdbc;
-                if( thdbc == SQL_NULL_HDBC )
-                {
-                        return SQL_INVALID_HANDLE;
-                }
-                hproc   = _iodbcdm_getproc( thdbc, en_Error );
-                dhdbc   = pdbc->dhdbc;
-                handle  = 2;
-
-                if( herr == SQL_NULL_HERR
-                 && pdbc->henv == SQL_NULL_HENV )
-                {
-                        return SQL_NO_DATA_FOUND;
-                }
-        }
-        else if( henv != SQL_NULL_HENV )        /* retrive env err */
-        {
-                herr    = genv->herr;
-
-                /* Drivers shouldn't push error message
-                 * on envoriment handle */
-
-                if( herr == SQL_NULL_HERR )
-                {
-                        return SQL_NO_DATA_FOUND;
-                }
-
-                handle = 1;
-        }
-        else
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        if( szErrorMsg != NULL )
-        {
-                if( cbErrorMsgMax < 0
-                 || cbErrorMsgMax > SQL_MAX_MESSAGE_LENGTH - 1 )
-                {
-                        return SQL_ERROR;
-                        /* SQLError() doesn't post error for itself */
-                }
-        }
-
-        if( herr == SQL_NULL_HERR )             /* no err on drv mng */
-        {
-                /* call driver */
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        PUSHSQLERR ( herr, en_IM001 );
-
-                        return SQL_ERROR;
-                }
-
-                CALL_DRIVER ( thdbc, retcode, hproc, en_Error, (
-                                dhenv, dhdbc, dhstmt,
-                                szSqlstate, pfNativeError,
-                                szErrorMsg, cbErrorMsgMax, pcbErrorMsg) )
-
-#if 0
-                retcode = hproc(dhenv, dhdbc, dhstmt,
-                                szSqlstate, pfNativeError,
-                                szErrorMsg, cbErrorMsgMax, pcbErrorMsg);
-#endif
-
-                return retcode;
-        }
-
-        if( szSqlstate != NULL )
-        {
-                int     len;
-
-                /* get sql state  string */
-                ststr = (char FAR*)_iodbcdm_getsqlstate( herr,
-                                (void FAR*)sqlerrmsg_tab );
-
-                if( ststr == NULL)
-                {
-                        len = 0;
-                }
-                else
-                {
-                        len = (int)STRLEN(ststr);
-                }
-
-                STRNCPY ( szSqlstate, ststr, len );
-                szSqlstate[len] = 0;
-                /* buffer size of szSqlstate is not checked. Applications
-                 * suppose provide enough ( not less than 6 bytes ) buffer
-                 * or NULL for it.
-                 */
-        }
-
-        if( pfNativeError != NULL )
-        {
-                /* native error code is specific to data source */
-                *pfNativeError = (SDWORD)0L;
-        }
-
-        if( szErrorMsg == NULL || cbErrorMsgMax == 0 )
-        {
-                if( pcbErrorMsg != NULL )
-                {
-                        *pcbErrorMsg = (SWORD)0;
-                }
-        }
-        else
-        {
-                int     len;
-                char    msgbuf[256] = { '\0' };
-
-                /* get sql state message */
-                errmsg = _iodbcdm_getsqlerrmsg(herr,
-                                (void FAR*)sqlerrmsg_tab);
-
-                if(errmsg == NULL)
-                {
-                        errmsg = (char FAR*)"";
-                }
-
-                sprintf(msgbuf, "%s%s", sqlerrhd, errmsg);
-
-                len = STRLEN( msgbuf );
-
-                if( len < cbErrorMsgMax - 1 )
-                {
-                        retcode = SQL_SUCCESS;
-                }
-                else
-                {
-                        len = cbErrorMsgMax - 1;
-                        retcode = SQL_SUCCESS_WITH_INFO;
-                        /* and not posts error for itself */
-                }
-
-                STRNCPY((char*)szErrorMsg, msgbuf, len);
-                szErrorMsg[len] = 0;
-
-                if( pcbErrorMsg != NULL)
-                {
-                        *pcbErrorMsg = (SWORD)len;
-                }
-        }
-
-        switch(handle)          /* free this err */
-        {
-                case 1:
-                        genv->herr = _iodbcdm_popsqlerr(genv->herr);
-                        break;
-
-                case 2:
-                        pdbc->herr = _iodbcdm_popsqlerr(pdbc->herr);
-                        break;
-
-                case 3:
-                        pstmt->herr= _iodbcdm_popsqlerr(pstmt->herr);
-                        break;
-
-                default:
-                        break;
-        }
-
-        return retcode;
+  GENV_t FAR *genv = (GENV_t FAR *) henv;
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HDBC thdbc;
+
+  HENV dhenv = SQL_NULL_HENV;
+  HDBC dhdbc = SQL_NULL_HDBC;
+  HSTMT dhstmt = SQL_NULL_HSTMT;
+
+  HERR herr = SQL_NULL_HERR;
+  HPROC hproc = SQL_NULL_HPROC;
+
+  char FAR *errmsg = NULL;
+  char FAR *ststr = NULL;
+
+  int handle = 0;
+  RETCODE retcode = SQL_SUCCESS;
+
+  if (hstmt != SQL_NULL_HSTMT) /* retrive stmt err */
+    {
+      herr = pstmt->herr;
+      thdbc = pstmt->hdbc;
+
+      if (thdbc == SQL_NULL_HDBC)
+       {
+         return SQL_INVALID_HANDLE;
+       }
+      hproc = _iodbcdm_getproc (thdbc, en_Error);
+      dhstmt = pstmt->dhstmt;
+      handle = 3;
+    }
+  else if (hdbc != SQL_NULL_HDBC)      /* retrive dbc err */
+    {
+      herr = pdbc->herr;
+      thdbc = hdbc;
+      if (thdbc == SQL_NULL_HDBC)
+       {
+         return SQL_INVALID_HANDLE;
+       }
+      hproc = _iodbcdm_getproc (thdbc, en_Error);
+      dhdbc = pdbc->dhdbc;
+      handle = 2;
+
+      if (herr == SQL_NULL_HERR
+         && pdbc->henv == SQL_NULL_HENV)
+       {
+         return SQL_NO_DATA_FOUND;
+       }
+    }
+  else if (henv != SQL_NULL_HENV)      /* retrive env err */
+    {
+      herr = genv->herr;
+
+      /* Drivers shouldn't push error message 
+       * on envoriment handle */
+
+      if (herr == SQL_NULL_HERR)
+       {
+         return SQL_NO_DATA_FOUND;
+       }
+
+      handle = 1;
+    }
+  else
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  if (szErrorMsg != NULL)
+    {
+      if (cbErrorMsgMax < 0
+         || cbErrorMsgMax > SQL_MAX_MESSAGE_LENGTH - 1)
+       {
+         return SQL_ERROR;
+         /* SQLError() doesn't post error for itself */
+       }
+    }
+
+  if (herr == SQL_NULL_HERR)   /* no err on drv mng */
+    {
+      /* call driver */
+      if (hproc == SQL_NULL_HPROC)
+       {
+         PUSHSQLERR (herr, en_IM001);
+
+         return SQL_ERROR;
+       }
+
+      CALL_DRIVER (thdbc, retcode, hproc, en_Error,
+         (dhenv, dhdbc, dhstmt, szSqlstate, pfNativeError, szErrorMsg,
+             cbErrorMsgMax, pcbErrorMsg))
+
+      return retcode;
+    }
+
+  if (szSqlstate != NULL)
+    {
+      int len;
+
+      /* get sql state  string */
+      ststr = (char FAR *) _iodbcdm_getsqlstate (herr,
+         (void FAR *) sqlerrmsg_tab);
+
+      if (ststr == NULL)
+       {
+         len = 0;
+       }
+      else
+       {
+         len = (int) STRLEN (ststr);
+       }
+
+      STRNCPY (szSqlstate, ststr, len);
+      szSqlstate[len] = 0;
+      /* buffer size of szSqlstate is not checked. Applications
+       * suppose provide enough ( not less than 6 bytes ) buffer
+       * or NULL for it.
+       */
+    }
+
+  if (pfNativeError != NULL)
+    {
+      /* native error code is specific to data source */
+      *pfNativeError = (SDWORD) 0L;
+    }
+
+  if (szErrorMsg == NULL || cbErrorMsgMax == 0)
+    {
+      if (pcbErrorMsg != NULL)
+       {
+         *pcbErrorMsg = (SWORD) 0;
+       }
+    }
+  else
+    {
+      int len;
+      char msgbuf[256] = {'\0'};
+
+      /* get sql state message */
+      errmsg = _iodbcdm_getsqlerrmsg (herr, (void FAR *) sqlerrmsg_tab);
+
+      if (errmsg == NULL)
+       {
+         errmsg = (char FAR *) "";
+       }
+
+      sprintf (msgbuf, "%s%s", sqlerrhd, errmsg);
+
+      len = STRLEN (msgbuf);
+
+      if (len < cbErrorMsgMax - 1)
+       {
+         retcode = SQL_SUCCESS;
+       }
+      else
+       {
+         len = cbErrorMsgMax - 1;
+         retcode = SQL_SUCCESS_WITH_INFO;
+         /* and not posts error for itself */
+       }
+
+      STRNCPY ((char *) szErrorMsg, msgbuf, len);
+      szErrorMsg[len] = 0;
+
+      if (pcbErrorMsg != NULL)
+       {
+         *pcbErrorMsg = (SWORD) len;
+       }
+    }
+
+  switch (handle)              /* free this err */
+     {
+     case 1:
+       genv->herr = _iodbcdm_popsqlerr (genv->herr);
+       break;
+
+     case 2:
+       pdbc->herr = _iodbcdm_popsqlerr (pdbc->herr);
+       break;
+
+     case 3:
+       pstmt->herr = _iodbcdm_popsqlerr (pstmt->herr);
+       break;
+
+     default:
+       break;
+     }
+
+  return retcode;
 }
index 0e6302264473da5df7bb513451e5f866d792631a..c880c12a0db9feb9a73204308be91371f41c2d38 100644 (file)
@@ -1,3 +1,29 @@
+/*
+ *  herr.ci
+ *
+ *  $Id$
+ *
+ *  Error messages
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
 static const sqlerrmsg_t sqlerrmsg_tab[] =
 {
         { en_00000, "00000", "" }, 
@@ -95,4 +121,4 @@ static const sqlerrmsg_t sqlerrmsg_tab[] =
         { en_sqlstat_total,   NULL, NULL }
 };
 
-static char FAR*        sqlerrhd = "[iODBC][Driver Manager]";
+static char FAR*       sqlerrhd = "[iODBC][Driver Manager]";
index 0ab2c1c66edebe316d15a25b06e93d05ae636e37..8355c012ad84fa5640855e4e2086e1fe61a9453d 100644 (file)
-#ifndef _HERR_H
-#define _HERR_H
+/*
+ *  herr.h
+ *
+ *  $Id$
+ *
+ *  Error stack management functions
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef        _HERR_H
+#define        _HERR_H
 
-typedef enum {
-        en_00000 = 0,
-        en_01000,
-        en_01002,
-        en_01004,
-        en_01006,
-        en_01S00,
-        en_01S01,
-        en_01S02,
-        en_01S03,
-        en_01S04,
-        en_07001,
-        en_07006,
-        en_08001,
-        en_08002,
-        en_08003,
-        en_08004,
-        en_08007,
-        en_08S01,
-        en_21S01,
-        en_21S02,
-        en_22001,
-        en_22003,
-        en_22005,
-        en_22008,
-        en_22012,
-        en_22026,
-        en_23000,
-        en_24000,
-        en_25000,
-        en_28000,
-        en_34000,
-        en_37000,
-        en_3C000,
-        en_40001,
-        en_42000,
-        en_70100,
-        en_IM001,
-        en_IM002,
-        en_IM003,
-        en_IM004,
-        en_IM005,
-        en_IM006,
-        en_IM007,
-        en_IM008,
-        en_IM009,
-        en_IM010,
-        en_IM011,
-        en_IM012,
-        en_IM013,
-        en_IM014,
-        en_S0001,
-        en_S0002,
-        en_S0011,
-        en_S0012,
-        en_S0021,
-        en_S0022,
-        en_S0023,
-        en_S1000,
-        en_S1001,
-        en_S1002,
-        en_S1003,
-        en_S1004,
-        en_S1008,
-        en_S1009,
-        en_S1010,
-        en_S1011,
-        en_S1012,
-        en_S1015,
-        en_S1090,
-        en_S1091,
-        en_S1092,
-        en_S1093,
-        en_S1094,
-        en_S1095,
-        en_S1096,
-        en_S1097,
-        en_S1098,
-        en_S1099,
-        en_S1100,
-        en_S1101,
-        en_S1103,
-        en_S1104,
-        en_S1105,
-        en_S1106,
-        en_S1107,
-        en_S1108,
-        en_S1109,
-        en_S1110,
-        en_S1111,
-        en_S1C00,
-        en_S1T00,
-        en_sqlstat_total
-} sqlstcode_t;
+typedef enum
+  {
+    en_00000 = 0,
+    en_01000,
+    en_01002,
+    en_01004,
+    en_01006,
+    en_01S00,
+    en_01S01,
+    en_01S02,
+    en_01S03,
+    en_01S04,
+    en_07001,
+    en_07006,
+    en_08001,
+    en_08002,
+    en_08003,
+    en_08004,
+    en_08007,
+    en_08S01,
+    en_21S01,
+    en_21S02,
+    en_22001,
+    en_22003,
+    en_22005,
+    en_22008,
+    en_22012,
+    en_22026,
+    en_23000,
+    en_24000,
+    en_25000,
+    en_28000,
+    en_34000,
+    en_37000,
+    en_3C000,
+    en_40001,
+    en_42000,
+    en_70100,
+    en_IM001,
+    en_IM002,
+    en_IM003,
+    en_IM004,
+    en_IM005,
+    en_IM006,
+    en_IM007,
+    en_IM008,
+    en_IM009,
+    en_IM010,
+    en_IM011,
+    en_IM012,
+    en_IM013,
+    en_IM014,
+    en_S0001,
+    en_S0002,
+    en_S0011,
+    en_S0012,
+    en_S0021,
+    en_S0022,
+    en_S0023,
+    en_S1000,
+    en_S1001,
+    en_S1002,
+    en_S1003,
+    en_S1004,
+    en_S1008,
+    en_S1009,
+    en_S1010,
+    en_S1011,
+    en_S1012,
+    en_S1015,
+    en_S1090,
+    en_S1091,
+    en_S1092,
+    en_S1093,
+    en_S1094,
+    en_S1095,
+    en_S1096,
+    en_S1097,
+    en_S1098,
+    en_S1099,
+    en_S1100,
+    en_S1101,
+    en_S1103,
+    en_S1104,
+    en_S1105,
+    en_S1106,
+    en_S1107,
+    en_S1108,
+    en_S1109,
+    en_S1110,
+    en_S1111,
+    en_S1C00,
+    en_S1T00,
+    en_sqlstat_total
+  }
+sqlstcode_t;
 
-typedef void FAR*       HERR;
-# define SQL_NULL_HERR  ((HERR)NULL)
+typedef void FAR *HERR;
+#define SQL_NULL_HERR  ((HERR)NULL)
 
 typedef struct
-{
-        sqlstcode_t     code;
-        char FAR*       stat;
-        char FAR*       msg;
-} sqlerrmsg_t;
+  {
+    sqlstcode_t code;
+    char FAR *stat;
+    char FAR *msg;
+  }
+sqlerrmsg_t;
 
-typedef struct sqlerr {
-        sqlstcode_t     code;
-        int             idx;
-        char FAR*       msg;
-        struct sqlerr*  next;
-} sqlerr_t;
+typedef struct sqlerr
+  {
+    sqlstcode_t code;
+    int idx;
+    char FAR *msg;
+    struct sqlerr *next;
+  }
+sqlerr_t;
 
-extern void             _iodbcdm_freesqlerrlist( HERR herr );
-extern HERR             _iodbcdm_pushsqlerr ( HERR list, sqlstcode_t code, char* sysmsg );
+extern void _iodbcdm_freesqlerrlist (HERR herr);
+extern HERR _iodbcdm_pushsqlerr (HERR list, sqlstcode_t code, char *sysmsg);
 
-# define        PUSHSYSERR(list, msg)   \
-                        list = (HERR)_iodbcdm_pushsqlerr( (HERR)(list), 0, (char*)msg )
-# define        PUSHSQLERR(list, code)  \
-                        list = (HERR)_iodbcdm_pushsqlerr( (HERR)(list), (int)(code), NULL )
-
-
-#endif  /* _SQLERR_H */
+#define        PUSHSYSERR(list, msg)   \
+                       list = (HERR)_iodbcdm_pushsqlerr( (HERR)(list), 0, (char*)msg )
+#define        PUSHSQLERR(list, code)  \
+                       list = (HERR)_iodbcdm_pushsqlerr( (HERR)(list), (int)(code), NULL )
+#endif /* _SQLERR_H */
index 425fe8b2e299b48d096f6e25aef4fcf6b49310e8..8a90a3d8d3f01f02ce91ebd075e828cc06c0bc30 100644 (file)
-/** Query statement object management functions
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-#include       <../iodbc/iodbc.h>
-
-#include       <../iodbc/isql.h>
-#include       <../iodbc/isqlext.h>
-
-#include        <../iodbc/dlproc.h>
-
-#include       <../iodbc/herr.h>
-#include       <../iodbc/henv.h>
-#include       <../iodbc/hdbc.h>
-#include       <../iodbc/hstmt.h>
-
-#include       <../iodbc/itrace.h>
-
-RETCODE SQL_API SQLAllocStmt (
-                        HDBC            hdbc,
-                        HSTMT FAR*      phstmt )
+/*
+ *  hstmt.c
+ *
+ *  $Id$
+ *
+ *  Query statement object management functions
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include       <config.h>
+
+#include       <isql.h>
+#include       <isqlext.h>
+
+#include        <dlproc.h>
+
+#include       <herr.h>
+#include       <henv.h>
+#include       <hdbc.h>
+#include       <hstmt.h>
+
+#include       <itrace.h>
+
+RETCODE SQL_API 
+SQLAllocStmt (
+    HDBC hdbc,
+    HSTMT FAR * phstmt)
 {
-        DBC_t  FAR*     pdbc    = (DBC_t FAR*)hdbc;
-        STMT_t FAR*     pstmt   = NULL;
-        HPROC           hproc   = SQL_NULL_HPROC;
-        RETCODE         retcode = SQL_SUCCESS;
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  STMT_t FAR *pstmt = NULL;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode = SQL_SUCCESS;
 
 #if (ODBCVER >= 0x0300)
-        if( hdbc == SQL_NULL_HDBC
-         || pdbc->type != SQL_HANDLE_DBC )
+  if (hdbc == SQL_NULL_HDBC || pdbc->type != SQL_HANDLE_DBC)
 #else
-        if( hdbc == SQL_NULL_HDBC )
+  if (hdbc == SQL_NULL_HDBC)
 #endif
-        {
-                return SQL_INVALID_HANDLE;
-        }
+    {
+      return SQL_INVALID_HANDLE;
+    }
 
-        if( phstmt == NULL )
-        {
-                PUSHSQLERR ( pdbc->herr, en_S1009 );
+  if (phstmt == NULL)
+    {
+      PUSHSQLERR (pdbc->herr, en_S1009);
 
-                return SQL_ERROR;
-        }
+      return SQL_ERROR;
+    }
 
-        /* check state */
-        switch( pdbc->state )
-        {
-                case en_dbc_connected:
-                case en_dbc_hstmt:
-                        break;
+  /* check state */
+  switch (pdbc->state)
+     {
+     case en_dbc_connected:
+     case en_dbc_hstmt:
+       break;
 
-                case en_dbc_allocated:
-                case en_dbc_needdata:
-                        PUSHSQLERR ( pdbc->herr, en_08003 );
-                        *phstmt = SQL_NULL_HSTMT;
-                        return SQL_ERROR;
+     case en_dbc_allocated:
+     case en_dbc_needdata:
+       PUSHSQLERR (pdbc->herr, en_08003);
+       *phstmt = SQL_NULL_HSTMT;
+       return SQL_ERROR;
 
-                default:
-                        return SQL_INVALID_HANDLE;
-        }
+     default:
+       return SQL_INVALID_HANDLE;
+     }
 
-        pstmt = (STMT_t FAR*)MEM_ALLOC(sizeof(STMT_t));
+  pstmt = (STMT_t FAR *) MEM_ALLOC (sizeof (STMT_t));
 
-        if( pstmt == NULL )
-        {
-                PUSHSQLERR ( pdbc->herr, en_S1001 );
-                *phstmt = SQL_NULL_HSTMT;
+  if (pstmt == NULL)
+    {
+      PUSHSQLERR (pdbc->herr, en_S1001);
+      *phstmt = SQL_NULL_HSTMT;
 
-                return SQL_ERROR;
-        }
+      return SQL_ERROR;
+    }
 
 #if (ODBCVER >= 0x0300)
-        pstmt->type = SQL_HANDLE_STMT;
+  pstmt->type = SQL_HANDLE_STMT;
 #endif
-        /* initiate the object */
-        pstmt->herr = SQL_NULL_HERR;
-        pstmt->hdbc = hdbc;
-        pstmt->state = en_stmt_allocated;
-        pstmt->cursor_state = en_stmt_cursor_no;
-        pstmt->prep_state = 0;
-        pstmt->asyn_on = en_NullProc;
-        pstmt->need_on = en_NullProc;
-
-        /* call driver's function */
+
+  /* initiate the object */
+  pstmt->herr = SQL_NULL_HERR;
+  pstmt->hdbc = hdbc;
+  pstmt->state = en_stmt_allocated;
+  pstmt->cursor_state = en_stmt_cursor_no;
+  pstmt->prep_state = 0;
+  pstmt->asyn_on = en_NullProc;
+  pstmt->need_on = en_NullProc;
+
+  /* call driver's function */
+
 #if (ODBCVER >= 0x0300)
-        hproc = _iodbcdm_getproc( hdbc, en_AllocHandle );
-
-        if( hproc )
-        {
-                CALL_DRIVER ( pstmt->hdbc, hdbc, retcode, hproc,
-                        en_AllocHandle, (
-                        SQL_HANDLE_STMT,
-                        pdbc->dhdbc,
-                        &(pstmt->dhstmt) ) )
-        }
-        else
+  hproc = _iodbcdm_getproc (hdbc, en_AllocHandle);
+
+  if (hproc)
+    {
+      CALL_DRIVER (pstmt->hdbc, hdbc, retcode, hproc, en_AllocHandle, 
+        (SQL_HANDLE_STMT, pdbc->dhdbc, &(pstmt->dhstmt)))
+    }
+  else
 #endif
-        {
-                hproc = _iodbcdm_getproc( hdbc, en_AllocStmt );
 
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        PUSHSQLERR ( pstmt->herr, en_IM001 );
-                        *phstmt = SQL_NULL_HSTMT;
-                        MEM_FREE ( pstmt );
+    {
+      hproc = _iodbcdm_getproc (hdbc, en_AllocStmt);
 
-                        return SQL_ERROR;
-                }
+      if (hproc == SQL_NULL_HPROC)
+       {
+         PUSHSQLERR (pstmt->herr, en_IM001);
+         *phstmt = SQL_NULL_HSTMT;
+         MEM_FREE (pstmt);
 
-                CALL_DRIVER ( hdbc, retcode, hproc, en_AllocStmt, (
-                                pdbc->dhdbc, &(pstmt->dhstmt) ) )
-        }
+         return SQL_ERROR;
+       }
 
-        if( retcode != SQL_SUCCESS
-         && retcode != SQL_SUCCESS_WITH_INFO )
-        {
-                *phstmt = SQL_NULL_HSTMT;
-                MEM_FREE ( pstmt );
+      CALL_DRIVER (hdbc, retcode, hproc, en_AllocStmt, 
+        (pdbc->dhdbc, &(pstmt->dhstmt)))
+    }
 
-                return retcode;
-        }
+  if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
+    {
+      *phstmt = SQL_NULL_HSTMT;
+      MEM_FREE (pstmt);
 
-        /* insert into list */
-        pstmt->next = pdbc->hstmt;
-        pdbc->hstmt = pstmt;
+      return retcode;
+    }
 
-        *phstmt = (HSTMT)pstmt;
+  /* insert into list */
+  pstmt->next = pdbc->hstmt;
+  pdbc->hstmt = pstmt;
 
-        /* state transition */
-        pdbc->state = en_dbc_hstmt;
+  *phstmt = (HSTMT) pstmt;
 
-        return SQL_SUCCESS;
+  /* state transition */
+  pdbc->state = en_dbc_hstmt;
+
+  return SQL_SUCCESS;
 }
 
-RETCODE _iodbcdm_dropstmt( HSTMT hstmt )
+
+RETCODE 
+_iodbcdm_dropstmt (HSTMT hstmt)
 {
-        STMT_t FAR*     pstmt = (STMT_t FAR*)hstmt;
-        STMT_t FAR*     tpstmt;
-        DBC_t  FAR*     pdbc;
-
-        if( hstmt == SQL_NULL_HSTMT )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        pdbc = (DBC_t FAR*)(pstmt->hdbc);
-
-        for(tpstmt  = (STMT_t FAR*)pdbc->hstmt;
-            tpstmt != NULL;
-            tpstmt  = tpstmt->next )
-        {
-                if(tpstmt == pstmt)
-                {
-                        pdbc->hstmt = (HSTMT)pstmt->next;
-                        break;
-                }
-
-                if(tpstmt->next == pstmt)
-                {
-                        tpstmt->next = pstmt->next;
-                        break;
-                }
-        }
-
-        if( tpstmt == NULL )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        _iodbcdm_freesqlerrlist(pstmt->herr);
-        MEM_FREE(hstmt);
-
-        return SQL_SUCCESS;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  STMT_t FAR *tpstmt;
+  DBC_t FAR *pdbc;
+
+  if (hstmt == SQL_NULL_HSTMT)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  pdbc = (DBC_t FAR *) (pstmt->hdbc);
+
+  for (tpstmt = (STMT_t FAR *) pdbc->hstmt;
+      tpstmt != NULL;
+      tpstmt = tpstmt->next)
+    {
+      if (tpstmt == pstmt)
+       {
+         pdbc->hstmt = (HSTMT) pstmt->next;
+         break;
+       }
+
+      if (tpstmt->next == pstmt)
+       {
+         tpstmt->next = pstmt->next;
+         break;
+       }
+    }
+
+  if (tpstmt == NULL)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  _iodbcdm_freesqlerrlist (pstmt->herr);
+  MEM_FREE (hstmt);
+
+  return SQL_SUCCESS;
 }
 
-RETCODE SQL_API SQLFreeStmt (
-                        HSTMT   hstmt,
-                        UWORD   fOption )
+
+RETCODE SQL_API 
+SQLFreeStmt (
+    HSTMT hstmt,
+    UWORD fOption)
 {
-        STMT_t FAR*     pstmt = (STMT_t FAR*)hstmt;
-        STMT_t FAR*     tpstmt;
-        DBC_t  FAR*     pdbc;
-
-        HPROC           hproc = SQL_NULL_HPROC;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        pdbc = (DBC_t FAR*)(pstmt->hdbc);
-
-        /* check option */
-        switch( fOption )
-        {
-                case SQL_DROP:
-                case SQL_CLOSE:
-                case SQL_UNBIND:
-                case SQL_RESET_PARAMS:
-                        break;
-
-                default:
-                        PUSHSQLERR ( pstmt->herr, en_S1092 );
-                        return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pstmt->state >= en_stmt_needdata
-         || pstmt->asyn_on != en_NullProc )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
-
-                return SQL_ERROR;
-        }
-
-        hproc == SQL_NULL_HPROC;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  STMT_t FAR *tpstmt;
+  DBC_t FAR *pdbc;
 
-#if (ODBCVER >= 0x0300)
-        if( fOption == SQL_DROP )
-        {
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_FreeHandle );
-
-                if( hproc )
-                {
-                        CALL_DRIVER( pstmt->hdbc, retcode, hproc, en_FreeHandle, (
-                                SQL_HANDLE_STMT, pstmt->dhstmt )
-                }
-        }
-#endif
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
 
-        if( hproc == SQL_NULL_HPROC )
-        {
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_FreeStmt);
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                        return SQL_ERROR;
-                }
-
-                CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_FreeStmt, (
-                                pstmt->dhstmt, fOption) )
-        }
-
-        if( retcode != SQL_SUCCESS
-         && retcode != SQL_SUCCESS_WITH_INFO )
-        {
-                return retcode;
-        }
-
-        /* state transition */
-        switch( fOption )
-        {
-                case SQL_DROP:
-                        /* delet this object (ignore return) */
-                        _iodbcdm_dropstmt( hstmt );
-                        break;
-
-                case SQL_CLOSE:
-                        pstmt->cursor_state = en_stmt_cursor_no;
-                        /* This means cursor name set by
-                         * SQLSetCursorName() call will also
-                         * be erased.
-                         */
-
-                        switch( pstmt->state )
-                        {
-                                case en_stmt_allocated:
-                                case en_stmt_prepared:
-                                        break;
-
-                                case en_stmt_executed:
-                                case en_stmt_cursoropen:
-                                case en_stmt_fetched:
-                                case en_stmt_xfetched:
-                                        if( pstmt->prep_state )
-                                        {
-                                                pstmt->state =
-                                                en_stmt_prepared;
-                                        }
-                                        else
-                                        {
-                                                pstmt->state =
-                                                en_stmt_allocated;
-                                        }
-                                        break;
-
-                                default:
-                                        break;
-                        }
-                        break;
-
-                case SQL_UNBIND:
-                case SQL_RESET_PARAMS:
-                default:
-                        break;
-        }
-
-        return retcode;
-}
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
 
-RETCODE SQL_API SQLSetStmtOption (
-                        HSTMT   hstmt,
-                        UWORD   fOption,
-                        UDWORD  vParam )
-{
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        int             sqlstat = en_00000;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check option */
-        if(/* fOption < SQL_STMT_OPT_MIN || */
-              fOption > SQL_STMT_OPT_MAX )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1092 );
-
-                return SQL_ERROR;
-        }
-
-        if( fOption == SQL_CONCURRENCY
-         || fOption == SQL_CURSOR_TYPE
-         || fOption == SQL_SIMULATE_CURSOR
-         || fOption == SQL_USE_BOOKMARKS )
-        {
-                if( pstmt->asyn_on != en_NullProc )
-                {
-                        if( pstmt->prep_state )
-                        {
-                                sqlstat = en_S1011;
-                        }
-                }
-                else
-                {
-                        switch( pstmt->state )
-                        {
-                                case en_stmt_prepared:
-                                        sqlstat = en_S1011;
-                                        break;
-
-                                case en_stmt_executed:
-                                case en_stmt_cursoropen:
-                                case en_stmt_fetched:
-                                case en_stmt_xfetched:
-                                        sqlstat = en_24000;
-                                        break;
-
-                                case en_stmt_needdata:
-                                case en_stmt_mustput:
-                                case en_stmt_canput:
-                                        if( pstmt->prep_state )
-                                        {
-                                                sqlstat = en_S1011;
-                                        }
-                                        break;
-
-                                default:
-                                        break;
-                        }
-                }
-        }
-        else
-        {
-                if( pstmt->asyn_on != en_NullProc )
-                {
-                        if( ! pstmt->prep_state )
-                        {
-                                sqlstat = en_S1010;
-                        }
-                }
-                else
-                {
-                        if( pstmt->state >= en_stmt_needdata )
-                        {
-                                sqlstat = en_S1010;
-                        }
-                }
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_SetStmtOption );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SetStmtOption, (
-                        pstmt->dhstmt, fOption, vParam ) )
-
-#if 0
-        retcode = hproc ( pstmt->dhstmt, fOption, vParam );
-#endif
+  pdbc = (DBC_t FAR *) (pstmt->hdbc);
 
-        return retcode;
-}
+  /* check option */
+  switch (fOption)
+     {
+     case SQL_DROP:
+     case SQL_CLOSE:
+     case SQL_UNBIND:
+     case SQL_RESET_PARAMS:
+       break;
 
-RETCODE SQL_API SQLGetStmtOption (
-                        HSTMT   hstmt,
-                        UWORD   fOption,
-                        PTR     pvParam )
-{
-        STMT_t FAR*     pstmt   = (STMT_t*)hstmt;
-        HPROC           hproc;
-        int             sqlstat = en_00000;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check option */
-        if( /* fOption < SQL_STMT_OPT_MIN || */
-               fOption > SQL_STMT_OPT_MAX )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1092 );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pstmt->state >= en_stmt_needdata
-         || pstmt->asyn_on != en_NullProc )
-        {
-                sqlstat = en_S1010;
-        }
-        else
-        {
-                switch( pstmt->state )
-                {
-                        case en_stmt_allocated:
-                        case en_stmt_prepared:
-                        case en_stmt_executed:
-                        case en_stmt_cursoropen:
-                                if( fOption == SQL_ROW_NUMBER
-                                 || fOption == SQL_GET_BOOKMARK )
-                                {
-                                        sqlstat = en_24000;
-                                }
-                                break;
-
-                        default:
-                                break;
-                }
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_GetStmtOption);
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_GetStmtOption, (
-                        pstmt->dhstmt, fOption, pvParam ) )
-
-#if 0
-        retcode = hproc ( pstmt->dhstmt, fOption, pvParam );
-#endif
+     default:
+       PUSHSQLERR (pstmt->herr, en_S1092);
+       return SQL_ERROR;
+     }
 
-        return retcode;
-}
+  /* check state */
+  if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
 
-RETCODE SQL_API SQLCancel ( HSTMT hstmt )
-{
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
+      return SQL_ERROR;
+    }
 
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
+  hproc = SQL_NULL_HPROC;
 
-        /* check argument */
-        /* check state */
+#if (ODBCVER >= 0x0300)
+  if (fOption == SQL_DROP)
+    {
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_FreeHandle);
+
+      if (hproc)
+       {
+         CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_FreeHandle, 
+           (SQL_HANDLE_STMT, pstmt->dhstmt))
+       }
+    }
+#endif
 
-        /* call driver */
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_Cancel );
+  if (hproc == SQL_NULL_HPROC)
+    {
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_FreeStmt);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         PUSHSQLERR (pstmt->herr, en_IM001);
+
+         return SQL_ERROR;
+       }
+
+      CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_FreeStmt, 
+       (pstmt->dhstmt, fOption))
+    }
+
+  if (retcode != SQL_SUCCESS
+      && retcode != SQL_SUCCESS_WITH_INFO)
+    {
+      return retcode;
+    }
+
+  /* state transition */
+  switch (fOption)
+     {
+     case SQL_DROP:
+       /* delet this object (ignore return) */
+       _iodbcdm_dropstmt (hstmt);
+       break;
+
+     case SQL_CLOSE:
+       pstmt->cursor_state = en_stmt_cursor_no;
+       /* This means cursor name set by
+        * SQLSetCursorName() call will also 
+        * be erased.
+        */
+
+       switch (pstmt->state)
+         {
+         case en_stmt_allocated:
+         case en_stmt_prepared:
+           break;
+
+         case en_stmt_executed:
+         case en_stmt_cursoropen:
+         case en_stmt_fetched:
+         case en_stmt_xfetched:
+           if (pstmt->prep_state)
+             {
+               pstmt->state =
+                   en_stmt_prepared;
+             }
+           else
+             {
+               pstmt->state =
+                   en_stmt_allocated;
+             }
+           break;
+
+         default:
+           break;
+         }
+       break;
+
+     case SQL_UNBIND:
+     case SQL_RESET_PARAMS:
+     default:
+       break;
+     }
+
+  return retcode;
+}
 
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
 
-                return SQL_ERROR;
-        }
+RETCODE SQL_API 
+SQLSetStmtOption (
+    HSTMT hstmt,
+    UWORD fOption,
+    UDWORD vParam)
+{
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  int sqlstat = en_00000;
+  RETCODE retcode;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check option */
+  if (                         /* fOption < SQL_STMT_OPT_MIN || */
+      fOption > SQL_STMT_OPT_MAX)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1092);
+
+      return SQL_ERROR;
+    }
+
+  if (fOption == SQL_CONCURRENCY
+      || fOption == SQL_CURSOR_TYPE
+      || fOption == SQL_SIMULATE_CURSOR
+      || fOption == SQL_USE_BOOKMARKS)
+    {
+      if (pstmt->asyn_on != en_NullProc)
+       {
+         if (pstmt->prep_state)
+           {
+             sqlstat = en_S1011;
+           }
+       }
+      else
+       {
+         switch (pstmt->state)
+            {
+            case en_stmt_prepared:
+              sqlstat = en_S1011;
+              break;
+
+            case en_stmt_executed:
+            case en_stmt_cursoropen:
+            case en_stmt_fetched:
+            case en_stmt_xfetched:
+              sqlstat = en_24000;
+              break;
+
+            case en_stmt_needdata:
+            case en_stmt_mustput:
+            case en_stmt_canput:
+              if (pstmt->prep_state)
+                {
+                  sqlstat = en_S1011;
+                }
+              break;
+
+            default:
+              break;
+            }
+       }
+    }
+  else
+    {
+      if (pstmt->asyn_on != en_NullProc)
+       {
+         if (!pstmt->prep_state)
+           {
+             sqlstat = en_S1010;
+           }
+       }
+      else
+       {
+         if (pstmt->state >= en_stmt_needdata)
+           {
+             sqlstat = en_S1010;
+           }
+       }
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_SetStmtOption);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_SetStmtOption,
+    (pstmt->dhstmt, fOption, vParam))
+
+  return retcode;
+}
 
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Cancel, (pstmt->dhstmt) )
 
-#if 0
-        retcode = hproc ( pstmt->dhstmt );
-#endif
+RETCODE SQL_API 
+SQLGetStmtOption (
+    HSTMT hstmt,
+    UWORD fOption,
+    PTR pvParam)
+{
+  STMT_t FAR *pstmt = (STMT_t *) hstmt;
+  HPROC hproc;
+  int sqlstat = en_00000;
+  RETCODE retcode;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check option */
+  if (                         /* fOption < SQL_STMT_OPT_MIN || */
+      fOption > SQL_STMT_OPT_MAX)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1092);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pstmt->state >= en_stmt_needdata
+      || pstmt->asyn_on != en_NullProc)
+    {
+      sqlstat = en_S1010;
+    }
+  else
+    {
+      switch (pstmt->state)
+        {
+        case en_stmt_allocated:
+        case en_stmt_prepared:
+        case en_stmt_executed:
+        case en_stmt_cursoropen:
+          if (fOption == SQL_ROW_NUMBER || fOption == SQL_GET_BOOKMARK)
+            {
+              sqlstat = en_24000;
+            }
+          break;
+
+        default:
+          break;
+        }
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_GetStmtOption);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_GetStmtOption,
+    (pstmt->dhstmt, fOption, pvParam))
+
+  return retcode;
+}
 
-        /* state transition */
-        if( retcode != SQL_SUCCESS
-         && retcode != SQL_SUCCESS_WITH_INFO )
-        {
-                return retcode;
-        }
-
-        switch( pstmt->state )
-        {
-                case en_stmt_allocated:
-                case en_stmt_prepared:
-                        break;
-
-                case en_stmt_executed:
-                        if( pstmt->prep_state )
-                        {
-                                pstmt->state = en_stmt_prepared;
-                        }
-                        else
-                        {
-                                pstmt->state = en_stmt_allocated;
-                        }
-                        break;
-
-                case en_stmt_cursoropen:
-                case en_stmt_fetched:
-                case en_stmt_xfetched:
-                        if( pstmt->prep_state )
-                        {
-                                pstmt->state = en_stmt_prepared;
-                        }
-                        else
-                        {
-                                pstmt->state = en_stmt_allocated;
-                        }
-                        break;
-
-                case en_stmt_needdata:
-                case en_stmt_mustput:
-                case en_stmt_canput:
-                        switch( pstmt->need_on )
-                        {
-                                case en_ExecDirect:
-                                        pstmt->state = en_stmt_allocated;
-                                        break;
-
-                                case en_Execute:
-                                        pstmt->state = en_stmt_prepared;
-                                        break;
-
-                                case en_SetPos:
-                                        pstmt->state = en_stmt_xfetched;
-                                        break;
-
-                                default:
-                                        break;
-                        }
-                        pstmt->need_on = en_NullProc;
-                        break;
-
-                default:
-                        break;
-        }
-
-        return retcode;
+
+RETCODE SQL_API 
+SQLCancel (HSTMT hstmt)
+{
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check argument */
+  /* check state */
+
+  /* call driver */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_Cancel);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_Cancel, 
+    (pstmt->dhstmt))
+
+  /* state transition */
+  if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
+    {
+      return retcode;
+    }
+
+  switch (pstmt->state)
+     {
+     case en_stmt_allocated:
+     case en_stmt_prepared:
+       break;
+
+     case en_stmt_executed:
+       if (pstmt->prep_state)
+        {
+          pstmt->state = en_stmt_prepared;
+        }
+       else
+        {
+          pstmt->state = en_stmt_allocated;
+        }
+       break;
+
+     case en_stmt_cursoropen:
+     case en_stmt_fetched:
+     case en_stmt_xfetched:
+       if (pstmt->prep_state)
+        {
+          pstmt->state = en_stmt_prepared;
+        }
+       else
+        {
+          pstmt->state = en_stmt_allocated;
+        }
+       break;
+
+     case en_stmt_needdata:
+     case en_stmt_mustput:
+     case en_stmt_canput:
+       switch (pstmt->need_on)
+         {
+         case en_ExecDirect:
+           pstmt->state = en_stmt_allocated;
+           break;
+
+         case en_Execute:
+           pstmt->state = en_stmt_prepared;
+           break;
+
+         case en_SetPos:
+           pstmt->state = en_stmt_xfetched;
+           break;
+
+         default:
+           break;
+         }
+       pstmt->need_on = en_NullProc;
+       break;
+
+     default:
+       break;
+     }
+
+  return retcode;
 }
index 99e826e5fa3aec951e1280431cc718248892a8b4..b70b54d047c9c76890a268d8cc53fb4b09d4b769 100644 (file)
@@ -1,48 +1,75 @@
-#ifndef _HSTMT_H
-#define _HSTMT_H
+/*
+ *  hstmt.h
+ *
+ *  $Id$
+ *
+ *  Query statement object management functions
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef        _HSTMT_H
+#define        _HSTMT_H
 
-#include        <config.h>
+#include       <config.h>
 
-#include        <isql.h>
-#include        <isqlext.h>
+#include       <isql.h>
+#include       <isqlext.h>
 
 typedef struct STMT
-{
-        int     type;           /* must be 1st field */
-
-        struct STMT*  next;
-
-        HERR    herr;
-        HDBC    hdbc;           /* back point to connection object */
-        HSTMT   dhstmt;         /* driver's stmt handle */
-
-        int     state;
-        int     cursor_state;
-        int     prep_state;
-        int     asyn_on;        /* async executing which odbc call */
-        int     need_on;        /* which call return SQL_NEED_DATA */
-} STMT_t;
-
-enum    {
-        en_stmt_allocated = 0,
-        en_stmt_prepared,
-        en_stmt_executed,
-        en_stmt_cursoropen,
-        en_stmt_fetched,
-        en_stmt_xfetched,
-        en_stmt_needdata,       /* not call SQLParamData() yet */
-        en_stmt_mustput,        /* not call SQLPutData() yet */
-        en_stmt_canput  /* SQLPutData() called */
-};      /* for statement handle state */
-
-enum    {
-        en_stmt_cursor_no = 0,
-        en_stmt_cursor_named,
-        en_stmt_cursor_opened,
-        en_stmt_cursor_fetched,
-        en_stmt_cursor_xfetched
-};      /* for statement cursor state */
-
-extern  RETCODE _iodbcdm_dropstmt();
+  {
+    int type;                  /* must be 1st field */
 
+    struct STMT *next;
+
+    HERR herr;
+    HDBC hdbc;                 /* back point to connection object */
+    HSTMT dhstmt;              /* driver's stmt handle */
+
+    int state;
+    int cursor_state;
+    int prep_state;
+    int asyn_on;               /* async executing which odbc call */
+    int need_on;               /* which call return SQL_NEED_DATA */
+  }
+STMT_t;
+
+enum
+  {
+    en_stmt_allocated = 0,
+    en_stmt_prepared,
+    en_stmt_executed,
+    en_stmt_cursoropen,
+    en_stmt_fetched,
+    en_stmt_xfetched,
+    en_stmt_needdata,          /* not call SQLParamData() yet */
+    en_stmt_mustput,           /* not call SQLPutData() yet */
+    en_stmt_canput             /* SQLPutData() called */
+  };                           /* for statement handle state */
+
+enum
+  {
+    en_stmt_cursor_no = 0,
+    en_stmt_cursor_named,
+    en_stmt_cursor_opened,
+    en_stmt_cursor_fetched,
+    en_stmt_cursor_xfetched
+  };                           /* for statement cursor state */
+
+extern RETCODE _iodbcdm_dropstmt ();
 #endif
index 34bfdeec6418d656df148896101086d6bb19f54b..938d6ab4436656852ab152fe96e35aa27d59b30f 100644 (file)
-/** Information functions
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-#include       <../iodbc/iodbc.h>
-
-#include       <../iodbc/isql.h>
-#include       <../iodbc/isqlext.h>
-
-#include        <../iodbc/dlproc.h>
-
-#include       <../iodbc/herr.h>
-#include       <../iodbc/henv.h>
-#include       <../iodbc/hdbc.h>
-#include       <../iodbc/hstmt.h>
-
-#include       <../iodbc/itrace.h>
-
-#include        <strings.h>
-#include        <stdio.h>
-
-RETCODE SQL_API SQLDataSources(
-                        HENV            henv,
-                        UWORD           fDir,
-                        UCHAR  FAR*     szDSN,
-                        SWORD           cbDSNMax,
-                        SWORD  FAR*     pcbDSN,
-                        UCHAR  FAR*     szDesc,
-                        SWORD           cbDescMax,
-                        SWORD  FAR*     pcbDesc )
+/*
+ *  info.c
+ *
+ *  $Id$
+ *
+ *  Information functions
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include       <config.h>
+
+#include       <isql.h>
+#include       <isqlext.h>
+
+#include        <dlproc.h>
+
+#include       <herr.h>
+#include       <henv.h>
+#include       <hdbc.h>
+#include       <hstmt.h>
+
+#include       <itrace.h>
+
+#include       <stdio.h>
+#include       <ctype.h>
+
+#define SECT1                  "ODBC Data Sources"
+#define SECT2                  "Default"
+#define MAX_ENTRIES            1024
+
+extern char * _iodbcdm_getinifile (char *buf, int size);
+extern char * _iodbcdm_getkeyvalbydsn (char *dsn, int dsnlen, char *keywd, char *value, int size);
+
+static int 
+stricmp (const char *s1, const char *s2)
 {
-        GENV_t FAR*     genv    = (GENV_t FAR*)henv;
-
-        if( henv == SQL_NULL_HENV )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check argument */
-        if( cbDSNMax < 0 || cbDescMax < 0 )
-        {
-                PUSHSQLERR ( genv->herr, en_S1090 );
-
-                return SQL_ERROR;
-        }
+  int cmp;
+
+  while (*s1)
+    {
+      if ((cmp = toupper (*s1) - toupper (*s2)) != 0)
+       return cmp;
+      s1++;
+      s2++;
+    }
+  return (*s2) ? -1 : 0;
+}
 
-        if( fDir != SQL_FETCH_FIRST
-         && fDir != SQL_FETCH_NEXT )
-        {
-                PUSHSQLERR ( genv->herr, en_S1103 );
+static int 
+SectSorter (const void *p1, const void *p2)
+{
+  char **s1 = (char **) p1;
+  char **s2 = (char **) p2;
 
-                return SQL_ERROR;
-        }
+  return stricmp (*s1, *s2);
+}
 
-        /*************************/
 
-        return SQL_SUCCESS;
+RETCODE SQL_API 
+SQLDataSources (
+    HENV henv,
+    UWORD fDir,
+    UCHAR FAR * szDSN,
+    SWORD cbDSNMax,
+    SWORD FAR * pcbDSN,
+    UCHAR FAR * szDesc,
+    SWORD cbDescMax,
+    SWORD FAR * pcbDesc)
+{
+  GENV_t FAR *genv = (GENV_t FAR *) henv;
+  char *path;
+  char buf[1024];
+  FILE *fp;
+  int i;
+  static int cur_entry = -1;
+  static int num_entries = 0;
+  static char **sect = NULL;
+
+  if (henv == SQL_NULL_HENV)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+  /* check argument */
+  if (cbDSNMax < 0 || cbDescMax < 0)
+    {
+      PUSHSQLERR (genv->herr, en_S1090);
+
+      return SQL_ERROR;
+    }
+  if (fDir != SQL_FETCH_FIRST
+      && fDir != SQL_FETCH_NEXT)
+    {
+      PUSHSQLERR (genv->herr, en_S1103);
+
+      return SQL_ERROR;
+    }
+  if (cur_entry < 0 || fDir == SQL_FETCH_FIRST)
+    {
+      cur_entry = 0;
+      num_entries = 0;
+
+
+      /* 
+       *  Open the odbc.ini file
+       */
+      path = (char *) _iodbcdm_getinifile (buf, sizeof (buf));
+      if ((fp = fopen (path, "r")) == NULL)
+       {
+         return SQL_NO_DATA_FOUND;
+       }
+      /*
+       *  Free old section list
+       */
+      if (sect)
+       {
+         for (i = 0; i < MAX_ENTRIES; i++)
+           if (sect[i])
+             free (sect[i]);
+         free (sect);
+       }
+      if ((sect = (char **) calloc (MAX_ENTRIES, sizeof (char *))) == NULL)
+       {
+         PUSHSQLERR (genv->herr, en_S1011);
+
+         return SQL_ERROR;
+       }
+      /*
+       *  Build a dynamic list of sections
+       */
+      while (1)
+       {
+         char *str, *p;
+
+         str = fgets (buf, sizeof (buf), fp);
+
+         if (str == NULL)
+           break;
+
+         if (*str == '[')
+           {
+             str++;
+             for (p = str; *p; p++)
+               if (*p == ']')
+                 *p = '\0';
+
+             if (!strcmp (str, SECT1))
+               continue;
+             if (!strcmp (str, SECT2))
+               continue;
+
+             /*
+              *  Add this section to the comma separated list
+              */
+             if (num_entries >= MAX_ENTRIES)
+               break;          /* Skip the rest */
+
+             sect[num_entries++] = (char *) strdup (str);
+           }
+       }
+
+      /*
+       *  Sort all entries so we can present a nice list
+       */
+      if (num_entries > 1)
+       qsort (sect, num_entries, sizeof (char *), SectSorter);
+    }
+  /*
+   *  Try to get to the next item
+   */
+  if (cur_entry >= num_entries)
+    {
+      cur_entry = 0;           /* Next time, start all over again */
+      return SQL_NO_DATA_FOUND;
+    }
+  /*
+   *  Copy DSN information 
+   */
+  STRNCPY (szDSN, sect[cur_entry], cbDSNMax);
+
+  /*
+   *  And find the description that goes with this entry
+   */
+  _iodbcdm_getkeyvalbydsn (sect[cur_entry], strlen (sect[cur_entry]),
+      "Description", szDesc, cbDescMax);
+
+  /*
+   *  Next record
+   */
+  cur_entry++;
+
+  return SQL_SUCCESS;
 }
 
-RETCODE SQL_API SQLDrivers(
-                        HENV            henv,
-                        UWORD           fDir,
-                        UCHAR  FAR*     szDrvDesc,
-                        SWORD           cbDrvDescMax,
-                        SWORD  FAR*     pcbDrvDesc,
-                        UCHAR  FAR*     szDrvAttr,
-                        SWORD           cbDrvAttrMax,
-                        SWORD  FAR*     pcbDrvAttr )
+
+RETCODE SQL_API 
+SQLDrivers (
+    HENV henv,
+    UWORD fDir,
+    UCHAR FAR * szDrvDesc,
+    SWORD cbDrvDescMax,
+    SWORD FAR * pcbDrvDesc,
+    UCHAR FAR * szDrvAttr,
+    SWORD cbDrvAttrMax,
+    SWORD FAR * pcbDrvAttr)
 {
-        GENV_t FAR*     genv    = (GENV_t FAR*)henv;
+  GENV_t FAR *genv = (GENV_t FAR *) henv;
 
-        if( henv == SQL_NULL_HENV )
-        {
-                return SQL_INVALID_HANDLE;
-        }
+  if (henv == SQL_NULL_HENV)
+    {
+      return SQL_INVALID_HANDLE;
+    }
 
-        if( cbDrvDescMax <  0
-         || cbDrvAttrMax <  0
-         || cbDrvAttrMax == 1 )
-        {
-                PUSHSQLERR ( genv->herr, en_S1090 );
+  if (cbDrvDescMax < 0 || cbDrvAttrMax < 0 || cbDrvAttrMax == 1)
+    {
+      PUSHSQLERR (genv->herr, en_S1090);
 
-                return SQL_ERROR;
-        }
+      return SQL_ERROR;
+    }
 
-        if( fDir != SQL_FETCH_FIRST
-         || fDir != SQL_FETCH_NEXT )
-        {
-                PUSHSQLERR ( genv->herr, en_S1103 );
+  if (fDir != SQL_FETCH_FIRST || fDir != SQL_FETCH_NEXT)
+    {
+      PUSHSQLERR (genv->herr, en_S1103);
 
-                return SQL_ERROR;
-        }
+      return SQL_ERROR;
+    }
 
-        /*********************/
-        return SQL_SUCCESS;
+/*********************/
+  return SQL_NO_DATA_FOUND;
 }
 
 
-RETCODE SQL_API SQLGetInfo(
-                        HDBC            hdbc,
-                        UWORD           fInfoType,
-                        PTR             rgbInfoValue,
-                        SWORD           cbInfoValueMax,
-                        SWORD FAR*      pcbInfoValue )
+RETCODE SQL_API 
+SQLGetInfo (
+    HDBC hdbc,
+    UWORD fInfoType,
+    PTR rgbInfoValue,
+    SWORD cbInfoValueMax,
+    SWORD FAR * pcbInfoValue)
 {
-        DBC_t  FAR*     pdbc    = (DBC_t FAR*)hdbc;
-        ENV_t  FAR*     penv;
-        STMT_t FAR*     pstmt   = NULL;
-        STMT_t FAR*     tpstmt;
-        HPROC           hproc;
-        RETCODE         retcode = SQL_SUCCESS;
-
-        DWORD           dword;
-        int             size = 0, len = 0;
-        char            buf[16] = { '\0' };
-
-        if( hdbc == SQL_NULL_HDBC
-         || pdbc->henv == SQL_NULL_HENV )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        if( cbInfoValueMax < 0 )
-        {
-                PUSHSQLERR ( pdbc->herr, en_S1090 );
-
-                return SQL_ERROR;
-        }
-
-        if( /* fInfoType < SQL_INFO_FIRST || */
-            ( fInfoType > SQL_INFO_LAST
-           && fInfoType < SQL_INFO_DRIVER_START ) )
-        {
-                PUSHSQLERR ( pdbc->herr, en_S1096 );
-
-                return SQL_ERROR;
-        }
-
-        if( fInfoType == SQL_ODBC_VER )
-        {
-                sprintf( buf, "%02d.%02d",
-                        (ODBCVER)>>8, 0x00FF&(ODBCVER) );
-
-
-                if( rgbInfoValue != NULL
-                 && cbInfoValueMax > 0 )
-                {
-                        len = STRLEN( buf );
-
-                        if( len < cbInfoValueMax - 1 )
-                        {
-                                len = cbInfoValueMax - 1;
-                                PUSHSQLERR ( pdbc->herr, en_01004 );
-
-                                retcode = SQL_SUCCESS_WITH_INFO;
-                        }
-
-                        STRNCPY( rgbInfoValue, buf, len );
-                        ((char FAR*)rgbInfoValue)[len] = '\0';
-                }
-
-                if( pcbInfoValue != NULL )
-                {
-                        *pcbInfoValue = (SWORD)len;
-                }
-
-                return retcode;
-        }
-
-        if( pdbc->state == en_dbc_allocated
-         || pdbc->state == en_dbc_needdata )
-        {
-                PUSHSQLERR ( pdbc->herr, en_08003 );
-
-                return SQL_ERROR;
-        }
-
-        switch( fInfoType )
-        {
-                case SQL_DRIVER_HDBC:
-                        dword = (DWORD)(pdbc->dhdbc);
-                        size  = sizeof(dword);
-                        break;
-
-                case SQL_DRIVER_HENV:
-                        penv  = (ENV_t FAR*)(pdbc->henv);
-                        dword = (DWORD)(penv->dhenv);
-                        size  = sizeof(dword);
-                        break;
-
-                case SQL_DRIVER_HLIB:
-                        penv  = (ENV_t FAR*)(pdbc->henv);
-                        dword = (DWORD)(penv->hdll);
-                        size  = sizeof(dword);
-                        break;
-
-                case SQL_DRIVER_HSTMT:
-                        if( rgbInfoValue != NULL )
-                        {
-                                pstmt = *((STMT_t FAR**)rgbInfoValue);
-                        }
-
-                        for( tpstmt  = (STMT_t FAR*)(pdbc->hstmt);
-                             tpstmt != NULL;
-                             tpstmt  = tpstmt->next )
-                        {
-                                if( tpstmt == pstmt )
-                                {
-                                        break;
-                                }
-                        }
-
-                        if( tpstmt == NULL )
-                        {
-                                PUSHSQLERR ( pdbc->herr, en_S1009 );
-
-                                return SQL_ERROR;
-                        }
-
-                        dword = (DWORD)(pstmt->dhstmt);
-                        size  = sizeof(dword);
-                        break;
-
-                default:
-                        break;
-        }
-
-        if( size )
-        {
-                if( rgbInfoValue != NULL )
-                {
-                        *((DWORD*)rgbInfoValue) = dword;
-                }
-
-                if( pcbInfoValue != NULL )
-                {
-                        *(pcbInfoValue) = (SWORD)size;
-                }
-
-                return SQL_SUCCESS;
-        }
-
-        hproc = _iodbcdm_getproc( hdbc, en_GetInfo );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pdbc->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( hdbc, retcode, hproc, en_GetInfo, (
-                        pdbc->dhdbc,
-                        fInfoType,
-                        rgbInfoValue,
-                        cbInfoValueMax,
-                        pcbInfoValue ) )
-
-#if 0
-        retcode = hproc(pdbc->dhdbc,
-                        fInfoType,
-                        rgbInfoValue,
-                        cbInfoValueMax,
-                        pcbInfoValue );
-#endif
-
-        if( retcode == SQL_ERROR
-         && fInfoType == SQL_DRIVER_ODBC_VER )
-        {
-                STRCPY( buf, "01.00" );
-
-                if( rgbInfoValue != NULL
-                 && cbInfoValueMax > 0 )
-                {
-                        len = STRLEN( buf );
-
-                        if( len < cbInfoValueMax - 1 )
-                        {
-                                len = cbInfoValueMax - 1;
-                                PUSHSQLERR ( pdbc->herr, en_01004 );
-                        }
-
-                        STRNCPY( rgbInfoValue, buf, len );
-                        ((char FAR*)rgbInfoValue)[len] = '\0';
-                }
-
-                if( pcbInfoValue != NULL )
-                {
-                        *pcbInfoValue = (SWORD)len;
-                }
-
-                /* what should we return in this case ???? */
-        }
-
-        return retcode;
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  ENV_t FAR *penv;
+  STMT_t FAR *pstmt = NULL;
+  STMT_t FAR *tpstmt;
+  HPROC hproc;
+  RETCODE retcode = SQL_SUCCESS;
+
+  DWORD dword;
+  int size = 0, len = 0;
+  char buf[16] = {'\0'};
+
+  if (hdbc == SQL_NULL_HDBC || pdbc->henv == SQL_NULL_HENV)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  if (cbInfoValueMax < 0)
+    {
+      PUSHSQLERR (pdbc->herr, en_S1090);
+
+      return SQL_ERROR;
+    }
+
+  if (                         /* fInfoType < SQL_INFO_FIRST || */
+      (fInfoType > SQL_INFO_LAST
+         && fInfoType < SQL_INFO_DRIVER_START))
+    {
+      PUSHSQLERR (pdbc->herr, en_S1096);
+
+      return SQL_ERROR;
+    }
+
+  if (fInfoType == SQL_ODBC_VER)
+    {
+      sprintf (buf, "%02d.%02d",
+         (ODBCVER) >> 8, 0x00FF & (ODBCVER));
+
+
+      if (rgbInfoValue != NULL
+         && cbInfoValueMax > 0)
+       {
+         len = STRLEN (buf);
+
+         if (len < cbInfoValueMax - 1)
+           {
+             len = cbInfoValueMax - 1;
+             PUSHSQLERR (pdbc->herr, en_01004);
+
+             retcode = SQL_SUCCESS_WITH_INFO;
+           }
+
+         STRNCPY (rgbInfoValue, buf, len);
+         ((char FAR *) rgbInfoValue)[len] = '\0';
+       }
+
+      if (pcbInfoValue != NULL)
+       {
+         *pcbInfoValue = (SWORD) len;
+       }
+
+      return retcode;
+    }
+
+  if (pdbc->state == en_dbc_allocated || pdbc->state == en_dbc_needdata)
+    {
+      PUSHSQLERR (pdbc->herr, en_08003);
+
+      return SQL_ERROR;
+    }
+
+  switch (fInfoType)
+     {
+     case SQL_DRIVER_HDBC:
+       dword = (DWORD) (pdbc->dhdbc);
+       size = sizeof (dword);
+       break;
+
+     case SQL_DRIVER_HENV:
+       penv = (ENV_t FAR *) (pdbc->henv);
+       dword = (DWORD) (penv->dhenv);
+       size = sizeof (dword);
+       break;
+
+     case SQL_DRIVER_HLIB:
+       penv = (ENV_t FAR *) (pdbc->henv);
+       dword = (DWORD) (penv->hdll);
+       size = sizeof (dword);
+       break;
+
+     case SQL_DRIVER_HSTMT:
+       if (rgbInfoValue != NULL)
+        {
+          pstmt = *((STMT_t FAR **) rgbInfoValue);
+        }
+
+       for (tpstmt = (STMT_t FAR *) (pdbc->hstmt);
+          tpstmt != NULL;
+          tpstmt = tpstmt->next)
+        {
+          if (tpstmt == pstmt)
+            {
+              break;
+            }
+        }
+
+       if (tpstmt == NULL)
+        {
+          PUSHSQLERR (pdbc->herr, en_S1009);
+
+          return SQL_ERROR;
+        }
+
+       dword = (DWORD) (pstmt->dhstmt);
+       size = sizeof (dword);
+       break;
+
+     default:
+       break;
+     }
+
+  if (size)
+    {
+      if (rgbInfoValue != NULL)
+       {
+         *((DWORD *) rgbInfoValue) = dword;
+       }
+
+      if (pcbInfoValue != NULL)
+       {
+         *(pcbInfoValue) = (SWORD) size;
+       }
+
+      return SQL_SUCCESS;
+    }
+
+  hproc = _iodbcdm_getproc (hdbc, en_GetInfo);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pdbc->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (hdbc, retcode, hproc, en_GetInfo,
+    (pdbc->dhdbc, fInfoType, rgbInfoValue, cbInfoValueMax, pcbInfoValue))
+
+  if (retcode == SQL_ERROR
+      && fInfoType == SQL_DRIVER_ODBC_VER)
+    {
+      STRCPY (buf, "01.00");
+
+      if (rgbInfoValue != NULL
+         && cbInfoValueMax > 0)
+       {
+         len = STRLEN (buf);
+
+         if (len < cbInfoValueMax - 1)
+           {
+             len = cbInfoValueMax - 1;
+             PUSHSQLERR (pdbc->herr, en_01004);
+           }
+
+         STRNCPY (rgbInfoValue, buf, len);
+         ((char FAR *) rgbInfoValue)[len] = '\0';
+       }
+
+      if (pcbInfoValue != NULL)
+       {
+         *pcbInfoValue = (SWORD) len;
+       }
+
+      /* what should we return in this case ???? */
+    }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLGetFunctions(
-                        HDBC            hdbc,
-                        UWORD           fFunc,
-                        UWORD FAR*      pfExists )
+
+RETCODE SQL_API 
+SQLGetFunctions (
+    HDBC hdbc,
+    UWORD fFunc,
+    UWORD FAR * pfExists)
 {
-        DBC_t FAR*      pdbc    = (DBC_t FAR*)hdbc;
-        HPROC           hproc;
-        RETCODE         retcode;
-
-        if( hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        if( fFunc > SQL_EXT_API_LAST )
-        {
-                PUSHSQLERR ( pdbc->herr, en_S1095 );
-
-                return SQL_ERROR;
-        }
-
-        if( pdbc->state == en_dbc_allocated
-         || pdbc->state == en_dbc_needdata )
-        {
-                PUSHSQLERR ( pdbc->herr, en_S1010 );
-
-                return SQL_ERROR;
-        }
-
-        if( pfExists == NULL )
-        {
-                return SQL_SUCCESS;
-        }
-
-        hproc = _iodbcdm_getproc( hdbc, en_GetFunctions );
-
-        if( hproc != SQL_NULL_HPROC )
-        {
-                CALL_DRIVER ( hdbc, retcode, hproc, en_GetFunctions, (
-                                pdbc->dhdbc, fFunc, pfExists ) )
-
-#if 0
-                retcode = hproc( pdbc->dhdbc, fFunc, pfExists );
-#endif
-                return retcode;
-        }
-
-        if( fFunc == SQL_API_SQLSETPARAM )
-        {
-                fFunc = SQL_API_SQLBINDPARAMETER;
-        }
-
-        if( fFunc != SQL_API_ALL_FUNCTIONS )
-        {
-                hproc = _iodbcdm_getproc( hdbc, fFunc );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        *pfExists = (UWORD)0;
-                }
-                else
-                {
-                        *pfExists = (UWORD)1;
-                }
-
-                return SQL_SUCCESS;
-        }
-
-        for( fFunc=0 ; fFunc < 100; fFunc ++ )
-        {
-                hproc = _iodbcdm_getproc( hdbc, fFunc );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        pfExists[fFunc] = (UWORD)0;
-                }
-                else
-                {
-                        pfExists[fFunc] = (UWORD)1;
-                }
-        }
-
-        return SQL_SUCCESS;
+  DBC_t FAR *pdbc = (DBC_t FAR *) hdbc;
+  HPROC hproc;
+  RETCODE retcode;
+
+  if (hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  if (fFunc > SQL_EXT_API_LAST)
+    {
+      PUSHSQLERR (pdbc->herr, en_S1095);
+
+      return SQL_ERROR;
+    }
+
+  if (pdbc->state == en_dbc_allocated
+      || pdbc->state == en_dbc_needdata)
+    {
+      PUSHSQLERR (pdbc->herr, en_S1010);
+
+      return SQL_ERROR;
+    }
+
+  if (pfExists == NULL)
+    {
+      return SQL_SUCCESS;
+    }
+
+  hproc = _iodbcdm_getproc (hdbc, en_GetFunctions);
+
+  if (hproc != SQL_NULL_HPROC)
+    {
+      CALL_DRIVER (hdbc, retcode, hproc, en_GetFunctions,
+       (pdbc->dhdbc, fFunc, pfExists))
+
+      return retcode;
+    }
+
+  if (fFunc == SQL_API_SQLSETPARAM)
+    {
+      fFunc = SQL_API_SQLBINDPARAMETER;
+    }
+
+  if (fFunc != SQL_API_ALL_FUNCTIONS)
+    {
+      hproc = _iodbcdm_getproc (hdbc, fFunc);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         *pfExists = (UWORD) 0;
+       }
+      else
+       {
+         *pfExists = (UWORD) 1;
+       }
+
+      return SQL_SUCCESS;
+    }
+
+  for (fFunc = 0; fFunc < 100; fFunc++)
+    {
+      hproc = _iodbcdm_getproc (hdbc, fFunc);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         pfExists[fFunc] = (UWORD) 0;
+       }
+      else
+       {
+         pfExists[fFunc] = (UWORD) 1;
+       }
+    }
+
+  return SQL_SUCCESS;
 }
index df5df0860f2d559c325c71b20bc39a9a308fc77f..5774241d4c0b272a4547f485ed507a1c56f39d39 100644 (file)
-#ifndef _INTRINSIC_SQL_H
-# define _INTRINSIC_SQL_H
-
-#ifndef OS2
-typedef unsigned char           UCHAR;
-#endif
-typedef long int                SDWORD;
-typedef short int               SWORD;
-typedef unsigned long int       UDWORD;
-typedef unsigned short int      UWORD;
-typedef unsigned int            UINT;
-
-#ifndef FAR
-#  define FAR
+/*
+ *  isql.h
+ *
+ *  $Id$
+ *
+ *  iODBC defines
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef _ISQL_H
+#define _ISQL_H
+
+#ifdef WIN32
+#define SQL_API                                __stdcall
+#else
+#define FAR
+#define EXPORT
+#define CALLBACK
+#define SQL_API                                EXPORT CALLBACK
+
+typedef void *HWND;
 #endif
-#ifndef NEAR                                                                    
-#  define NEAR                                                                 
-#endif       
-#ifndef HANDLE                                                                  
-  typedef int                          HANDLE;                                 
-  #endif          
-#ifndef HGLOBAL                                                                  
-  typedef HANDLE                          HGLOBAL;                                 
-  #endif          
-#ifndef SQL_INDEX_OTHER                                                                  
-#define SQL_INDEX_OTHER                 3
-  #endif          
-
-#  ifndef BOOL
-#    define BOOL                       int
-#  endif
-#  ifndef CHAR
-#    define CHAR                       char
-#  endif
-#  ifndef FALSE
-#    define FALSE                      (0 != 0)
-#  endif
-#  ifndef HWND
-#    define HWND                       int
-#  endif
-#  ifndef SQLHWND
-#    define SQLHWND                       int
-#  endif
-#  ifndef LONG
-#    define LONG                       long
-#  endif
-#  ifndef PASCAL
-#    define PASCAL
-#  endif
-#  ifndef SHORT
-#    define SHORT                      short
-#  endif
-#  ifndef SQL_API
-#    define SQL_API
-#  endif
-#  ifndef SQL_LOCAL_API
-#    define SQL_LOCAL_API
-#  endif
-#  ifndef TRUE
-#    define TRUE                       (0 == 0)
-#  endif
-
-typedef struct tagDATE_STRUCT
-{
-SWORD    year;
-UWORD   month;
-UWORD   day;
-} DATE_STRUCT;
 
-typedef struct tagTIME_STRUCT
+typedef unsigned char UCHAR;
+typedef long int SDWORD;
+typedef short int SWORD;
+typedef unsigned long int UDWORD;
+typedef unsigned short int UWORD;
+
+typedef void FAR *PTR;
+typedef void FAR *HENV;
+typedef void FAR *HDBC;
+typedef void FAR *HSTMT;
+
+typedef signed short RETCODE;
+#define SQLRETURN      RETCODE
+
+
+#define ODBCVER                                0x0250
+
+#define SQL_MAX_MESSAGE_LENGTH         512
+#define SQL_MAX_DSN_LENGTH             32
+
+/*
+ *  Function return codes
+ */
+#define SQL_INVALID_HANDLE             (-2)
+#define SQL_ERROR                      (-1)
+#define SQL_SUCCESS                    0
+#define SQL_SUCCESS_WITH_INFO          1
+#define SQL_NO_DATA_FOUND              100
+
+/*
+ *  Standard SQL datatypes, using ANSI type numbering
+ */
+#define SQL_CHAR                       1
+#define SQL_NUMERIC                    2
+#define SQL_DECIMAL                    3
+#define SQL_INTEGER                    4
+#define SQL_SMALLINT                   5
+#define SQL_FLOAT                      6
+#define SQL_REAL                       7
+#define SQL_DOUBLE                     8
+#define SQL_VARCHAR                    12
+
+#define SQL_TYPE_MIN                   SQL_CHAR
+#define SQL_TYPE_NULL                  0
+#define SQL_TYPE_MAX                   SQL_VARCHAR
+
+/*
+ *  C datatype to SQL datatype mapping
+ */
+#define SQL_C_CHAR                     SQL_CHAR
+#define SQL_C_LONG                     SQL_INTEGER
+#define SQL_C_SHORT                    SQL_SMALLINT
+#define SQL_C_FLOAT                    SQL_REAL
+#define SQL_C_DOUBLE                   SQL_DOUBLE
+#define SQL_C_DEFAULT                  99
+
+/*
+ *  NULL status constants.
+ */
+#define SQL_NO_NULLS                   0
+#define SQL_NULLABLE                   1
+#define SQL_NULLABLE_UNKNOWN           2
+
+/*
+ *  Special length values
+ */
+#define SQL_NULL_DATA                  (-1)
+#define SQL_DATA_AT_EXEC               (-2)
+#define SQL_NTS                        (-3)
+
+/*
+ *  SQLFreeStmt
+ */
+#define SQL_CLOSE                      0
+#define SQL_DROP                       1
+#define SQL_UNBIND                     2
+#define SQL_RESET_PARAMS               3
+
+/*
+ *  SQLTransact
+ */
+#define SQL_COMMIT                     0
+#define SQL_ROLLBACK                   1
+
+/*
+ *  SQLColAttributes
+ */
+#define SQL_COLUMN_COUNT               0
+#define SQL_COLUMN_NAME                        1
+#define SQL_COLUMN_TYPE                        2
+#define SQL_COLUMN_LENGTH              3
+#define SQL_COLUMN_PRECISION           4
+#define SQL_COLUMN_SCALE               5
+#define SQL_COLUMN_DISPLAY_SIZE                6
+#define SQL_COLUMN_NULLABLE            7
+#define SQL_COLUMN_UNSIGNED            8
+#define SQL_COLUMN_MONEY               9
+#define SQL_COLUMN_UPDATABLE           10
+#define SQL_COLUMN_AUTO_INCREMENT      11
+#define SQL_COLUMN_CASE_SENSITIVE      12
+#define SQL_COLUMN_SEARCHABLE          13
+#define SQL_COLUMN_TYPE_NAME           14
+#define SQL_COLUMN_TABLE_NAME          15
+#define SQL_COLUMN_OWNER_NAME          16
+#define SQL_COLUMN_QUALIFIER_NAME      17
+#define SQL_COLUMN_LABEL               18
+
+#define SQL_COLATT_OPT_MAX             SQL_COLUMN_LABEL
+#define        SQL_COLATT_OPT_MIN              SQL_COLUMN_COUNT
+#define SQL_COLUMN_DRIVER_START                1000
+
+/*
+ *  SQLColAttributes : SQL_COLUMN_UPDATABLE
+ */
+#define SQL_ATTR_READONLY              0
+#define SQL_ATTR_WRITE                 1
+#define SQL_ATTR_READWRITE_UNKNOWN     2
+
+/*
+ *  SQLColAttributes : SQL_COLUMN_SEARCHABLE
+ */
+#define SQL_UNSEARCHABLE               0
+#define SQL_LIKE_ONLY                  1
+#define SQL_ALL_EXCEPT_LIKE            2
+#define SQL_SEARCHABLE                 3
+
+/*
+ *  NULL Handles
+ */
+#define SQL_NULL_HENV                  0
+#define SQL_NULL_HDBC                  0
+#define SQL_NULL_HSTMT                 0
+
+
+/*
+ *  Function Prototypes
+ */
+#ifdef __cplusplus
+extern "C"
 {
-UWORD   hour;
-UWORD   minute;
-UWORD   second;
-} TIME_STRUCT;
-
-typedef struct tagTIMESTAMP_STRUCT
-{
-SWORD    year;
-UWORD   month;
-UWORD   day;
-UWORD   hour;
-UWORD   minute;
-UWORD   second;
-UDWORD    fraction;
-} TIMESTAMP_STRUCT;
-
-
-
-typedef UCHAR FAR*               PTR,
-             FAR*               SQLPTR;
-
-typedef void FAR*               HENV,
-             FAR*               SQLHENV;
-typedef void FAR*               HDBC,
-             FAR*               SQLHDBC;
-typedef void FAR*               HSTMT,
-             FAR*               SQLHSTMT;
-typedef SDWORD                  SQLINTEGER;  
-typedef signed short            RETCODE;
-typedef UCHAR                   SQLCHAR;
-typedef UWORD                   SQLUSMALLINT;
-typedef PTR              SQLPOINTER;
-typedef SWORD                   SQLSMALLINT;
-typedef UDWORD                  SQLUINTEGER;
-
-#  ifdef WIN32
-#    define SQL_API                     __stdcall
-#  else
-#    define SQL_API                     /* giovanni EXPORT CALLBACK */
-#  endif
-#  ifdef OS2
-#    ifdef BCPP
-#      define _Optlink
-#      define _System                  _syscall
-#    endif
-#    undef  SQL_API
-#    define SQL_API                    _System
-#  endif
-
-
-#ifndef ODBCVER
-# define ODBCVER                        0x0200
 #endif
 
-# define SQL_MAX_MESSAGE_LENGTH         512
-# define SQL_MAX_DSN_LENGTH             32
-
-/* return code */
-# define SQL_INVALID_HANDLE             (-2)
-# define SQL_ERROR                      (-1)
-# define SQL_SUCCESS                    0
-# define SQL_SUCCESS_WITH_INFO          1
-# define SQL_NO_DATA_FOUND              100
-
-/* standard SQL datatypes (agree with ANSI type numbering) */
-# define SQL_CHAR                       1
-# define SQL_NUMERIC                    2
-# define SQL_DECIMAL                    3
-# define SQL_INTEGER                    4
-# define SQL_SMALLINT                   5
-# define SQL_FLOAT                      6
-# define SQL_REAL                       7
-# define SQL_DOUBLE                     8
-# define SQL_VARCHAR                    12
-
-# define SQL_TYPE_MIN                   SQL_CHAR
-# define SQL_TYPE_NULL                  0
-# define SQL_TYPE_MAX                   SQL_VARCHAR
-
-/* C to SQL datatype mapping */
-# define SQL_C_CHAR                     SQL_CHAR
-# define SQL_C_LONG                     SQL_INTEGER
-# define SQL_C_SHORT                    SQL_SMALLINT
-# define SQL_C_FLOAT                    SQL_REAL
-# define SQL_C_DOUBLE                   SQL_DOUBLE
-# define SQL_C_DEFAULT                  99
-
-# define SQL_NO_NULLS                   0
-# define SQL_NULLABLE                   1
-# define SQL_NULLABLE_UNKNOWN           2
-
-/* some special length values */
-# define SQL_NULL_DATA                  (-1)
-# define SQL_DATA_AT_EXEC               (-2)
-# define SQL_NTS                        (-3)
-
-/* SQLFreeStmt flag values */
-# define SQL_CLOSE                      0
-# define SQL_DROP                       1
-# define SQL_UNBIND                     2
-# define SQL_RESET_PARAMS               3
-
-/* SQLTransact flag values */
-# define SQL_COMMIT                     0
-# define SQL_ROLLBACK                   1
-
-/* SQLColAttributes flag values */
-# define SQL_COLUMN_COUNT               0
-# define SQL_COLUMN_LABEL               18
-# define SQL_COLATT_OPT_MAX             SQL_COLUMN_LABEL
-# define SQL_COLUMN_DRIVER_START        1000
-
-# define SQL_COLATT_OPT_MIN             SQL_COLUMN_COUNT
-
-/* Null handles */
-# define SQL_NULL_HENV                  0
-# define SQL_NULL_HDBC                  0
-# define SQL_NULL_HSTMT                 0
-
+  RETCODE SQL_API SQLAllocConnect (HENV henv, HDBC FAR * phdbc);
+  RETCODE SQL_API SQLAllocEnv (HENV FAR * phenv);
+  RETCODE SQL_API SQLAllocStmt (HDBC hdbc, HSTMT FAR * phstmt);
+  RETCODE SQL_API SQLBindCol (HSTMT hstmt, UWORD icol, SWORD fCType,
+      PTR rgbValue, SDWORD cbValueMax, SDWORD FAR * pcbValue);
+  RETCODE SQL_API SQLCancel (HSTMT hstmt);
+  RETCODE SQL_API SQLColAttributes (HSTMT hstmt, UWORD icol, UWORD fDescType,
+      PTR rgbDesc, SWORD cbDescMax, SWORD FAR * pcbDesc, SDWORD FAR * pfDesc);
+  RETCODE SQL_API SQLConnect (HDBC hdbc, UCHAR FAR * szDSN, SWORD cbDSN,
+      UCHAR FAR * szUID, SWORD cbUID, UCHAR FAR * szAuthStr, SWORD cbAuthStr);
+  RETCODE SQL_API SQLDescribeCol (HSTMT hstmt, UWORD icol,
+      UCHAR FAR * szColName, SWORD cbColNameMax, SWORD FAR * pcbColName,
+      SWORD FAR * pfSqlType, UDWORD FAR * pcbColDef, SWORD FAR * pibScale,
+      SWORD FAR * pfNullable);
+  RETCODE SQL_API SQLDisconnect (HDBC hdbc);
+  RETCODE SQL_API SQLError (HENV henv, HDBC hdbc, HSTMT hstmt,
+      UCHAR FAR * szSqlState, SDWORD FAR * pfNativeError, UCHAR FAR * szErrorMsg,
+      SWORD cbErrorMsgMax, SWORD FAR * pcbErrorMsg);
+  RETCODE SQL_API SQLExecDirect (HSTMT hstmt, UCHAR FAR * szSqlStr,
+      SDWORD cbSqlStr);
+  RETCODE SQL_API SQLExecute (HSTMT hstmt);
+  RETCODE SQL_API SQLFetch (HSTMT hstmt);
+  RETCODE SQL_API SQLFreeConnect (HDBC hdbc);
+  RETCODE SQL_API SQLFreeEnv (HENV henv);
+  RETCODE SQL_API SQLFreeStmt (HSTMT hstmt, UWORD fOption);
+  RETCODE SQL_API SQLGetCursorName (HSTMT hstmt, UCHAR FAR * szCursor,
+      SWORD cbCursorMax, SWORD FAR * pcbCursor);
+  RETCODE SQL_API SQLNumResultCols (HSTMT hstmt, SWORD FAR * pccol);
+  RETCODE SQL_API SQLPrepare (HSTMT hstmt, UCHAR FAR * szSqlStr,
+      SDWORD cbSqlStr);
+  RETCODE SQL_API SQLRowCount (HSTMT hstmt, SDWORD FAR * pcrow);
+  RETCODE SQL_API SQLSetCursorName (HSTMT hstmt, UCHAR FAR * szCursor,
+      SWORD cbCursor);
+  RETCODE SQL_API SQLTransact (HENV henv, HDBC hdbc, UWORD fType);
+
+/*
+ *  Depreciated ODBC 1.0 function - Use SQLBindParameter
+ */
+  RETCODE SQL_API SQLSetParam (HSTMT hstmt, UWORD ipar, SWORD fCType,
+      SWORD fSqlType, UDWORD cbColDef, SWORD ibScale, PTR rgbValue,
+      SDWORD FAR * pcbValue);
+
+#ifdef __cplusplus
+}
 #endif
 
+#endif
index 26e9ee5b5fc473584d64483b5955c02658ec0864..a08298853486473e9ec0cdff6c000dc95a7b751a 100644 (file)
-#ifndef _INTRINSIC_SQLEXT_H
-# define _INTRINSIC_SQLEXT_H
-
-# include       <isql.h>
-
-# define SQL_STILL_EXECUTING            2
-# define SQL_NEED_DATA                  99
-
-/* extend SQL datatypes */
-# define SQL_DATE                       9
-# define SQL_TIME                       10
-# define SQL_TIMESTAMP                  11
-# define SQL_LONGVARCHAR                (-1)
-# define SQL_BINARY                     (-2)
-# define SQL_VARBINARY                  (-3)
-# define SQL_LONGVARBINARY              (-4)
-# define SQL_BIGINT                     (-5)
-# define SQL_TINYINT                    (-6)
-# define SQL_BIT                        (-7)    /* conflict with SQL3 ??? */
-# define SQL_TYPE_DRIVER_START          (-80)
-
-/* C to SQL datatype mapping */
-# define SQL_C_DATE                     SQL_DATE
-# define SQL_C_TIME                     SQL_TIME
-# define SQL_C_TIMESTAMP                SQL_TIMESTAMP
-# define SQL_C_BINARY                   SQL_BINARY
-# define SQL_C_BIT                      SQL_BIT
-# define SQL_C_TINYINT                  SQL_TINYINT
-
-# define SQL_SIGNED_OFFSET              (-20)
-# define SQL_UNSIGNED_OFFSET            (-22)
-
-# define SQL_C_SLONG                    (SQL_C_LONG  + SQL_SIGNED_OFFSET)
-# define SQL_C_SSHORT                   (SQL_C_SHORT + SQL_SIGNED_OFFSET)
-# define SQL_C_STINYINT                 (SQL_TINYINT + SQL_SIGNED_OFFSET)
-# define SQL_C_ULONG                    (SQL_C_LONG  + SQL_UNSIGNED_OFFSET)
-# define SQL_C_USHORT                   (SQL_C_SHORT + SQL_UNSIGNED_OFFSET)
-# define SQL_C_UTINYINT                 (SQL_TINYINT + SQL_UNSIGNED_OFFSET)
-# define SQL_C_BOOKMARK                 SQL_C_ULONG
-
-# if defined(SQL_TYPE_MIN)
-#   undef  SQL_TYPE_MIN
-#   define SQL_TYPE_MIN                 SQL_BIT
-/* Note:If SQL_BIT uses SQL3 value (i.e. 14) then,
- *      SQL_TYPE_MIN need to be defined as SQL_TINYINT
- *      (i.e. -6).
- */
-# endif
-
-# define SQL_ALL_TYPES                  0
-
-/* SQLDriverConnect flag values */
-# define SQL_DRIVER_NOPROMPT            0
-# define SQL_DRIVER_COMPLETE            1
-# define SQL_DRIVER_PROMPT              2
-# define SQL_DRIVER_COMPLETE_REQUIRED   3
-
-/* SQLSetParam extensions */
-# define SQL_DEFAULT_PARAM              (-5)
-# define SQL_IGNORE                     (-6)
-
-/* function number for SQLGetFunctions and _iodbcdm_getproc */
-# define SQL_API_SQLALLOCCONNECT        1
-# define SQL_API_SQLALLOCENV            2
-# define SQL_API_SQLALLOCSTMT           3
-# define SQL_API_SQLBINDCOL             4
-# define SQL_API_SQLCANCEL              5
-# define SQL_API_SQLCOLATTRIBUTES       6
-# define SQL_API_SQLCONNECT             7
-# define SQL_API_SQLDESCRIBECOL         8
-# define SQL_API_SQLDISCONNECT          9
-# define SQL_API_SQLERROR               10
-# define SQL_API_SQLEXECDIRECT          11
-# define SQL_API_SQLEXECUTE             12
-# define SQL_API_SQLFETCH               13
-# define SQL_API_SQLFREECONNECT         14
-# define SQL_API_SQLFREEENV             15
-# define SQL_API_SQLFREESTMT            16
-# define SQL_API_SQLGETCURSORNAME       17
-# define SQL_API_SQLNUMRESULTCOLS       18
-# define SQL_API_SQLPREPARE             19
-# define SQL_API_SQLROWCOUNT            20
-# define SQL_API_SQLSETCURSORNAME       21
-# define SQL_API_SQLSETPARAM            22
-# define SQL_API_SQLTRANSACT            23
-
-# define SQL_NUM_FUNCTIONS              23
-
-# define SQL_EXT_API_START              40
-
-# define SQL_API_SQLCOLUMNS             40
-
-# define SQL_API_SQLDRIVERCONNECT       41
-# define SQL_API_SQLGETCONNECTOPTION    42
-# define SQL_API_SQLGETDATA             43
-# define SQL_API_SQLGETFUNCTIONS        44
-# define SQL_API_SQLGETINFO             45
-# define SQL_API_SQLGETSTMTOPTION       46
-# define SQL_API_SQLGETTYPEINFO         47
-# define SQL_API_SQLPARAMDATA           48
-# define SQL_API_SQLPUTDATA             49
-# define SQL_API_SQLSETCONNECTOPTION    50
-# define SQL_API_SQLSETSTMTOPTION       51
-# define SQL_API_SQLSPECIALCOLUMNS      52
-# define SQL_API_SQLSTATISTICS          53
-# define SQL_API_SQLTABLES              54
-
-# define SQL_API_SQLBROWSECONNECT       55
-# define SQL_API_SQLCOLUMNPRIVILEGES    56
-# define SQL_API_SQLDATASOURCES         57
-# define SQL_API_SQLDESCRIBEPARAM       58
-# define SQL_API_SQLEXTENDEDFETCH       59
-# define SQL_API_SQLFOREIGNKEYS         60
-# define SQL_API_SQLMORERESULTS         61
-# define SQL_API_SQLNATIVESQL           62
-# define SQL_API_SQLNUMPARAMS           63
-# define SQL_API_SQLPARAMOPTIONS        64
-# define SQL_API_SQLPRIMARYKEYS         65
-# define SQL_API_SQLPROCEDURECOLUMNS    66
-# define SQL_API_SQLPROCEDURES          67
-# define SQL_API_SQLSETPOS              68
-# define SQL_API_SQLSETSCROLLOPTIONS    69
-# define SQL_API_SQLTABLEPRIVILEGES     70
-
-# define SQL_API_SQLDRIVERS             71
-# define SQL_API_SQLBINDPARAMETER       72
-# define SQL_EXT_API_LAST               SQL_API_SQLBINDPARAMETER
-
-# define SQL_API_ALL_FUNCTIONS          0
-
-/* SQLGetInfo infor number */
-# define SQL_INFO_FIRST                 0
-# define SQL_DRIVER_HDBC                3
-# define SQL_DRIVER_HENV                4
-# define SQL_DRIVER_HSTMT               5
-# define SQL_DRIVER_NAME                6
-# define SQL_ODBC_VER                   10
-# define SQL_CURSOR_COMMIT_BEHAVIOR     23
-# define SQL_CURSOR_ROLLBACK_BEHAVIOR   24
-# define SQL_DEFAULT_TXN_ISOLATION      26
-
-# define SQL_TXN_ISOLATION_OPTION       72
-# define SQL_NON_NULLABLE_COLUMNS       75
-
-# define SQL_DRIVER_HLIB                76
-# define SQL_DRIVER_ODBC_VER            77
-
-# define SQL_QUALIFIER_LOCATION         114
-
-# define SQL_INFO_LAST                  SQL_QUALIFIER_LOCATION
-
-# define SQL_INFO_DRIVER_START          1000
-
-
-/* SQL_TXN_ISOLATION_OPTION masks */
-# define SQL_TXN_READ_UNCOMMITTED       0x00000001L
-# define SQL_TXN_READ_COMMITTED         0x00000002L
-# define SQL_TXN_REPEATABLE_READ        0x00000004L
-# define SQL_TXN_SERIALIZABLE           0x00000008L
-# define SQL_TXN_VERSIONING             0x00000010L
-
-/* SQL_CURSOR_COMMIT_BEHAVIOR and SQL_CURSOR_ROLLBACK_BEHAVIOR values */
-
-# define SQL_CB_DELETE                  0x0000
-# define SQL_CB_CLOSE                   0x0001
-# define SQL_CB_PRESERVE                0x0002
-
-/* options for SQLGetStmtOption/SQLSetStmtOption */
-# define SQL_QUERY_TIMEOUT              0
-# define SQL_MAX_ROWS                   1
-# define SQL_NOSCAN                     2
-# define SQL_MAX_LENGTH                 3
-# define SQL_ASYNC_ENABLE               4
-# define SQL_BIND_TYPE                  5
-# define SQL_CURSOR_TYPE                6
-# define SQL_CONCURRENCY                7
-# define SQL_KEYSET_SIZE                8
-# define SQL_ROWSET_SIZE                9
-# define SQL_SIMULATE_CURSOR            10
-# define SQL_RETRIEVE_DATA              11
-# define SQL_USE_BOOKMARKS              12
-# define SQL_GET_BOOKMARK               13      /* GetStmtOption Only */
-# define SQL_ROW_NUMBER                 14      /* GetStmtOption Only */
-# define SQL_STMT_OPT_MAX               SQL_ROW_NUMBER
-
-# define SQL_STMT_OPT_MIN               SQL_QUERY_TIMEOUT
-
-
-/* SQL_QUERY_TIMEOUT options */
-# define SQL_QUERY_TIMEOUT_DEFAULT      0UL
-
-/* SQL_MAX_ROWS options */
-# define SQL_MAX_ROWS_DEFAULT           0UL
-
-/* SQL_MAX_LENGTH options */
-# define SQL_MAX_LENGTH_DEFAULT         0UL
-
-/* SQL_CONCURRENCY options */
-# define SQL_CONCUR_READ_ONLY           1
-# define SQL_CONCUR_LOCK                2
-# define SQL_CONCUR_ROWVER              3
-# define SQL_CONCUR_VALUES              4
-
-/* SQL_CURSOR_TYPE options */
-#define SQL_CURSOR_FORWARD_ONLY                0UL
+/*
+ *
+ *  isqlext.h
+ *
+ *  $Id$
+ *
+ *  iODBC defines (ext)
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef        _ISQLEXT_H
+# define _ISQLEXT_H
+
+#include <isql.h>
+
+/*
+ *  Generic constants
+ */
+#define SQL_MAX_OPTION_STRING_LENGTH   256
+
+/*
+ *  Additional return codes
+ */
+#define SQL_STILL_EXECUTING            2
+#define SQL_NEED_DATA                  99
+
+/*
+ *  SQL extended datatypes
+ */
+#define SQL_DATE                       9
+#define SQL_TIME                       10
+#define SQL_TIMESTAMP                  11
+#define SQL_LONGVARCHAR                        (-1)
+#define SQL_BINARY                     (-2)
+#define SQL_VARBINARY                  (-3)
+#define SQL_LONGVARBINARY              (-4)
+#define SQL_BIGINT                     (-5)
+#define SQL_TINYINT                    (-6)
+#define SQL_BIT                        (-7)
+
+#define SQL_INTERVAL_YEAR              (-80)
+#define SQL_INTERVAL_MONTH             (-81)
+#define SQL_INTERVAL_YEAR_TO_MONTH     (-82)
+#define SQL_INTERVAL_DAY               (-83)
+#define SQL_INTERVAL_HOUR              (-84)
+#define SQL_INTERVAL_MINUTE            (-85)
+#define SQL_INTERVAL_SECOND            (-86)
+#define SQL_INTERVAL_DAY_TO_HOUR       (-87)
+#define SQL_INTERVAL_DAY_TO_MINUTE     (-88)
+#define SQL_INTERVAL_DAY_TO_SECOND     (-89)
+#define SQL_INTERVAL_HOUR_TO_MINUTE    (-90)
+#define SQL_INTERVAL_HOUR_TO_SECOND    (-91)
+#define SQL_INTERVAL_MINUTE_TO_SECOND  (-92)
+#define SQL_UNICODE                    (-95)
+
+#define SQL_TYPE_DRIVER_START          SQL_INTERVAL_YEAR
+#define SQL_TYPE_DRIVER_END            SQL_UNICODE
+
+#define SQL_SIGNED_OFFSET              (-20)
+#define SQL_UNSIGNED_OFFSET            (-22)
+
+/*
+ *  C datatype to SQL datatype mapping
+ */
+#define SQL_C_DATE                     SQL_DATE
+#define SQL_C_TIME                     SQL_TIME
+#define SQL_C_TIMESTAMP                SQL_TIMESTAMP
+#define SQL_C_BINARY                   SQL_BINARY
+#define SQL_C_BIT                      SQL_BIT
+#define SQL_C_TINYINT                  SQL_TINYINT
+#define SQL_C_SLONG                    SQL_C_LONG+SQL_SIGNED_OFFSET
+#define SQL_C_SSHORT                   SQL_C_SHORT+SQL_SIGNED_OFFSET
+#define SQL_C_STINYINT                 SQL_TINYINT+SQL_SIGNED_OFFSET
+#define SQL_C_ULONG                    SQL_C_LONG+SQL_UNSIGNED_OFFSET
+#define SQL_C_USHORT                   SQL_C_SHORT+SQL_UNSIGNED_OFFSET
+#define SQL_C_UTINYINT                 SQL_TINYINT+SQL_UNSIGNED_OFFSET
+#define SQL_C_BOOKMARK                 SQL_C_ULONG
+
+/*
+ *  Extended data types override sql.h defined
+ */
+#undef SQL_TYPE_MIN
+#define SQL_TYPE_MIN           SQL_BIT
+#define SQL_ALL_TYPES          0
+
+/*
+ *  SQL portable types for C - DATE, TIME, TIMESTAMP
+ */
+typedef struct _DATE_STRUCT
+  {
+    SWORD year;
+    UWORD month;
+    UWORD day;
+  }
+DATE_STRUCT;
+
+typedef struct _TIME_STRUCT
+  {
+    UWORD hour;
+    UWORD minute;
+    UWORD second;
+  }
+TIME_STRUCT;
+
+typedef struct _TIMESTAMP_STRUCT
+  {
+    SWORD year;
+    UWORD month;
+    UWORD day;
+    UWORD hour;
+    UWORD minute;
+    UWORD second;
+    UDWORD fraction;
+  }
+TIMESTAMP_STRUCT;
+
+typedef unsigned long int      BOOKMARK;
+
+/*
+ * ----------------------------------------------------------------------
+ *  Level 1 Functions
+ * ----------------------------------------------------------------------
+ */
+
+/*
+ *  SQLDriverConnect
+ */
+#define SQL_DRIVER_NOPROMPT            0
+#define SQL_DRIVER_COMPLETE            1
+#define SQL_DRIVER_PROMPT              2
+#define SQL_DRIVER_COMPLETE_REQUIRED   3
+
+/*
+ *  SQLGetData
+ */
+#define SQL_NO_TOTAL                   (-4)
+
+/*
+ *  SQLBindParameter
+ */
+#define SQL_DEFAULT_PARAM              (-5)
+#define SQL_IGNORE                     (-6)
+#define SQL_LEN_DATA_AT_EXEC_OFFSET    (-100)
+#define SQL_LEN_DATA_AT_EXEC(length)   (-length+SQL_LEN_DATA_AT_EXEC_OFFSET)
+
+/*
+ *  SQLGetFunctions
+ */
+#define SQL_API_SQLALLOCCONNECT                1       /* Core Functions */
+#define SQL_API_SQLALLOCENV            2
+#define SQL_API_SQLALLOCSTMT           3
+#define SQL_API_SQLBINDCOL             4
+#define SQL_API_SQLCANCEL              5
+#define SQL_API_SQLCOLATTRIBUTES       6
+#define SQL_API_SQLCONNECT             7
+#define SQL_API_SQLDESCRIBECOL         8
+#define SQL_API_SQLDISCONNECT          9
+#define SQL_API_SQLERROR               10
+#define SQL_API_SQLEXECDIRECT          11
+#define SQL_API_SQLEXECUTE             12
+#define SQL_API_SQLFETCH               13
+#define SQL_API_SQLFREECONNECT         14
+#define SQL_API_SQLFREEENV             15
+#define SQL_API_SQLFREESTMT            16
+#define SQL_API_SQLGETCURSORNAME       17
+#define SQL_API_SQLNUMRESULTCOLS       18
+#define SQL_API_SQLPREPARE             19
+#define SQL_API_SQLROWCOUNT            20
+#define SQL_API_SQLSETCURSORNAME       21
+#define SQL_API_SQLSETPARAM            22
+#define SQL_API_SQLTRANSACT            23
+
+#define SQL_NUM_FUNCTIONS              23
+
+#define SQL_EXT_API_START              40
+
+#define SQL_API_SQLCOLUMNS             40      /* Level 1 Functions */
+#define SQL_API_SQLDRIVERCONNECT       41
+#define SQL_API_SQLGETCONNECTOPTION    42
+#define SQL_API_SQLGETDATA             43
+#define SQL_API_SQLGETFUNCTIONS                44
+#define SQL_API_SQLGETINFO             45
+#define SQL_API_SQLGETSTMTOPTION       46
+#define SQL_API_SQLGETTYPEINFO         47
+#define SQL_API_SQLPARAMDATA           48
+#define SQL_API_SQLPUTDATA             49
+#define SQL_API_SQLSETCONNECTOPTION    50
+#define SQL_API_SQLSETSTMTOPTION       51
+#define SQL_API_SQLSPECIALCOLUMNS      52
+#define SQL_API_SQLSTATISTICS          53
+#define SQL_API_SQLTABLES              54
+
+#define SQL_API_SQLBROWSECONNECT       55      /* Level 2 Functions */
+#define SQL_API_SQLCOLUMNPRIVILEGES    56
+#define SQL_API_SQLDATASOURCES         57
+#define SQL_API_SQLDESCRIBEPARAM       58
+#define SQL_API_SQLEXTENDEDFETCH       59
+#define SQL_API_SQLFOREIGNKEYS         60
+#define SQL_API_SQLMORERESULTS         61
+#define SQL_API_SQLNATIVESQL           62
+#define SQL_API_SQLNUMPARAMS           63
+#define SQL_API_SQLPARAMOPTIONS                64
+#define SQL_API_SQLPRIMARYKEYS         65
+#define SQL_API_SQLPROCEDURECOLUMNS    66
+#define SQL_API_SQLPROCEDURES          67
+#define SQL_API_SQLSETPOS              68
+#define SQL_API_SQLSETSCROLLOPTIONS    69
+#define SQL_API_SQLTABLEPRIVILEGES     70
+
+#define SQL_API_SQLDRIVERS             71
+#define SQL_API_SQLBINDPARAMETER       72
+#define SQL_EXT_API_LAST               SQL_API_SQLBINDPARAMETER
+
+#define SQL_API_ALL_FUNCTIONS          0
+
+#define SQL_NUM_EXTENSIONS (SQL_EXT_API_LAST-SQL_EXT_API_START+1)
+
+/*
+ *  SQLGetInfo
+ */
+#define SQL_INFO_FIRST                 0
+#define SQL_ACTIVE_CONNECTIONS         0
+#define SQL_ACTIVE_STATEMENTS          1
+#define SQL_DATA_SOURCE_NAME           2
+#define SQL_DRIVER_HDBC                        3
+#define SQL_DRIVER_HENV                        4
+#define SQL_DRIVER_HSTMT               5
+#define SQL_DRIVER_NAME                        6
+#define SQL_DRIVER_VER                 7
+#define SQL_FETCH_DIRECTION            8
+#define SQL_ODBC_API_CONFORMANCE       9
+#define SQL_ODBC_VER                   10
+#define SQL_ROW_UPDATES                        11
+#define SQL_ODBC_SAG_CLI_CONFORMANCE   12
+#define SQL_SERVER_NAME                        13
+#define SQL_SEARCH_PATTERN_ESCAPE      14
+#define SQL_ODBC_SQL_CONFORMANCE       15
+#define SQL_DBMS_NAME                  17
+#define SQL_DBMS_VER                   18
+#define SQL_ACCESSIBLE_TABLES          19
+#define SQL_ACCESSIBLE_PROCEDURES      20
+#define SQL_PROCEDURES                 21
+#define SQL_CONCAT_NULL_BEHAVIOR       22
+#define SQL_CURSOR_COMMIT_BEHAVIOR     23
+#define SQL_CURSOR_ROLLBACK_BEHAVIOR   24
+#define SQL_DATA_SOURCE_READ_ONLY      25
+#define SQL_DEFAULT_TXN_ISOLATION      26
+#define SQL_EXPRESSIONS_IN_ORDERBY     27
+#define SQL_IDENTIFIER_CASE            28
+#define SQL_IDENTIFIER_QUOTE_CHAR      29
+#define SQL_MAX_COLUMN_NAME_LEN                30
+#define SQL_MAX_CURSOR_NAME_LEN                31
+#define SQL_MAX_OWNER_NAME_LEN         32
+#define SQL_MAX_PROCEDURE_NAME_LEN     33
+#define SQL_MAX_QUALIFIER_NAME_LEN     34
+#define SQL_MAX_TABLE_NAME_LEN         35
+#define SQL_MULT_RESULT_SETS           36
+#define SQL_MULTIPLE_ACTIVE_TXN                37
+#define SQL_OUTER_JOINS                        38
+#define SQL_OWNER_TERM                 39
+#define SQL_PROCEDURE_TERM             40
+#define SQL_QUALIFIER_NAME_SEPARATOR   41
+#define SQL_QUALIFIER_TERM             42
+#define SQL_SCROLL_CONCURRENCY         43
+#define SQL_SCROLL_OPTIONS             44
+#define SQL_TABLE_TERM                 45
+#define SQL_TXN_CAPABLE                        46
+#define SQL_USER_NAME                  47
+#define SQL_CONVERT_FUNCTIONS          48
+#define SQL_NUMERIC_FUNCTIONS          49
+#define SQL_STRING_FUNCTIONS           50
+#define SQL_SYSTEM_FUNCTIONS           51
+#define SQL_TIMEDATE_FUNCTIONS         52
+#define SQL_CONVERT_BIGINT             53
+#define SQL_CONVERT_BINARY             54
+#define SQL_CONVERT_BIT                        55
+#define SQL_CONVERT_CHAR               56
+#define SQL_CONVERT_DATE               57
+#define SQL_CONVERT_DECIMAL            58
+#define SQL_CONVERT_DOUBLE             59
+#define SQL_CONVERT_FLOAT              60
+#define SQL_CONVERT_INTEGER            61
+#define SQL_CONVERT_LONGVARCHAR                62
+#define SQL_CONVERT_NUMERIC            63
+#define SQL_CONVERT_REAL               64
+#define SQL_CONVERT_SMALLINT           65
+#define SQL_CONVERT_TIME               66
+#define SQL_CONVERT_TIMESTAMP          67
+#define SQL_CONVERT_TINYINT            68
+#define SQL_CONVERT_VARBINARY          69
+#define SQL_CONVERT_VARCHAR            70
+#define SQL_CONVERT_LONGVARBINARY      71
+#define SQL_TXN_ISOLATION_OPTION       72
+#define SQL_ODBC_SQL_OPT_IEF           73
+
+/*
+ *  ODBC SDK 1.0 Additions
+ */
+#define SQL_CORRELATION_NAME           74
+#define SQL_NON_NULLABLE_COLUMNS       75
+
+/*
+ *  ODBC SDK 2.0 Additions
+ */
+#define SQL_DRIVER_HLIB                76
+#define SQL_DRIVER_ODBC_VER            77
+#define SQL_LOCK_TYPES                 78
+#define SQL_POS_OPERATIONS             79
+#define SQL_POSITIONED_STATEMENTS      80
+#define SQL_GETDATA_EXTENSIONS         81
+#define SQL_BOOKMARK_PERSISTENCE       82
+#define SQL_STATIC_SENSITIVITY         83
+#define SQL_FILE_USAGE                 84
+#define SQL_NULL_COLLATION             85
+#define SQL_ALTER_TABLE                86
+#define SQL_COLUMN_ALIAS               87
+#define SQL_GROUP_BY                   88
+#define SQL_KEYWORDS                   89
+#define SQL_ORDER_BY_COLUMNS_IN_SELECT 90
+#define SQL_OWNER_USAGE                91
+#define SQL_QUALIFIER_USAGE            92
+#define SQL_QUOTED_IDENTIFIER_CASE     93
+#define SQL_SPECIAL_CHARACTERS         94
+#define SQL_SUBQUERIES                 95
+#define SQL_UNION                      96
+#define SQL_MAX_COLUMNS_IN_GROUP_BY    97
+#define SQL_MAX_COLUMNS_IN_INDEX       98
+#define SQL_MAX_COLUMNS_IN_ORDER_BY    99
+#define SQL_MAX_COLUMNS_IN_SELECT      100
+#define SQL_MAX_COLUMNS_IN_TABLE       101
+#define SQL_MAX_INDEX_SIZE             102
+#define SQL_MAX_ROW_SIZE_INCLUDES_LONG 103
+#define SQL_MAX_ROW_SIZE               104
+#define SQL_MAX_STATEMENT_LEN          105
+#define SQL_MAX_TABLES_IN_SELECT       106
+#define SQL_MAX_USER_NAME_LEN          107
+#define SQL_MAX_CHAR_LITERAL_LEN       108
+#define SQL_TIMEDATE_ADD_INTERVALS     109
+#define SQL_TIMEDATE_DIFF_INTERVALS    110
+#define SQL_NEED_LONG_DATA_LEN         111
+#define SQL_MAX_BINARY_LITERAL_LEN     112
+#define SQL_LIKE_ESCAPE_CLAUSE         113
+#define SQL_QUALIFIER_LOCATION         114
+
+/*
+ *  ODBC SDK 2.01 Additions
+ */
+#define SQL_OJ_CAPABILITIES            65003   /* Temp value until ODBC 3.0 */
+
+#define SQL_INFO_LAST                  SQL_QUALIFIER_LOCATION
+#define SQL_INFO_DRIVER_START          1000
+
+
+/*
+ *  SQL_CONVERT_* bitmask values
+ */
+#define SQL_CVT_CHAR                   0x00000001L
+#define SQL_CVT_NUMERIC                0x00000002L
+#define SQL_CVT_DECIMAL                0x00000004L
+#define SQL_CVT_INTEGER                0x00000008L
+#define SQL_CVT_SMALLINT               0x00000010L
+#define SQL_CVT_FLOAT                  0x00000020L
+#define SQL_CVT_REAL                   0x00000040L
+#define SQL_CVT_DOUBLE                 0x00000080L
+#define SQL_CVT_VARCHAR                0x00000100L
+#define SQL_CVT_LONGVARCHAR            0x00000200L
+#define SQL_CVT_BINARY                 0x00000400L
+#define SQL_CVT_VARBINARY              0x00000800L
+#define SQL_CVT_BIT                    0x00001000L
+#define SQL_CVT_TINYINT                0x00002000L
+#define SQL_CVT_BIGINT                 0x00004000L
+#define SQL_CVT_DATE                   0x00008000L
+#define SQL_CVT_TIME                   0x00010000L
+#define SQL_CVT_TIMESTAMP              0x00020000L
+#define SQL_CVT_LONGVARBINARY          0x00040000L
+
+/*
+ *  SQL_CONVERT_FUNCTIONS
+ */
+#define SQL_FN_CVT_CONVERT             0x00000001L
+
+/*
+ *  SQL_STRING_FUNCTIONS
+ */
+#define SQL_FN_STR_CONCAT              0x00000001L
+#define SQL_FN_STR_INSERT              0x00000002L
+#define SQL_FN_STR_LEFT                0x00000004L
+#define SQL_FN_STR_LTRIM               0x00000008L
+#define SQL_FN_STR_LENGTH              0x00000010L
+#define SQL_FN_STR_LOCATE              0x00000020L
+#define SQL_FN_STR_LCASE               0x00000040L
+#define SQL_FN_STR_REPEAT              0x00000080L
+#define SQL_FN_STR_REPLACE             0x00000100L
+#define SQL_FN_STR_RIGHT               0x00000200L
+#define SQL_FN_STR_RTRIM               0x00000400L
+#define SQL_FN_STR_SUBSTRING           0x00000800L
+#define SQL_FN_STR_UCASE               0x00001000L
+#define SQL_FN_STR_ASCII               0x00002000L
+#define SQL_FN_STR_CHAR                0x00004000L
+#define SQL_FN_STR_DIFFERENCE          0x00008000L
+#define SQL_FN_STR_LOCATE_2            0x00010000L
+#define SQL_FN_STR_SOUNDEX             0x00020000L
+#define SQL_FN_STR_SPACE               0x00040000L
+
+/*
+ *  SQL_NUMERIC_FUNCTIONS
+ */
+#define SQL_FN_NUM_ABS                 0x00000001L
+#define SQL_FN_NUM_ACOS                0x00000002L
+#define SQL_FN_NUM_ASIN                0x00000004L
+#define SQL_FN_NUM_ATAN                0x00000008L
+#define SQL_FN_NUM_ATAN2               0x00000010L
+#define SQL_FN_NUM_CEILING             0x00000020L
+#define SQL_FN_NUM_COS                 0x00000040L
+#define SQL_FN_NUM_COT                 0x00000080L
+#define SQL_FN_NUM_EXP                 0x00000100L
+#define SQL_FN_NUM_FLOOR               0x00000200L
+#define SQL_FN_NUM_LOG                 0x00000400L
+#define SQL_FN_NUM_MOD                 0x00000800L
+#define SQL_FN_NUM_SIGN                        0x00001000L
+#define SQL_FN_NUM_SIN                 0x00002000L
+#define SQL_FN_NUM_SQRT                        0x00004000L
+#define SQL_FN_NUM_TAN                 0x00008000L
+#define SQL_FN_NUM_PI                  0x00010000L
+#define SQL_FN_NUM_RAND                        0x00020000L
+#define SQL_FN_NUM_DEGREES             0x00040000L
+#define SQL_FN_NUM_LOG10               0x00080000L
+#define SQL_FN_NUM_POWER               0x00100000L
+#define SQL_FN_NUM_RADIANS             0x00200000L
+#define SQL_FN_NUM_ROUND               0x00400000L
+#define SQL_FN_NUM_TRUNCATE            0x00800000L
+
+/*
+ *  SQL_TIMEDATE_FUNCTIONS
+ */
+#define SQL_FN_TD_NOW                  0x00000001L
+#define SQL_FN_TD_CURDATE              0x00000002L
+#define SQL_FN_TD_DAYOFMONTH           0x00000004L
+#define SQL_FN_TD_DAYOFWEEK            0x00000008L
+#define SQL_FN_TD_DAYOFYEAR            0x00000010L
+#define SQL_FN_TD_MONTH                0x00000020L
+#define SQL_FN_TD_QUARTER              0x00000040L
+#define SQL_FN_TD_WEEK                 0x00000080L
+#define SQL_FN_TD_YEAR                 0x00000100L
+#define SQL_FN_TD_CURTIME              0x00000200L
+#define SQL_FN_TD_HOUR                 0x00000400L
+#define SQL_FN_TD_MINUTE               0x00000800L
+#define SQL_FN_TD_SECOND               0x00001000L
+#define SQL_FN_TD_TIMESTAMPADD         0x00002000L
+#define SQL_FN_TD_TIMESTAMPDIFF        0x00004000L
+#define SQL_FN_TD_DAYNAME              0x00008000L
+#define SQL_FN_TD_MONTHNAME            0x00010000L
+
+/*
+ *  SQL_SYSTEM_FUNCTIONS
+ */
+#define SQL_FN_SYS_USERNAME            0x00000001L
+#define SQL_FN_SYS_DBNAME              0x00000002L
+#define SQL_FN_SYS_IFNULL              0x00000004L
+
+/*
+ *  SQL_TIMEDATE_ADD_INTERVALS
+ *  SQL_TIMEDATE_DIFF_INTERVALS
+ */
+#define SQL_FN_TSI_FRAC_SECOND         0x00000001L
+#define SQL_FN_TSI_SECOND              0x00000002L
+#define SQL_FN_TSI_MINUTE              0x00000004L
+#define SQL_FN_TSI_HOUR                0x00000008L
+#define SQL_FN_TSI_DAY                 0x00000010L
+#define SQL_FN_TSI_WEEK                0x00000020L
+#define SQL_FN_TSI_MONTH               0x00000040L
+#define SQL_FN_TSI_QUARTER             0x00000080L
+#define SQL_FN_TSI_YEAR                0x00000100L
+
+/*
+ *  SQL_ODBC_API_CONFORMANCE
+ */
+#define SQL_OAC_NONE                   0x0000
+#define SQL_OAC_LEVEL1                 0x0001
+#define SQL_OAC_LEVEL2                 0x0002
+
+/*
+ * SQL_ODBC_SAG_CLI_CONFORMANCE
+ */
+#define SQL_OSCC_NOT_COMPLIANT         0x0000
+#define SQL_OSCC_COMPLIANT             0x0001
+
+/*
+ *  SQL_ODBC_SQL_CONFORMANCE
+ */
+#define SQL_OSC_MINIMUM                0x0000
+#define SQL_OSC_CORE                   0x0001
+#define SQL_OSC_EXTENDED               0x0002
+
+/*
+ *  SQL_CONCAT_NULL_BEHAVIOR
+ */
+#define SQL_CB_NULL                    0x0000
+#define SQL_CB_NON_NULL                        0x0001
+
+/*
+ *  SQL_CURSOR_COMMIT_BEHAVIOR
+ *  SQL_CURSOR_ROLLBACK_BEHAVIOR
+ */
+#define SQL_CB_DELETE                  0x0000
+#define SQL_CB_CLOSE                   0x0001
+#define SQL_CB_PRESERVE                        0x0002
+
+/*
+ *  SQL_IDENTIFIER_CASE
+ */
+#define SQL_IC_UPPER                   0x0001
+#define SQL_IC_LOWER                   0x0002
+#define SQL_IC_SENSITIVE               0x0003
+#define SQL_IC_MIXED                   0x0004
+
+/*
+ *  SQL_TXN_CAPABLE
+ */
+#define SQL_TC_NONE                    0x0000
+#define SQL_TC_DML                     0x0001
+#define SQL_TC_ALL                     0x0002
+#define SQL_TC_DDL_COMMIT              0x0003
+#define SQL_TC_DDL_IGNORE              0x0004
+
+/*
+ *  SQL_SCROLL_OPTIONS
+ */
+#define SQL_SO_FORWARD_ONLY            0x00000001L
+#define SQL_SO_KEYSET_DRIVEN           0x00000002L
+#define SQL_SO_DYNAMIC                 0x00000004L
+#define SQL_SO_MIXED                   0x00000008L
+#define SQL_SO_STATIC                  0x00000010L
+
+/*
+ * SQL_SCROLL_CONCURRENCY
+ */
+#define SQL_SCCO_READ_ONLY             0x00000001L
+#define SQL_SCCO_LOCK                  0x00000002L
+#define SQL_SCCO_OPT_ROWVER            0x00000004L
+#define SQL_SCCO_OPT_VALUES            0x00000008L
+
+/*
+ *  SQL_FETCH_DIRECTION
+ */
+#define SQL_FD_FETCH_NEXT              0x00000001L
+#define SQL_FD_FETCH_FIRST             0x00000002L
+#define SQL_FD_FETCH_LAST              0x00000004L
+#define SQL_FD_FETCH_PRIOR             0x00000008L
+#define SQL_FD_FETCH_ABSOLUTE          0x00000010L
+#define SQL_FD_FETCH_RELATIVE          0x00000020L
+#define SQL_FD_FETCH_RESUME            0x00000040L
+#define SQL_FD_FETCH_BOOKMARK          0x00000080L
+
+/*
+ *  SQL_TXN_ISOLATION_OPTION
+ */
+#define SQL_TXN_READ_UNCOMMITTED       0x00000001L
+#define SQL_TXN_READ_COMMITTED         0x00000002L
+#define SQL_TXN_REPEATABLE_READ        0x00000004L
+#define SQL_TXN_SERIALIZABLE           0x00000008L
+#define SQL_TXN_VERSIONING             0x00000010L
+
+/*
+ *  SQL_CORRELATION_NAME
+ */
+#define SQL_CN_NONE                    0x0000
+#define SQL_CN_DIFFERENT               0x0001
+#define SQL_CN_ANY                     0x0002
+
+/*
+ * SQL_NON_NULLABLE_COLUMNS
+ */
+#define SQL_NNC_NULL                   0x0000
+#define SQL_NNC_NON_NULL               0x0001
+
+/*
+ *  SQL_NULL_COLLATION
+ */
+#define SQL_NC_HIGH                    0x0000
+#define SQL_NC_LOW                     0x0001
+#define SQL_NC_START                   0x0002
+#define SQL_NC_END                     0x0004
+
+/*
+ * SQL_FILE_USAGE
+ */
+#define SQL_FILE_NOT_SUPPORTED         0x0000
+#define SQL_FILE_TABLE                 0x0001
+#define SQL_FILE_QUALIFIER             0x0002
+
+/*
+ *  SQL_GETDATA_EXTENSIONS
+ */
+#define SQL_GD_ANY_COLUMN              0x00000001L
+#define SQL_GD_ANY_ORDER               0x00000002L
+#define SQL_GD_BLOCK                   0x00000004L
+#define SQL_GD_BOUND                   0x00000008L
+
+/*
+ * SQL_ALTER_TABLE
+ */
+#define SQL_AT_ADD_COLUMN              0x00000001L
+#define SQL_AT_DROP_COLUMN             0x00000002L
+
+/*
+ *  SQL_POSITIONED_STATEMENTS
+ */
+#define SQL_PS_POSITIONED_DELETE       0x00000001L
+#define SQL_PS_POSITIONED_UPDATE       0x00000002L
+#define SQL_PS_SELECT_FOR_UPDATE       0x00000004L
+
+/*
+ *  SQL_GROUP_BY
+ */
+#define SQL_GB_NOT_SUPPORTED           0x0000
+#define SQL_GB_GROUP_BY_EQUALS_SELECT  0x0001
+#define SQL_GB_GROUP_BY_CONTAINS_SELECT        0x0002
+#define SQL_GB_NO_RELATION             0x0003
+
+/*
+ *  SQL_OWNER_USAGE
+ */
+#define SQL_OU_DML_STATEMENTS          0x00000001L
+#define SQL_OU_PROCEDURE_INVOCATION    0x00000002L
+#define SQL_OU_TABLE_DEFINITION        0x00000004L
+#define SQL_OU_INDEX_DEFINITION        0x00000008L
+#define SQL_OU_PRIVILEGE_DEFINITION    0x00000010L
+
+/*
+ * SQL_QUALIFIER_USAGE
+ */
+#define SQL_QU_DML_STATEMENTS          0x00000001L
+#define SQL_QU_PROCEDURE_INVOCATION    0x00000002L
+#define SQL_QU_TABLE_DEFINITION        0x00000004L
+#define SQL_QU_INDEX_DEFINITION        0x00000008L
+#define SQL_QU_PRIVILEGE_DEFINITION    0x00000010L
+
+/*
+ *  SQL_SUBQUERIES
+ */
+#define SQL_SQ_COMPARISON              0x00000001L
+#define SQL_SQ_EXISTS                  0x00000002L
+#define SQL_SQ_IN                      0x00000004L
+#define SQL_SQ_QUANTIFIED              0x00000008L
+#define SQL_SQ_CORRELATED_SUBQUERIES   0x00000010L
+
+/*
+ *  SQL_UNION
+ */
+#define SQL_U_UNION                    0x00000001L
+#define SQL_U_UNION_ALL                        0x00000002L
+
+/*
+ *  SQL_BOOKMARK_PERSISTENCE
+ */
+#define SQL_BP_CLOSE                   0x00000001L
+#define SQL_BP_DELETE                  0x00000002L
+#define SQL_BP_DROP                    0x00000004L
+#define SQL_BP_TRANSACTION             0x00000008L
+#define SQL_BP_UPDATE                  0x00000010L
+#define SQL_BP_OTHER_HSTMT             0x00000020L
+#define SQL_BP_SCROLL                  0x00000040L
+
+/*
+ * SQL_STATIC_SENSITIVITY
+ */
+#define SQL_SS_ADDITIONS               0x00000001L
+#define SQL_SS_DELETIONS               0x00000002L
+#define SQL_SS_UPDATES                 0x00000004L
+
+/*
+ *  SQL_LOCK_TYPES
+ */
+#define SQL_LCK_NO_CHANGE              0x00000001L
+#define SQL_LCK_EXCLUSIVE              0x00000002L
+#define SQL_LCK_UNLOCK                 0x00000004L
+
+/*
+ *  SQL_POS_OPERATIONS
+ */
+#define SQL_POS_POSITION               0x00000001L
+#define SQL_POS_REFRESH                0x00000002L
+#define SQL_POS_UPDATE                 0x00000004L
+#define SQL_POS_DELETE                 0x00000008L
+#define SQL_POS_ADD                    0x00000010L
+
+/*
+ *  SQL_QUALIFIER_LOCATION
+ */
+#define SQL_QL_START                   0x0001L
+#define SQL_QL_END                     0x0002L
+
+/*
+ *  SQL_OJ_CAPABILITIES
+ */
+#define SQL_OJ_LEFT                    0x00000001L
+#define SQL_OJ_RIGHT                   0x00000002L
+#define SQL_OJ_FULL                    0x00000004L
+#define SQL_OJ_NESTED                  0x00000008L
+#define SQL_OJ_NOT_ORDERED             0x00000010L
+#define SQL_OJ_INNER                   0x00000020L
+#define SQL_OJ_ALL_COMPARISON_OPS      0x00000040L
+
+/*
+ *  SQLGetStmtOption/SQLSetStmtOption
+ */
+#define SQL_QUERY_TIMEOUT              0
+#define SQL_MAX_ROWS                   1
+#define SQL_NOSCAN                     2
+#define SQL_MAX_LENGTH                 3
+#define SQL_ASYNC_ENABLE               4
+#define SQL_BIND_TYPE                  5
+#define SQL_CURSOR_TYPE                6
+#define SQL_CONCURRENCY                7
+#define SQL_KEYSET_SIZE                8
+#define SQL_ROWSET_SIZE                9
+#define SQL_SIMULATE_CURSOR            10
+#define SQL_RETRIEVE_DATA              11
+#define SQL_USE_BOOKMARKS              12
+#define SQL_GET_BOOKMARK               13
+#define SQL_ROW_NUMBER                 14
+
+#define SQL_STMT_OPT_MIN               SQL_QUERY_TIMEOUT
+#define SQL_STMT_OPT_MAX               SQL_ROW_NUMBER
+
+
+/*
+ * SQL_QUERY_TIMEOUT
+ */
+#define SQL_QUERY_TIMEOUT_DEFAULT      0UL
+
+/*
+ *  SQL_MAX_ROWS
+ */
+#define SQL_MAX_ROWS_DEFAULT           0UL
+
+/*
+ *  SQL_NOSCAN
+ */
+#define SQL_NOSCAN_OFF                 0UL     /* 1.0 FALSE */
+#define SQL_NOSCAN_ON                  1UL     /* 1.0 TRUE */
+#define SQL_NOSCAN_DEFAULT             SQL_NOSCAN_OFF
+
+/*
+ *  SQL_MAX_LENGTH
+ */
+#define SQL_MAX_LENGTH_DEFAULT         0UL
+
+/*
+ *  SQL_ASYNC_ENABLE
+ */
+#define SQL_ASYNC_ENABLE_OFF           0UL
+#define SQL_ASYNC_ENABLE_ON            1UL
+#define SQL_ASYNC_ENABLE_DEFAULT       SQL_ASYNC_ENABLE_OFF
+
+/*
+ *  SQL_BIND_TYPE
+ */
+#define SQL_BIND_BY_COLUMN             0UL
+#define SQL_BIND_TYPE_DEFAULT          SQL_BIND_BY_COLUMN
+
+/*
+ *  SQL_CONCURRENCY
+ */
+#define SQL_CONCUR_READ_ONLY           1
+#define SQL_CONCUR_LOCK                2
+#define SQL_CONCUR_ROWVER              3
+#define SQL_CONCUR_VALUES              4
+#define SQL_CONCUR_DEFAULT             SQL_CONCUR_READ_ONLY
+
+/*
+ *  SQL_CURSOR_TYPE
+ */
+#define SQL_CURSOR_FORWARD_ONLY        0UL
 #define SQL_CURSOR_KEYSET_DRIVEN       1UL
 #define SQL_CURSOR_DYNAMIC             2UL
-#define SQL_CURSOR_STATIC               3UL
+#define SQL_CURSOR_STATIC              3UL
 #define SQL_CURSOR_TYPE_DEFAULT                SQL_CURSOR_FORWARD_ONLY
 
-/* options for SQLSetConnectOption/SQLGetConnectOption */
-# define SQL_ACCESS_MODE                101
-# define SQL_AUTOCOMMIT                 102
-# define SQL_LOGIN_TIMEOUT              103
-# define SQL_OPT_TRACE                  104
-# define SQL_OPT_TRACEFILE              105
-# define SQL_TRANSLATE_DLL              106
-# define SQL_TRANSLATE_OPTION           107
-# define SQL_TXN_ISOLATION              108
-# define SQL_CURRENT_QUALIFIER          109
-# define SQL_ODBC_CURSORS               110
-# define SQL_QUIET_MODE                 111
-# define SQL_PACKET_SIZE                112
-# define SQL_CONN_OPT_MAX               SQL_PACKET_SIZE
-# define SQL_CONNECT_OPT_DRVR_START     1000
-
-# define SQL_CONN_OPT_MIN               SQL_ACCESS_MODE
-
-/* SQL_ACCESS_MODE options */
-# define SQL_MODE_READ_WRITE            0UL
-# define SQL_MODE_READ_ONLY             1UL
-# define SQL_MODE_DEFAULT               SQL_MODE_READ_WRITE
-
-/* SQL_AUTOCOMMIT options */
-# define SQL_AUTOCOMMIT_OFF             0UL
-# define SQL_AUTOCOMMIT_ON              1UL
-# define SQL_AUTOCOMMIT_DEFAULT         SQL_AUTOCOMMIT_ON
-
-/* SQL_LOGIN_TIMEOUT options */
-# define SQL_LOGIN_TIMEOUT_DEFAULT      15UL
-
-/* SQL_OPT_TRACE options */
-# define SQL_OPT_TRACE_OFF              0UL
-# define SQL_OPT_TRACE_ON               1UL
-# define SQL_OPT_TRACE_DEFAULT          SQL_OPT_TRACE_OFF
-# define SQL_OPT_TRACE_FILE_DEFAULT     "odbc.log"
-
-/* SQL_ODBC_CURSORS options */
-# define SQL_CUR_USE_IF_NEEDED          0UL
-# define SQL_CUR_USE_ODBC               1UL
-# define SQL_CUR_USE_DRIVER             2UL
-# define SQL_CUR_DEFAULT                SQL_CUR_USE_DRIVER
-
-/* Column types and scopes in SQLSpecialColumns. */
-# define SQL_BEST_ROWID                 1
-# define SQL_ROWVER                     2
-
-# define SQL_SCOPE_CURROW               0
-# define SQL_SCOPE_TRANSACTION          1
-# define SQL_SCOPE_SESSION              2
-
-/* Operations in SQLSetPos */
-# define SQL_ADD                        4
-
-/* Lock options in SQLSetPos */
-# define SQL_LOCK_NO_CHANGE             0
-# define SQL_LOCK_EXCLUSIVE             1
-# define SQL_LOCK_UNLOCK                2
-
-/* SQLExtendedFetch flag values */
-# define SQL_FETCH_NEXT                 1
-# define SQL_FETCH_FIRST                2
-# define SQL_FETCH_LAST                 3
-# define SQL_FETCH_PRIOR                4
-# define SQL_FETCH_ABSOLUTE             5
-# define SQL_FETCH_RELATIVE             6
-# define SQL_FETCH_BOOKMARK             8
-
-/* Defines for SQLBindParameter/SQLProcedureColumns */
-# define SQL_PARAM_TYPE_UNKNOWN         0
-# define SQL_PARAM_INPUT                1
-# define SQL_PARAM_INPUT_OUTPUT         2
-# define SQL_RESULT_COL                 3
-# define SQL_PARAM_OUTPUT               4
-
-/* Defines used by Driver Manager for mapping SQLSetParam to SQLBindParameter */
-# define SQL_PARAM_TYPE_DEFAULT         SQL_PARAM_INPUT_OUTPUT
-# define SQL_SETPARAM_VALUE_MAX         (-1L)
-
-/* SQLStatistics flag values */
-# define SQL_INDEX_UNIQUE               0
-# define SQL_INDEX_ALL                  1
-
-# define SQL_QUICK                      0
-# define SQL_ENSURE                     1
-
-/* SQLSetScrollOption flag values */
-# define SQL_SCROLL_FORWARD_ONLY        0L
-# define SQL_SCROLL_KEYSET_DRIVEN       (-1L)
-# define SQL_SCROLL_DYNAMIC             (-2L)
-# define SQL_SCROLL_STATIC              (-3L)
-
-# if defined(__cplusplus) || defined(__IBMCPP__)
-        extern  "C" {
-# endif
-
-RETCODE SQL_API SQLSetConnectOption (HDBC, UWORD, UDWORD);
-RETCODE SQL_API SQLNumResultCols ( HSTMT, SWORD FAR* );
-
-# if defined(__cplusplus) || defined(__IBMCPP__)
-        }
-# endif
+/*
+ *  SQL_ROWSET_SIZE
+ */
+#define SQL_ROWSET_SIZE_DEFAULT        1UL
+
+/*
+ *  SQL_KEYSET_SIZE
+ */
+#define SQL_KEYSET_SIZE_DEFAULT                0UL
+
+/*
+ *  SQL_SIMULATE_CURSOR
+ */
+#define SQL_SC_NON_UNIQUE              0UL
+#define SQL_SC_TRY_UNIQUE              1UL
+#define SQL_SC_UNIQUE                  2UL
+
+/*
+ *  SQL_RETRIEVE_DATA
+ */
+#define SQL_RD_OFF                     0UL
+#define SQL_RD_ON                      1UL
+#define SQL_RD_DEFAULT                 SQL_RD_ON
+
+/*
+ *  SQL_USE_BOOKMARKS
+ */
+#define SQL_UB_OFF                     0UL
+#define SQL_UB_ON                      1UL
+#define SQL_UB_DEFAULT                 SQL_UB_OFF
+
+/*
+ *  SQLSetConnectOption/SQLGetConnectOption
+ */
+#define SQL_ACCESS_MODE                        101
+#define SQL_AUTOCOMMIT                 102
+#define SQL_LOGIN_TIMEOUT              103
+#define SQL_OPT_TRACE                  104
+#define SQL_OPT_TRACEFILE              105
+#define SQL_TRANSLATE_DLL              106
+#define SQL_TRANSLATE_OPTION           107
+#define SQL_TXN_ISOLATION              108
+#define SQL_CURRENT_QUALIFIER          109
+#define SQL_ODBC_CURSORS               110
+#define SQL_QUIET_MODE                 111
+#define SQL_PACKET_SIZE                        112
+
+#define        SQL_CONN_OPT_MIN                SQL_ACCESS_MODE
+#define SQL_CONN_OPT_MAX               SQL_PACKET_SIZE
+#define SQL_CONNECT_OPT_DRVR_START     1000
+
+
+/*
+ *  SQL_ACCESS_MODE
+ */
+#define SQL_MODE_READ_WRITE            0UL
+#define SQL_MODE_READ_ONLY             1UL
+#define SQL_MODE_DEFAULT               SQL_MODE_READ_WRITE
+
+/*
+ *  SQL_AUTOCOMMIT
+ */
+#define SQL_AUTOCOMMIT_OFF             0UL
+#define SQL_AUTOCOMMIT_ON              1UL
+#define SQL_AUTOCOMMIT_DEFAULT         SQL_AUTOCOMMIT_ON
+
+/*
+ *  SQL_LOGIN_TIMEOUT
+ */
+#define SQL_LOGIN_TIMEOUT_DEFAULT      15UL
+
+/*
+ *  SQL_OPT_TRACE
+ */
+#define SQL_OPT_TRACE_OFF              0UL
+#define SQL_OPT_TRACE_ON               1UL
+#define SQL_OPT_TRACE_DEFAULT          SQL_OPT_TRACE_OFF
+#define SQL_OPT_TRACE_FILE_DEFAULT     "odbc.log"
+
+/*
+ *  SQL_ODBC_CURSORS
+ */
+#define SQL_CUR_USE_IF_NEEDED          0UL
+#define SQL_CUR_USE_ODBC               1UL
+#define SQL_CUR_USE_DRIVER             2UL
+#define SQL_CUR_DEFAULT                SQL_CUR_USE_DRIVER
+
+/*
+ *  SQLSpecialColumns - Column types and scopes
+ */
+#define SQL_BEST_ROWID                 1
+#define SQL_ROWVER                     2
+
+#define SQL_SCOPE_CURROW               0
+#define SQL_SCOPE_TRANSACTION          1
+#define SQL_SCOPE_SESSION              2
+
+/*
+ *  SQLSetPos
+ */
+#define SQL_ENTIRE_ROWSET              0
+
+/*
+ *  SQLSetPos
+ */
+#define SQL_POSITION                   0
+#define SQL_REFRESH                    1
+#define SQL_UPDATE                     2
+#define SQL_DELETE                     3
+#define SQL_ADD                                4
+
+/*
+ *  SQLSetPos
+ */
+#define SQL_LOCK_NO_CHANGE             0
+#define SQL_LOCK_EXCLUSIVE             1
+#define SQL_LOCK_UNLOCK                2
+
+/*
+ *  SQLSetPos
+ */
+#define SQL_POSITION_TO(hstmt,irow)    \
+    SQLSetPos(hstmt,irow,SQL_POSITION,SQL_LOCK_NO_CHANGE)
+#define SQL_LOCK_RECORD(hstmt,irow,fLock) \
+    SQLSetPos(hstmt,irow,SQL_POSITION,fLock)
+#define SQL_REFRESH_RECORD(hstmt,irow,fLock) \
+    SQLSetPos(hstmt,irow,SQL_REFRESH,fLock)
+#define SQL_UPDATE_RECORD(hstmt,irow) \
+    SQLSetPos(hstmt,irow,SQL_UPDATE,SQL_LOCK_NO_CHANGE)
+#define SQL_DELETE_RECORD(hstmt,irow) \
+    SQLSetPos(hstmt,irow,SQL_DELETE,SQL_LOCK_NO_CHANGE)
+#define SQL_ADD_RECORD(hstmt,irow) \
+    SQLSetPos(hstmt,irow,SQL_ADD,SQL_LOCK_NO_CHANGE)
+
+/*
+ *  All the ODBC keywords
+ */
+#define SQL_ODBC_KEYWORDS \
+"ABSOLUTE,ACTION,ADA,ADD,ALL,ALLOCATE,ALTER,AND,ANY,ARE,AS,"\
+"ASC,ASSERTION,AT,AUTHORIZATION,AVG,"\
+"BEGIN,BETWEEN,BIT,BIT_LENGTH,BOTH,BY,CASCADE,CASCADED,CASE,CAST,CATALOG,"\
+"CHAR,CHAR_LENGTH,CHARACTER,CHARACTER_LENGTH,CHECK,CLOSE,COALESCE,"\
+"COBOL,COLLATE,COLLATION,COLUMN,COMMIT,CONNECT,CONNECTION,CONSTRAINT,"\
+"CONSTRAINTS,CONTINUE,CONVERT,CORRESPONDING,COUNT,CREATE,CROSS,CURRENT,"\
+"CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,"\
+"DATE,DAY,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFERRABLE,"\
+"DEFERRED,DELETE,DESC,DESCRIBE,DESCRIPTOR,DIAGNOSTICS,DISCONNECT,"\
+"DISTINCT,DOMAIN,DOUBLE,DROP,"\
+"ELSE,END,END-EXEC,ESCAPE,EXCEPT,EXCEPTION,EXEC,EXECUTE,"\
+"EXISTS,EXTERNAL,EXTRACT,"\
+"FALSE,FETCH,FIRST,FLOAT,FOR,FOREIGN,FORTRAN,FOUND,FROM,FULL,"\
+"GET,GLOBAL,GO,GOTO,GRANT,GROUP,HAVING,HOUR,"\
+"IDENTITY,IMMEDIATE,IN,INCLUDE,INDEX,INDICATOR,INITIALLY,INNER,"\
+"INPUT,INSENSITIVE,INSERT,INTEGER,INTERSECT,INTERVAL,INTO,IS,ISOLATION,"\
+"JOIN,KEY,LANGUAGE,LAST,LEADING,LEFT,LEVEL,LIKE,LOCAL,LOWER,"\
+"MATCH,MAX,MIN,MINUTE,MODULE,MONTH,MUMPS,"\
+"NAMES,NATIONAL,NATURAL,NCHAR,NEXT,NO,NONE,NOT,NULL,NULLIF,NUMERIC,"\
+"OCTET_LENGTH,OF,ON,ONLY,OPEN,OPTION,OR,ORDER,OUTER,OUTPUT,OVERLAPS,"\
+"PAD,PARTIAL,PASCAL,PLI,POSITION,PRECISION,PREPARE,PRESERVE,"\
+"PRIMARY,PRIOR,PRIVILEGES,PROCEDURE,PUBLIC,"\
+"REFERENCES,RELATIVE,RESTRICT,REVOKE,RIGHT,ROLLBACK,ROWS,"\
+"SCHEMA,SCROLL,SECOND,SECTION,SELECT,SEQUENCE,SESSION,SESSION_USER,SET,SIZE,"\
+"SMALLINT,SOME,SPACE,SQL,SQLCA,SQLCODE,SQLERROR,SQLSTATE,SQLWARNING,"\
+"SUBSTRING,SUM,SYSTEM_USER,"\
+"TABLE,TEMPORARY,THEN,TIME,TIMESTAMP,TIMEZONE_HOUR,TIMEZONE_MINUTE,"\
+"TO,TRAILING,TRANSACTION,TRANSLATE,TRANSLATION,TRIM,TRUE,"\
+"UNION,UNIQUE,UNKNOWN,UPDATE,UPPER,USAGE,USER,USING,"\
+"VALUE,,VARCHAR,VARYING,VIEW,WHEN,WHENEVER,WHERE,WITH,WORK,YEAR"
+
+/*
+ * ----------------------------------------------------------------------
+ *  Level 2 Functions
+ * ----------------------------------------------------------------------
+ */
+
+/*
+ *  SQLExtendedFetch - fFetchType
+ */
+#define SQL_FETCH_NEXT                 1
+#define SQL_FETCH_FIRST                2
+#define SQL_FETCH_LAST                 3
+#define SQL_FETCH_PRIOR                        4
+#define SQL_FETCH_ABSOLUTE             5
+#define SQL_FETCH_RELATIVE             6
+#define SQL_FETCH_BOOKMARK             8
+
+/*
+ *  SQLExtendedFetch - rgfRowStatus
+ */
+#define SQL_ROW_SUCCESS                0
+#define SQL_ROW_DELETED                1
+#define SQL_ROW_UPDATED                2
+#define SQL_ROW_NOROW                  3
+#define SQL_ROW_ADDED                  4
+#define SQL_ROW_ERROR                  5
+
+/*
+ *  SQLForeignKeys - UPDATE_RULE/DELETE_RULE
+ */
+#define SQL_CASCADE                    0
+#define SQL_RESTRICT                   1
+#define SQL_SET_NULL                   2
+
+/*
+ *  SQLBindParameter - fParamType
+ *  SQLProcedureColumns - COLUMN_TYPE
+ */
+#define SQL_PARAM_TYPE_UNKNOWN         0
+#define SQL_PARAM_INPUT                        1
+#define SQL_PARAM_INPUT_OUTPUT         2
+#define SQL_RESULT_COL                 3
+#define SQL_PARAM_OUTPUT               4
+#define SQL_RETURN_VALUE               5
+
+/*
+ *  SQLSetParam to SQLBindParameter conversion
+ */
+#define SQL_PARAM_TYPE_DEFAULT         SQL_PARAM_INPUT_OUTPUT
+#define SQL_SETPARAM_VALUE_MAX         (-1L)
+
+/*
+ *  SQLStatistics - fUnique
+ */
+#define SQL_INDEX_UNIQUE               0
+#define SQL_INDEX_ALL                  1
+
+/*
+ *  SQLStatistics - fAccuracy
+ */
+#define SQL_QUICK                      0
+#define SQL_ENSURE                     1
+
+/*
+ *  SQLStatistics - TYPE
+ */
+#define SQL_TABLE_STAT                 0
+#define SQL_INDEX_CLUSTERED            1
+#define SQL_INDEX_HASHED               2
+#define SQL_INDEX_OTHER                3
+
+/*
+ *  SQLProcedures - PROCEDURE_TYPE
+ */
+#define SQL_PT_UNKNOWN                 0
+#define SQL_PT_PROCEDURE               1
+#define SQL_PT_FUNCTION                2
+
+/*
+ *  SQLSpecialColumns - PSEUDO_COLUMN
+ */
+#define SQL_PC_UNKNOWN                 0
+#define SQL_PC_NOT_PSEUDO              1
+#define SQL_PC_PSEUDO                  2
+
+/*
+ *  Deprecated defines from prior versions of ODBC
+ */
+#define SQL_DATABASE_NAME              16
+#define SQL_FD_FETCH_PREV              SQL_FD_FETCH_PRIOR
+#define SQL_FETCH_PREV                 SQL_FETCH_PRIOR
+#define SQL_CONCUR_TIMESTAMP           SQL_CONCUR_ROWVER
+#define SQL_SCCO_OPT_TIMESTAMP         SQL_SCCO_OPT_ROWVER
+#define SQL_CC_DELETE                  SQL_CB_DELETE
+#define SQL_CR_DELETE                  SQL_CB_DELETE
+#define SQL_CC_CLOSE                   SQL_CB_CLOSE
+#define SQL_CR_CLOSE                   SQL_CB_CLOSE
+#define SQL_CC_PRESERVE                SQL_CB_PRESERVE
+#define SQL_CR_PRESERVE                SQL_CB_PRESERVE
+#define SQL_FETCH_RESUME               7
+#define SQL_SCROLL_FORWARD_ONLY        0L
+#define SQL_SCROLL_KEYSET_DRIVEN       (-1L)
+#define SQL_SCROLL_DYNAMIC             (-2L)
+#define SQL_SCROLL_STATIC              (-3L)
+#define SQL_PC_NON_PSEUDO              SQL_PC_NOT_PSEUDO
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ *  Level 1 function rototypes
+ */
+RETCODE SQL_API SQLColumns (HSTMT hstmt, UCHAR FAR * szTableQualifier,
+    SWORD cbTableQualifier, UCHAR FAR * szTableOwner, SWORD cbTableOwner,
+    UCHAR FAR * szTableName, SWORD cbTableName, UCHAR FAR * szColumnName,
+    SWORD cbColumnName);
+RETCODE SQL_API SQLDriverConnect (HDBC hdbc, HWND hwnd,
+    UCHAR FAR * szConnStrIn, SWORD cbConnStrIn, UCHAR FAR * szConnStrOut,
+    SWORD cbConnStrOutMax, SWORD FAR * pcbConnStrOut, UWORD fDriverCompletion);
+RETCODE SQL_API SQLGetConnectOption (HDBC hdbc, UWORD fOption, PTR pvParam);
+RETCODE SQL_API SQLGetData (HSTMT hstmt, UWORD icol, SWORD fCType,
+    PTR rgbValue, SDWORD cbValueMax, SDWORD FAR * pcbValue);
+RETCODE SQL_API SQLGetFunctions (HDBC hdbc, UWORD fFunction,
+    UWORD FAR * pfExists);
+RETCODE SQL_API SQLGetInfo (HDBC hdbc, UWORD fInfoType, PTR rgbInfoValue,
+    SWORD cbInfoValueMax, SWORD FAR * pcbInfoValue);
+RETCODE SQL_API SQLGetStmtOption (HSTMT hstmt, UWORD fOption, PTR pvParam);
+RETCODE SQL_API SQLGetTypeInfo (HSTMT hstmt, SWORD fSqlType);
+RETCODE SQL_API SQLParamData (HSTMT hstmt, PTR FAR * prgbValue);
+RETCODE SQL_API SQLPutData (HSTMT hstmt, PTR rgbValue, SDWORD cbValue);
+RETCODE SQL_API SQLSetConnectOption (HDBC hdbc, UWORD fOption, UDWORD vParam);
+RETCODE SQL_API SQLSetStmtOption (HSTMT hstmt, UWORD fOption, UDWORD vParam);
+RETCODE SQL_API SQLSpecialColumns (HSTMT hstmt, UWORD fColType,
+    UCHAR FAR * szTableQualifier, SWORD cbTableQualifier,
+    UCHAR FAR * szTableOwner, SWORD cbTableOwner, UCHAR FAR * szTableName,
+    SWORD cbTableName, UWORD fScope, UWORD fNullable);
+RETCODE SQL_API SQLStatistics (HSTMT hstmt, UCHAR FAR * szTableQualifier,
+    SWORD cbTableQualifier, UCHAR FAR * szTableOwner, SWORD cbTableOwner,
+    UCHAR FAR * szTableName, SWORD cbTableName, UWORD fUnique, UWORD fAccuracy);
+RETCODE SQL_API SQLTables (HSTMT hstmt, UCHAR FAR * szTableQualifier,
+    SWORD cbTableQualifier, UCHAR FAR * szTableOwner, SWORD cbTableOwner,
+    UCHAR FAR * szTableName, SWORD cbTableName, UCHAR FAR * szTableType,
+    SWORD cbTableType);
+
+/*
+ *  Level 2 function prototypes
+ */
+RETCODE SQL_API SQLBrowseConnect (HDBC hdbc, 
+    UCHAR FAR * szConnStrIn, SWORD cbConnStrIn, UCHAR FAR * szConnStrOut, 
+    SWORD cbConnStrOutMax, SWORD FAR * pcbConnStrOut);
+RETCODE SQL_API SQLColumnPrivileges (HSTMT hstmt,
+    UCHAR FAR * szTableQualifier, SWORD cbTableQualifier,
+    UCHAR FAR * szTableOwner, SWORD cbTableOwner, UCHAR FAR * szTableName,
+    SWORD cbTableName, UCHAR FAR * szColumnName, SWORD cbColumnName);
+RETCODE SQL_API SQLDataSources (HENV henv, UWORD fDirection,
+    UCHAR FAR * szDSN, SWORD cbDSNMax, SWORD FAR * pcbDSN,
+    UCHAR FAR * szDescription, SWORD cbDescriptionMax,
+    SWORD FAR * pcbDescription);
+RETCODE SQL_API SQLDescribeParam (HSTMT hstmt, UWORD ipar,
+    SWORD FAR * pfSqlType, UDWORD FAR * pcbColDef, SWORD FAR * pibScale,
+    SWORD FAR * pfNullable);
+RETCODE SQL_API SQLExtendedFetch (HSTMT hstmt, UWORD fFetchType, SDWORD irow,
+    UDWORD FAR * pcrow, UWORD FAR * rgfRowStatus);
+RETCODE SQL_API SQLForeignKeys (HSTMT hstmt, UCHAR FAR * szPkTableQualifier,
+    SWORD cbPkTableQualifier, UCHAR FAR * szPkTableOwner, SWORD cbPkTableOwner,
+    UCHAR FAR * szPkTableName, SWORD cbPkTableName,
+    UCHAR FAR * szFkTableQualifier, SWORD cbFkTableQualifier,
+    UCHAR FAR * szFkTableOwner, SWORD cbFkTableOwner, UCHAR FAR * szFkTableName,
+    SWORD cbFkTableName);
+RETCODE SQL_API SQLMoreResults (HSTMT hstmt);
+RETCODE SQL_API SQLNativeSql (HDBC hdbc, UCHAR FAR * szSqlStrIn,
+    SDWORD cbSqlStrIn, UCHAR FAR * szSqlStr, SDWORD cbSqlStrMax,
+    SDWORD FAR * pcbSqlStr);
+RETCODE SQL_API SQLNumParams (HSTMT hstmt, SWORD FAR * pcpar);
+RETCODE SQL_API SQLParamOptions (HSTMT hstmt, UDWORD crow, UDWORD FAR * pirow);
+RETCODE SQL_API SQLPrimaryKeys (HSTMT hstmt, UCHAR FAR * szTableQualifier,
+    SWORD cbTableQualifier, UCHAR FAR * szTableOwner, SWORD cbTableOwner,
+    UCHAR FAR * szTableName, SWORD cbTableName);
+RETCODE SQL_API SQLProcedureColumns (HSTMT hstmt, UCHAR FAR * szProcQualifier,
+    SWORD cbProcQualifier, UCHAR FAR * szProcOwner, SWORD cbProcOwner,
+    UCHAR FAR * szProcName, SWORD cbProcName, UCHAR FAR * szColumnName,
+    SWORD cbColumnName);
+RETCODE SQL_API SQLProcedures (HSTMT hstmt, UCHAR FAR * szProcQualifier,
+    SWORD cbProcQualifier, UCHAR FAR * szProcOwner, SWORD cbProcOwner,
+    UCHAR FAR * szProcName, SWORD cbProcName);
+RETCODE SQL_API SQLSetPos (HSTMT hstmt, UWORD irow, UWORD fOption, UWORD fLock);
+RETCODE SQL_API SQLTablePrivileges (HSTMT hstmt, UCHAR FAR * szTableQualifier,
+    SWORD cbTableQualifier, UCHAR FAR * szTableOwner, SWORD cbTableOwner,
+    UCHAR FAR * szTableName, SWORD cbTableName);
+
+/*
+ *  SDK 2.0 Additional function prototypes
+ */
+RETCODE SQL_API SQLDrivers (HENV henv, UWORD fDirection,
+    UCHAR FAR * szDriverDesc, SWORD cbDriverDescMax, SWORD FAR * pcbDriverDesc,
+    UCHAR FAR * szDriverAttributes, SWORD cbDrvrAttrMax,
+    SWORD FAR * pcbDrvrAttr);
+RETCODE SQL_API SQLBindParameter (HSTMT hstmt, UWORD ipar, SWORD fParamType,
+    SWORD fCType, SWORD fSqlType, UDWORD cbColDef, SWORD ibScale, PTR rgbValue,
+    SDWORD cbValueMax, SDWORD FAR * pcbValue);
+
+/*
+ *  Depreciated - use SQLSetStmtOptions
+ */
+RETCODE SQL_API SQLSetScrollOptions (HSTMT hstmt, UWORD fConcurrency,
+    SDWORD crowKeyset, UWORD crowRowset);
+
+#ifdef __cplusplus
+}
+#endif
 
 #endif
index ae164808a5ede42c13dd1ad5f8ad7c9be333e7e6..4151f175e3ff46efb305b33728b4f74b7fbb3c8f 100644 (file)
-/** trace functions
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-#include       <../iodbc/iodbc.h>
-
-#include       <../iodbc/isql.h>
-#include       <../iodbc/isqlext.h>
-
-#include        <../iodbc/dlproc.h>
-
-#include       <../iodbc/itrace.h>
-
-#include       <../iodbc/herr.h>
-#include       <../iodbc/henv.h>
-#include       "../iodbc/henv.ci"
+/*
+ *  itrace.c
+ *
+ *  $Id$
+ *
+ *  Trace functions
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include       <config.h>
+
+#include       <isql.h>
+#include       <isqlext.h>
+
+#include        <dlproc.h>
+
+#include       <itrace.h>
+
+#include       <herr.h>
+#include       <henv.h>
+#include       "henv.ci"
 
 #include       <stdio.h>
 
-static  int printreturn(void FAR* istm, int ret )
+static int 
+printreturn (void FAR * istm, int ret)
 {
-        FILE FAR*       stm = (FILE FAR*)istm;
-        char FAR*       ptr = "Invalid return value";
+  FILE FAR *stm = (FILE FAR *) istm;
+  char FAR *ptr = "Invalid return value";
 
-        switch( ret )
-        {
-                case SQL_SUCCESS:
-                        ptr = "SQL_SUCCESS";
-                        break;
+  switch (ret)
+     {
+     case SQL_SUCCESS:
+       ptr = "SQL_SUCCESS";
+       break;
 
-                case SQL_SUCCESS_WITH_INFO:
-                        ptr = "SQL_SUCCESS_WITH_INFO";
-                        break;
+     case SQL_SUCCESS_WITH_INFO:
+       ptr = "SQL_SUCCESS_WITH_INFO";
+       break;
 
-                case SQL_NO_DATA_FOUND:
-                        ptr = "SQL_NO_DATA_FOUND";
-                        break;
+     case SQL_NO_DATA_FOUND:
+       ptr = "SQL_NO_DATA_FOUND";
+       break;
 
-                case SQL_NEED_DATA:
-                        ptr = "SQL_NEED_DATA";
-                        break;
+     case SQL_NEED_DATA:
+       ptr = "SQL_NEED_DATA";
+       break;
 
-                case SQL_INVALID_HANDLE:
-                        ptr = "SQL_INVALID_HANDLE";
-                        break;
+     case SQL_INVALID_HANDLE:
+       ptr = "SQL_INVALID_HANDLE";
+       break;
 
-                case SQL_ERROR:
-                        ptr = "SQL_ERROR";
-                        break;
+     case SQL_ERROR:
+       ptr = "SQL_ERROR";
+       break;
 
-                case SQL_STILL_EXECUTING:
-                        ptr = "SQL_STILL_EXECUTING";
-                        break;
+     case SQL_STILL_EXECUTING:
+       ptr = "SQL_STILL_EXECUTING";
+       break;
 
-                default:
-                        break;
-        }
+     default:
+       break;
+     }
 
-        fprintf( stm, "%s\n", ptr);
-        fflush( stm );
+  fprintf (stm, "%s\n", ptr);
+  fflush (stm);
 
-        return 0;
+  return 0;
 }
 
-HPROC   _iodbcdm_gettrproc(void FAR* istm, int procid, int type)
+
+HPROC 
+_iodbcdm_gettrproc (void FAR * istm, int procid, int type)
 {
-        FILE FAR*       stm = (FILE FAR*)istm;
+  FILE FAR *stm = (FILE FAR *) istm;
 
-        if( type == TRACE_TYPE_DM2DRV )
-        {
-                int i,j = 0;
+  if (type == TRACE_TYPE_DM2DRV)
+    {
+      int i, j = 0;
 
-                for(i=0;j != en_NullProc ;i++)
-                {
-                        j = odbcapi_symtab[i].en_idx;
+      for (i = 0; j != en_NullProc; i++)
+       {
+         j = odbcapi_symtab[i].en_idx;
 
-                        if( j == procid )
-                        {
-                                fprintf( stm, "\n%s ( ... )\n",
-                                        odbcapi_symtab[i].symbol);
+         if (j == procid)
+           {
+             fprintf (stm, "\n%s ( ... )\n", odbcapi_symtab[i].symbol);
 
-                                fflush( stm );
-                        }
-                }
-        }
+             fflush (stm);
+           }
+       }
+    }
 
-        if( type == TRACE_TYPE_RETURN )
-        {
-                return (HPROC)printreturn;
-        }
+  if (type == TRACE_TYPE_RETURN)
+    {
+      return (HPROC) printreturn;
+    }
 
-        return SQL_NULL_HPROC;
+  return SQL_NULL_HPROC;
 }
index 1fa2f27075d7b0d7b62723ae0efca9298cb4e3b5..61ba072ec897e7648d7a152818c72b66f62852e5 100644 (file)
-#ifndef _ITRACE_H
-# define _ITRACE_H
+/*
+ *  itrace.h
+ *
+ *  $Id$
+ *
+ *  Trace functions
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef        _ITRACE_H
+#define _ITRACE_H
 
-# ifdef DEBUG
-#  ifndef NO_TRACE
-#   define NO_TRACE
-#  endif
-# endif
+#ifdef DEBUG
 
+#ifndef NO_TRACE
 #define NO_TRACE
+#endif
+
+#endif
 
-# define TRACE_TYPE_APP2DM      1
-# define TRACE_TYPE_DM2DRV      2
-# define TRACE_TYPE_DRV2DM      3
+#define TRACE_TYPE_APP2DM      1
+#define TRACE_TYPE_DM2DRV      2
+#define TRACE_TYPE_DRV2DM      3
 
-# define TRACE_TYPE_RETURN      4
+#define TRACE_TYPE_RETURN      4
 
-extern HPROC    _iodbcdm_gettrproc(void FAR* stm, int procid, int type);
+extern HPROC _iodbcdm_gettrproc (void FAR * stm, int procid, int type);
 
-# ifdef NO_TRACE
-#  define TRACE_CALL( stm, trace_on, procid, plist )
-# else
-#  define TRACE_CALL( stm, trace_on, plist )\
-        {\
-                if( trace_on)\
-                {\
-                        HPROC   hproc;\
+#ifdef NO_TRACE
+#define TRACE_CALL( stm, trace_on, procid, plist )
+#else
+#define TRACE_CALL( stm, trace_on, plist )\
+       {\
+               if( trace_on)\
+               {\
+                       HPROC   hproc;\
 \
-                        hproc = _iodbcdm_gettrproc(stm, procid, TRACE_TYPE_APP2DM);\
+                       hproc = _iodbcdm_gettrproc(stm, procid, TRACE_TYPE_APP2DM);\
 \
-                        if( hproc )\
-                                hproc plist;\
-                }\
-        }
-# endif
+                       if( hproc )\
+                               hproc plist;\
+               }\
+       }
+#endif
 
-# ifdef NO_TRACE
-#  define TRACE_DM2DRV( stm, procid, plist )
-# else
-#  define TRACE_DM2DRV( stm, procid, plist )\
-        {\
-                HPROC   hproc;\
+#ifdef NO_TRACE
+#define TRACE_DM2DRV( stm, procid, plist )
+#else
+#define TRACE_DM2DRV( stm, procid, plist )\
+       {\
+               HPROC   hproc;\
 \
-                hproc = _iodbcdm_gettrproc(stm, procid, TRACE_TYPE_DM2DRV);\
+               hproc = _iodbcdm_gettrproc(stm, procid, TRACE_TYPE_DM2DRV);\
 \
-                if( hproc )\
-                        hproc plist;\
-        }
-# endif
+               if( hproc )\
+                       hproc plist;\
+       }
+#endif
 
-# ifdef NO_TRACE
-#  define TRACE_DRV2DM( stm, procid, plist )
-# else
-#  define TRACE_DRV2DM( stm, procid, plist ) \
-        {\
-                HPROC   hproc;\
+#ifdef NO_TRACE
+#define TRACE_DRV2DM( stm, procid, plist )
+#else
+#define TRACE_DRV2DM( stm, procid, plist ) \
+       {\
+               HPROC   hproc;\
 \
-                hproc = _iodbcdm_gettrproc( stm, procid, TRACE_TYPE_DRV2DM);\
+               hproc = _iodbcdm_gettrproc( stm, procid, TRACE_TYPE_DRV2DM);\
 \
-                if( hproc )\
-                                hproc plist;\
-        }
-# endif
+               if( hproc )\
+                               hproc plist;\
+       }
+#endif
 
-# ifdef NO_TRACE
-#  define TRACE_RETURN( stm, trace_on, ret )
-# else
-#  define TRACE_RETURN( stm, trace_on, ret )\
-        {\
-                if( trace_on ) {\
-                        HPROC hproc;\
+#ifdef NO_TRACE
+#define TRACE_RETURN( stm, trace_on, ret )
+#else
+#define TRACE_RETURN( stm, trace_on, ret )\
+       {\
+               if( trace_on ) {\
+                       HPROC hproc;\
 \
-                        hproc = _iodbcdm_gettrproc( stm, 0, TRACE_TYPE_RETURN);\
+                       hproc = _iodbcdm_gettrproc( stm, 0, TRACE_TYPE_RETURN);\
 \
-                        if( hproc )\
-                                hproc( stm, ret );\
-                }\
-        }
-# endif
+                       if( hproc )\
+                               hproc( stm, ret );\
+               }\
+       }
+#endif
 
-# ifdef NO_TRACE
-#  define CALL_DRIVER( hdbc, ret, proc, procid, plist ) { ret = proc plist; }
-# else
-#  define CALL_DRIVER( hdbc, ret, proc, procid, plist )\
-        {\
-                DBC_t FAR*      pdbc = (DBC_t FAR*)(hdbc);\
+#ifdef NO_TRACE
+#define CALL_DRIVER( hdbc, ret, proc, procid, plist )  { ret = proc plist; }
+#else
+#define CALL_DRIVER( hdbc, ret, proc, procid, plist )\
+       {\
+               DBC_t FAR*      pdbc = (DBC_t FAR*)(hdbc);\
 \
-                if( pdbc->trace ) {\
-                        TRACE_DM2DRV( pdbc->tstm, procid, plist )\
-                        ret = proc plist;\
-                        TRACE_DRV2DM( pdbc->tstm, procid, plist )\
-                        TRACE_RETURN( pdbc->tstm, 1, ret )\
-                }\
-                else\
-                        ret = proc plist;\
-        }
-# endif
+               if( pdbc->trace ) {\
+                       TRACE_DM2DRV( pdbc->tstm, procid, plist )\
+                       ret = proc plist;\
+                       TRACE_DRV2DM( pdbc->tstm, procid, plist )\
+                       TRACE_RETURN( pdbc->tstm, 1, ret )\
+               }\
+               else\
+                       ret = proc plist;\
+       }
+#endif
 
 #endif
diff --git a/src/iodbc/main.c b/src/iodbc/main.c
deleted file mode 100644 (file)
index 8addc3c..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#include        <config.h>
-
-/* entry function used to build a share library on AIX  */
-int     __start()
-{
-        return 0;
-}
index 713467766fb7b37327d1e3cc2dc409e5d94f2509..183b8defc0cb83e21ba7e996e61cd0a46802c198 100644 (file)
-/** miscellaneous functions
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-#ifdef DLDAPI_OS2
-#  define INCL_DOSMODULEMGR                 /* Module Manager values */
-#  define INCL_DOSERRORS                    /* Error values          */
-#  include      <os2.h>
-#  include      <stdio.h>
-#endif
+/*
+ *  misc.c
+ *
+ *  $Id$
+ *
+ *  Miscellaneous functions
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
 
-#include       <../iodbc/iodbc.h>
+#include       <config.h>
 
-#include       <../iodbc/isql.h>
-#include       <../iodbc/isqlext.h>
+#include       <isql.h>
+#include       <isqlext.h>
 
 #include       <stdio.h>
-#include        <strings.h>
-
 #include        <unistd.h>
 
-
 static int
-upper_strneq(
-        char*   s1,
-        char*   s2,
-        int     n )
+upper_strneq (
+    char *s1,
+    char *s2,
+    int n)
 {
-        int     i;
-        char    c1, c2;
-
-        for(i=1;i<n;i++)
-        {
-                c1 = s1[i];
-                c2 = s2[i];
-
-                if( c1 >= 'a' && c1 <= 'z' )
-                {
-                        c1 += ('A' - 'a');
-                }
-                else if( c1 == '\n' )
-                {
-                        c1 = '\0';
-                }
-
-                if( c2 >= 'a' && c2 <= 'z' )
-                {
-                        c2 += ('A' - 'a');
-                }
-                else if( c2 == '\n' )
-                {
-                        c2 = '\0';
-                }
-
-                if( (c1 - c2) || !c1 || !c2 )
-                {
-                        break;
-                }
-        }
-
-        return (int)!(c1 - c2);
+  int i;
+  char c1, c2;
+
+  for (i = 1; i < n; i++)
+    {
+      c1 = s1[i];
+      c2 = s2[i];
+
+      if (c1 >= 'a' && c1 <= 'z')
+       {
+         c1 += ('A' - 'a');
+       }
+      else if (c1 == '\n')
+       {
+         c1 = '\0';
+       }
+
+      if (c2 >= 'a' && c2 <= 'z')
+       {
+         c2 += ('A' - 'a');
+       }
+      else if (c2 == '\n')
+       {
+         c2 = '\0';
+       }
+
+      if ((c1 - c2) || !c1 || !c2)
+       {
+         break;
+       }
+    }
+
+  return (int) !(c1 - c2);
 }
 
-static char*                    /* return new position in input str */
-readtoken(
-        char*   istr,           /* old position in input buf */
-        char*   obuf )          /* token string ( if "\0", then finished ) */
+static char *                  /* return new position in input str */
+readtoken (
+    char *istr,                        /* old position in input buf */
+    char *obuf)                        /* token string ( if "\0", then finished ) */
 {
-        for(; *istr && *istr != '\n' ; istr ++ )
-        {
-                char c, nx;
-
-                c = *(istr);
-
-                if( c == ' ' || c == '\t' )
-                {
-                        continue;
-                }
-
-                nx = *(istr + 1);
-
-                *obuf = c;
-                obuf ++;
+  char *start = obuf;
+
+  /* Skip leading white space */
+  while (*istr == ' ' || *istr == '\t')
+    istr++;
+
+  for (; *istr && *istr != '\n'; istr++)
+    {
+      char c, nx;
+
+      c = *(istr);
+      nx = *(istr + 1);
+
+      if (c == ';')
+       {
+         for (; *istr && *istr != '\n'; istr++);
+         break;
+       }
+      *obuf = c;
+      obuf++;
+
+      if (nx == ';' || nx == '=' || c == '=')
+       {
+         istr++;
+         break;
+       }
+    }
+  *obuf = '\0';
+
+  /* Trim end of token */
+  for (; obuf > start && (*(obuf - 1) == ' ' || *(obuf - 1) == '\t');)
+    *--obuf = '\0';
+
+  return istr;
+}
 
-                if( c == ';' || c == '=' )
-                {
-                        istr ++;
-                        break;
-                }
+#if    !defined(WINDOWS) && !defined(WIN32) && !defined(OS2)
+# include      <pwd.h>
+# define       UNIX_PWD
+#endif
 
-                if( nx == ' ' || nx == '\t' || nx == ';' || nx == '=' )
-                {
-                        istr ++;
-                        break;
-                }
-        }
+char *
+_iodbcdm_getinifile (char *buf, int size)
+{
+  int i, j;
+  char *ptr;
 
-        *obuf = '\0';
+  j = STRLEN ("/odbc.ini") + 1;
 
-        return istr;
-}
+  if (size < j)
+    {
+      return NULL;
+    }
 
-#if     !defined(WINDOWS) && !defined(WIN32) && !defined(OS2)
-# include       <pwd.h>
-# define        UNIX_PWD
-#endif
+#if    !defined(UNIX_PWD)
 
-static char*
-getinitfile(char* buf, int size)
-{
-        int     i, j;
-        char*   ptr;
+  i = GetWindowsDirectory ((LPSTR) buf, size);
 
-        j = STRLEN("/odbc.ini") + 1;
+  if (i == 0 || i > size - j)
+    {
+      return NULL;
+    }
 
-        if( size < j )
-        {
-                return NULL;
-        }
+  sprintf (buf + i, "/odbc.ini");
 
-#ifdef FIX_INI_FILE
-        sprintf( buf, "%s/odbc.ini", DIR_INI_FILE );
+  return buf;
 #else
-#  ifdef OS2
-        *buf = '\0';
-        if( NULL != getenv("IODBC_INI") )
-        {
-                strcpy( buf, getenv("IODBC_INI") );
-        }
-        else
-        {
-                HMODULE         hModule;
-
-                if( NO_ERROR == DosQueryModuleHandle(DLL_NAME, &hModule) &&
-                    NO_ERROR == DosQueryModuleName(hModule, 256L, buf) )
-                {
-                        if( NULL != strrchr(buf, '.') )
-                                *(strchr(buf, '.')) = '\0';
-                        strcat( buf, ".ini" );
-                }
-                else
-                {
-                        strcpy( buf, "odbc.ini" );
-                }
-
-        }
-        return buf;
-#  else
-#    if   !defined(UNIX_PWD)
-
-        i = GetWindowsDirectory((LPSTR)buf, size );
-
-        if( i == 0 || i > size - j )
-        {
-                return NULL;
-        }
-
-        sprintf( buf + i, "/odbc.ini");
-
-        return buf;
-#    else
-        ptr = (char*)getpwuid(getuid());
-
-        if( ptr == NULL )
-        {
-                return NULL;
-        }
-
-        ptr = ((struct passwd*)ptr)->pw_dir;
-
-        if( ptr == NULL || *ptr == '\0' )
-        {
-                ptr = "/home";
-        }
-
-        if( size < STRLEN(ptr) + j )
-        {
-                return NULL;
-        }
-
-        sprintf( buf, "%s%s", ptr, "/.odbc.ini");
-        /* i.e. searching ~/.iodbc.ini */
-#    endif
-#  endif
+  if ((ptr = getenv ("ODBCINI")) != NULL)
+    {
+      strcpy (buf, ptr);
+      return buf;
+    }
+
+  if ((ptr = getenv ("IODBCINI")) != NULL)
+    {
+      strcpy (buf, ptr);
+      return buf;
+    }
+
+  if ((ptr = getenv ("HOME")) == NULL)
+    {
+      ptr = (char *) getpwuid (getuid ());
+
+      if (ptr == NULL)
+       {
+         return NULL;
+       }
+
+      ptr = ((struct passwd *) ptr)->pw_dir;
+    }
+
+  if (ptr == NULL || *ptr == '\0')
+    {
+      ptr = "/home";
+    }
+
+  if (size < STRLEN (ptr) + j)
+    {
+      return NULL;
+    }
+
+  sprintf (buf, "%s%s", ptr, "/.odbc.ini");
+  /* i.e. searching ~/.odbc.ini */
 #endif
 
-        return buf;
+  return buf;
 }
 
-char*   _iodbcdm_getkeyvalbydsn(
-                char*   dsn,
-                int     dsnlen,
-                char*   keywd,
-                char*   value,
-                int     size )
-/* read odbc init file to resolve the value of specified
- * key from named or defaulted dsn section
+
+/* 
+ *  read odbc init file to resolve the value of specified
+ *  key from named or defaulted dsn section 
  */
+char *
+_iodbcdm_getkeyvalbydsn (
+    char *dsn,
+    int dsnlen,
+    char *keywd,
+    char *value,
+    int size)
 {
-        char    buf[1024];
-        char    dsntk[SQL_MAX_DSN_LENGTH + 3] = { '[', '\0'  };
-        char    token[1024];    /* large enough */
-        FILE*   file;
-        char    pathbuf[1024];
-        char*   path;
-
-#define DSN_NOMATCH     0
-#define DSN_NAMED       1
-#define DSN_DEFAULT     2
-
-        int     dsnid = DSN_NOMATCH;
-        int     defaultdsn = DSN_NOMATCH;
-
-        if( dsn == NULL || *dsn == 0 )
-        {
-                dsn = "default";
-                dsnlen = STRLEN(dsn);
-        }
-
-        if( dsnlen == SQL_NTS )
-        {
-                dsnlen = STRLEN(dsn);
-        }
-
-        if( dsnlen <= 0 || keywd == NULL || buf == 0 || size <= 0 )
-        {
-                return NULL;
-        }
-
-        if( dsnlen > sizeof(dsntk) - 2  )
-        {
-                return NULL;
-        }
-
-        value[0] = '\0';
-
-        STRNCAT( dsntk, dsn, dsnlen );
-        STRCAT( dsntk, "]" );
-
-        dsnlen = dsnlen + 2;
-
-        path = getinitfile(pathbuf, sizeof(pathbuf));
-
-        if( path == NULL )
-        {
-                return NULL;
-        }
-
-        file = (FILE*)fopen(path, "r");
-
-        if( file == NULL )
-        {
-                return NULL;
-        }
-
-        for(;;)
-        {
-                char*   str;
-
-                str = fgets(buf, sizeof(buf), file);
-
-                if( str == NULL )
-                {
-                        break;
-                }
-
-                strtok( str, "\n\r" );
-
-                if( *str == '[' )
-                {
-                        if( upper_strneq(str, "[default]", STRLEN("[default]")) )
-                        {
-                                /* we only read first dsn default dsn
-                                 * section (as well as named dsn).
-                                 */
-                                if( defaultdsn == DSN_NOMATCH )
-                                {
-                                        dsnid = DSN_DEFAULT;
-                                        defaultdsn = DSN_DEFAULT;
-                                }
-                                else
-                                {
-                                        dsnid = DSN_NOMATCH;
-                                }
-
-                                continue;
-                        }
-                        else if( upper_strneq( str, dsntk, dsnlen ) )
-                        {
-                                dsnid = DSN_NAMED;
-                        }
-                        else
-                        {
-                                dsnid = DSN_NOMATCH;
-                        }
-
-                        continue;
-                }
-                else if( dsnid == DSN_NOMATCH )
-                {
-                        continue;
-                }
-
-                str = readtoken(str, token);
-
-                if( upper_strneq( keywd, token, STRLEN(keywd)) )
-                {
-                        str = readtoken(str, token);
-
-                        if( ! STREQ( token, "=") )
-                        /* something other than = */
-                        {
-                                continue;
-                        }
-
-                        str = readtoken(str, token);
-
-                        if( STRLEN(token) > size - 1)
-                        {
-                                break;
-                        }
-
-                        STRNCPY(value, token, size);
-                        /* copy the value(i.e. next token) to buf */
-
-                        if( dsnid != DSN_DEFAULT )
-                        {
-                                break;
-                        }
-                }
-        }
-
-        fclose(file);
-
-        return (*value)? value:NULL;
+  char buf[1024];
+  char dsntk[SQL_MAX_DSN_LENGTH + 3] = {'[', '\0'};
+  char token[1024];            /* large enough */
+  FILE *file;
+  char pathbuf[1024];
+  char *path;
+
+#define DSN_NOMATCH    0
+#define DSN_NAMED      1
+#define DSN_DEFAULT    2
+
+  int dsnid = DSN_NOMATCH;
+  int defaultdsn = DSN_NOMATCH;
+
+  if (dsn == NULL || *dsn == 0)
+    {
+      dsn = "default";
+      dsnlen = STRLEN (dsn);
+    }
+
+  if (dsnlen == SQL_NTS)
+    {
+      dsnlen = STRLEN (dsn);
+    }
+
+  if (dsnlen <= 0 || keywd == NULL || buf == 0 || size <= 0)
+    {
+      return NULL;
+    }
+
+  if (dsnlen > sizeof (dsntk) - 2)
+    {
+      return NULL;
+    }
+
+  value[0] = '\0';
+
+  STRNCAT (dsntk, dsn, dsnlen);
+  STRCAT (dsntk, "]");
+
+  dsnlen = dsnlen + 2;
+
+  path = _iodbcdm_getinifile (pathbuf, sizeof (pathbuf));
+
+  if (path == NULL)
+    {
+      return NULL;
+    }
+
+  file = (FILE *) fopen (path, "r");
+
+  if (file == NULL)
+    {
+      return NULL;
+    }
+
+  for (;;)
+    {
+      char *str;
+
+      str = fgets (buf, sizeof (buf), file);
+
+      if (str == NULL)
+       {
+         break;
+       }
+
+      if (*str == '[')
+       {
+         if (upper_strneq (str, "[default]", STRLEN ("[default]")))
+           {
+             /* we only read first dsn default dsn
+              * section (as well as named dsn).
+              */
+             if (defaultdsn == DSN_NOMATCH)
+               {
+                 dsnid = DSN_DEFAULT;
+                 defaultdsn = DSN_DEFAULT;
+               }
+             else
+               {
+                 dsnid = DSN_NOMATCH;
+               }
+
+             continue;
+           }
+         else if (upper_strneq (str, dsntk, dsnlen))
+           {
+             dsnid = DSN_NAMED;
+           }
+         else
+           {
+             dsnid = DSN_NOMATCH;
+           }
+
+         continue;
+       }
+      else if (dsnid == DSN_NOMATCH)
+       {
+         continue;
+       }
+
+      str = readtoken (str, token);
+
+      if (upper_strneq (keywd, token, STRLEN (keywd)))
+       {
+         str = readtoken (str, token);
+
+         if (!STREQ (token, "="))
+           /* something other than = */
+           {
+             continue;
+           }
+
+         str = readtoken (str, token);
+
+         if (STRLEN (token) > size - 1)
+           {
+             break;
+           }
+
+         STRNCPY (value, token, size);
+         /* copy the value(i.e. next token) to buf */
+
+         if (dsnid != DSN_DEFAULT)
+           {
+             break;
+           }
+       }
+    }
+
+  fclose (file);
+
+  return (*value) ? value : NULL;
 }
 
-char*   _iodbcdm_getkeyvalinstr(
-                char*   cnstr,
-                int     cnlen,
-                char*   keywd,
-                char*   value,
-                int     size )
+
+char *
+_iodbcdm_getkeyvalinstr (
+    char *cnstr,
+    int cnlen,
+    char *keywd,
+    char *value,
+    int size)
 {
-        char    token[1024] = { '\0' };
-        int     flag = 0;
-
-        if( cnstr == NULL || value == NULL
-         || keywd == NULL || size < 1 )
-        {
-                return NULL;
-        }
-
-        if( cnlen == SQL_NTS )
-        {
-                cnlen = STRLEN (cnstr);
-        }
-
-        if( cnlen <= 0 )
-        {
-                return NULL;
-        }
-
-        for(;;)
-        {
-                cnstr = readtoken(cnstr, token);
-
-                if( *token == '\0' )
-                {
-                        break;
-                }
-
-                if( STREQ( token, ";" ) )
-                {
-                        flag = 0;
-                        continue;
-                }
-
-                switch(flag)
-                {
-                        case 0:
-                                if( upper_strneq(token, keywd, strlen(keywd)) )
-                                {
-                                        flag = 1;
-                                }
-                                break;
-
-                        case 1:
-                                if( STREQ( token, "=" ) )
-                                {
-                                        flag = 2;
-                                }
-                                break;
-
-                        case 2:
-                                if( size < strlen(token) + 1 )
-                                {
-                                        return NULL;
-                                }
-
-                                STRNCPY( value, token, size );
-
-                                return value;
-
-                        default:
-                                break;
-                }
-        }
-
-        return  NULL;
+  char token[1024] = {'\0'};
+  int flag = 0;
+
+  if (cnstr == NULL || value == NULL
+      || keywd == NULL || size < 1)
+    {
+      return NULL;
+    }
+
+  if (cnlen == SQL_NTS)
+    {
+      cnlen = STRLEN (cnstr);
+    }
+
+  if (cnlen <= 0)
+    {
+      return NULL;
+    }
+
+  for (;;)
+    {
+      cnstr = readtoken (cnstr, token);
+
+      if (*token == '\0')
+       {
+         break;
+       }
+
+      if (STREQ (token, ";"))
+       {
+         flag = 0;
+         continue;
+       }
+
+      switch (flag)
+       {
+       case 0:
+         if (upper_strneq (token, keywd, strlen (keywd)))
+           {
+             flag = 1;
+           }
+         break;
+
+       case 1:
+         if (STREQ (token, "="))
+           {
+             flag = 2;
+           }
+         break;
+
+       case 2:
+         if (size < strlen (token) + 1)
+           {
+             return NULL;
+           }
+
+         STRNCPY (value, token, size);
+
+         return value;
+
+       default:
+         break;
+       }
+    }
+
+  return NULL;
 }
diff --git a/src/iodbc/odbc_funcs.h b/src/iodbc/odbc_funcs.h
deleted file mode 100644 (file)
index 508d5bd..0000000
+++ /dev/null
@@ -1,380 +0,0 @@
-#define SQLRETURN RETCODE
-SQLRETURN SQL_API SQLDriverConnect(
-    SQLHDBC            hdbc,
-    SQLHWND            hwnd,
-    SQLCHAR FAR       *szConnStrIn,
-    SQLSMALLINT        cbConnStrIn,
-    SQLCHAR FAR       *szConnStrOut,
-    SQLSMALLINT        cbConnStrOutMax,
-    SQLSMALLINT FAR   *pcbConnStrOut,
-    SQLUSMALLINT       fDriverCompletion);
-
-SQLRETURN SQL_API SQLBrowseConnect(
-    SQLHDBC            hdbc,
-    SQLCHAR FAR       *szConnStrIn,
-    SQLSMALLINT        cbConnStrIn,
-    SQLCHAR FAR       *szConnStrOut,
-    SQLSMALLINT        cbConnStrOutMax,
-    SQLSMALLINT FAR   *pcbConnStrOut);
-
-SQLRETURN SQL_API SQLColumnPrivileges(
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szCatalogName,
-    SQLSMALLINT        cbCatalogName,
-    SQLCHAR FAR       *szSchemaName,
-    SQLSMALLINT        cbSchemaName,
-    SQLCHAR FAR       *szTableName,
-    SQLSMALLINT        cbTableName,
-    SQLCHAR FAR       *szColumnName,
-    SQLSMALLINT        cbColumnName);
-
-SQLRETURN SQL_API SQLDescribeParam(
-    SQLHSTMT           hstmt,
-    SQLUSMALLINT       ipar,
-    SQLSMALLINT FAR   *pfSqlType,
-    SQLUINTEGER FAR   *pcbParamDef,
-    SQLSMALLINT FAR   *pibScale,
-    SQLSMALLINT FAR   *pfNullable);
-
-SQLRETURN SQL_API SQLExtendedFetch(
-    SQLHSTMT           hstmt,
-    SQLUSMALLINT       fFetchType,
-    SQLINTEGER         irow,
-    SQLUINTEGER FAR   *pcrow,
-    SQLUSMALLINT FAR  *rgfRowStatus);
-
-SQLRETURN SQL_API SQLForeignKeys(
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szPkCatalogName,
-    SQLSMALLINT        cbPkCatalogName,
-    SQLCHAR FAR       *szPkSchemaName,
-    SQLSMALLINT        cbPkSchemaName,
-    SQLCHAR FAR       *szPkTableName,
-    SQLSMALLINT        cbPkTableName,
-    SQLCHAR FAR       *szFkCatalogName,
-    SQLSMALLINT        cbFkCatalogName,
-    SQLCHAR FAR       *szFkSchemaName,
-    SQLSMALLINT        cbFkSchemaName,
-    SQLCHAR FAR       *szFkTableName,
-    SQLSMALLINT        cbFkTableName);
-
-SQLRETURN SQL_API SQLMoreResults(
-    SQLHSTMT           hstmt);
-
-SQLRETURN SQL_API SQLNativeSql(
-    SQLHDBC            hdbc,
-    SQLCHAR FAR       *szSqlStrIn,
-    SQLINTEGER         cbSqlStrIn,
-    SQLCHAR FAR       *szSqlStr,
-    SQLINTEGER         cbSqlStrMax,
-    SQLINTEGER FAR    *pcbSqlStr);
-
-SQLRETURN SQL_API SQLNumParams(
-    SQLHSTMT           hstmt,
-    SQLSMALLINT FAR   *pcpar);
-
-SQLRETURN SQL_API SQLParamOptions(
-    SQLHSTMT           hstmt,
-    SQLUINTEGER        crow,
-    SQLUINTEGER FAR   *pirow);
-
-SQLRETURN SQL_API SQLPrimaryKeys(
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szCatalogName,
-    SQLSMALLINT        cbCatalogName,
-    SQLCHAR FAR       *szSchemaName,
-    SQLSMALLINT        cbSchemaName,
-    SQLCHAR FAR       *szTableName,
-    SQLSMALLINT        cbTableName);
-
-SQLRETURN SQL_API SQLProcedureColumns(
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szCatalogName,
-    SQLSMALLINT        cbCatalogName,
-    SQLCHAR FAR       *szSchemaName,
-    SQLSMALLINT        cbSchemaName,
-    SQLCHAR FAR       *szProcName,
-    SQLSMALLINT        cbProcName,
-    SQLCHAR FAR       *szColumnName,
-    SQLSMALLINT        cbColumnName);
-
-SQLRETURN SQL_API SQLProcedures(
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szCatalogName,
-    SQLSMALLINT        cbCatalogName,
-    SQLCHAR FAR       *szSchemaName,
-    SQLSMALLINT        cbSchemaName,
-    SQLCHAR FAR       *szProcName,
-    SQLSMALLINT        cbProcName);
-
-SQLRETURN SQL_API SQLSetPos(
-    SQLHSTMT           hstmt,
-    SQLUSMALLINT       irow,
-    SQLUSMALLINT       fOption,
-    SQLUSMALLINT       fLock);
-
-SQLRETURN SQL_API SQLTablePrivileges(
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szCatalogName,
-    SQLSMALLINT        cbCatalogName,
-    SQLCHAR FAR       *szSchemaName,
-    SQLSMALLINT        cbSchemaName,
-    SQLCHAR FAR       *szTableName,
-    SQLSMALLINT        cbTableName);
-
-SQLRETURN SQL_API SQLDrivers(
-    SQLHENV            henv,
-    SQLUSMALLINT       fDirection,
-    SQLCHAR FAR       *szDriverDesc,
-    SQLSMALLINT        cbDriverDescMax,
-    SQLSMALLINT FAR   *pcbDriverDesc,
-    SQLCHAR FAR       *szDriverAttributes,
-    SQLSMALLINT        cbDrvrAttrMax,
-    SQLSMALLINT FAR   *pcbDrvrAttr);
-
-SQLRETURN SQL_API SQLBindParameter(
-    SQLHSTMT           hstmt,
-    SQLUSMALLINT       ipar,
-    SQLSMALLINT        fParamType,
-    SQLSMALLINT        fCType,
-    SQLSMALLINT        fSqlType,
-    SQLUINTEGER        cbColDef,
-    SQLSMALLINT        ibScale,
-    SQLPOINTER         rgbValue,
-    SQLINTEGER         cbValueMax,
-    SQLINTEGER FAR    *pcbValue);
-
-SQLRETURN SQL_API SQLAllocConnect(
-    SQLHENV            henv,
-    SQLHDBC FAR       *phdbc);
-
-SQLRETURN SQL_API SQLAllocEnv(
-    SQLHENV FAR       *phenv);
-
-SQLRETURN SQL_API SQLAllocStmt(
-    SQLHDBC            hdbc,
-    SQLHSTMT FAR      *phstmt);
-
-SQLRETURN SQL_API SQLBindCol(
-    SQLHSTMT           hstmt,
-    SQLUSMALLINT       icol,
-    SQLSMALLINT        fCType,
-    SQLPOINTER         rgbValue,
-    SQLINTEGER         cbValueMax,
-    SQLINTEGER FAR    *pcbValue);
-
-SQLRETURN SQL_API SQLCancel(
-    SQLHSTMT           hstmt);
-
-SQLRETURN SQL_API SQLColAttributes(
-    SQLHSTMT           hstmt,
-    SQLUSMALLINT       icol,
-    SQLUSMALLINT       fDescType,
-    SQLPOINTER         rgbDesc,
-    SQLSMALLINT        cbDescMax,
-    SQLSMALLINT FAR   *pcbDesc,
-    SQLINTEGER FAR    *pfDesc);
-
-SQLRETURN SQL_API SQLConnect(
-    SQLHDBC            hdbc,
-    SQLCHAR FAR       *szDSN,
-    SQLSMALLINT        cbDSN,
-    SQLCHAR FAR       *szUID,
-    SQLSMALLINT        cbUID,
-    SQLCHAR FAR       *szAuthStr,
-    SQLSMALLINT        cbAuthStr);
-
-SQLRETURN SQL_API SQLDescribeCol(
-    SQLHSTMT           hstmt,
-    SQLUSMALLINT       icol,
-    SQLCHAR FAR       *szColName,
-    SQLSMALLINT        cbColNameMax,
-    SQLSMALLINT FAR   *pcbColName,
-    SQLSMALLINT FAR   *pfSqlType,
-    SQLUINTEGER FAR   *pcbColDef,
-    SQLSMALLINT FAR   *pibScale,
-    SQLSMALLINT FAR   *pfNullable);
-
-SQLRETURN SQL_API SQLDisconnect(
-    SQLHDBC            hdbc);
-
-SQLRETURN SQL_API SQLError(
-    SQLHENV            henv,
-    SQLHDBC            hdbc,
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szSqlState,
-    SQLINTEGER FAR    *pfNativeError,
-    SQLCHAR FAR       *szErrorMsg,
-    SQLSMALLINT        cbErrorMsgMax,
-    SQLSMALLINT FAR   *pcbErrorMsg);
-
-SQLRETURN SQL_API SQLExecDirect(
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szSqlStr,
-    SQLINTEGER         cbSqlStr);
-
-SQLRETURN SQL_API SQLExecute(
-    SQLHSTMT           hstmt);
-
-SQLRETURN SQL_API SQLFetch(
-    SQLHSTMT           hstmt);
-
-SQLRETURN SQL_API SQLFreeConnect(
-    SQLHDBC            hdbc);
-
-SQLRETURN SQL_API SQLFreeEnv(
-    SQLHENV            henv);
-
-SQLRETURN SQL_API SQLFreeStmt(
-    SQLHSTMT           hstmt,
-    SQLUSMALLINT       fOption);
-
-SQLRETURN SQL_API SQLGetCursorName(
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szCursor,
-    SQLSMALLINT        cbCursorMax,
-    SQLSMALLINT FAR   *pcbCursor);
-
-SQLRETURN SQL_API SQLNumResultCols(
-    SQLHSTMT           hstmt,
-    SQLSMALLINT FAR   *pccol);
-
-SQLRETURN SQL_API SQLPrepare(
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szSqlStr,
-    SQLINTEGER         cbSqlStr);
-
-SQLRETURN SQL_API SQLRowCount(
-    SQLHSTMT           hstmt,
-    SQLINTEGER FAR    *pcrow);
-
-SQLRETURN SQL_API SQLSetCursorName(
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szCursor,
-    SQLSMALLINT        cbCursor);
-
-SQLRETURN SQL_API SQLTransact(
-    SQLHENV            henv,
-    SQLHDBC            hdbc,
-    SQLUSMALLINT       fType);
-
-
-SQLRETURN SQL_API SQLSetParam(            /*      Use SQLBindParameter */
-    SQLHSTMT           hstmt,
-    SQLUSMALLINT       ipar,
-    SQLSMALLINT        fCType,
-    SQLSMALLINT        fSqlType,
-    SQLUINTEGER        cbParamDef,
-    SQLSMALLINT        ibScale,
-    SQLPOINTER         rgbValue,
-    SQLINTEGER FAR     *pcbValue);
-
-SQLRETURN SQL_API SQLColumns(
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szCatalogName,
-    SQLSMALLINT        cbCatalogName,
-    SQLCHAR FAR       *szSchemaName,
-    SQLSMALLINT        cbSchemaName,
-    SQLCHAR FAR       *szTableName,
-    SQLSMALLINT        cbTableName,
-    SQLCHAR FAR       *szColumnName,
-    SQLSMALLINT        cbColumnName);
-
-SQLRETURN SQL_API SQLGetConnectOption(
-    SQLHDBC            hdbc,
-    SQLUSMALLINT       fOption,
-    SQLPOINTER         pvParam);
-
-SQLRETURN SQL_API SQLGetData(
-    SQLHSTMT           hstmt,
-    SQLUSMALLINT       icol,
-    SQLSMALLINT        fCType,
-    SQLPOINTER         rgbValue,
-    SQLINTEGER         cbValueMax,
-    SQLINTEGER FAR    *pcbValue);
-
-SQLRETURN SQL_API SQLGetFunctions(
-    SQLHDBC            hdbc,
-    SQLUSMALLINT       fFunction,
-    SQLUSMALLINT FAR  *pfExists);
-
-SQLRETURN SQL_API SQLGetInfo(
-    SQLHDBC            hdbc,
-    SQLUSMALLINT       fInfoType,
-    SQLPOINTER         rgbInfoValue,
-    SQLSMALLINT        cbInfoValueMax,
-    SQLSMALLINT FAR   *pcbInfoValue);
-
-SQLRETURN SQL_API SQLGetStmtOption(
-    SQLHSTMT           hstmt,
-    SQLUSMALLINT       fOption,
-    SQLPOINTER         pvParam);
-
-SQLRETURN SQL_API SQLGetTypeInfo(
-    SQLHSTMT           hstmt,
-    SQLSMALLINT        fSqlType);
-
-SQLRETURN SQL_API SQLParamData(
-    SQLHSTMT           hstmt,
-    SQLPOINTER FAR    *prgbValue);
-
-SQLRETURN SQL_API SQLPutData(
-    SQLHSTMT           hstmt,
-    SQLPOINTER         rgbValue,
-    SQLINTEGER         cbValue);
-
-SQLRETURN SQL_API SQLSetConnectOption(
-    SQLHDBC            hdbc,
-    SQLUSMALLINT       fOption,
-    SQLUINTEGER        vParam);
-
-SQLRETURN SQL_API SQLSetStmtOption(
-    SQLHSTMT           hstmt,
-    SQLUSMALLINT       fOption,
-    SQLUINTEGER        vParam);
-
-SQLRETURN SQL_API SQLSpecialColumns(
-    SQLHSTMT           hstmt,
-    SQLUSMALLINT       fColType,
-    SQLCHAR FAR       *szCatalogName,
-    SQLSMALLINT        cbCatalogName,
-    SQLCHAR FAR       *szSchemaName,
-    SQLSMALLINT        cbSchemaName,
-    SQLCHAR FAR       *szTableName,
-    SQLSMALLINT        cbTableName,
-    SQLUSMALLINT       fScope,
-    SQLUSMALLINT       fNullable);
-
-SQLRETURN SQL_API SQLStatistics(
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szCatalogName,
-    SQLSMALLINT        cbCatalogName,
-    SQLCHAR FAR       *szSchemaName,
-    SQLSMALLINT        cbSchemaName,
-    SQLCHAR FAR       *szTableName,
-    SQLSMALLINT        cbTableName,
-    SQLUSMALLINT       fUnique,
-    SQLUSMALLINT       fAccuracy);
-
-SQLRETURN SQL_API SQLTables(
-    SQLHSTMT           hstmt,
-    SQLCHAR FAR       *szCatalogName,
-    SQLSMALLINT        cbCatalogName,
-    SQLCHAR FAR       *szSchemaName,
-    SQLSMALLINT        cbSchemaName,
-    SQLCHAR FAR       *szTableName,
-    SQLSMALLINT        cbTableName,
-    SQLCHAR FAR       *szTableType,
-    SQLSMALLINT        cbTableType);
-
-
-SQLRETURN SQL_API SQLDataSources(
-    SQLHENV            henv,
-    SQLUSMALLINT       fDirection,
-    SQLCHAR FAR       *szDSN,
-    SQLSMALLINT        cbDSNMax,
-    SQLSMALLINT FAR   *pcbDSN,
-    SQLCHAR FAR       *szDescription,
-    SQLSMALLINT        cbDescriptionMax,
-    SQLSMALLINT FAR   *pcbDescription);
-
diff --git a/src/iodbc/odbc_types.h b/src/iodbc/odbc_types.h
deleted file mode 100644 (file)
index b7d78b8..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-#define SQL_MAX_USER_NAME_LEN               107
-#define SQL_SPEC_STRING         "02.50"         /* String constant for version */
-#define SQL_ACTIVE_CONNECTIONS               0
-#define SQL_ACTIVE_STATEMENTS                1
-#define SQL_DATA_SOURCE_NAME                 2
-#define SQL_DATABASE_NAME               16    /* Use SQLGetConnectOption/SQL_CURRENT_QUALIFIER */
-#define SQL_DBMS_VER                        18
-#define SQL_FETCH_DIRECTION                  8
-#define SQL_ROW_UPDATES                     11
-#define SQL_ODBC_SAG_CLI_CONFORMANCE        12
-#define SQL_DRIVER_VER                       7
-#define SQL_SERVER_NAME                     13
-#define SQL_SEARCH_PATTERN_ESCAPE           14
-#define SQL_ODBC_API_CONFORMANCE             9
-#define SQL_ODBC_SQL_CONFORMANCE            15
-#define SQL_OAC_LEVEL1                      0x0001
-#define SQL_DBMS_NAME                       17
-#define SQL_ACCESSIBLE_PROCEDURES           20
-#define SQL_OUTER_JOINS                     38
-#define SQL_NEED_LONG_DATA_LEN              111
-#define SQL_EXPRESSIONS_IN_ORDERBY          27
-#define SQL_PROCEDURES                      21
-#define SQL_COLUMN_ALIAS                    87
-#define SQL_CONCAT_NULL_BEHAVIOR            22
-#define SQL_DATA_SOURCE_READ_ONLY           25
-#define SQL_ACCESSIBLE_TABLES               19
-#define SQL_IDENTIFIER_QUOTE_CHAR           29
-#define SQL_MAX_COLUMN_NAME_LEN             30
-#define SQL_MAX_CURSOR_NAME_LEN             31
-#define SQL_MAX_OWNER_NAME_LEN              32
-#define SQL_MAX_PROCEDURE_NAME_LEN          33
-#define SQL_MAX_QUALIFIER_NAME_LEN          34
-#define SQL_MAX_TABLE_NAME_LEN              35
-#define SQL_MULT_RESULT_SETS                36
-#define SQL_MULTIPLE_ACTIVE_TXN             37
-#define SQL_MAX_ROW_SIZE_INCLUDES_LONG      103
-#define SQL_OWNER_TERM                      39
-#define SQL_PROCEDURE_TERM                  40
-#define SQL_QUALIFIER_NAME_SEPARATOR        41
-#define SQL_QUALIFIER_TERM                  42
-#define SQL_SCROLL_CONCURRENCY              43
-#define SQL_SCROLL_OPTIONS                  44
-#define SQL_TABLE_TERM                      45
-#define SQL_TXN_CAPABLE                     46
-#define SQL_USER_NAME                       47
-#define SQL_CONVERT_FUNCTIONS               48
-#define SQL_SYSTEM_FUNCTIONS                51
-#define SQL_NUMERIC_FUNCTIONS               49
-#define SQL_STRING_FUNCTIONS                50
-#define SQL_TIMEDATE_FUNCTIONS              52
-
-#define SQL_CONVERT_BIGINT                  53
-#define SQL_CONVERT_BIT                     55
-#define SQL_CONVERT_CHAR                    56
-#define SQL_CONVERT_DATE                    57
-#define SQL_CONVERT_DECIMAL                 58
-#define SQL_CONVERT_DOUBLE                  59
-#define SQL_CONVERT_FLOAT                   60
-#define SQL_CONVERT_INTEGER                 61
-#define SQL_CONVERT_LONGVARCHAR             62
-#define SQL_CONVERT_NUMERIC                 63
-#define SQL_CONVERT_REAL                    64
-#define SQL_CONVERT_SMALLINT                65
-#define SQL_CONVERT_TIME                    66
-#define SQL_CONVERT_TIMESTAMP               67
-#define SQL_CONVERT_TIMESTAMP               67
-#define SQL_CONVERT_TINYINT                 68
-#define SQL_CONVERT_VARCHAR                 70
-#define SQL_CVT_CHAR                        0x00000001L
-#define SQL_CVT_NUMERIC                     0x00000002L
-#define SQL_CVT_DECIMAL                     0x00000004L
-#define SQL_CVT_INTEGER                     0x00000008L
-#define SQL_CVT_SMALLINT                    0x00000010L
-#define SQL_CVT_FLOAT                       0x00000020L
-#define SQL_CVT_REAL                        0x00000040L
-#define SQL_CVT_DOUBLE                      0x00000080L
-#define SQL_CVT_VARCHAR                     0x00000100L
-#define SQL_CVT_LONGVARCHAR                 0x00000200L
-#define SQL_CVT_BIT                         0x00001000L
-#define SQL_CVT_TINYINT                     0x00002000L
-#define SQL_CVT_BIGINT                      0x00004000L
-#define SQL_CVT_DATE                        0x00008000L
-#define SQL_CVT_TIME                        0x00010000L
-#define SQL_CVT_TIMESTAMP                   0x00020000L
-#define SQL_CVT_TIMESTAMP                   0x00020000L
-#define SQL_CONVERT_BINARY                  54
-#define SQL_CONVERT_VARBINARY               69
-#define SQL_CONVERT_LONGVARBINARY           71
-#define SQL_CORRELATION_NAME                74
-#define SQL_CN_DIFFERENT                    0x0001
-#define SQL_NNC_NON_NULL                    0x0001
-#define SQL_NULL_COLLATION                  85
-#define SQL_NC_START                        0x0002
-#define SQL_MAX_COLUMNS_IN_GROUP_BY         97
-#define SQL_MAX_COLUMNS_IN_ORDER_BY         99
-#define SQL_MAX_COLUMNS_IN_SELECT           100
-#define SQL_MAX_COLUMNS_IN_TABLE            101
-#define SQL_MAX_TABLES_IN_SELECT            106
-#define SQL_MAX_ROW_SIZE_INCLUDES_LONG      103
-#define SQL_MAX_ROW_SIZE                    104
-#define SQL_MAX_BINARY_LITERAL_LEN          112
-#define SQL_MAX_CHAR_LITERAL_LEN            108
-#define SQL_MAX_COLUMNS_IN_INDEX            98
-#define SQL_MAX_INDEX_SIZE                  102
-#define SQL_MAX_STATEMENT_LEN               105
-#define SQL_MAX_OPTION_STRING_LENGTH       256
-
-#define SQL_QL_START                        0x0001L
-#define SQL_SEARCHABLE                  3
-#define SQL_IDENTIFIER_CASE                 28
-#define SQL_COLUMN_NAME                 1
-#define SQL_COLUMN_TYPE                 2
-#define SQL_COLUMN_TYPE_NAME            14
-#define SQL_COLUMN_PRECISION            4
-#define SQL_COLUMN_DISPLAY_SIZE         6
-#define SQL_COLUMN_LENGTH               3
-#define SQL_COLUMN_SCALE                5
-#define SQL_COLUMN_NULLABLE             7
-#define SQL_COLUMN_SEARCHABLE           13
-#define SQL_COLUMN_UNSIGNED             8
-#define SQL_COLUMN_MONEY                9
-#define SQL_COLUMN_AUTO_INCREMENT       11
-#define SQL_COLUMN_CASE_SENSITIVE       12
-#define SQL_COLUMN_UPDATABLE            10
-#define SQL_COLUMN_OWNER_NAME           16
-#define SQL_COLUMN_QUALIFIER_NAME       17
-#define SQL_OSCC_COMPLIANT                  0x0001
-#define SQL_ODBC_SQL_OPT_IEF                73
-#define SQL_LIKE_ESCAPE_CLAUSE              113
-#define SQL_ORDER_BY_COLUMNS_IN_SELECT      90
-#define SQL_POS_OPERATIONS                  79
-#define SQL_POSITIONED_STATEMENTS           80
-#define SQL_LOCK_TYPES                      78
-#define SQL_BOOKMARK_PERSISTENCE            82
-#define SQL_ALTER_TABLE                     86
-#define SQL_OWNER_USAGE                     91
-#define SQL_QUALIFIER_USAGE                 92
-#define SQL_QUOTED_IDENTIFIER_CASE          93
-#define SQL_SUBQUERIES                      95
-#define SQL_UNION                           96
-#define SQL_TIMEDATE_DIFF_INTERVALS         110
-#define SQL_GETDATA_EXTENSIONS              81
-#define SQL_GD_ANY_COLUMN                   0x00000001L
-#define SQL_GD_ANY_ORDER                    0x00000002L
-#define SQL_GD_BOUND                        0x00000008L
-#define SQL_STATIC_SENSITIVITY              83
-#define SQL_SS_DELETIONS                    0x00000002L
-#define SQL_SS_UPDATES                      0x00000004L
-#define SQL_FILE_USAGE                      84
-#define SQL_FILE_NOT_SUPPORTED              0x0000
-#define SQL_GROUP_BY                        88
-#define SQL_GB_GROUP_BY_EQUALS_SELECT       0x0001
-#define SQL_KEYWORDS                        89
-#define SQL_SPECIAL_CHARACTERS              94
-#define SQL_TIMEDATE_ADD_INTERVALS          109
-#define SQL_IC_MIXED                        0x0004
-#define SQL_FN_SYS_DBNAME                   0x00000002L
-#define SQL_FN_SYS_IFNULL                   0x00000004L
-#define SQL_FN_SYS_USERNAME                 0x00000001L
-#define SQL_FN_STR_INSERT                   0x00000002L
-#define SQL_FN_STR_LTRIM                    0x00000008L
-#define SQL_FN_STR_RTRIM                    0x00000400L
-#define SQL_BLOB                          21
-#define SQL_BLOB_LOCATOR                  22
-#define SQL_CLOB                          23
-#define SQL_CLOB_LOCATOR                  24
-#define SQL_DBCLOB                        25
-#define SQL_DBCLOB_LOCATOR                26
-#define SQL_GRAPHIC                       27
-#define SQL_LONGVARGRAPHIC                30
-#define SQL_VARGRAPHIC                    32
-#define SQL_SQLSTATE_SIZE                8
-#define SQL_COLUMN_DISTINCT_TYPE        1250
-#define SQL_COLUMN_TABLE_NAME             15
-#define SQL_LEN_DATA_AT_EXEC_OFFSET  (-100)
-#define SQL_CB_NULL                         0x0000
-#define SQL_TC_NONE                         0x0000
-#define SQL_NOSCAN_OFF                  0UL     
-#define SQL_ASYNC_ENABLE_OFF            0UL
-#define SQL_SC_NON_UNIQUE               0UL
-#define SQL_UB_OFF                      0UL
-#define SQL_PC_NOT_PSEUDO               1
-#define SQL_PC_NON_PSEUDO               SQL_PC_NOT_PSEUDO
-#define SQL_UNSEARCHABLE                0
-#define SQL_FD_FETCH_NEXT                   0x00000001L
-#define SQL_FD_FETCH_FIRST                  0x00000002L
-#define SQL_FD_FETCH_LAST                   0x00000004L
-#define SQL_FD_FETCH_PRIOR                  0x00000008L
-#define SQL_FD_FETCH_PREV               SQL_FD_FETCH_PRIOR
-#define SQL_FD_FETCH_ABSOLUTE               0x00000010L
-#define SQL_FD_FETCH_RELATIVE               0x00000020L
-
-#define SQL_FN_NUM_ABS                      0x00000001L
-#define SQL_FN_NUM_ACOS                     0x00000002L
-#define SQL_FN_NUM_ASIN                     0x00000004L
-#define SQL_FN_NUM_ATAN                     0x00000008L
-#define SQL_FN_NUM_ATAN2                    0x00000010L
-#define SQL_FN_NUM_CEILING                  0x00000020L
-#define SQL_FN_NUM_COS                      0x00000040L
-#define SQL_FN_NUM_COT                      0x00000080L
-#define SQL_FN_NUM_EXP                      0x00000100L
-#define SQL_FN_NUM_FLOOR                    0x00000200L
-#define SQL_FN_NUM_LOG                      0x00000400L
-#define SQL_FN_NUM_MOD                      0x00000800L
-#define SQL_FN_NUM_SIGN                     0x00001000L
-#define SQL_FN_NUM_SIN                      0x00002000L
-#define SQL_FN_NUM_SQRT                     0x00004000L
-#define SQL_FN_NUM_TAN                      0x00008000L
-#define SQL_FN_NUM_PI                       0x00010000L
-#define SQL_FN_NUM_RAND                     0x00020000L
-#define SQL_FN_NUM_DEGREES                  0x00040000L
-#define SQL_FN_NUM_LOG10                    0x00080000L
-#define SQL_FN_NUM_POWER                    0x00100000L
-#define SQL_FN_NUM_RADIANS                  0x00200000L
-#define SQL_FN_NUM_ROUND                    0x00400000L
-#define SQL_FN_NUM_TRUNCATE                 0x00800000L
-
-#define SQL_FN_STR_CONCAT                   0x00000001L
-#define SQL_FN_STR_INSERT                   0x00000002L
-#define SQL_FN_STR_LEFT                     0x00000004L
-#define SQL_FN_STR_LTRIM                    0x00000008L
-#define SQL_FN_STR_LENGTH                   0x00000010L
-#define SQL_FN_STR_LOCATE                   0x00000020L
-#define SQL_FN_STR_LCASE                    0x00000040L
-#define SQL_FN_STR_REPEAT                   0x00000080L
-#define SQL_FN_STR_REPLACE                  0x00000100L
-#define SQL_FN_STR_RIGHT                    0x00000200L
-#define SQL_FN_STR_RTRIM                    0x00000400L
-#define SQL_FN_STR_SUBSTRING                0x00000800L
-#define SQL_FN_STR_UCASE                    0x00001000L
-#define SQL_FN_STR_ASCII                    0x00002000L
-#define SQL_FN_STR_CHAR                     0x00004000L
-#define SQL_FN_STR_DIFFERENCE               0x00008000L
-#define SQL_FN_STR_LOCATE_2                 0x00010000L
-#define SQL_FN_STR_SOUNDEX                  0x00020000L
-#define SQL_FN_STR_SPACE                    0x00040000L
-#define SQL_FN_STR_BIT_LENGTH              0x00080000L
-#define SQL_FN_STR_CHAR_LENGTH             0x00100000L
-#define SQL_FN_STR_CHARACTER_LENGTH        0x00200000L
-#define SQL_FN_STR_OCTET_LENGTH                    0x00400000L
-#define SQL_FN_STR_POSITION                0x00800000L
-
-#define SQL_FN_TD_NOW                       0x00000001L
-#define SQL_FN_TD_CURDATE                   0x00000002L
-#define SQL_FN_TD_DAYOFMONTH                0x00000004L
-#define SQL_FN_TD_DAYOFWEEK                 0x00000008L
-#define SQL_FN_TD_DAYOFYEAR                 0x00000010L
-#define SQL_FN_TD_MONTH                     0x00000020L
-#define SQL_FN_TD_QUARTER                   0x00000040L
-#define SQL_FN_TD_WEEK                      0x00000080L
-#define SQL_FN_TD_YEAR                      0x00000100L
-#define SQL_FN_TD_CURTIME                   0x00000200L
-#define SQL_FN_TD_HOUR                      0x00000400L
-#define SQL_FN_TD_MINUTE                    0x00000800L
-#define SQL_FN_TD_SECOND                    0x00001000L
-#define SQL_FN_TD_TIMESTAMPADD              0x00002000L
-#define SQL_FN_TD_TIMESTAMPDIFF             0x00004000L
-#define SQL_FN_TD_DAYNAME                   0x00008000L
-#define SQL_FN_TD_MONTHNAME                 0x00010000L
-#define SQL_FN_TD_CURRENT_DATE             0x00020000L
-#define SQL_FN_TD_CURRENT_TIME             0x00040000L
-#define SQL_FN_TD_CURRENT_TIMESTAMP        0x00080000L
-#define SQL_FN_TD_EXTRACT                  0x00100000L
-
-#define SQL_POS_POSITION                    0x00000001L
-#define SQL_AT_ADD_COLUMN                   0x00000001L
-#define SQL_AT_DROP_COLUMN                  0x00000002L
-#define SQL_GB_NO_RELATION                  0x0003
-#define SQL_BIND_BY_COLUMN              0UL
-#define SQL_BIND_TYPE_DEFAULT           SQL_BIND_BY_COLUMN  /* Default value */
-#define SQL_ATTR_READONLY               0
-#define SQL_FETCH_PREV                  SQL_FETCH_PRIOR
-#define SQL_ROW_SUCCESS                 0
-#define SQL_ROW_NOROW                   3
-#define SQL_NOSCAN                     2
-
-#define SQL_RD_OFF                      0UL
-#define SQL_RD_ON                       1UL
-#define SQL_RD_DEFAULT                  SQL_RD_ON
-
-#define SQL_NOSCAN_OFF                  0UL
-#define SQL_NOSCAN_ON                   1UL
-#define SQL_NOSCAN_DEFAULT              SQL_NOSCAN_OFF
index a0c215ca25c668468c43fde42c4ebbdb5132d3fa..f432ad5600617780e871e303c30a7e133464203b 100644 (file)
-/** Prepare a query
-
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
-
-#include       <../iodbc/iodbc.h>
-
-#include       <../iodbc/isql.h>
-#include       <../iodbc/isqlext.h>
-
-#include        <../iodbc/dlproc.h>
-
-#include       <../iodbc/herr.h>
-#include       <../iodbc/henv.h>
-#include       <../iodbc/hdbc.h>
-#include       <../iodbc/hstmt.h>
-
-#include       <../iodbc/itrace.h>
-
-
-RETCODE SQL_API SQLPrepare (
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szSqlStr,
-                        SDWORD          cbSqlStr )
+/*
+ *  prepare.c
+ *
+ *  $Id$
+ *
+ *  Prepare a query
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include       <config.h>
+
+#include       <isql.h>
+#include       <isqlext.h>
+
+#include        <dlproc.h>
+
+#include       <herr.h>
+#include       <henv.h>
+#include       <hdbc.h>
+#include       <hstmt.h>
+
+#include       <itrace.h>
+
+#include        <unistd.h>
+
+RETCODE SQL_API 
+SQLPrepare (
+    HSTMT hstmt,
+    UCHAR FAR * szSqlStr,
+    SDWORD cbSqlStr)
 {
-        STMT_t FAR*     pstmt   = (STMT_t*)hstmt;
-
-        HPROC           hproc   = SQL_NULL_HPROC;
-        RETCODE         retcode = SQL_SUCCESS;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                /* not on asyn state */
-                switch( pstmt->state )
-                {
-                        case en_stmt_fetched:
-                        case en_stmt_xfetched:
-                                sqlstat = en_24000;
-                                break;
-
-                        case en_stmt_needdata:
-                        case en_stmt_mustput:
-                        case en_stmt_canput:
-                                sqlstat = en_S1010;
-                                break;
-
-                        default:
-                                break;
-                }
-        }
-        else if( pstmt->asyn_on != en_Prepare )
-        {
-                /* asyn on other */
-                sqlstat = en_S1010;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        if( szSqlStr == NULL )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1009 );
-
-                return SQL_ERROR;
-        }
-
-        if( cbSqlStr < 0 && cbSqlStr != SQL_NTS )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1090 );
-
-                return SQL_ERROR;
-        }
-
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_Prepare );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Prepare, (
-                        pstmt->dhstmt, szSqlStr, cbSqlStr) )
-
-#if 0
-        retcode = hproc ( pstmt->dhstmt, szSqlStr, cbSqlStr );
-#endif
-
-        /* stmt state transition */
-        if( pstmt->asyn_on == en_Prepare )
-        {
-                switch( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-                                return retcode;
-
-                        case SQL_STILL_EXECUTING:
-                        default:
-                                return retcode;
-                }
-        }
-
-        switch( retcode )
-        {
-                case SQL_STILL_EXECUTING:
-                        pstmt->asyn_on = en_Prepare;
-                        break;
-
-                case SQL_SUCCESS:
-                case SQL_SUCCESS_WITH_INFO:
-                        pstmt->state = en_stmt_prepared;
-                        pstmt->prep_state = 1;
-                        break;
-
-                case SQL_ERROR:
-                        switch( pstmt->state )
-                        {
-                                case en_stmt_prepared:
-                                case en_stmt_executed:
-                                        pstmt->state = en_stmt_allocated;
-                                        pstmt->prep_state = 0;
-                                        break;
-
-                                default:
-                                        break;
-                        }
-
-                default:
-                        break;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t *) hstmt;
+
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode = SQL_SUCCESS;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      /* not on asyn state */
+      switch (pstmt->state)
+        {
+        case en_stmt_fetched:
+        case en_stmt_xfetched:
+          sqlstat = en_24000;
+          break;
+
+        case en_stmt_needdata:
+        case en_stmt_mustput:
+        case en_stmt_canput:
+          sqlstat = en_S1010;
+          break;
+
+        default:
+          break;
+        }
+    }
+  else if (pstmt->asyn_on != en_Prepare)
+    {
+      /* asyn on other */
+      sqlstat = en_S1010;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  if (szSqlStr == NULL)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1009);
+
+      return SQL_ERROR;
+    }
+
+  if (cbSqlStr < 0 && cbSqlStr != SQL_NTS)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1090);
+
+      return SQL_ERROR;
+    }
+
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_Prepare);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_Prepare,
+    (pstmt->dhstmt, szSqlStr, cbSqlStr))
+
+  /* stmt state transition */
+  if (pstmt->asyn_on == en_Prepare)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+          return retcode;
+
+        case SQL_STILL_EXECUTING:
+        default:
+          return retcode;
+        }
+    }
+
+  switch (retcode)
+     {
+     case SQL_STILL_EXECUTING:
+       pstmt->asyn_on = en_Prepare;
+       break;
+
+     case SQL_SUCCESS:
+     case SQL_SUCCESS_WITH_INFO:
+       pstmt->state = en_stmt_prepared;
+       pstmt->prep_state = 1;
+       break;
+
+     case SQL_ERROR:
+       switch (pstmt->state)
+         {
+         case en_stmt_prepared:
+         case en_stmt_executed:
+           pstmt->state = en_stmt_allocated;
+           pstmt->prep_state = 0;
+           break;
+
+         default:
+           break;
+         }
+
+     default:
+       break;
+     }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLSetCursorName (
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szCursor,
-                        SWORD           cbCursor )
+
+RETCODE SQL_API 
+SQLSetCursorName (
+    HSTMT hstmt,
+    UCHAR FAR * szCursor,
+    SWORD cbCursor)
 {
-        STMT_t FAR*     pstmt   = (STMT_t*)hstmt;
-        HPROC           hproc   = SQL_NULL_HPROC;
-
-        RETCODE         retcode = SQL_SUCCESS;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        if( szCursor == NULL )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1009 );
-
-                return SQL_ERROR;
-        }
-
-        if( cbCursor < 0 && cbCursor != SQL_NTS )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1090 );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pstmt->asyn_on != en_NullProc )
-        {
-                sqlstat = en_S1010;
-        }
-        else
-        {
-                switch( pstmt->state )
-                {
-                        case en_stmt_executed:
-                        case en_stmt_cursoropen:
-                        case en_stmt_fetched:
-                        case en_stmt_xfetched:
-                                sqlstat = en_24000;
-                                break;
-
-                        case en_stmt_needdata:
-                        case en_stmt_mustput:
-                        case en_stmt_canput:
-                                sqlstat = en_S1010;
-                                break;
-
-                        default:
-                                break;
-                }
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_SetCursorName);
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SetCursorName, (
-                        pstmt->dhstmt, szCursor, cbCursor ) )
-
-#if 0
-        retcode = hproc ( pstmt->dhstmt, szCursor, cbCursor );
-#endif
-
-        if( retcode == SQL_SUCCESS
-         || retcode == SQL_SUCCESS_WITH_INFO )
-        {
-                pstmt->cursor_state = en_stmt_cursor_named;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+
+  RETCODE retcode = SQL_SUCCESS;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  if (szCursor == NULL)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1009);
+
+      return SQL_ERROR;
+    }
+
+  if (cbCursor < 0 && cbCursor != SQL_NTS)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1090);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pstmt->asyn_on != en_NullProc)
+    {
+      sqlstat = en_S1010;
+    }
+  else
+    {
+      switch (pstmt->state)
+        {
+        case en_stmt_executed:
+        case en_stmt_cursoropen:
+        case en_stmt_fetched:
+        case en_stmt_xfetched:
+          sqlstat = en_24000;
+          break;
+
+        case en_stmt_needdata:
+        case en_stmt_mustput:
+        case en_stmt_canput:
+          sqlstat = en_S1010;
+          break;
+
+        default:
+          break;
+        }
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_SetCursorName);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_SetCursorName,
+    (pstmt->dhstmt, szCursor, cbCursor))
+
+  if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
+    {
+      pstmt->cursor_state = en_stmt_cursor_named;
+    }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLBindParameter (
-                        HSTMT           hstmt,
-                        UWORD           ipar,
-                        SWORD           fParamType,
-                        SWORD           fCType,
-                        SWORD           fSqlType,
-                        UDWORD          cbColDef,
-                        SWORD           ibScale,
-                        PTR             rgbValue,
-                        SDWORD          cbValueMax,
-                        SDWORD FAR*     pcbValue )
+
+RETCODE SQL_API 
+SQLBindParameter (
+    HSTMT hstmt,
+    UWORD ipar,
+    SWORD fParamType,
+    SWORD fCType,
+    SWORD fSqlType,
+    UDWORD cbColDef,
+    SWORD ibScale,
+    PTR rgbValue,
+    SDWORD cbValueMax,
+    SDWORD FAR * pcbValue)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc   = SQL_NULL_HPROC;
-
-        int             sqlstat = en_00000;
-        RETCODE         retcode = SQL_SUCCESS;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check param */
-        if( fSqlType > SQL_TYPE_MAX
-         || ( fSqlType < SQL_TYPE_MIN
-           && fSqlType > SQL_TYPE_DRIVER_START ) )
-        /* Note: SQL_TYPE_DRIVER_START is a nagtive number
-         * So, we use ">" */
-        {
-                sqlstat = en_S1004;
-        }
-        else if ( ipar < 1 )
-        {
-                sqlstat = en_S1093;
-        }
-        else if( (rgbValue == NULL && pcbValue == NULL)
-              && fParamType != SQL_PARAM_OUTPUT )
-        {
-                sqlstat = en_S1009;
-                /* This means, I allow output to nowhere
-                 * (i.e. * junk output result). But I can't
-                 * allow input from nowhere.
-                 */
-        }
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+
+  int sqlstat = en_00000;
+  RETCODE retcode = SQL_SUCCESS;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check param */
+  if (fSqlType > SQL_TYPE_MAX || 
+       (fSqlType < SQL_TYPE_MIN && fSqlType > SQL_TYPE_DRIVER_START))
+    /* Note: SQL_TYPE_DRIVER_START is a nagtive number 
+     * So, we use ">" */
+    {
+      sqlstat = en_S1004;
+    }
+  else if (ipar < 1)
+    {
+      sqlstat = en_S1093;
+    }
+  else if ((rgbValue == NULL && pcbValue == NULL)
+      && fParamType != SQL_PARAM_OUTPUT)
+    {
+      sqlstat = en_S1009;
+      /* This means, I allow output to nowhere
+       * (i.e. * junk output result). But I can't  
+       * allow input from nowhere. 
+       */
+    }
 /**********
-        else if( cbValueMax < 0L && cbValueMax != SQL_SETPARAM_VALUE_MAX )
-        {
-                sqlstat = en_S1090;
-        }
+       else if( cbValueMax < 0L && cbValueMax != SQL_SETPARAM_VALUE_MAX )
+       {
+               sqlstat = en_S1090;
+       }
 **********/
-        else if( fParamType != SQL_PARAM_INPUT
-              && fParamType != SQL_PARAM_OUTPUT
-              && fParamType != SQL_PARAM_INPUT_OUTPUT )
-        {
-                sqlstat = en_S1105;
-        }
-        else
-        {
-                switch( fCType )
-                {
-                        case SQL_C_DEFAULT:
-                        case SQL_C_CHAR:
-                        case SQL_C_BINARY:
-                        case SQL_C_BIT:
-                        case SQL_C_TINYINT:
-                        case SQL_C_STINYINT:
-                        case SQL_C_UTINYINT:
-                        case SQL_C_SHORT:
-                        case SQL_C_SSHORT:
-                        case SQL_C_USHORT:
-                        case SQL_C_LONG:
-                        case SQL_C_SLONG:
-                        case SQL_C_ULONG:
-                        case SQL_C_FLOAT:
-                        case SQL_C_DOUBLE:
-                        case SQL_C_DATE:
-                        case SQL_C_TIME:
-                        case SQL_C_TIMESTAMP:
-                                break;
-
-                        default:
-                                sqlstat = en_S1003;
-                                break;
-                }
-        }
-
-        if(sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pstmt->state >= en_stmt_needdata
-         || pstmt->asyn_on != en_NullProc )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
-
-                retcode = SQL_ERROR;
-        }
-
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_BindParameter );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_BindParameter, (
-                        pstmt->dhstmt, ipar, fParamType, fCType, fSqlType,
-                        cbColDef, ibScale, rgbValue, cbValueMax, pcbValue ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt, ipar, fParamType, fCType, fSqlType,
-                        cbColDef, ibScale, rgbValue, cbValueMax, pcbValue );
-#endif
-
-        return retcode;
+  else if (fParamType != SQL_PARAM_INPUT
+       && fParamType != SQL_PARAM_OUTPUT
+      && fParamType != SQL_PARAM_INPUT_OUTPUT)
+    {
+      sqlstat = en_S1105;
+    }
+  else
+    {
+      switch (fCType)
+        {
+        case SQL_C_DEFAULT:
+        case SQL_C_CHAR:
+        case SQL_C_BINARY:
+        case SQL_C_BIT:
+        case SQL_C_TINYINT:
+        case SQL_C_STINYINT:
+        case SQL_C_UTINYINT:
+        case SQL_C_SHORT:
+        case SQL_C_SSHORT:
+        case SQL_C_USHORT:
+        case SQL_C_LONG:
+        case SQL_C_SLONG:
+        case SQL_C_ULONG:
+        case SQL_C_FLOAT:
+        case SQL_C_DOUBLE:
+        case SQL_C_DATE:
+        case SQL_C_TIME:
+        case SQL_C_TIMESTAMP:
+          break;
+
+        default:
+          sqlstat = en_S1003;
+          break;
+        }
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
+
+      retcode = SQL_ERROR;
+    }
+
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_BindParameter);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_BindParameter,
+    (pstmt->dhstmt, ipar, fParamType, fCType, fSqlType, cbColDef,
+      ibScale, rgbValue, cbValueMax, pcbValue))
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLParamOptions(
-                        HSTMT           hstmt,
-                        UDWORD          crow,
-                        UDWORD FAR*     pirow )
-{
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
 
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
+RETCODE SQL_API 
+SQLParamOptions (
+    HSTMT hstmt,
+    UDWORD crow,
+    UDWORD FAR * pirow)
+{
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
 
-        if( crow == (UDWORD)0UL )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1107 );
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
 
-                return SQL_ERROR;
-        }
+  if (crow == (UDWORD) 0UL)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1107);
 
-        if( pstmt->state >= en_stmt_needdata
-         || pstmt->asyn_on != en_NullProc )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
+      return SQL_ERROR;
+    }
 
-                return SQL_ERROR;
-        }
+  if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
 
-        hproc = _iodbcdm_getproc ( pstmt->hdbc, en_ParamOptions );
+      return SQL_ERROR;
+    }
 
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_ParamOptions);
 
-                return SQL_ERROR;
-        }
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
 
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ParamOptions, (
-                        pstmt->dhstmt, crow, pirow) )
+      return SQL_ERROR;
+    }
 
-#if 0
-        retcode = hproc ( pstmt->dhstmt, crow, pirow );
-#endif
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_ParamOptions,
+    (pstmt->dhstmt, crow, pirow))
 
-        return retcode;
+  return retcode;
 }
 
-RETCODE SQL_API SQLSetScrollOptions(
-                        HSTMT           hstmt,
-                        UWORD           fConcurrency,
-                        SDWORD          crowKeyset,
-                        UWORD           crowRowset )
+
+RETCODE SQL_API 
+SQLSetScrollOptions (
+    HSTMT hstmt,
+    UWORD fConcurrency,
+    SDWORD crowKeyset,
+    UWORD crowRowset)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        int             sqlstat = en_00000;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        for(;;)
-        {
-                if( crowRowset == (UWORD)0 )
-                {
-                        sqlstat = en_S1107;
-                        break;
-                }
-
-                if( crowKeyset > (SDWORD)0L && crowKeyset < (SDWORD)crowRowset )
-                {
-                        sqlstat = en_S1107;
-                        break;
-                }
-
-                if( crowKeyset < 1 )
-                {
-                        if( crowKeyset != SQL_SCROLL_FORWARD_ONLY
-                         && crowKeyset != SQL_SCROLL_STATIC
-                         && crowKeyset != SQL_SCROLL_KEYSET_DRIVEN
-                         && crowKeyset != SQL_SCROLL_DYNAMIC )
-                        {
-                                sqlstat = en_S1107;
-                                break;
-                        }
-                }
-
-                if( fConcurrency != SQL_CONCUR_READ_ONLY
-                 && fConcurrency != SQL_CONCUR_LOCK
-                 && fConcurrency != SQL_CONCUR_ROWVER
-                 && fConcurrency != SQL_CONCUR_VALUES )
-                {
-                        sqlstat = en_S1108;
-                        break;
-                }
-
-                if( pstmt->state != en_stmt_allocated )
-                {
-                        sqlstat = en_S1010;
-                        break;
-                }
-
-                hproc = _iodbcdm_getproc( pstmt->hdbc, en_SetScrollOptions );
-
-                if( hproc == SQL_NULL_HPROC )
-                {
-                        sqlstat = en_IM001;
-                        break;
-                }
-
-                sqlstat = en_00000;
-                if( 1 ) /* turn off solaris warning message */
-                        break;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SetScrollOptions, (
-                        pstmt->dhstmt,
-                        fConcurrency,
-                        crowKeyset,
-                        crowRowset ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        fConcurrency,
-                        crowKeyset,
-                        crowRowset );
-#endif
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  int sqlstat = en_00000;
+  RETCODE retcode;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  for (;;)
+    {
+      if (crowRowset == (UWORD) 0)
+       {
+         sqlstat = en_S1107;
+         break;
+       }
+
+      if (crowKeyset > (SDWORD) 0L && crowKeyset < (SDWORD) crowRowset)
+       {
+         sqlstat = en_S1107;
+         break;
+       }
+
+      if (crowKeyset < 1)
+       {
+         if (crowKeyset != SQL_SCROLL_FORWARD_ONLY
+             && crowKeyset != SQL_SCROLL_STATIC
+             && crowKeyset != SQL_SCROLL_KEYSET_DRIVEN
+             && crowKeyset != SQL_SCROLL_DYNAMIC)
+           {
+             sqlstat = en_S1107;
+             break;
+           }
+       }
+
+      if (fConcurrency != SQL_CONCUR_READ_ONLY
+         && fConcurrency != SQL_CONCUR_LOCK
+         && fConcurrency != SQL_CONCUR_ROWVER
+         && fConcurrency != SQL_CONCUR_VALUES)
+       {
+         sqlstat = en_S1108;
+         break;
+       }
+
+      if (pstmt->state != en_stmt_allocated)
+       {
+         sqlstat = en_S1010;
+         break;
+       }
+
+      hproc = _iodbcdm_getproc (pstmt->hdbc, en_SetScrollOptions);
+
+      if (hproc == SQL_NULL_HPROC)
+       {
+         sqlstat = en_IM001;
+         break;
+       }
+
+      sqlstat = en_00000;
+      if (1)                   /* turn off solaris warning message */
+       break;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_SetScrollOptions,
+    (pstmt->dhstmt, fConcurrency, crowKeyset, crowRowset))
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLSetParam (
-                        HSTMT       hstmt,
-                        UWORD       ipar,
-                        SWORD       fCType,
-                        SWORD       fSqlType,
-                        UDWORD      cbColDef,
-                        SWORD       ibScale,
-                        PTR         rgbValue,
-                        SDWORD FAR *pcbValue)
+
+RETCODE SQL_API 
+SQLSetParam (
+    HSTMT hstmt,
+    UWORD ipar,
+    SWORD fCType,
+    SWORD fSqlType,
+    UDWORD cbColDef,
+    SWORD ibScale,
+    PTR rgbValue,
+    SDWORD FAR * pcbValue)
 {
-        return SQLBindParameter(hstmt,
-                                ipar,
-                                (SWORD)SQL_PARAM_INPUT_OUTPUT,
-                                fCType,
-                                fSqlType,
-                                cbColDef,
-                                ibScale,
-                                rgbValue,
-                                SQL_SETPARAM_VALUE_MAX,
-                                pcbValue );
+  return SQLBindParameter (hstmt,
+      ipar,
+      (SWORD) SQL_PARAM_INPUT_OUTPUT,
+      fCType,
+      fSqlType,
+      cbColDef,
+      ibScale,
+      rgbValue,
+      SQL_SETPARAM_VALUE_MAX,
+      pcbValue);
 }
index c00474b04f054d58c489794b91c145c9fd1092a8..12209a15e3fe92865e6fb533e71a059319880456 100644 (file)
-/** Prepare for getting query result
+/*
+ *  result.c
+ *
+ *  $Id$
+ *
+ *  Prepare for getting query result
+ *
+ *  The iODBC driver manager.
+ *  
+ *  Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include       <config.h>
+
+#include       <isql.h>
+#include       <isqlext.h>
+
+#include        <dlproc.h>
+
+#include       <herr.h>
+#include       <henv.h>
+#include       <hdbc.h>
+#include       <hstmt.h>
+
+#include       <itrace.h>
+
+RETCODE SQL_API 
+SQLBindCol (
+    HSTMT hstmt,
+    UWORD icol,
+    SWORD fCType,
+    PTR rgbValue,
+    SDWORD cbValueMax,
+    SDWORD FAR * pcbValue)
+{
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc = SQL_NULL_HPROC;
+  RETCODE retcode;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check argument */
+  switch (fCType)
+     {
+     case SQL_C_DEFAULT:
+     case SQL_C_CHAR:
+     case SQL_C_BINARY:
+     case SQL_C_BIT:
+     case SQL_C_TINYINT:
+     case SQL_C_STINYINT:
+     case SQL_C_UTINYINT:
+     case SQL_C_SHORT:
+     case SQL_C_SSHORT:
+     case SQL_C_USHORT:
+     case SQL_C_LONG:
+     case SQL_C_SLONG:
+     case SQL_C_ULONG:
+     case SQL_C_FLOAT:
+     case SQL_C_DOUBLE:
+     case SQL_C_DATE:
+     case SQL_C_TIME:
+     case SQL_C_TIMESTAMP:
+       break;
+
+     default:
+       PUSHSQLERR (pstmt->herr, en_S1003);
+       return SQL_ERROR;
+     }
+
+  if (cbValueMax < 0)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1090);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pstmt->state > en_stmt_needdata || pstmt->asyn_on != en_NullProc)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
+      return SQL_ERROR;
+    }
+
+  /* call driver's function */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_BindCol);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_BindCol,
+    (pstmt->dhstmt, icol, fCType, rgbValue, cbValueMax, pcbValue))
+
+  return retcode;
+}
 
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
 
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
+RETCODE SQL_API 
+SQLGetCursorName (
+    HSTMT hstmt,
+    UCHAR FAR * szCursor,
+    SWORD cbCursorMax,
+    SWORD FAR * pcbCursor)
+{
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
 
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-**/
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
 
-#include       <../iodbc/iodbc.h>
+  /* check argument */
+  if (cbCursorMax < (SWORD) 0)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1090);
 
-#include       <../iodbc/isql.h>
-#include       <../iodbc/isqlext.h>
+      return SQL_ERROR;
+    }
 
-#include        <../iodbc/dlproc.h>
+  /* check state */
+  if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
 
-#include       <../iodbc/herr.h>
-#include       <../iodbc/henv.h>
-#include       <../iodbc/hdbc.h>
-#include       <../iodbc/hstmt.h>
+      return SQL_ERROR;
+    }
 
-#include       <../iodbc/itrace.h>
+  if (pstmt->state < en_stmt_cursoropen
+      && pstmt->cursor_state == en_stmt_cursor_no)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1015);
 
-RETCODE SQL_API SQLBindCol (
-                        HSTMT           hstmt,
-                        UWORD           icol,
-                        SWORD           fCType,
-                        PTR             rgbValue,
-                        SDWORD          cbValueMax,
-                        SDWORD FAR*     pcbValue )
-{
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc   = SQL_NULL_HPROC;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check argument */
-        switch(fCType)
-        {
-                case SQL_C_DEFAULT:
-                case SQL_C_CHAR:
-                case SQL_C_BINARY:
-                case SQL_C_BIT:
-                case SQL_C_TINYINT:
-                case SQL_C_STINYINT:
-                case SQL_C_UTINYINT:
-                case SQL_C_SHORT:
-                case SQL_C_SSHORT:
-                case SQL_C_USHORT:
-                case SQL_C_LONG:
-                case SQL_C_SLONG:
-                case SQL_C_ULONG:
-                case SQL_C_FLOAT:
-                case SQL_C_DOUBLE:
-                case SQL_C_DATE:
-                case SQL_C_TIME:
-                case SQL_C_TIMESTAMP:
-                        break;
-
-                default:
-                        PUSHSQLERR ( pstmt->herr, en_S1003);
-                        return SQL_ERROR;
-        }
-
-        if( cbValueMax < 0 )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1090 );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pstmt->state > en_stmt_needdata
-         || pstmt->asyn_on != en_NullProc )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
-                return SQL_ERROR;
-        }
-
-        /* call driver's function */
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_BindCol );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_BindCol, (
-                        pstmt->dhstmt,
-                        icol,
-                        fCType,
-                        rgbValue,
-                        cbValueMax,
-                        pcbValue ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        icol,
-                        fCType,
-                        rgbValue,
-                        cbValueMax,
-                        pcbValue );
-#endif
-
-        return retcode;
-}
+      return SQL_ERROR;
+    }
 
-RETCODE SQL_API SQLGetCursorName(
-                        HSTMT           hstmt,
-                        UCHAR FAR*      szCursor,
-                        SWORD           cbCursorMax,
-                        SWORD FAR*      pcbCursor )
-{
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check argument */
-        if( cbCursorMax < (SWORD)0 )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1090 );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pstmt->state >= en_stmt_needdata
-         || pstmt->asyn_on != en_NullProc )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
-
-                return SQL_ERROR;
-        }
-
-        if( pstmt->state < en_stmt_cursoropen
-         && pstmt->cursor_state == en_stmt_cursor_no )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1015 );
-
-                return SQL_ERROR;
-        }
-
-        /* call driver's function */
-        hproc = _iodbcdm_getproc ( pstmt->hdbc, en_GetCursorName );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_GetCursorName, (
-                        pstmt->dhstmt,
-                        szCursor,
-                        cbCursorMax,
-                        pcbCursor ) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        szCursor,
-                        cbCursorMax,
-                        pcbCursor );
-#endif
-
-        return retcode;
+  /* call driver's function */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_GetCursorName);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_GetCursorName,
+    (pstmt->dhstmt, szCursor, cbCursorMax, pcbCursor))
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLRowCount(
-                        HSTMT           hstmt,
-                        SDWORD FAR*     pcrow )
-{
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
 
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
+RETCODE SQL_API 
+SQLRowCount (
+    HSTMT hstmt,
+    SDWORD FAR * pcrow)
+{
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
 
-        /* check state */
-        if( pstmt->state >= en_stmt_needdata
-         || pstmt->state <= en_stmt_prepared
-         || pstmt->asyn_on != en_NullProc )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
 
-                return SQL_ERROR;
-        }
+  /* check state */
+  if (pstmt->state >= en_stmt_needdata
+      || pstmt->state <= en_stmt_prepared
+      || pstmt->asyn_on != en_NullProc)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
 
-        /* call driver */
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_RowCount );
+      return SQL_ERROR;
+    }
 
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
+  /* call driver */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_RowCount);
 
-                return SQL_ERROR;
-        }
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
 
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_RowCount, (
-                        pstmt->dhstmt, pcrow) )
+      return SQL_ERROR;
+    }
 
-#if 0
-        retcode = hproc ( pstmt->dhstmt, pcrow );
-#endif
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_RowCount,
+    (pstmt->dhstmt, pcrow))
 
-        return retcode;
+  return retcode;
 }
 
-RETCODE SQL_API SQLNumResultCols(
-                        HSTMT           hstmt,
-                        SWORD FAR*      pccol )
+
+RETCODE SQL_API 
+SQLNumResultCols (
+    HSTMT hstmt,
+    SWORD FAR * pccol)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        SWORD           ccol;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                if( pstmt->state == en_stmt_allocated
-                 || pstmt->state >= en_stmt_needdata )
-                {
-                        PUSHSQLERR ( pstmt->herr, en_S1010 );
-                        return SQL_ERROR;
-                }
-        }
-        else if( pstmt->asyn_on != en_NumResultCols )
-        {
-                PUSHSQLERR ( pstmt->herr, en_S1010 );
-
-                return SQL_ERROR;
-        }
-
-        /* call driver */
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_NumResultCols );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc,  retcode, hproc, en_NumResultCols, (
-                        pstmt->dhstmt, &ccol) )
-
-#if 0
-        retcode = hproc( pstmt->dhstmt, &ccol );
-#endif
-
-        /* state transition */
-        if( pstmt->asyn_on == en_NumResultCols )
-        {
-                switch( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-
-                        case SQL_STILL_EXECUTING:
-                        default:
-                                break;
-                }
-        }
-
-        switch( retcode )
-        {
-                case SQL_SUCCESS:
-                case SQL_SUCCESS_WITH_INFO:
-                        break;
-
-                case SQL_STILL_EXECUTING:
-                        ccol = 0;
-                        pstmt->asyn_on = en_NumResultCols;
-                        break;
-
-                default:
-                        ccol = 0;
-                        break;
-        }
-
-        if( pccol )
-        {
-                *pccol = ccol;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
+  SWORD ccol;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      if (pstmt->state == en_stmt_allocated
+         || pstmt->state >= en_stmt_needdata)
+       {
+         PUSHSQLERR (pstmt->herr, en_S1010);
+         return SQL_ERROR;
+       }
+    }
+  else if (pstmt->asyn_on != en_NumResultCols)
+    {
+      PUSHSQLERR (pstmt->herr, en_S1010);
+
+      return SQL_ERROR;
+    }
+
+  /* call driver */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_NumResultCols);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_NumResultCols,
+    (pstmt->dhstmt, &ccol))
+
+  /* state transition */
+  if (pstmt->asyn_on == en_NumResultCols)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+
+        case SQL_STILL_EXECUTING:
+        default:
+          break;
+        }
+    }
+
+  switch (retcode)
+     {
+     case SQL_SUCCESS:
+     case SQL_SUCCESS_WITH_INFO:
+       break;
+
+     case SQL_STILL_EXECUTING:
+       ccol = 0;
+       pstmt->asyn_on = en_NumResultCols;
+       break;
+
+     default:
+       ccol = 0;
+       break;
+     }
+
+  if (pccol)
+    {
+      *pccol = ccol;
+    }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLDescribeCol(
-                        HSTMT           hstmt,
-                        UWORD           icol,
-                        UCHAR  FAR*     szColName,
-                        SWORD           cbColNameMax,
-                        SWORD  FAR*     pcbColName,
-                        SWORD  FAR*     pfSqlType,
-                        UDWORD FAR*     pcbColDef,
-                        SWORD  FAR*     pibScale,
-                        SWORD  FAR*     pfNullable )
+
+RETCODE SQL_API 
+SQLDescribeCol (
+    HSTMT hstmt,
+    UWORD icol,
+    UCHAR FAR * szColName,
+    SWORD cbColNameMax,
+    SWORD FAR * pcbColName,
+    SWORD FAR * pfSqlType,
+    UDWORD FAR * pcbColDef,
+    SWORD FAR * pibScale,
+    SWORD FAR * pfNullable)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check arguments */
-        if( icol == 0 )
-        {
-                sqlstat = en_S1002;
-        }
-        else if( cbColNameMax < 0 )
-        {
-                sqlstat = en_S1090;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                if( pstmt->asyn_on == en_stmt_allocated
-                 || pstmt->asyn_on >= en_stmt_needdata )
-                {
-                        sqlstat = en_S1010;
-                }
-        }
-        else if( pstmt->asyn_on != en_DescribeCol )
-        {
-                sqlstat = en_S1010;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        /* call driver */
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_DescribeCol );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_DescribeCol, (
-                        pstmt->dhstmt,
-                        icol,
-                        szColName,
-                        cbColNameMax,
-                        pcbColName,
-                        pfSqlType,
-                        pcbColDef,
-                        pibScale,
-                        pfNullable) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        icol,
-                        szColName,
-                        cbColNameMax,
-                        pcbColName,
-                        pfSqlType,
-                        pcbColDef,
-                        pibScale,
-                        pfNullable );
-#endif
-
-        /* state transition */
-        if( pstmt->asyn_on == en_DescribeCol )
-        {
-                switch( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-                                break;
-
-                        default:
-                                return retcode;
-                }
-        }
-
-        switch( pstmt->state )
-        {
-                case en_stmt_prepared:
-                case en_stmt_cursoropen:
-                case en_stmt_fetched:
-                case en_stmt_xfetched:
-                        if( retcode == SQL_STILL_EXECUTING )
-                        {
-                                pstmt->asyn_on = en_DescribeCol;
-                        }
-                        break;
-
-                default:
-                        break;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT
+      || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check arguments */
+  if (icol == 0)
+    {
+      sqlstat = en_S1002;
+    }
+  else if (cbColNameMax < 0)
+    {
+      sqlstat = en_S1090;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      if (pstmt->asyn_on == en_stmt_allocated
+         || pstmt->asyn_on >= en_stmt_needdata)
+       {
+         sqlstat = en_S1010;
+       }
+    }
+  else if (pstmt->asyn_on != en_DescribeCol)
+    {
+      sqlstat = en_S1010;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  /* call driver */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_DescribeCol);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_DescribeCol,
+    (pstmt->dhstmt, icol, szColName, cbColNameMax, pcbColName,
+      pfSqlType, pcbColDef, pibScale, pfNullable))
+
+  /* state transition */
+  if (pstmt->asyn_on == en_DescribeCol)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+          break;
+
+        default:
+          return retcode;
+        }
+    }
+
+  switch (pstmt->state)
+     {
+     case en_stmt_prepared:
+     case en_stmt_cursoropen:
+     case en_stmt_fetched:
+     case en_stmt_xfetched:
+       if (retcode == SQL_STILL_EXECUTING)
+        {
+          pstmt->asyn_on = en_DescribeCol;
+        }
+       break;
+
+     default:
+       break;
+     }
+
+  return retcode;
 }
 
-RETCODE SQL_API SQLColAttributes(
-                        HSTMT           hstmt,
-                        UWORD           icol,
-                        UWORD           fDescType,
-                        PTR             rgbDesc,
-                        SWORD           cbDescMax,
-                        SWORD  FAR*     pcbDesc,
-                        SDWORD FAR*     pfDesc )
+
+RETCODE SQL_API 
+SQLColAttributes (
+    HSTMT hstmt,
+    UWORD icol,
+    UWORD fDescType,
+    PTR rgbDesc,
+    SWORD cbDescMax,
+    SWORD FAR * pcbDesc,
+    SDWORD FAR * pfDesc)
 {
-        STMT_t FAR*     pstmt   = (STMT_t FAR*)hstmt;
-        HPROC           hproc;
-        RETCODE         retcode;
-        int             sqlstat = en_00000;
-
-        if( hstmt == SQL_NULL_HSTMT
-         || pstmt->hdbc == SQL_NULL_HDBC )
-        {
-                return SQL_INVALID_HANDLE;
-        }
-
-        /* check arguments */
-        if( icol == 0 && fDescType != SQL_COLUMN_COUNT )
-        {
-                sqlstat = en_S1002;
-        }
-        else if( cbDescMax < 0 )
-        {
-                sqlstat = en_S1090;
-        }
-        else if(/* fDescType < SQL_COLATT_OPT_MIN || */ /* turnoff warning */
-                 ( fDescType > SQL_COLATT_OPT_MAX
-                && fDescType < SQL_COLUMN_DRIVER_START ) )
-        {
-                sqlstat = en_S1091;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        /* check state */
-        if( pstmt->asyn_on == en_NullProc )
-        {
-                if( pstmt->asyn_on == en_stmt_allocated
-                 || pstmt->asyn_on >= en_stmt_needdata )
-                {
-                        sqlstat = en_S1010;
-                }
-        }
-        else if( pstmt->asyn_on != en_ColAttributes )
-        {
-                sqlstat = en_S1010;
-        }
-
-        if( sqlstat != en_00000 )
-        {
-                PUSHSQLERR ( pstmt->herr, sqlstat );
-
-                return SQL_ERROR;
-        }
-
-        /* call driver */
-        hproc = _iodbcdm_getproc( pstmt->hdbc, en_ColAttributes );
-
-        if( hproc == SQL_NULL_HPROC )
-        {
-                PUSHSQLERR ( pstmt->herr, en_IM001 );
-
-                return SQL_ERROR;
-        }
-
-        CALL_DRIVER ( pstmt->hdbc,  retcode, hproc, en_ColAttributes, (
-                        pstmt->dhstmt,
-                        icol,
-                        fDescType,
-                        rgbDesc,
-                        cbDescMax,
-                        pcbDesc,
-                        pfDesc) )
-
-#if 0
-        retcode = hproc(pstmt->dhstmt,
-                        icol,
-                        fDescType,
-                        rgbDesc,
-                        cbDescMax,
-                        pcbDesc,
-                        pfDesc );
-#endif
-
-        /* state transition */
-        if( pstmt->asyn_on == en_ColAttributes )
-        {
-                switch( retcode )
-                {
-                        case SQL_SUCCESS:
-                        case SQL_SUCCESS_WITH_INFO:
-                        case SQL_ERROR:
-                                pstmt->asyn_on = en_NullProc;
-                                break;
-
-                        default:
-                                return retcode;
-                }
-        }
-
-        switch( pstmt->state )
-        {
-                case en_stmt_prepared:
-                case en_stmt_cursoropen:
-                case en_stmt_fetched:
-                case en_stmt_xfetched:
-                        if( retcode == SQL_STILL_EXECUTING )
-                        {
-                                pstmt->asyn_on = en_ColAttributes;
-                        }
-                        break;
-
-                default:
-                        break;
-        }
-
-        return retcode;
+  STMT_t FAR *pstmt = (STMT_t FAR *) hstmt;
+  HPROC hproc;
+  RETCODE retcode;
+  int sqlstat = en_00000;
+
+  if (hstmt == SQL_NULL_HSTMT || pstmt->hdbc == SQL_NULL_HDBC)
+    {
+      return SQL_INVALID_HANDLE;
+    }
+
+  /* check arguments */
+  if (icol == 0 && fDescType != SQL_COLUMN_COUNT)
+    {
+      sqlstat = en_S1002;
+    }
+  else if (cbDescMax < 0)
+    {
+      sqlstat = en_S1090;
+    }
+  else if (                    /* fDescType < SQL_COLATT_OPT_MIN || *//* turnoff warning */
+       (fDescType > SQL_COLATT_OPT_MAX
+         && fDescType < SQL_COLUMN_DRIVER_START))
+    {
+      sqlstat = en_S1091;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  /* check state */
+  if (pstmt->asyn_on == en_NullProc)
+    {
+      if (pstmt->asyn_on == en_stmt_allocated
+         || pstmt->asyn_on >= en_stmt_needdata)
+       {
+         sqlstat = en_S1010;
+       }
+    }
+  else if (pstmt->asyn_on != en_ColAttributes)
+    {
+      sqlstat = en_S1010;
+    }
+
+  if (sqlstat != en_00000)
+    {
+      PUSHSQLERR (pstmt->herr, sqlstat);
+
+      return SQL_ERROR;
+    }
+
+  /* call driver */
+  hproc = _iodbcdm_getproc (pstmt->hdbc, en_ColAttributes);
+
+  if (hproc == SQL_NULL_HPROC)
+    {
+      PUSHSQLERR (pstmt->herr, en_IM001);
+
+      return SQL_ERROR;
+    }
+
+  CALL_DRIVER (pstmt->hdbc, retcode, hproc, en_ColAttributes,
+    (pstmt->dhstmt, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc))
+
+  /* state transition */
+  if (pstmt->asyn_on == en_ColAttributes)
+    {
+      switch (retcode)
+        {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+        case SQL_ERROR:
+          pstmt->asyn_on = en_NullProc;
+          break;
+
+        default:
+          return retcode;
+        }
+    }
+
+  switch (pstmt->state)
+     {
+     case en_stmt_prepared:
+     case en_stmt_cursoropen:
+     case en_stmt_fetched:
+     case en_stmt_xfetched:
+       if (retcode == SQL_STILL_EXECUTING)
+        {
+          pstmt->asyn_on = en_ColAttributes;
+        }
+       break;
+
+     default:
+       break;
+     }
+
+  return retcode;
 }
diff --git a/src/iodbc/windows.h b/src/iodbc/windows.h
deleted file mode 100644 (file)
index ab92116..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-#ifndef DEBUG
-
-#endif
-#ifndef APWIN                     /* don't reinclude    */
-#define APWIN
-#ifndef DEBUG
-
-#endif
-
-#ifdef WININC
-#  include <windows.h>              /* normal windows.h    */
-#  ifdef WIN32
-#    include <windowsx.h>         /* windows extensions  */
-#    define GetCurrentTask     (HTASK)GetCurrentProcess
-#    define GetDOSEnvironment  GetEnvironmentStrings
-#    define PCALL
-#  else
-#    define PCALL PASCAL
-#  endif
-#else                             /* not windows         */
-/******* Common definitions and typedefs **********************/
-#ifdef HPUX
-#  ifndef _VOID
-#    define    VOID    int
-#  endif
-#  ifndef _UCHAR
-     typedef   char    UCHAR;
-#    define _UCHAR
-#  endif
-#  ifndef _SCHAR
-     typedef   char    SCHAR;
-#    define _SCHAR
-#  endif
-#endif /* HPUX */
-
-#ifdef OSF1
-#  ifndef _UCHAR
-     typedef   char    UCHAR;
-#    define _UCHAR
-#  endif
-#  ifndef _SDWORD
-#    define _SDWORD
-     typedef   int     SDWORD;
-#  endif
-#  ifndef _UDWORD
-#    define _UDWORD
-     typedef   unsigned int   UDWORD;
-#  endif
-#  ifndef _LDOUBLE
-#    define _LDOUBLE
-     typedef   double  LDOUBLE;
-#  endif
-#  ifndef _DWORD
-#    define _DWORD
-     typedef   int     DWORD;
-#  endif
-#endif /* OSF1 */
-
-#if defined (SVR4) && defined(I386)
-#  ifndef _UCHAR
-     typedef   char    UCHAR;
-#    define _UCHAR
-#  endif
-#  ifndef _LDOUBLE
-#    define _LDOUBLE
-     typedef   double  LDOUBLE;
-#  endif
-#endif /* SVR4 && I386 */
-
-#ifndef _VOID
-#  define _VOID
-#  define VOID                void
-#endif
-
-#ifdef WIN
-#  define LONG long
-#endif
-
-#ifndef _DWORD
-#  define _DWORD
-/*   typedef unsigned long       DWORD; */
-#endif
-
-#ifndef _UINT
-#  define _UINT
-   typedef unsigned int        UINT;
-#endif
-
-#ifdef PC
-#  define FAR                 _far
-#  define NEAR                _near
-#  define PASCAL              _pascal
-#  define CDECL               _cdecl
-#  define WINAPI              _far _pascal
-#  define CALLBACK            _far _pascal
-#  define EXPORT             _export
-#else
-#  define FAR
-#  define NEAR
-#  define PASCAL
-#  define CDECL
-#  define WINAPI
-#  define CALLBACK
-#  define EXPORT
-#endif
-#define PCALL PASCAL
-
-/****** Simple types & common helper macros ********************/
-
-/* typedef int                 BOOL; */
-#define FALSE               0
-#define TRUE                1
-
-typedef unsigned char       BYTE;
-/* typedef unsigned short      WORD; */
-
-#define LOBYTE(w)           ((BYTE)(w))
-#define HIBYTE(w)           ((BYTE)(((UINT)(w) >> 8) & 0xFF))
-
-#define LOWORD(l)           ((WORD)(DWORD)(l))
-#define HIWORD(l)           ((WORD)((((DWORD)(l)) >> 16) & 0xFFFF))
-
-#define MAKELONG(low, high) ((LONG)(((WORD)(low)) |\
-                           (((DWORD)((WORD)(high))) << 16)))
-
-#define max(a,b)           (((a) > (b)) ? (a) : (b))
-#define min(a,b)            (((a) < (b)) ? (a) : (b))
-
-/****** Common pointer types **********************************/
-
-#ifndef NULL
-#define NULL                0
-#endif
-
-/****** Common handle types *************************************/
-
-typedef UINT                    HANDLE;
-/* typedef UINT                    HWND; */
-
-
-#endif /* ifdef not WIN */
-
-#endif /* ifdef APWIN */
-
-/* end of apwin.h */