Browse Source

+ Initial implementation of Pavel Stingl

michael 25 years ago
parent
commit
26c80f07f4

+ 1286 - 0
packages/oracle/Makefile

@@ -0,0 +1,1286 @@
+#
+# Makefile generated by fpcmake v1.00 [2000/11/01]
+#
+
+defaultrule: all
+
+#####################################################################
+# Autodetect OS (Linux or Dos or Windows NT)
+# define inUnix when running under Unix (Linux,FreeBSD)
+# define inWinNT when running under WinNT
+#####################################################################
+
+# We need only / in the path
+override PATH:=$(subst \,/,$(PATH))
+
+# Search for PWD and determine also if we are under linux
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(subst ;, ,$(PATH)))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(subst :, ,$(PATH)))))
+ifeq ($(PWD),)
+nopwd:
+	@echo You need the GNU utils package to use this Makefile!
+	@echo Get ftp://ftp.freepascal.org/pub/fpc/dist/go32v2/utilgo32.zip
+	@exit
+else
+inUnix=1
+endif
+else
+PWD:=$(firstword $(PWD))
+endif
+
+# Detect NT - NT sets OS to Windows_NT
+# Detect OS/2 - OS/2 has OS2_SHELL defined
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+endif
+
+# The extension of executables
+ifdef inUnix
+SRCEXEEXT=
+else
+SRCEXEEXT=.exe
+endif
+
+# The path which is searched separated by spaces
+ifdef inUnix
+SEARCHPATH=$(subst :, ,$(PATH))
+else
+SEARCHPATH=$(subst ;, ,$(PATH))
+endif
+
+# Base dir
+ifdef PWD
+BASEDIR:=$(shell $(PWD))
+else
+BASEDIR=.
+endif
+
+#####################################################################
+# FPC version/target Detection
+#####################################################################
+
+# What compiler to use ?
+ifndef FPC
+# Compatibility with old makefiles
+ifdef PP
+FPC=$(PP)
+else
+FPC=ppc386
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+
+# Target OS
+ifndef OS_TARGET
+OS_TARGET:=$(shell $(FPC) -iTO)
+endif
+
+# Source OS
+ifndef OS_SOURCE
+OS_SOURCE:=$(shell $(FPC) -iSO)
+endif
+
+# Target CPU
+ifndef CPU_TARGET
+CPU_TARGET:=$(shell $(FPC) -iTP)
+endif
+
+# Source CPU
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(shell $(FPC) -iSP)
+endif
+
+# FPC version
+ifndef FPC_VERSION
+FPC_VERSION:=$(shell $(FPC) -iV)
+endif
+
+export FPC OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FPC_VERSION
+
+#####################################################################
+# FPCDIR Setting
+#####################################################################
+
+# Test FPCDIR to look if the RTL dir exists
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(FPCDIR)/rtl),)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=wrong
+endif
+endif
+else
+override FPCDIR=wrong
+endif
+
+# Default FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR=../..
+ifeq ($(wildcard $(FPCDIR)/rtl),)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=wrong
+endif
+endif
+endif
+
+# Detect FPCDIR
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(FPCDIR)/rtl),)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(FPCDIR)/rtl),)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+endif
+
+ifndef PACKAGESDIR
+PACKAGESDIR=$(FPCDIR)/packages
+endif
+ifndef TOOLKITSDIR
+TOOLKITSDIR=
+endif
+ifndef COMPONENTSDIR
+COMPONENTSDIR=
+endif
+
+# Create units dir
+ifneq ($(FPCDIR),.)
+UNITSDIR=$(FPCDIR)/units/$(OS_TARGET)
+endif
+
+#####################################################################
+# User Settings
+#####################################################################
+
+
+# Targets
+
+override UNITOBJECTS+=oraoci oraclew
+override EXAMPLEOBJECTS+=test01
+
+# Clean
+
+
+# Install
+
+EXAMPLESUBDIR=oracle
+PACKAGENAME=oracle
+ZIPTARGET=install
+
+# Defaults
+
+
+# Directories
+
+
+# Packages
+
+override PACKAGES+=rtl fcl
+
+# Libraries
+
+
+# Info
+
+INFOTARGET=fpc_infocfg fpc_infoobjects fpc_infoinstall 
+
+#####################################################################
+# Shell tools
+#####################################################################
+
+# echo
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(EXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=echo
+ECHOE:=echo
+else
+ECHO:=$(firstword $(ECHO))
+ECHOE=$(ECHO) -E
+endif
+else
+ECHO:=$(firstword $(ECHO))
+ECHOE=$(ECHO) -E
+endif
+endif
+
+# To copy pograms
+ifndef COPY
+COPY:=cp -fp
+endif
+
+# Copy a whole tree
+ifndef COPYTREE
+COPYTREE:=cp -rfp
+endif
+
+# To move pograms
+ifndef MOVE
+MOVE:=mv -f
+endif
+
+# Check delete program
+ifndef DEL
+DEL:=rm -f
+endif
+
+# Check deltree program
+ifndef DELTREE
+DELTREE:=rm -rf
+endif
+
+# To install files
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=install -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+
+# To install programs
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=install -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+
+# To make a directory.
+ifndef MKDIR
+ifdef inUnix
+MKDIR:=install -m 755 -d
+else
+MKDIR:=ginstall -m 755 -d
+endif
+endif
+
+export ECHO ECHOE COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+
+#####################################################################
+# Default Tools
+#####################################################################
+
+# assembler, redefine it if cross compiling
+ifndef AS
+AS=as
+endif
+
+# linker, but probably not used
+ifndef LD
+LD=ld
+endif
+
+# ppas.bat / ppas.sh
+ifdef inUnix
+PPAS=ppas.sh
+else
+ifdef inOS2
+PPAS=ppas.cmd
+else
+PPAS=ppas.bat
+endif
+endif
+
+# ldconfig to rebuild .so cache
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+
+# ppumove
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE=
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+
+# ppufiles
+ifndef PPUFILES
+PPUFILES:=$(strip $(wildcard $(addsuffix /ppufiles$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUFILES),)
+PPUFILES=
+else
+PPUFILES:=$(firstword $(PPUFILES))
+endif
+endif
+export PPUFILES
+
+# Look if UPX is found for go32v2 and win32. We can't use $UPX becuase
+# upx uses that one itself (PFV)
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+
+# ZipProg, you can't use Zip as the var name (PFV)
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG=
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+
+ZIPOPT=-9
+ZIPEXT=.zip
+
+# Tar
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG=
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+
+ifeq ($(USETAR),bz2)
+TAROPT=vI
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+
+#####################################################################
+# Default extensions
+#####################################################################
+
+# Default needed extensions (Go32v2,Linux)
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+RSTEXT=.rst
+FPCMADE=fpcmade
+
+# Go32v1
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+FPCMADE=fpcmade.v1
+endif
+
+# Go32v2
+ifeq ($(OS_TARGET),go32v2)
+FPCMADE=fpcmade.dos
+endif
+
+# Linux
+ifeq ($(OS_TARGET),linux)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.lnx
+endif
+
+# Linux
+ifeq ($(OS_TARGET),freebsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.freebsd
+endif
+
+# Win32
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+FPCMADE=fpcmade.w32
+endif
+
+# OS/2
+ifeq ($(OS_TARGET),os2)
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+SMARTEXT=.so
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+FPCMADE=fpcmade.os2
+endif
+
+# library prefix
+LIBPREFIX=lib
+ifeq ($(OS_TARGET),go32v2)
+LIBPREFIX=
+endif
+ifeq ($(OS_TARGET),go32v1)
+LIBPREFIX=
+endif
+
+# determine which .pas extension is used
+ifndef PASEXT
+ifdef EXEOBJECTS
+override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(EXEOBJECTS)))))
+else
+override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(UNITOBJECTS)))))
+endif
+ifeq ($(TESTPAS),)
+PASEXT=.pp
+else
+PASEXT=.pas
+endif
+endif
+
+
+# Check if the dirs really exists, else turn it off
+ifeq ($(wildcard $(UNITSDIR)),)
+UNITSDIR=
+endif
+ifeq ($(wildcard $(TOOLKITSDIR)),)
+TOOLKITSDIR=
+endif
+ifeq ($(wildcard $(PACKAGESDIR)),)
+PACKAGESDIR=
+endif
+ifeq ($(wildcard $(COMPONENTSDIR)),)
+COMPONENTSDIR=
+endif
+
+
+# PACKAGESDIR packages
+
+PACKAGERTL=1
+PACKAGEFCL=1
+
+ifdef PACKAGERTL
+ifneq ($(wildcard $(FPCDIR)/rtl),)
+ifneq ($(wildcard $(FPCDIR)/rtl/$(OS_TARGET)),)
+PACKAGEDIR_RTL=$(FPCDIR)/rtl/$(OS_TARGET)
+else
+PACKAGEDIR_RTL=$(FPCDIR)/rtl
+endif
+ifeq ($(wildcard $(PACKAGEDIR_RTL)/$(FPCMADE)),)
+override COMPILEPACKAGES+=package_rtl
+package_rtl:
+	$(MAKE) -C $(PACKAGEDIR_RTL) all
+endif
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+else
+PACKAGEDIR_RTL=
+ifneq ($(wildcard $(UNITSDIR)/rtl),)
+ifneq ($(wildcard $(UNITSDIR)/rtl/$(OS_TARGET)),)
+UNITDIR_RTL=$(UNITSDIR)/rtl/$(OS_TARGET)
+else
+UNITDIR_RTL=$(UNITSDIR)/rtl
+endif
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override NEEDUNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifdef PACKAGEFCL
+ifneq ($(wildcard $(FPCDIR)/fcl),)
+ifneq ($(wildcard $(FPCDIR)/fcl/$(OS_TARGET)),)
+PACKAGEDIR_FCL=$(FPCDIR)/fcl/$(OS_TARGET)
+else
+PACKAGEDIR_FCL=$(FPCDIR)/fcl
+endif
+ifeq ($(wildcard $(PACKAGEDIR_FCL)/$(FPCMADE)),)
+override COMPILEPACKAGES+=package_fcl
+package_fcl:
+	$(MAKE) -C $(PACKAGEDIR_FCL) all
+endif
+UNITDIR_FCL=$(PACKAGEDIR_FCL)
+else
+PACKAGEDIR_FCL=
+ifneq ($(wildcard $(UNITSDIR)/fcl),)
+ifneq ($(wildcard $(UNITSDIR)/fcl/$(OS_TARGET)),)
+UNITDIR_FCL=$(UNITSDIR)/fcl/$(OS_TARGET)
+else
+UNITDIR_FCL=$(UNITSDIR)/fcl
+endif
+else
+UNITDIR_FCL=
+endif
+endif
+ifdef UNITDIR_FCL
+override NEEDUNITDIR+=$(UNITDIR_FCL)
+endif
+endif
+
+
+#####################################################################
+# Default Directories
+#####################################################################
+
+# Linux and freebsd use unix dirs with /usr/bin, /usr/lib
+# When zipping use the target as default, when normal install then
+# use the source os as default
+ifdef ZIPNAME
+# Zipinstall
+ifeq ($(OS_TARGET),linux)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),freebsd)
+UNIXINSTALLDIR=1
+endif
+else
+# Normal install
+ifeq ($(OS_SOURCE),linux)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_SOURCE),freebsd)
+UNIXINSTALLDIR=1
+endif
+endif
+
+# set the prefix directory where to install everything
+ifndef PREFIXINSTALLDIR
+ifdef UNIXINSTALLDIR
+PREFIXINSTALLDIR=/usr
+else
+PREFIXINSTALLDIR=/pp
+endif
+endif
+export PREFIXINSTALLDIR
+
+# Where to place the resulting zip files
+ifndef DESTZIPDIR
+DESTZIPDIR:=$(BASEDIR)
+endif
+export DESTZIPDIR
+
+#####################################################################
+# Install Directories
+#####################################################################
+
+# set the base directory where to install everything
+ifndef BASEINSTALLDIR
+ifdef UNIXINSTALLDIR
+BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION)
+else
+BASEINSTALLDIR=$(PREFIXINSTALLDIR)
+endif
+endif
+
+# set the directory where to install the binaries
+ifndef BININSTALLDIR
+ifdef UNIXINSTALLDIR
+BININSTALLDIR=$(PREFIXINSTALLDIR)/bin
+else
+BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET)
+endif
+endif
+
+# set the directory where to install the units.
+ifndef UNITINSTALLDIR
+UNITINSTALLDIR=$(BASEINSTALLDIR)/units/$(OS_TARGET)
+ifdef UNITSUBDIR
+UNITINSTALLDIR:=$(UNITINSTALLDIR)/$(UNITSUBDIR)
+endif
+endif
+
+# Where to install shared libraries
+ifndef LIBINSTALLDIR
+ifdef UNIXINSTALLDIR
+LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib
+else
+LIBINSTALLDIR=$(UNITINSTALLDIR)
+endif
+endif
+
+# Where the source files will be stored
+ifndef SOURCEINSTALLDIR
+ifdef UNIXINSTALLDIR
+SOURCEINSTALLDIR=$(PREFIXINSTALLDIR)/src/fpc-$(FPC_VERSION)
+else
+SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source
+endif
+ifdef SOURCESUBDIR
+SOURCEINSTALLDIR:=$(SOURCEINSTALLDIR)/$(SOURCESUBDIR)
+endif
+endif
+
+# Where the doc files will be stored
+ifndef DOCINSTALLDIR
+ifdef UNIXINSTALLDIR
+DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc-$(FPC_VERSION)
+else
+DOCINSTALLDIR=$(BASEINSTALLDIR)/doc
+endif
+endif
+
+# Where to install the examples, under linux we use the doc dir
+# because the copytree command will create a subdir itself
+ifndef EXAMPLEINSTALLDIR
+ifdef UNIXINSTALLDIR
+EXAMPLEINSTALLDIR=$(DOCINSTALLDIR)/examples
+else
+EXAMPLEINSTALLDIR=$(BASEINSTALLDIR)/examples
+endif
+ifdef EXAMPLESUBDIR
+EXAMPLEINSTALLDIR:=$(EXAMPLEINSTALLDIR)/$(EXAMPLESUBDIR)
+endif
+endif
+
+# Where the some extra (data)files will be stored
+ifndef DATAINSTALLDIR
+DATAINSTALLDIR=$(BASEINSTALLDIR)
+endif
+
+#####################################################################
+# Redirection
+#####################################################################
+
+ifndef REDIRFILE
+REDIRFILE=log
+endif
+
+ifdef REDIR
+ifndef inUnix
+override FPC=redir -eo $(FPC)
+endif
+# set the verbosity to max
+override FPCOPT+=-va
+override REDIR:= >> $(REDIRFILE)
+endif
+
+
+#####################################################################
+# Compiler Command Line
+#####################################################################
+
+# Load commandline OPTDEF and add FPC_CPU define
+override FPCOPTDEF:=-d$(CPU_TARGET)
+
+# Load commandline OPT and add target and unit dir to be sure
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+
+# User dirs should be first, so they are looked at first
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+
+# Smartlinking
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+
+# Smartlinking creation
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+
+# Debug
+ifdef DEBUG
+override FPCOPT+=-gl -dDEBUG
+endif
+
+# Release mode (strip, optimize and don't load ppc386.cfg)
+# 0.99.12b has a bug in the optimizer so don't use it by default
+ifdef RELEASE
+ifeq ($(FPC_VERSION),0.99.12)
+override FPCOPT+=-Xs -OGp3 -n
+else
+override FPCOPT+=-Xs -OG2p3 -n
+endif
+endif
+
+# Strip
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+
+# Optimizer
+ifdef OPTIMIZE
+override FPCOPT+=-OG2p3
+endif
+
+# Verbose settings (warning,note,info)
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+
+ifdef NEEDUNITDIR
+override FPCOPT+=$(addprefix -Fu,$(NEEDUNITDIR))
+endif
+
+ifdef UNITSDIR
+override FPCOPT+=-Fu$(UNITSDIR)
+endif
+
+# Target dirs and the prefix to use for clean/install
+ifdef TARGETDIR
+override FPCOPT+=-FE$(TARGETDIR)
+ifeq ($(TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(TARGETDIR)/
+endif
+endif
+ifdef UNITTARGETDIR
+override FPCOPT+=-FU$(UNITTARGETDIR)
+ifeq ($(UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(TARGETDIR)/
+endif
+else
+ifdef TARGETDIR
+override UNITTARGETDIR=$(TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+
+# Add commandline options last so they can override
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+
+# Add defines from FPCOPTDEF to FPCOPT
+ifdef FPCOPTDEF
+override FPCOPT+=$(FPCOPTDEF)
+endif
+
+# Error file ?
+ifdef ERRORFILE
+override FPCOPT+=-Fr$(ERRORFILE)
+endif
+
+# Was a config file specified ?
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+
+# For win32 the options are passed using the environment FPCEXTCMD
+ifeq ($(OS_SOURCE),win32)
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+
+# Compiler commandline
+override COMPILER:=$(FPC) $(FPCOPT)
+
+# also call ppas if with command option -s
+# but only if the OS_SOURCE and OS_TARGE are equal
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(OS_SOURCE),$(OS_TARGET))
+EXECPPAS:=@$(PPAS)
+endif
+endif
+
+#####################################################################
+# Standard rules
+#####################################################################
+
+all: fpc_all
+
+debug: fpc_debug
+
+examples: fpc_examples
+
+test: fpc_test
+
+smart: fpc_smart
+
+shared: fpc_shared
+
+showinstall: fpc_showinstall
+
+install: fpc_install
+
+sourceinstall: fpc_sourceinstall
+
+exampleinstall: fpc_exampleinstall
+
+zipinstall: fpc_zipinstall
+
+zipsourceinstall: fpc_zipsourceinstall
+
+zipexampleinstall: fpc_zipexampleinstall
+
+clean: fpc_clean
+
+distclean: fpc_distclean
+
+cleanall: fpc_cleanall
+
+info: fpc_info
+
+.PHONY:  all debug examples test smart shared showinstall install sourceinstall exampleinstall zipinstall zipsourceinstall zipexampleinstall clean distclean cleanall info
+
+#####################################################################
+# Units
+#####################################################################
+
+.PHONY: fpc_units
+
+override ALLTARGET+=fpc_units
+
+override UNITPPUFILES=$(addsuffix $(PPUEXT),$(UNITOBJECTS))
+override INSTALLPPUFILES+=$(UNITPPUFILES)
+override CLEANPPUFILES+=$(UNITPPUFILES)
+
+fpc_units: $(UNITPPUFILES)
+
+#####################################################################
+# Examples
+#####################################################################
+
+.PHONY: fpc_examples fpc_test
+
+ifdef EXAMPLEOBJECTS
+override EXAMPLESOURCEFILES:=$(addsuffix $(PASEXT),$(EXAMPLEOBJECTS))
+override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(EXAMPLEOBJECTS))
+override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(EXAMPLEOBJECTS)) $(addprefix $(LIBPREFIX),$(addsuffix $(STATICLIBEXT),$(EXAMPLEOBJECTS)))
+
+override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES)
+endif
+
+fpc_examples: all $(EXAMPLEFILES) $(addsuffix _all,$(EXAMPLEDIROBJECTS))
+
+fpc_test: examples
+
+#####################################################################
+# General compile rules
+#####################################################################
+
+.PHONY: fpc_packages fpc_all fpc_debug
+
+$(FPCMADE): $(ALLTARGET)
+	@$(ECHO) Compiled > $(FPCMADE)
+
+fpc_packages: $(COMPILEPACKAGES)
+
+fpc_all: fpc_packages $(FPCMADE)
+
+fpc_debug:
+	$(MAKE) all DEBUG=1
+
+# Search paths for .ppu if targetdir is set
+ifdef UNITTARGETDIR
+vpath %$(PPUEXT) $(UNITTARGETDIR)
+endif
+
+# General compile rules, available for both possible PASEXT
+
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp
+
+%$(PPUEXT): %.pp
+	$(COMPILER) $< $(REDIR)
+	$(EXECPPAS)
+
+%$(PPUEXT): %.pas
+	$(COMPILER) $< $(REDIR)
+	$(EXECPPAS)
+
+%$(EXEEXT): %.pp
+	$(COMPILER) $< $(REDIR)
+	$(EXECPPAS)
+
+%$(EXEEXT): %.pas
+	$(COMPILER) $< $(REDIR)
+	$(EXECPPAS)
+
+#####################################################################
+# Library
+#####################################################################
+
+.PHONY: fpc_smart fpc_shared
+
+ifdef LIBVERSION
+LIBFULLNAME=$(LIBNAME).$(LIBVERSION)
+else
+LIBFULLNAME=$(LIBNAME)
+endif
+
+# Default sharedlib units are all unit objects
+ifndef SHAREDLIBUNITOBJECTS
+SHAREDLIBUNITOBJECTS:=$(UNITOBJECTS)
+endif
+
+fpc_smart:
+	$(MAKE) all LINKSMART=1 CREATESMART=1
+
+fpc_shared: all
+ifdef HASSHAREDLIB
+ifndef LIBNAME
+	@$(ECHO) "LIBNAME not set"
+else
+	$(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBFULLNAME)
+endif
+else
+	@$(ECHO) "Shared Libraries not supported"
+endif
+
+#####################################################################
+# Install rules
+#####################################################################
+
+.PHONY: fpc_showinstall fpc_install
+
+ifdef EXTRAINSTALLUNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))
+endif
+
+ifdef INSTALLPPUFILES
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILES))
+ifdef PPUFILES
+INSTALLPPULINKFILES:=$(shell $(PPUFILES) -S -O $(INSTALLPPUFILES))
+else
+INSTALLPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(LIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))))
+endif
+override INSTALLPPULINKFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILES))
+endif
+
+ifdef INSTALLEXEFILES
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(INSTALLEXEFILES))
+endif
+
+fpc_showinstall: $(SHOWINSTALLTARGET)
+ifdef INSTALLEXEFILES
+	@$(ECHO) -e $(addprefix "\n"$(BININSTALLDIR)/,$(INSTALLEXEFILES))
+endif
+ifdef INSTALLPPUFILES
+	@$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPUFILES))
+ifneq ($(INSTALLPPULINKFILES),)
+	@$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPULINKFILES))
+endif
+ifneq ($(wildcard $(LIBFULLNAME)),)
+	@$(ECHO) $(LIBINSTALLDIR)/$(LIBFULLNAME)
+ifdef HASSHAREDLIB
+	@$(ECHO) $(LIBINSTALLDIR)/$(LIBNAME)
+endif
+endif
+endif
+ifdef EXTRAINSTALLFILES
+	@$(ECHO) -e $(addprefix "\n"$(DATAINSTALLDIR)/,$(EXTRAINSTALLFILES))
+endif
+
+fpc_install: $(INSTALLTARGET)
+# Create UnitInstallFiles
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(BININSTALLDIR)
+# Compress the exes if upx is defined
+ifdef UPXPROG
+	-$(UPXPROG) $(INSTALLEXEFILES)
+endif
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(BININSTALLDIR)
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(UNITINSTALLDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(UNITINSTALLDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(UNITINSTALLDIR)
+endif
+ifneq ($(wildcard $(LIBFULLNAME)),)
+	$(MKDIR) $(LIBINSTALLDIR)
+	$(INSTALL) $(LIBFULLNAME) $(LIBINSTALLDIR)
+ifdef inUnix
+	ln -sf $(LIBFULLNAME) $(LIBINSTALLDIR)/$(LIBNAME)
+endif
+endif
+endif
+ifdef EXTRAINSTALLFILES
+	$(MKDIR) $(DATAINSTALLDIR)
+	$(INSTALL) $(EXTRAINSTALLFILES) $(DATAINSTALLDIR)
+endif
+
+#####################################################################
+# SourceInstall rules
+#####################################################################
+
+.PHONY: fpc_sourceinstall
+
+ifndef SOURCETOPDIR
+SOURCETOPDIR=$(BASEDIR)
+endif
+
+fpc_sourceinstall: clean
+	$(MKDIR) $(SOURCEINSTALLDIR)
+	$(COPYTREE) $(SOURCETOPDIR) $(SOURCEINSTALLDIR)
+
+#####################################################################
+# exampleinstall rules
+#####################################################################
+
+.PHONY: fpc_exampleinstall
+
+fpc_exampleinstall: $(addsuffix _clean,$(EXAMPLEDIROBJECTS))
+ifdef EXAMPLESOURCEFILES
+	$(MKDIR) $(EXAMPLEINSTALLDIR)
+	$(COPY) $(EXAMPLESOURCEFILES) $(EXAMPLEINSTALLDIR)
+endif
+ifdef EXAMPLEDIROBJECTS
+ifndef EXAMPLESOURCEFILES
+	$(MKDIR) $(EXAMPLEINSTALLDIR)
+endif
+	$(COPYTREE) $(addsuffix /*,$(EXAMPLEDIROBJECTS)) $(EXAMPLEINSTALLDIR)
+endif
+
+#####################################################################
+# Zip
+#####################################################################
+
+.PHONY: fpc_zipinstall
+
+# Create suffix to add
+ifndef PACKAGESUFFIX
+PACKAGESUFFIX=$(OS_TARGET)
+ifeq ($(OS_TARGET),go32v2)
+PACKAGESUFFIX=go32
+endif
+ifeq ($(OS_TARGET),win32)
+PACKAGESUFFIX=w32
+endif
+endif
+
+# Temporary path to pack a file
+ifndef PACKDIR
+ifndef inUnix
+PACKDIR=$(BASEDIR)/pack_tmp
+else
+PACKDIR=/tmp/fpc-pack
+endif
+endif
+
+# Maybe create default zipname from packagename
+ifndef ZIPNAME
+ifdef PACKAGENAME
+ZIPNAME=$(PACKAGEPREFIX)$(PACKAGENAME)$(PACKAGESUFFIX)
+endif
+endif
+
+# Use tar by default under linux
+ifndef USEZIP
+ifdef inUnix
+USETAR=1
+endif
+endif
+
+fpc_zipinstall:
+ifndef ZIPNAME
+	@$(ECHO) "Please specify ZIPNAME!"
+	@exit 1
+else
+	$(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
+ifdef USETAR
+	$(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT)
+	cd $(PACKDIR) ; $(TARPROG) cf$(TAROPT) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT) * ; cd $(BASEDIR)
+else
+	$(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT)
+	cd $(PACKDIR) ; $(ZIPPROG) -Dr $(ZIPOPT) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT) * ; cd $(BASEDIR)
+endif
+	$(DELTREE) $(PACKDIR)
+endif
+
+.PHONY:  fpc_zipsourceinstall
+
+fpc_zipsourceinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall PACKAGESUFFIX=src
+
+.PHONY:  fpc_zipexampleinstall
+
+fpc_zipexampleinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall PACKAGESUFFIX=exm
+
+#####################################################################
+# Clean rules
+#####################################################################
+
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+
+ifdef EXTRACLEANUNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRACLEANUNITS))
+endif
+
+ifdef CLEANPPUFILES
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+# Get the .o and .a files created for the units
+ifdef PPUFILES
+CLEANPPULINKFILES:=$(shell $(PPUFILES) $(CLEANPPUFILES))
+else
+CLEANPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(LIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))))
+endif
+override CLEANPPULINKFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES))
+endif
+
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef EXTRACLEANFILES
+	-$(DEL) $(EXTRACLEANFILES)
+endif
+ifdef LIBNAME
+	-$(DEL) $(LIBNAME) $(LIBFULLNAME)
+endif
+	-$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
+
+fpc_distclean: fpc_clean
+
+# Also run clean first if targetdir is set. Unittargetdir is always
+# set if targetdir or unittargetdir is specified
+ifdef UNITTARGETDIR
+TARGETDIRCLEAN=fpc_clean
+endif
+
+fpc_cleanall: $(CLEANTARGET) $(TARGETDIRCLEAN)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
+
+#####################################################################
+# Info rules
+#####################################################################
+
+.PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \
+	fpc_dirinfo
+
+fpc_info: $(INFOTARGET)
+
+fpc_infocfg:
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC....... $(FPC)
+	@$(ECHO)  Version... $(FPC_VERSION)
+	@$(ECHO)  CPU....... $(CPU_TARGET)
+	@$(ECHO)  Source.... $(OS_SOURCE)
+	@$(ECHO)  Target.... $(OS_TARGET)
+	@$(ECHO)
+
+fpc_infoobjects:
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  LoaderObjects..... $(LOADEROBJECTS)
+	@$(ECHO)  UnitObjects....... $(UNITOBJECTS)
+	@$(ECHO)  ExeObjects........ $(EXEOBJECTS)
+	@$(ECHO)
+	@$(ECHO)  ExtraCleanUnits... $(EXTRACLEANUNITS)
+	@$(ECHO)  ExtraCleanFiles... $(EXTRACLEANFILES)
+	@$(ECHO)
+	@$(ECHO)  ExtraInstallUnits. $(EXTRAINSTALLUNITS)
+	@$(ECHO)  ExtraInstallFiles. $(EXTRAINSTALLFILES)
+	@$(ECHO)
+
+fpc_infoinstall:
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+ifdef DATE
+	@$(ECHO)  DateStr.............. $(DATESTR)
+endif
+ifdef PACKAGEPREFIX
+	@$(ECHO)  PackagePrefix........ $(PACKAGEPREFIX)
+endif
+ifdef PACKAGENAME
+	@$(ECHO)  PackageName.......... $(PACKAGENAME)
+endif
+	@$(ECHO)  PackageSuffix........ $(PACKAGESUFFIX)
+	@$(ECHO)
+	@$(ECHO)  BaseInstallDir....... $(BASEINSTALLDIR)
+	@$(ECHO)  BinInstallDir........ $(BININSTALLDIR)
+	@$(ECHO)  LibInstallDir........ $(LIBINSTALLDIR)
+	@$(ECHO)  UnitInstallDir....... $(UNITINSTALLDIR)
+	@$(ECHO)  SourceInstallDir..... $(SOURCEINSTALLDIR)
+	@$(ECHO)  DocInstallDir........ $(DOCINSTALLDIR)
+	@$(ECHO)  DataInstallDir....... $(DATAINSTALLDIR)
+	@$(ECHO)
+	@$(ECHO)  DestZipDir........... $(DESTZIPDIR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)
+
+#####################################################################
+# Local Makefile
+#####################################################################
+
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+

+ 20 - 0
packages/oracle/Makefile.fpc

@@ -0,0 +1,20 @@
+#
+# Makefile.fpc for oracle units
+#
+
+[targets]
+units=oraoci oraclew
+examples=test01
+
+[require]
+packages=fcl
+
+[dirs]
+# in libdir variable must be path to libraries
+# libclntsh.*,libnlsrtl3.*
+#libdir=/usr/local/oracle8cli/lib
+fpcdir=../..
+
+[install]
+packagename=oracle
+examplesubdir=oracle

+ 20 - 0
packages/oracle/README

@@ -0,0 +1,20 @@
+  These units provides interface to Oracle Call Interface.
+Object workaround (TOraDatabase etc...) is on the way.
+
+  Unit oraclew contains some procedures and functions,
+which makes usage of oraoci not so painfull... But - 
+if you wanna to program in RAW OCI, you really can ;)
+
+To compile you need oracle server installed, these units
+was tested and performed on Oracle 8.0.1.5 Standard
+server. One developer license of Oracle server is free
+of charge...
+
+You need to have oracle lib directory in ldpath, too,
+or you can this path set in Makefile.fpc (is commented
+there)
+
+After all this, run 'make examples' and enjoy!
+
+Pavel Stingl
[email protected]

+ 449 - 0
packages/oracle/oraclew.pp

@@ -0,0 +1,449 @@
+{
+    $Id$
+    Copyright (c) 1999-2000 by Pavel Stingl <[email protected]>
+
+
+    OCI workaround
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    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.
+
+ **********************************************************************}
+unit oraclew;
+
+interface
+
+{$H+}
+{$mode objfpc}
+
+uses OraOCI, Classes, SysUtils;
+
+{ all pos parameters are indexed from 1..x! }
+
+    procedure OraInit;
+    procedure OraFin;
+    procedure OraLogin(name, pass, server: string);
+    procedure OraLogout;
+    procedure OraSQLExec(sql: string);
+    function OraGetFieldAsString(pos : integer) : string;
+    function OraGetFieldAsInteger(pos : integer) : longint;
+    function OraNext: boolean;
+    function OraGetFieldCount: integer;
+    function OraGetFieldName(pos : integer) : string;
+    function OraGetFieldType(pos : integer) : longint;
+    function IsFieldDate(Pos : integer): boolean;
+    procedure OraError(errcode: integer; err: OCIError; msg : string);
+    
+const
+    cDescribeBuf = 1024;
+    cPCharBufLen = 4097;
+    cPrefetchCnt = 100;
+
+type
+
+  PDescribeRec = ^TDescribeRec;
+  TDescribeRec = record
+    dbsize	: sb4;
+    dbtype	: sb2;
+    buf		: array [0..cDescribeBuf] of char;
+    buflen	: sb4;
+    dsize 	: sb4;
+    precision 	: sb2;
+    scale 	: sb2;
+    nullok 	: sb2;
+    
+    // Define part
+      valbuf	: array [0..cDescribeBuf] of char;
+      flt_buf	: double;
+      int_buf	: cardinal;
+      int64_buf : int64;
+      indp	: sb2;
+      col_retlen: ub2;
+      col_retcode: ub2;
+  end;
+  
+var
+    Env : OCIEnv; 
+    Err : OCIError;
+    Svc : OCISvcCtx;
+    Stmt: OCIStmt;
+    FieldList : TList;
+    
+    ecode : integer;
+
+implementation
+
+  function DecodeDataType(dtype : longint): string;
+  begin
+    case dtype of
+	SQLT_CHR : DecodeDataType := '(ORANET TYPE) character string';
+	SQLT_NUM : DecodeDataType := '(ORANET TYPE) oracle numeric';
+   	SQLT_INT : DecodeDataType := '(ORANET TYPE) integer';
+   	SQLT_FLT : DecodeDataType := '(ORANET TYPE) Floating point number';
+   	SQLT_STR : DecodeDataType := 'zero terminated string';
+   	SQLT_VNU : DecodeDataType := 'NUM with preceding length byte';
+   	SQLT_PDN : DecodeDataType := '(ORANET TYPE) Packed Decimal Numeric';
+   	SQLT_LNG : DecodeDataType := 'long';
+   	SQLT_VCS : DecodeDataType := 'Variable character string';
+   	SQLT_NON : DecodeDataType := 'Null/empty PCC Descriptor entry';
+	SQLT_RID : DecodeDataType := 'rowid';
+	SQLT_DAT : DecodeDataType := 'date in oracle format';
+	SQLT_VBI : DecodeDataType := 'binary in VCS format';
+	SQLT_BIN : DecodeDataType := 'binary data(DTYBIN)';
+	SQLT_LBI : DecodeDataType := 'long binary';
+	SQLT_UIN : DecodeDataType := 'unsigned integer';
+	SQLT_SLS : DecodeDataType := 'Display sign leading separate';
+	SQLT_LVC : DecodeDataType := 'Longer longs (char)';
+	SQLT_LVB : DecodeDataType := 'Longer long binary';
+	SQLT_AFC : DecodeDataType := 'Ansi fixed char';
+	SQLT_AVC : DecodeDataType := 'Ansi Var char';
+	SQLT_CUR : DecodeDataType := 'cursor  type';
+	SQLT_RDD : DecodeDataType := 'rowid descriptor'; 
+	SQLT_LAB : DecodeDataType := 'label type'; 
+	SQLT_OSL : DecodeDataType := 'oslabel type'; 
+	SQLT_NTY : DecodeDataType := 'named object type'; 
+	SQLT_REF : DecodeDataType := 'ref type'; 
+	SQLT_CLOB : DecodeDataType := 'character lob'; 
+	SQLT_BLOB : DecodeDataType := 'binary lob'; 
+	SQLT_BFILEE : DecodeDataType := 'binary file lob';
+	SQLT_CFILEE : DecodeDataType := 'character file lob'; 
+	SQLT_RSET : DecodeDataType := 'result set type'; 
+	SQLT_NCO : DecodeDataType := 'named collection type (varray or nested table)';
+	SQLT_VST : DecodeDataType := 'OCIString type'; 
+	SQLT_ODT : DecodeDataType := 'OCIDate type'; 
+    else DecodeDataType := 'Unknown';
+    end;
+  end;
+    
+  procedure FieldListClear;
+  var
+   	x: longint;
+   	PDesc: PDescribeRec;
+  begin
+   	if FieldList.Count = 0 then Exit;
+   	for x := 0 to FieldList.Count - 1 do
+   	begin
+   	    PDesc := FieldList[x];
+   	    Dispose(PDesc);
+   	end;
+   	FieldList.Clear;
+  end;
+   
+       procedure Describe;
+       var
+   	fldc	: longint;
+   	paramd	: OCIParam;
+   	colname : PChar;
+   	colsize : ub4;
+   	Rec	: PDescribeRec;
+       begin
+   	fldc := 1;
+   	
+   	FieldListClear;
+   	ecode := OCIParamGet(Stmt, OCI_HTYPE_STMT, Err, @paramd, fldc);
+   	if ecode <> OCI_SUCCESS then
+   	    ORAError(ecode, Err, 'OCIParamGetError');
+   	while ecode = OCI_SUCCESS do
+   	begin
+   	    New(Rec);
+   	    FillChar(Rec^.buf, sizeof(Rec^.buf), #0);
+   	    ecode := OCIAttrGet(paramd, OCI_DTYPE_PARAM, @Rec^.dbtype, 0, 
+   		OCI_ATTR_DATA_TYPE, Err);
+   	    if ecode <> 0 then
+   	    begin
+   		ORAError(ecode, Err, 'Retrieving DTYPE_PARAM:');
+   	    end;
+   	    colsize := 0;
+   	    colname := nil;
+   	    ecode := OCIAttrGet(paramd, OCI_DTYPE_PARAM, @colname, @colsize, 
+   		OCI_ATTR_NAME, Err);
+   	    if ecode <> 0 then
+   	    begin
+   		ORAError(ecode, Err, 'Retrieving DTYPE_PARAM:');
+   	    end;
+   	    Move(Colname^,Rec^.buf, colsize);
+   	    Rec^.buflen := colsize;
+//   	    WriteLn('Column: ',Rec^.buf:15,'	DataType: ',DecodeDataType(Rec^.dbtype));
+   	    inc(fldc);
+   	    
+   	    FieldList.Add(Rec);
+   	    ecode := OCIParamGet(Stmt, OCI_HTYPE_STMT, Err, @paramd, fldc);
+   	end;
+    end;
+    
+    procedure Define;
+    var
+	x : longint;
+	def: OCIDefine;
+	PDesc : PDescribeRec;
+	defptr: pointer;
+	deflen: sword;
+	deftyp: sword;
+    begin
+	def := nil;
+	for x := 0 to FieldList.Count - 1 do
+	begin
+	    PDesc := FieldList[x];
+	    case PDesc^.dbtype of
+		NUMBER_TYPE: begin
+		    if PDesc^.scale <> 0 then
+		    begin
+			defptr := @PDesc^.flt_buf;
+			deflen := SizeOf(PDesc^.flt_buf);
+			deftyp := FLOAT_TYPE;
+			PDesc^.dbtype := FLOAT_TYPE;
+		    end
+		    else begin
+              if PDesc^.dbsize > 4 then
+              begin
+                // WriteLn('BIG FAT WARNING!!!! dbsize int > 4 (',PDesc^.dbsize,')');
+                defptr := @PDesc^.int64_buf;
+                deflen := SizeOf(PDesc^.int64_buf);
+                deftyp := INT_TYPE;
+                PDesc^.dbtype := INT_TYPE;
+              end
+              else begin
+                defptr := @PDesc^.int_buf;
+			    deflen := SizeOf(PDesc^.int_buf);
+			    deftyp := INT_TYPE;
+			    PDesc^.dbtype := INT_TYPE;
+              end;
+		    end;
+		end;
+		else begin
+		    defptr := @PDesc^.valbuf;
+		    deflen := cDescribeBuf;
+		    deftyp := PDesc^.dbtype;
+		end;
+	    end;
+	    ecode := OCIDefineByPos(Stmt, @def, Err, x + 1, defptr, 
+		deflen,	deftyp, @PDesc^.indp, @PDesc^.col_retlen, 
+		@PDesc^.col_retcode, OCI_DEFAULT);
+	    if ecode <> 0 then
+	    begin
+		OraError(ecode, Err, 'OCIDefineByPos: ');
+	    end;
+	end;
+    end;
+
+    procedure OraError( errcode : integer; err: OCIError; msg : string );
+    var
+	buff : array [0..1024] of char;
+	xp : PLongint;
+    begin
+	if err <> nil then
+	begin
+	    case errcode of
+		OCI_INVALID_HANDLE: Msg := Msg + ' OCI_INVALID_HANDLE';
+	    end;
+	    xp := @errcode;
+	    OCIErrorGet( err, 1, nil, xp, @buff[0], 1024, OCI_HTYPE_ERROR);
+	    writeln(stderr, msg, ' ', buff);
+	end
+	else begin
+	    WriteLn(stderr, msg);
+	    Halt(1);
+	end;
+    end;
+
+    procedure OraInit;
+    begin
+	ecode := OCIInitialize({OCI_DEFAULT or }OCI_OBJECT, nil, nil, nil, nil);
+	if ecode <> 0 then OraError( ecode, nil, 'Error initializing OCI');
+	ecode := OCIEnvInit(Env, OCI_DEFAULT, 0, nil);
+	if ecode <> 0 then OraError( ecode, nil, 'Error initializing OCI environment');
+	ecode := OCIHandleAlloc(Env, Err, OCI_HTYPE_ERROR, 0, nil);
+	if ecode <> 0 then OraError( ecode, nil, 'Error allocating error handle');
+	ecode := OCIHandleAlloc(Env, Stmt, OCI_HTYPE_STMT, 0, nil);
+	if ecode <> 0 then OraError( ecode, nil, 'Error allocating statement handle');
+    end;
+    
+    procedure OraLogin(name, pass, server: string);
+    begin
+	ecode := OCILogon(Env, Err, Svc, @name[1], Length(name),
+	    @pass[1], Length(pass), @server[1], Length(server));
+	if ecode <> 0 then OraError(ecode, Err, ''); 	
+    end;
+    
+    procedure OraLogout;
+    begin
+	ecode := OCILogoff(Svc, Err);
+	if ecode <> 0 then
+	    OraError(ecode, Err, 'OCILogoff: ');
+    end;
+    
+    procedure OraFin;
+    begin
+	OCIHandleFree(Stmt, OCI_HTYPE_STMT);
+	OCIHandleFree(Err, OCI_HTYPE_ERROR);
+    end;
+    
+    procedure OraSQLExec(sql: string);
+    var
+	dtype: longint;
+    begin
+//    writeLn(Length(sql));
+	ecode := OCIStmtPrepare(Stmt, Err, @sql[1], Length(sql),
+	    OCI_NTV_SYNTAX, OCI_DEFAULT);
+	if ecode <> 0 then 
+	begin
+	    OraError(ecode, Err, 'OCIStmtPrepare:');
+	    Exit;
+	end;
+    
+    dtype := cPrefetchCnt;
+    ecode := OCIAttrSet(Stmt, OCI_HTYPE_STMT, @dtype, 
+      SizeOf(dtype), OCI_ATTR_PREFETCH_ROWS, Err);
+	if ecode <> 0 then 
+	begin
+	    OraError(ecode, Err, 'ociattrset:');
+	    Exit;
+	end;
+
+	dtype := 0;
+	ecode := OCIAttrGet(Stmt, OCI_HTYPE_STMT, @dtype, 4, 
+	    OCI_ATTR_STMT_TYPE, Err);
+	if ecode <> 0 then 
+	begin
+	    OraError(ecode, Err, 'ociattrget:');
+	    Exit;
+	end;
+    
+	ecode := 0;
+	if dtype = OCI_STMT_SELECT then
+	    ecode := OCIStmtExecute(Svc, Stmt, Err, 0, 0, nil, nil, OCI_DEFAULT)
+	else ecode := OCIStmtExecute(Svc, Stmt, Err, 1, 0, nil, nil, OCI_DEFAULT);
+	if ecode <> 0 then
+	begin
+	    OraError(ecode, Err, 'OCIStmtExecute:');
+	    Exit;
+	end;
+	
+	if dtype = OCI_STMT_SELECT then
+	begin
+	    Describe;
+	    Define;
+	end;
+    end;
+    
+    function OraGetFieldCount : integer;
+    begin
+	OraGetFieldCount := FieldList.Count;
+    end;
+
+    function IsFieldDate(Pos : integer): boolean;
+    var
+      Desc : TDescribeRec;      
+    begin
+      Result := False;
+      if (Pos > FieldList.Count) or (Pos < 1) then
+        Exit;
+      Desc := TDescribeRec(FieldList[Pos-1]^);
+      Result := (Desc.dbtype = DATE_TYPE);
+    end;
+    
+    function OraGetFieldAsString(pos : integer) : string;
+    var
+	Desc : TDescribeRec;
+    Date : array [0..6] of byte;
+    begin
+	if (Pos > FieldList.Count) or (Pos < 1) then
+	    Exit;
+	Desc := TDescribeRec(FieldList[pos-1]^);
+    if Desc.indp < 0 then
+    begin
+      OraGetFieldAsString := 'null';
+      Exit;
+    end;
+	if Desc.dbtype = STRING_TYPE then
+	begin
+	    Desc.valbuf[Desc.col_retlen] := #0;
+	    OraGetFieldAsString := Desc.valbuf;
+	end
+	else if Desc.dbtype = VARCHAR2_TYPE then
+	begin
+	    Desc.valbuf[Desc.col_retlen] := #0;
+	    OraGetFieldAsString := Desc.valbuf;
+	end
+  	else if Desc.dbtype = INT_TYPE then
+    begin
+	    OraGetFieldAsString := IntToStr(Desc.int_buf);
+    end
+	else if Desc.dbtype = FLOAT_TYPE then
+	    OraGetFieldAsString := FloatToStr(Desc.flt_buf)
+	else if Desc.dbtype = DATE_TYPE then
+    begin
+        Move(Desc.valbuf,Date,SizeOf(Date));
+	    OraGetFieldAsString := 
+          Format('%0.2d.%0.2d.%0.4d %0.2d:%0.2d:%0.2d',
+          [Date[3],Date[2],(((Date[0]-100)*100)+(Date[1] - 100)),
+           Date[4]-1,
+           Date[5]-1,
+           Date[6]-1]);
+    end
+	else if Desc.dbtype = SQLT_AFC then
+	begin
+	    Desc.valbuf[Desc.col_retlen] := #0;
+	    OraGetFieldAsString := Desc.valbuf;
+	end
+	else OraGetFieldAsString := 'dbtype not implemented ' + IntToStr(Desc.dbtype);
+    end;
+    
+    function OraGetFieldAsInteger(pos : integer) : longint;
+    begin
+	OraGetFieldAsInteger := 0;
+    end;
+    
+    function OraNext: boolean;
+    begin
+	ecode := OCIStmtFetch(Stmt, Err, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
+	if ecode = 0 then
+	    OraNext := true
+	else if ecode = OCI_SUCCESS_WITH_INFO then
+	    OraNext := false
+	else if ecode = OCI_NO_DATA then
+	    OraNext := false
+	else begin
+	    OraNext := false;
+	    OraError(ecode, err, 'OCIStmtFetch:');
+	end;
+    end;
+    
+    function OraGetFieldType(pos : integer) : longint;
+    begin
+      if (Pos > FieldList.Count) or (pos < 1) then
+        Exit;
+      OraGetFieldType := TDescribeRec(FieldList[pos-1]^).dbtype;    
+    end;
+
+    function OraGetFieldName(pos : integer) : string;
+    begin
+	if (Pos > FieldList.Count) or (Pos < 1) then
+	    Exit;
+	OraGetFieldName := TDescribeRec(FieldList[pos-1]^).buf;	
+    end;
+    
+initialization
+    
+    FieldList := TList.Create;
+
+finalization
+
+    FieldListClear;
+    FieldList.Free;
+
+end.
+
+{
+  $Log$
+  Revision 1.1  2000-12-02 15:14:14  michael
+  + Initial implementation of Pavel Stingl
+
+  Revision 1.1.1.1  2000/10/11 07:48:28  stingp1
+    * Import to cvs
+
+}

+ 1951 - 0
packages/oracle/oraoci.pp

@@ -0,0 +1,1951 @@
+{
+    $Id$
+    Copyright (c) 1999-2000 by Pavel Stingl <[email protected]>
+    
+
+    Oracle Call Interface Translation
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    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.
+
+ **********************************************************************}
+unit OraOCI;
+
+{$MODE FPC}
+{$linklib clntsh}
+{$linklib common}
+{$linklib core4}
+{$linklib nlsrtl3}
+{$linklib dl}
+{$linklib c}
+
+interface
+
+  type
+    sb1			= shortint;
+    ub1			= byte;
+    sb2			= integer;
+    ub2			= word;
+    sb4			= longint;
+    ub4			= cardinal;
+    eb1			= byte;
+    eb2			= word;
+    eb4			= cardinal;
+    sword		= integer;
+    uword		= integer;
+    eword		= integer;
+    PDouble		= ^double;
+    PLongint		= ^longint;
+    PPointer		= ^pointer;
+    PWord		= ^word;
+    PBoolean		= ^boolean;
+    PCardinal		= ^cardinal;
+    PByte		= ^byte;
+    
+
+    POCITime = ^OCITime;
+    OCITime = packed record
+      OCITimeHH      : ub1;
+      OCITimeMM      : ub1;
+      OCITimeSS      : ub1;
+    end;
+  
+    POCIDate = ^OCIDate;
+    OCIDate = packed record
+      OCIDateYYYY    : sb2;
+      OCIDateMM      : ub1;
+      OCIDateDD      : ub1;
+      OCIDateTime    : OCITime;
+    end;
+    
+    POCIDateTime = ^TOCIDate;
+    TOCIDate = packed record    
+      Year           : sb2;
+      Month          : ub1;
+      Day            : ub1;
+      Hour           : ub1;
+      Min            : ub1;
+      Sec            : ub1;    
+    end;
+
+    PCDA_DEF = ^TCDA_DEF;
+    TCDA_DEF = packed record
+      v2_rc 		: sb2;
+      ft 		: ub2;
+      rpc 		: ub4;
+      peo 		: ub2;
+      fc 		: ub1;
+      rcs1 		: ub1;
+      rc 		: ub2;
+      wrn 		: ub1;
+      rcs2 		: ub1;
+      rcs3 		: sword;
+        rid 		: record
+          rd 		: record
+            rcs4 	: ub4;
+            rcs5 	: ub2;
+            rcs6 	: ub1;
+          end;
+          rcs7 		: ub4;
+          rcs8	 	: ub2;
+        end;
+      ose 		: sword;
+      chk 		: ub1;
+      rcsp 		: pointer;
+      filler		: array [39..64] of byte;
+    end;
+    
+    PLDA_DEF		= ^TCDA_DEF;
+    TLDA_DEF		= TCDA_DEF;
+    
+    
+
+  const
+    EB4MAXVAL    	= 2147483647;
+    EB4MINVAL    	= 0;
+    UB4MAXVAL    	= $FFFFFFFF;
+    UB4MINVAL    	= 0;
+    SB4MAXVAL    	= 2147483647;
+    SB4MINVAL    	= -2147483647;
+    MINEB4MAXVAL 	= 2147483647;
+    MAXEB4MINVAL 	= 0;
+    MINUB4MAXVAL 	= $FFFFFFFF;
+    MAXUB4MINVAL 	= 0;
+    MINSB4MAXVAL 	= 2147483647;
+    MAXSB4MINVAL 	= -2147483647;
+
+  const
+     VARCHAR2_TYPE = 1;
+     NUMBER_TYPE = 2;
+     INT_TYPE = 3;
+     FLOAT_TYPE = 4;
+     STRING_TYPE = 5;
+     ROWID_TYPE = 11;
+     DATE_TYPE = 12;
+
+     { OCI Environment Modes for opinit call  }
+     OCI_EV_DEF = 0;  		{ default single-threaded environment  }
+     OCI_EV_TSF = 1;  		{ thread-safe environment  }
+
+     { OCI Logon Modes for olog call  }
+     OCI_LM_DEF = 0;  		{ default login  }
+     OCI_LM_NBL = 1;  		{ non-blocking logon  }
+
+     OCI_ONE_PIECE = 0;  	{ there or this is the only piece  }
+     OCI_FIRST_PIECE = 1;  	{ the first of many pieces  }
+     OCI_NEXT_PIECE = 2;  	{ the next of many pieces  }
+     OCI_LAST_PIECE = 3;  	{ the last piece of this column  }
+
+     { input data types  }
+     SQLT_CHR = 1;  		{ (ORANET TYPE) character string  }
+     SQLT_NUM = 2;  		{ (ORANET TYPE) oracle numeric  }
+     SQLT_INT = 3;  		{ (ORANET TYPE) integer  }
+     SQLT_FLT = 4;  		{ (ORANET TYPE) Floating point number  }
+     SQLT_STR = 5;  		{ zero terminated string  }
+     SQLT_VNU = 6;  		{ NUM with preceding length byte  }
+     SQLT_PDN = 7;  		{ (ORANET TYPE) Packed Decimal Numeric  }
+     SQLT_LNG = 8;  		{ long  }
+     SQLT_VCS = 9;  		{ Variable character string  }
+     SQLT_NON = 10;  		{ Null/empty PCC Descriptor entry  }
+     SQLT_RID = 11;  		{ rowid  }
+     SQLT_DAT = 12;  		{ date in oracle format  }
+     SQLT_VBI = 15;  		{ binary in VCS format  }
+     SQLT_BIN = 23;  		{ binary data(DTYBIN)  }
+     SQLT_LBI = 24;  		{ long binary  }
+     SQLT_UIN = 68;  		{ unsigned integer  }
+     SQLT_SLS = 91;  		{ Display sign leading separate  }
+     SQLT_LVC = 94;  		{ Longer longs (char)  }
+     SQLT_LVB = 95;  		{ Longer long binary  }
+     SQLT_AFC = 96;  		{ Ansi fixed char  }
+     SQLT_AVC = 97;  		{ Ansi Var char  }
+     SQLT_CUR = 102;  		{ cursor  type  }
+     SQLT_RDD = 104;  		{ rowid descriptor  }
+     SQLT_LAB = 105;  		{ label type  }
+     SQLT_OSL = 106;  		{ oslabel type  }
+     SQLT_NTY = 108;  		{ named object type  }
+     SQLT_REF = 110;  		{ ref type  }
+     SQLT_CLOB = 112;  		{ character lob  }
+     SQLT_BLOB = 113;  		{ binary lob  }
+     SQLT_BFILEE = 114;  	{ binary file lob  }
+     SQLT_CFILEE = 115;  	{ character file lob  }
+     SQLT_RSET = 116;  		{ result set type  }
+     SQLT_NCO = 122;  		{ named collection type (varray or nested table)  }
+     SQLT_VST = 155;  		{ OCIString type  }
+     SQLT_ODT = 156;  		{ OCIDate type  }
+
+     { binary file lob  }
+     SQLT_FILE = SQLT_BFILEE;
+     SQLT_CFILE = SQLT_CFILEE;
+     SQLT_BFILE = SQLT_BFILEE;
+
+     { CHAR/NCHAR/VARCHAR2/NVARCHAR2/CLOB/NCLOB char set "form" information  }
+     SQLCS_IMPLICIT = 1;  	{ for CHAR, VARCHAR2, CLOB w/o a specified set  }
+     SQLCS_NCHAR = 2;  		{ for NCHAR, NCHAR VARYING, NCLOB  }
+     SQLCS_EXPLICIT = 3;  	{ for CHAR, etc, with "CHARACTER SET ..." syntax  }
+     SQLCS_FLEXIBLE = 4;  	{ for PL/SQL "flexible" parameters  }
+     SQLCS_LIT_NULL = 5;  	{ for typecheck of NULL and empty_clob() lits  }
+     
+     { OCI Modes }
+     OCI_DEFAULT = $00;  { the default value for parameters and attributes  }
+     OCI_THREADED = $01;  { the application is in threaded environment  }
+     OCI_OBJECT = $02;  { the application is in object environment  }
+     OCI_NON_BLOCKING = $04;  { non blocking mode of operation  }
+     OCI_ENV_NO_MUTEX = $08;  { the environment handle will not be protected
+  				 by a mutex internally  }
+
+     { OCI Handle Types }
+     { handle types range from 1 - 49  }
+     OCI_HTYPE_FIRST = 1;  { start value of handle type  }
+     OCI_HTYPE_ENV = 1;  { environment handle  }
+     OCI_HTYPE_ERROR = 2;  { error handle  }
+     OCI_HTYPE_SVCCTX = 3;  { service handle  }
+     OCI_HTYPE_STMT = 4;  { statement handle  }
+     OCI_HTYPE_BIND = 5;  { bind handle  }
+     OCI_HTYPE_DEFINE = 6;  { define handle  }
+     OCI_HTYPE_DESCRIBE = 7;  { describe handle  }
+     OCI_HTYPE_SERVER = 8;  { server handle  }
+     OCI_HTYPE_SESSION = 9;  { authentication handle  }
+     OCI_HTYPE_TRANS = 10;  { transaction handle  }
+     OCI_HTYPE_COMPLEXOBJECT = 11;  { complex object retrieval handle  }
+     OCI_HTYPE_SECURITY = 12;  { security handle  }
+     OCI_HTYPE_LAST = 12;  { last value of a handle type  }
+
+     { Descriptor Types }
+     { descriptor values range from 50 - 255  }
+     OCI_DTYPE_FIRST = 50;  { start value of descriptor type  }
+     OCI_DTYPE_LOB = 50;  { lob  locator  }
+     OCI_DTYPE_SNAP = 51;  { snapshot descriptor  }
+     OCI_DTYPE_RSET = 52;  { result set descriptor  }
+     OCI_DTYPE_PARAM = 53;  { a parameter descriptor obtained from ocigparm  }
+     OCI_DTYPE_ROWID = 54;  { rowid descriptor  }
+     OCI_DTYPE_COMPLEXOBJECTCOMP = 55;  { complex object retrieval descriptor  }
+     OCI_DTYPE_FILE = 56;  { File Lob locator  }
+     OCI_DTYPE_AQENQ_OPTIONS = 57;  { enqueue options  }
+     OCI_DTYPE_AQDEQ_OPTIONS = 58;  { dequeue options  }
+     OCI_DTYPE_AQMSG_PROPERTIES = 59;  { message properties  }
+     OCI_DTYPE_AQAGENT = 60;  { aq agent  }
+     OCI_DTYPE_LAST = 60;  { last value of a descriptor type  }
+
+     { Object Ptr Types }
+     OCI_OTYPE_NAME = 1;  { object name  }
+     OCI_OTYPE_REF = 2;  { REF to TDO  }
+     OCI_OTYPE_PTR = 3;  { PTR to TDO  }
+
+  { Attribute Types }
+  { the OCI function code  }
+     OCI_ATTR_FNCODE = 1;  { the OCI function code  }
+     OCI_ATTR_OBJECT = 2;  { is the environment initialized in object mode  }
+     OCI_ATTR_NONBLOCKING_MODE = 3;  { non blocking mode  }
+     OCI_ATTR_SQLCODE = 4;  { the SQL verb  }
+     OCI_ATTR_ENV = 5;  { the environment handle  }
+     OCI_ATTR_SERVER = 6;  { the server handle  }
+     OCI_ATTR_SESSION = 7;  { the user session handle  }
+     OCI_ATTR_TRANS = 8;  { the transaction handle  }
+     OCI_ATTR_ROW_COUNT = 9;  { the rows processed so far  }
+     OCI_ATTR_SQLFNCODE = 10;  { the SQL verb of the statement  }
+     OCI_ATTR_PREFETCH_ROWS = 11;  { sets the number of rows to prefetch  }
+     OCI_ATTR_NESTED_PREFETCH_ROWS = 12;  { the prefetch rows of nested table }
+     OCI_ATTR_PREFETCH_MEMORY = 13;  { memory limit for rows fetched  }
+     OCI_ATTR_NESTED_PREFETCH_MEMORY = 14;  { memory limit for nested rows  }
+     OCI_ATTR_CHAR_COUNT = 15;  { this specifies the bind and define size in characters  }
+     OCI_ATTR_PDSCL = 16;  { packed decimal scale  }
+     OCI_ATTR_PDFMT = 17;  { packed decimal format  }
+     OCI_ATTR_PARAM_COUNT = 18;  { number of column in the select list  }
+     OCI_ATTR_ROWID = 19;  { the rowid  }
+     OCI_ATTR_CHARSET = 20;  { the character set value  }
+     OCI_ATTR_NCHAR = 21;  { NCHAR type  }
+     OCI_ATTR_USERNAME = 22;  { username attribute  }
+     OCI_ATTR_PASSWORD = 23;  { password attribute  }
+     OCI_ATTR_STMT_TYPE = 24;  { statement type  }
+     OCI_ATTR_INTERNAL_NAME = 25;  { user friendly global name  }
+     OCI_ATTR_EXTERNAL_NAME = 26;  { the internal name for global txn  }
+     OCI_ATTR_XID = 27;  { XOPEN defined global transaction id  }
+     OCI_ATTR_TRANS_LOCK = 28;  { transaction lock }
+     OCI_ATTR_TRANS_NAME = 29;  { string to identify a global transaction  }
+     OCI_ATTR_HEAPALLOC = 30;  { memory allocated on the heap  }
+     OCI_ATTR_CHARSET_ID = 31;  { Character Set ID  }
+     OCI_ATTR_CHARSET_FORM = 32;  { Character Set Form  }
+     OCI_ATTR_MAXDATA_SIZE = 33;  { Maximumsize of data on the server   }
+     OCI_ATTR_CACHE_OPT_SIZE = 34;  { object cache optimal size  }
+     OCI_ATTR_CACHE_MAX_SIZE = 35;  { object cache maximum size percentage  }
+     OCI_ATTR_PINOPTION = 36;  { object cache default pin option  }
+     OCI_ATTR_ALLOC_DURATION = 37;  { object cache default allocation duration  }
+     OCI_ATTR_PIN_DURATION = 38;  { object cache default pin duration  }
+     OCI_ATTR_FDO = 39;  { Format Descriptor object attribute  }
+     OCI_ATTR_POSTPROCESSING_CALLBACK = 40;  { Callback to process outbind data  }
+     OCI_ATTR_POSTPROCESSING_CONTEXT = 41;  { Callback context to process outbind data  }
+     OCI_ATTR_ROWS_RETURNED = 42;  { Number of rows returned in current iter - for Bind handles  }
+     OCI_ATTR_FOCBK = 43;  { Failover Callback attribute  }
+     OCI_ATTR_IN_V8_MODE = 44;  { is the server/service context in V8 mode  }
+     OCI_ATTR_LOBEMPTY = 45;  { empty lob ?  }
+     OCI_ATTR_SESSLANG = 46;  { session language handle  }
+
+  { Enqueue Options }
+     OCI_ATTR_VISIBILITY = 47;  { visibility  }
+     OCI_ATTR_RELATIVE_MSGID = 48;  { relative message id  }
+     OCI_ATTR_SEQUENCE_DEVIATION = 49;  { sequence deviation  }
+
+  { Dequeue Options }
+     OCI_ATTR_CONSUMER_NAME = 50;  { consumer name  }
+     OCI_ATTR_DEQ_MODE = 51;  { dequeue mode  }
+     OCI_ATTR_NAVIGATION = 52;  { navigation  }
+     OCI_ATTR_WAIT = 53;  { wait  }
+     OCI_ATTR_DEQ_MSGID = 54;  { dequeue message id  }
+
+  { Message Properties }
+     OCI_ATTR_PRIORITY = 55;  { priority  }
+     OCI_ATTR_DELAY = 56;  { delay  }
+     OCI_ATTR_EXPIRATION = 57;  { expiration  }
+     OCI_ATTR_CORRELATION = 58;  { correlation id  }
+     OCI_ATTR_ATTEMPTS = 59;  { # of attempts  }
+     OCI_ATTR_RECIPIENT_LIST = 60;  { recipient list  }
+     OCI_ATTR_EXCEPTION_QUEUE = 61;  { exception queue name  }
+     OCI_ATTR_ENQ_TIME = 62;  { enqueue time (only OCIAttrGet)  }
+     OCI_ATTR_MSG_STATE = 63;  { message state (only OCIAttrGet)  }
+
+  { AQ Agent }
+     OCI_ATTR_AGENT_NAME = 64;  { agent name  }
+     OCI_ATTR_AGENT_ADDRESS = 65;  { agent address  }
+     OCI_ATTR_AGENT_PROTOCOL = 66;  { agent protocol  }
+
+  { Parameter Attribute Types }
+     OCI_ATTR_UNK = 101;  { unknown attribute  }
+     OCI_ATTR_NUM_COLS = 102;  { number of columns  }
+     OCI_ATTR_LIST_COLUMNS = 103;  { parameter of the column list  }
+     OCI_ATTR_RDBA = 104;  { DBA of the segment header  }
+     OCI_ATTR_CLUSTERED = 105;  { whether the table is clustered  }
+     OCI_ATTR_PARTITIONED = 106;  { whether the table is partitioned  }
+     OCI_ATTR_INDEX_ONLY = 107;  { whether the table is index only  }
+     OCI_ATTR_LIST_ARGUMENTS = 108;  { parameter of the argument list  }
+     OCI_ATTR_LIST_SUBPROGRAMS = 109;  { parameter of the subprogram list  }
+     OCI_ATTR_REF_TDO = 110;  { REF to the type descriptor  }
+     OCI_ATTR_LINK = 111;  { the database link name  }
+     OCI_ATTR_MIN = 112;  { minimum value  }
+     OCI_ATTR_MAX = 113;  { maximum value  }
+     OCI_ATTR_INCR = 114;  { increment value  }
+     OCI_ATTR_CACHE = 115;  { number of sequence numbers cached  }
+     OCI_ATTR_ORDER = 116;  { whether the sequence is ordered  }
+     OCI_ATTR_HW_MARK = 117;  { high-water mark  }
+     OCI_ATTR_TYPE_SCHEMA = 118;  { type's schema name  }
+     OCI_ATTR_TIMESTAMP = 119;  { timestamp of the object  }
+     OCI_ATTR_NUM_ATTRS = 120;  { number of attributes  }
+     OCI_ATTR_NUM_PARAMS = 121;  { number of parameters  }
+     OCI_ATTR_OBJID = 122;  { object id for a table or view  }
+     OCI_ATTR_PTYPE = 123;  { type of info described by  }
+     OCI_ATTR_PARAM = 124;  { parameter descriptor  }
+     OCI_ATTR_OVERLOAD_ID = 125;  { overload ID for funcs and procs  }
+     OCI_ATTR_TABLESPACE = 126;  { table name space  }
+     OCI_ATTR_TDO = 127;  { TDO of a type  }
+     OCI_ATTR_PARSE_ERROR_OFFSET = 128;  { Parse Error offset  }
+
+  { Credential Types }
+     OCI_CRED_RDBMS = 1;  { database username/password  }
+     OCI_CRED_EXT = 2;  { externally provided credentials  }
+
+  { Error Return Values }
+     OCI_SUCCESS = 0;  { maps to SQL_SUCCESS of SAG CLI  }
+     OCI_SUCCESS_WITH_INFO = 1;  { maps to SQL_SUCCESS_WITH_INFO  }
+     OCI_NO_DATA = 100;  { maps to SQL_NO_DATA  }
+     OCI_ERROR = -(1);  { maps to SQL_ERROR  }
+     OCI_INVALID_HANDLE = -(2);  { maps to SQL_INVALID_HANDLE  }
+     OCI_NEED_DATA = 99;  { maps to SQL_NEED_DATA  }
+     OCI_STILL_EXECUTING = -(3123);  { OCI would block error  }
+     OCI_CONTINUE = -(24200);  { Continue with the body of the OCI function  }
+
+  { Parsing Syntax Types }
+     OCI_V7_SYNTAX = 2;  { V7 language  }
+     OCI_V8_SYNTAX = 3;  { V8 language  }
+     OCI_NTV_SYNTAX = 1;  
+     { Use what so ever is the native lang of server  }
+     { these values must match the values defined in kpul.h  }
+
+  { Scrollable Cursor Options }
+     OCI_FETCH_NEXT = $02;  { next row  }
+     OCI_FETCH_FIRST = $04;  { first row of the result set  }
+     OCI_FETCH_LAST = $08;  { the last row of the result set  }
+     OCI_FETCH_PRIOR = $10;  { the previous row relative to current  }
+     OCI_FETCH_ABSOLUTE = $20;  { absolute offset from first  }
+     OCI_FETCH_RELATIVE = $40;  { offset relative to current  }
+
+  { Bind and Define Options }
+     OCI_SB2_IND_PTR = $01;  { unused  }
+     OCI_DATA_AT_EXEC = $02;  { data at execute time  }
+     OCI_DYNAMIC_FETCH = $02;  { fetch dynamically  }
+     OCI_PIECEWISE = $04;  { piecewise DMLs or fetch  }
+
+  { Execution Modes }
+     OCI_BATCH_MODE = $01;  { batch the oci statement for execution  }
+     OCI_EXACT_FETCH = $02;  { fetch the exact rows specified  }
+     OCI_KEEP_FETCH_STATE = $04;  { unused  }
+     OCI_SCROLLABLE_CURSOR = $08;  { cursor scrollable  }
+     OCI_DESCRIBE_ONLY = $10;  { only describe the statement  }
+     OCI_COMMIT_ON_SUCCESS = $20;  { commit, if successful execution  }
+
+  { Authentication Modes }
+     OCI_MIGRATE = $0001;  { migratable auth context  }
+     OCI_SYSDBA = $0002;  { for SYSDBA authorization  }
+     OCI_SYSOPER = $0004;  { for SYSOPER authorization  }
+     OCI_PRELIM_AUTH = $0008;  { for preliminary authorization  }
+
+  { Piece Information }
+     OCI_PARAM_IN = $01;  { in parameter  }
+     OCI_PARAM_OUT = $02;  { out parameter  }
+
+  { Transaction Start Flags }
+  { NOTE: OCI_TRANS_JOIN and OCI_TRANS_NOMIGRATE not supported in 8.0.X        }
+  { starts a new transaction branch  }
+     OCI_TRANS_NEW = $00000001;  { starts a new transaction branch  }
+     OCI_TRANS_JOIN = $00000002;  { join an existing transaction  }
+     OCI_TRANS_RESUME = $00000004;  { resume this transaction  }
+     OCI_TRANS_STARTMASK = $000000ff;
+     OCI_TRANS_READONLY = $00000100;  { starts a readonly transaction  }
+     OCI_TRANS_READWRITE = $00000200;  { starts a read-write transaction  }
+     OCI_TRANS_SERIALIZABLE = $00000400;  { starts a serializable transaction  }
+     OCI_TRANS_ISOLMASK = $0000ff00;
+     OCI_TRANS_LOOSE = $00010000;  { a loosely coupled branch  }
+     OCI_TRANS_TIGHT = $00020000;  { a tightly coupled branch  }
+     OCI_TRANS_TYPEMASK = $000f0000;
+     OCI_TRANS_NOMIGRATE = $00100000;  { non migratable transaction  }
+
+  { Transaction End Flags }
+     OCI_TRANS_TWOPHASE = $01000000;  { use two phase commit  }
+
+  { AQ Constants 
+     NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
+     The following constants must match the PL/SQL dbms_aq constants
+     NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
+    }
+  { Visibility flags }
+     OCI_ENQ_IMMEDIATE = 1;  { enqueue is an independent transaction  }
+     OCI_ENQ_ON_COMMIT = 2;  { enqueue is part of current transaction  }
+     
+     OCI_DEQ_BROWSE = 1;  { read message without acquiring a lock  }
+     OCI_DEQ_LOCKED = 2;  { read and obtain write lock on message  }
+     OCI_DEQ_REMOVE = 3;  { read the message and delete it  }
+
+  { Dequeue navigation flags }
+     OCI_DEQ_FIRST_MSG = 1;  { get first message at head of queue  }
+     OCI_DEQ_NEXT_MSG = 3;  { next message that is available  }
+     OCI_DEQ_NEXT_TRANSACTION = 2;  { get first message of next txn group  }
+
+  { Message states }
+     OCI_MSG_WAITING = 1;  { the message delay has not yet completed  }
+     OCI_MSG_READY = 0;  { the message is ready to be processed  }
+     OCI_MSG_PROCESSED = 2;  { the message has been processed  }
+     OCI_MSG_EXPIRED = 3;  { message has moved to exception queue  }
+
+  { Sequence deviation }
+     OCI_ENQ_BEFORE = 2;  { enqueue message before another message  }
+     OCI_ENQ_TOP = 3;  { enqueue message before all messages  }
+
+  { Visibility flags }
+     OCI_DEQ_IMMEDIATE = 1;  { dequeue is an independent transaction  }
+     OCI_DEQ_ON_COMMIT = 2;  { dequeue is part of current transaction  }
+
+  { Wait }
+     OCI_DEQ_WAIT_FOREVER = -(1);  { wait forever if no message available  }
+     OCI_DEQ_NO_WAIT = 0;  { do not wait if no message is available  }
+
+  { Delay }
+     OCI_MSG_NO_DELAY = 0;  { message is available immediately  }
+
+  { Expiration }
+     OCI_MSG_NO_EXPIRATION = -(1);  { message will never expire  }
+
+  { -------------------------- END AQ Constants -----------------------------  }
+  {-----------Object Types      Not to be Used      -------------------------- }
+  { Deprecated  }
+     OCI_OTYPE_UNK = 0;
+     OCI_OTYPE_TABLE = 1;
+     OCI_OTYPE_VIEW = 2;
+     OCI_OTYPE_SYN = 3;
+     OCI_OTYPE_PROC = 4;
+     OCI_OTYPE_FUNC = 5;
+     OCI_OTYPE_PKG = 6;
+     OCI_OTYPE_STMT = 7;
+
+  { Describe Handle Parameter Attributes }
+  { Attributes common to Columns and Stored Procs  }
+     OCI_ATTR_DATA_SIZE = 1;  { maximum size of the data  }
+     OCI_ATTR_DATA_TYPE = 2;  { the SQL type of the column/argument  }
+     OCI_ATTR_DISP_SIZE = 3;  { the display size  }
+     OCI_ATTR_NAME = 4;  { the name of the column/argument  }
+     OCI_ATTR_PRECISION = 5;  { precision if number type  }
+     OCI_ATTR_SCALE = 6;  { scale if number type  }
+     OCI_ATTR_IS_NULL = 7;  { is it null ?  }
+     OCI_ATTR_TYPE_NAME = 8;  { name of the named data type or a package name for package private types  }
+     OCI_ATTR_SCHEMA_NAME = 9;  { the schema name  }
+     OCI_ATTR_SUB_NAME = 10;  { type name if package private type  }
+     OCI_ATTR_POSITION = 11;  { relative position of col/arg in the list of cols/args  }
+     OCI_ATTR_COMPLEXOBJECTCOMP_TYPE = 50;  { complex object retrieval parameter attributes  }
+     OCI_ATTR_COMPLEXOBJECTCOMP_TYPE_LEVEL = 51;
+     OCI_ATTR_COMPLEXOBJECT_LEVEL = 52;
+     OCI_ATTR_COMPLEXOBJECT_COLL_OUTOFLINE = 53;
+
+  { Only Columns  }
+     OCI_ATTR_DISP_NAME = 100;  { the display name  }
+
+  {Only Stored Procs  }
+     OCI_ATTR_OVERLOAD = 210;  { is this position overloaded  }
+     OCI_ATTR_LEVEL = 211;  { level for structured types  }
+     OCI_ATTR_HAS_DEFAULT = 212;  { has a default value  }
+     OCI_ATTR_IOMODE = 213;  { in, out inout  }
+     OCI_ATTR_RADIX = 214;  { returns a radix  }
+     OCI_ATTR_NUM_ARGS = 215;  { total number of arguments  }
+
+  { only named type attributes  }
+     OCI_ATTR_TYPECODE = 216;  { object or collection  }
+     OCI_ATTR_COLLECTION_TYPECODE = 217;  { varray or nested table  }
+     OCI_ATTR_VERSION = 218;  { user assigned version  }
+     OCI_ATTR_IS_INCOMPLETE_TYPE = 219;  { is this an incomplete type  }
+     OCI_ATTR_IS_SYSTEM_TYPE = 220;  { a system type  }
+     OCI_ATTR_IS_PREDEFINED_TYPE = 221;  { a predefined type  }
+     OCI_ATTR_IS_TRANSIENT_TYPE = 222;  { a transient type  }
+     OCI_ATTR_IS_SYSTEM_GENERATED_TYPE = 223;  { system generated type  }
+     OCI_ATTR_HAS_NESTED_TABLE = 224;  { contains nested table attr  }
+     OCI_ATTR_HAS_LOB = 225;  { has a lob attribute  }
+     OCI_ATTR_HAS_FILE = 226;  { has a file attribute  }
+     OCI_ATTR_COLLECTION_ELEMENT = 227;  { has a collection attribute  }
+     OCI_ATTR_NUM_TYPE_ATTRS = 228;  { number of attribute types  }
+     OCI_ATTR_LIST_TYPE_ATTRS = 229;  { list of type attributes  }
+     OCI_ATTR_NUM_TYPE_METHODS = 230;  { number of type methods  }
+     OCI_ATTR_LIST_TYPE_METHODS = 231;  { list of type methods  }
+     OCI_ATTR_MAP_METHOD = 232;  { map method of type  }
+     OCI_ATTR_ORDER_METHOD = 233;  { order method of type  }
+
+  { only collection element  }
+     OCI_ATTR_NUM_ELEMS = 234;  { number of elements  }
+
+  { only type methods  }
+     OCI_ATTR_ENCAPSULATION = 235;  { encapsulation level  }
+     OCI_ATTR_IS_SELFISH = 236;  { method selfish  }
+     OCI_ATTR_IS_VIRTUAL = 237;  { virtual  }
+     OCI_ATTR_IS_INLINE = 238;  { inline  }
+     OCI_ATTR_IS_CONSTANT = 239;  { constant  }
+     OCI_ATTR_HAS_RESULT = 240;  { has result  }
+     OCI_ATTR_IS_CONSTRUCTOR = 241;  { constructor  }
+     OCI_ATTR_IS_DESTRUCTOR = 242;  { destructor  }
+     OCI_ATTR_IS_OPERATOR = 243;  { operator  }
+     OCI_ATTR_IS_MAP = 244;  { a map method  }
+     OCI_ATTR_IS_ORDER = 245;  { order method  }
+     OCI_ATTR_IS_RNDS = 246;  { read no data state method  }
+     OCI_ATTR_IS_RNPS = 247;  { read no process state  }
+     OCI_ATTR_IS_WNDS = 248;  { write no data state method  }
+     OCI_ATTR_IS_WNPS = 249;  { write no process state  }
+
+  { describing public objects  }
+     OCI_ATTR_DESC_PUBLIC = 250;  { public object  }
+
+  {---------------------------OCIPasswordChange------------------------------- }
+     OCI_AUTH = $08;  { Change the password but do not login  }
+
+  {------------------------Other Constants------------------------------------ }
+     OCI_MAX_FNS = 100;  { max number of OCI Functions  }
+     OCI_SQLSTATE_SIZE = 5;
+     OCI_ERROR_MAXMSG_SIZE = 1024;  { max size of an error message  }
+     OCI_LOBMAXSIZE = MINUB4MAXVAL;  { maximum lob data size  }
+     OCI_ROWID_LEN = 23;
+  {------------------------ Fail Over Events --------------------------------- }
+     OCI_FO_END = $00000001;
+     OCI_FO_ABORT = $00000002;
+     OCI_FO_REAUTH = $00000004;
+     OCI_FO_BEGIN = $00000008;
+     OCI_FO_ERROR = $00000010;
+  {------------------------- Fail Over Types --------------------------------- }
+     OCI_FO_NONE = $00000001;
+     OCI_FO_SESSION = $00000002;
+     OCI_FO_SELECT = $00000004;
+     OCI_FO_TXNAL = $00000008;
+  {-----------------------Function Codes-------------------------------------- }
+  { OCIInitialize  }
+     OCI_FNCODE_INITIALIZE = 1;
+  { OCIHandleAlloc  }
+     OCI_FNCODE_HANDLEALLOC = 2;
+  { OCIHandleFree  }
+     OCI_FNCODE_HANDLEFREE = 3;
+  { OCIDescriptorAlloc  }
+     OCI_FNCODE_DESCRIPTORALLOC = 4;
+  { OCIDescriptorFree  }
+     OCI_FNCODE_DESCRIPTORFREE = 5;
+  { OCIEnvInit  }
+     OCI_FNCODE_ENVINIT = 6;
+  { OCIServerAttach  }
+     OCI_FNCODE_SERVERATTACH = 7;
+  { OCIServerDetach  }
+     OCI_FNCODE_SERVERDETACH = 8;
+  { unused         9  }
+  { OCISessionBegin  }
+     OCI_FNCODE_SESSIONBEGIN = 10;
+  { OCISessionEnd  }
+     OCI_FNCODE_SESSIONEND = 11;
+  { OCIPasswordChange  }
+     OCI_FNCODE_PASSWORDCHANGE = 12;
+  { OCIStmtPrepare  }
+     OCI_FNCODE_STMTPREPARE = 13;
+  { unused       14- 16  }
+  { OCIBindDynamic  }
+     OCI_FNCODE_BINDDYNAMIC = 17;
+  { OCIBindObject  }
+     OCI_FNCODE_BINDOBJECT = 18;
+  { 19 unused  }
+  { OCIBindArrayOfStruct  }
+     OCI_FNCODE_BINDARRAYOFSTRUCT = 20;
+  { OCIStmtExecute  }
+     OCI_FNCODE_STMTEXECUTE = 21;
+  { unused 22-24  }
+  { OCIDefineObject  }
+     OCI_FNCODE_DEFINEOBJECT = 25;
+  { OCIDefineDynamic  }
+     OCI_FNCODE_DEFINEDYNAMIC = 26;
+  { OCIDefineArrayOfStruct  }
+     OCI_FNCODE_DEFINEARRAYOFSTRUCT = 27;
+  { OCIStmtFetch  }
+     OCI_FNCODE_STMTFETCH = 28;
+  { OCIStmtGetBindInfo  }
+     OCI_FNCODE_STMTGETBIND = 29;
+  { 30, 31 unused  }
+  { OCIDescribeAny  }
+     OCI_FNCODE_DESCRIBEANY = 32;
+  { OCITransStart  }
+     OCI_FNCODE_TRANSSTART = 33;
+  { OCITransDetach  }
+     OCI_FNCODE_TRANSDETACH = 34;
+  { OCITransCommit  }
+     OCI_FNCODE_TRANSCOMMIT = 35;
+  { 36 unused  }
+  { OCIErrorGet  }
+     OCI_FNCODE_ERRORGET = 37;
+  { OCILobFileOpen  }
+     OCI_FNCODE_LOBOPENFILE = 38;
+  { OCILobFileClose  }
+     OCI_FNCODE_LOBCLOSEFILE = 39;
+  { 40 was LOBCREATEFILE, unused  }
+  { 41 was OCILobFileDelete, unused   }
+  { OCILobCopy  }
+     OCI_FNCODE_LOBCOPY = 42;
+  { OCILobAppend  }
+     OCI_FNCODE_LOBAPPEND = 43;
+  { OCILobErase  }
+     OCI_FNCODE_LOBERASE = 44;
+  { OCILobGetLength  }
+     OCI_FNCODE_LOBLENGTH = 45;
+  { OCILobTrim  }
+     OCI_FNCODE_LOBTRIM = 46;
+  { OCILobRead  }
+     OCI_FNCODE_LOBREAD = 47;
+  { OCILobWrite  }
+     OCI_FNCODE_LOBWRITE = 48;
+  { 49 unused  }
+  { OCIBreak  }
+     OCI_FNCODE_SVCCTXBREAK = 50;
+  { OCIServerVersion  }
+     OCI_FNCODE_SERVERVERSION = 51;
+  { unused 52, 53  }
+  { OCIAttrGet  }
+     OCI_FNCODE_ATTRGET = 54;
+  { OCIAttrSet  }
+     OCI_FNCODE_ATTRSET = 55;
+  { OCIParamSet  }
+     OCI_FNCODE_PARAMSET = 56;
+  { OCIParamGet  }
+     OCI_FNCODE_PARAMGET = 57;
+  { OCIStmtGetPieceInfo  }
+     OCI_FNCODE_STMTGETPIECEINFO = 58;
+  { OCILdaToSvcCtx  }
+     OCI_FNCODE_LDATOSVCCTX = 59;
+  { 60 unused  }
+  { OCIStmtSetPieceInfo  }
+     OCI_FNCODE_STMTSETPIECEINFO = 61;
+  { OCITransForget  }
+     OCI_FNCODE_TRANSFORGET = 62;
+  { OCITransPrepare  }
+     OCI_FNCODE_TRANSPREPARE = 63;
+  { OCITransRollback  }
+     OCI_FNCODE_TRANSROLLBACK = 64;
+  { OCIDefineByPos  }
+     OCI_FNCODE_DEFINEBYPOS = 65;
+  { OCIBindByPos  }
+     OCI_FNCODE_BINDBYPOS = 66;
+  { OCIBindByName  }
+     OCI_FNCODE_BINDBYNAME = 67;
+  { OCILobAssign  }
+     OCI_FNCODE_LOBASSIGN = 68;
+  { OCILobIsEqual  }
+     OCI_FNCODE_LOBISEQUAL = 69;
+  { OCILobLocatorIsInit  }
+     OCI_FNCODE_LOBISINIT = 70;
+  { 71 was lob locator size in beta2  }
+  { OCILobEnableBuffering  }
+     OCI_FNCODE_LOBENABLEBUFFERING = 71;
+  { OCILobCharSetID  }
+     OCI_FNCODE_LOBCHARSETID = 72;
+  { OCILobCharSetForm  }
+     OCI_FNCODE_LOBCHARSETFORM = 73;
+  { OCILobFileSetName  }
+     OCI_FNCODE_LOBFILESETNAME = 74;
+  { OCILobFileGetName  }
+     OCI_FNCODE_LOBFILEGETNAME = 75;
+  { OCILogon  }
+     OCI_FNCODE_LOGON = 76;
+  { OCILogoff  }
+     OCI_FNCODE_LOGOFF = 77;
+  { OCILobDisableBuffering  }
+     OCI_FNCODE_LOBDISABLEBUFFERING = 78;
+  { OCILobFlushBuffer  }
+     OCI_FNCODE_LOBFLUSHBUFFER = 79;
+  { OCILobLoadFromFile  }
+     OCI_FNCODE_LOBLOADFROMFILE = 80;
+     
+  {--------------------------- FILE open modes ------------------------------- }
+     OCI_FILE_READONLY = 1;  { readonly mode open for FILE types  }
+
+  {----------------------- LOB Buffering Flush Flags ------------------------- }
+     OCI_LOB_BUFFER_FREE = 1;
+     OCI_LOB_BUFFER_NOFREE = 2;
+
+  {--------------------------- OCI Statement Types --------------------------- }
+     OCI_STMT_SELECT = 1;  { select statement  }
+     OCI_STMT_UPDATE = 2;  { update statement  }
+     OCI_STMT_DELETE = 3;  { delete statement  }
+     OCI_STMT_INSERT = 4;  { Insert Statement  }
+     OCI_STMT_CREATE = 5;  { create statement  }
+     OCI_STMT_DROP = 6;  { drop statement  }
+     OCI_STMT_ALTER = 7;  { alter statement  }
+     OCI_STMT_BEGIN = 8;  { begin ... (pl/sql statement) }
+     OCI_STMT_DECLARE = 9;  { declare .. (pl/sql statement )  }
+
+  {--------------------------- OCI Parameter Types --------------------------- }
+     OCI_PTYPE_UNK = 0;  { unknown    }
+     OCI_PTYPE_TABLE = 1;  { table      }
+     OCI_PTYPE_VIEW = 2;  { view       }
+     OCI_PTYPE_PROC = 3;  { procedure  }
+     OCI_PTYPE_FUNC = 4;  { function   }
+     OCI_PTYPE_PKG = 5;  { package    }
+     OCI_PTYPE_TYPE = 6;  { user-defined type  }
+     OCI_PTYPE_SYN = 7;  { synonym    }
+     OCI_PTYPE_SEQ = 8;  { sequence   }
+     OCI_PTYPE_COL = 9;  { column     }
+     OCI_PTYPE_ARG = 10;  { argument   }
+     OCI_PTYPE_LIST = 11;  { list       }
+     OCI_PTYPE_TYPE_ATTR = 12;  { user-defined type's attribute  }
+     OCI_PTYPE_TYPE_COLL = 13;  { collection type's element  }
+     OCI_PTYPE_TYPE_METHOD = 14;  { collection type's element  }
+     OCI_PTYPE_TYPE_ARG = 15;  { user-defined type method's argument  }
+     OCI_PTYPE_TYPE_RESULT = 16;  { user-defined type method's result  }
+
+  {----------------------------- OCI List Types ------------------------------ }
+     OCI_LTYPE_UNK = 0;  { unknown    }
+     OCI_LTYPE_COLUMN = 1;  { column list  }
+     OCI_LTYPE_ARG_PROC = 2;  { procedure argument list  }
+     OCI_LTYPE_ARG_FUNC = 3;  { function argument list  }
+     OCI_LTYPE_SUBPRG = 4;  { subprogram list  }
+     OCI_LTYPE_TYPE_ATTR = 5;  { type attribute  }
+     OCI_LTYPE_TYPE_METHOD = 6;  { type method  }
+     OCI_LTYPE_TYPE_ARG_PROC = 7;  { type method w/o result argument list  }
+     OCI_LTYPE_TYPE_ARG_FUNC = 8;  { type method w/result argument list  }
+
+type { Handle Definitions
 }
+  OCIEnv           = pointer;  { OCI environment handle
 }
+  OCIError         = pointer;  { OCI error handle
 }
+  OCISvcCtx        = pointer;  { OCI service handle }
+  OCIStmt          = pointer;  { OCI statement handle }
+  OCIBind          = pointer;  { OCI bind handle
 }
+  OCIDefine        = pointer;  { OCI Define handle
 }
+  OCIDescribe      = pointer;  { OCI Describe handle
 }
+  OCIServer        = pointer;  { OCI Server handle
 }
+  OCISession       = pointer;  { OCI Authentication handle
 }
+  OCIComplexObject = pointer;  { OCI COR handle
 }
+  OCITrans         = pointer;  { OCI Transaction handle
 }
+  OCISecurity      = pointer;  { OCI Security handle
 }
+  OCIDirPathCtx    = pointer;  { OCI Direct Path handle
 }
+
+type
+  OCILobLocator	   	= pointer;  { OCI LOB Locator }
+  OCIType	   	= pointer;
+  OCICallbackInBind	= pointer;
+  OCICallbackOutBind   	= pointer;
+  OCISnapshot		= pointer;
+  OCIResult		= pointer;
+  OCICallbackDefine	= pointer;
+  OCIParam		= pointer;
+  
+
+  function OCIErrorGet(
+          hndlp:pointer; 
+	  recordno:cardinal; 
+	  sqlstate:PChar; 
+	  var errcodep:plongint; 
+	  bufp:PChar; 
+          bufsiz:cardinal; 
+	  AType:cardinal):sword;cdecl;
+
+  function OCIInitialize(
+          mode:cardinal; 
+	  ctxp:pointer; 
+	  malocfp:pointer; 
+	  ralocfp:pointer; 
+	  mfreefp:pointer):sword;cdecl;
+	  
+  function OCIHandleAlloc(
+          parenth:pointer; 
+	  var hndlpp:pointer; 
+	  AType:cardinal; 
+	  xtramem_sz:cardinal; 
+	  usrmempp:pointer):sword;cdecl;
+
+  function OCIHandleFree(
+          hndlp:pointer; 
+	  AType:cardinal):sword;cdecl;
+
+  function OCIEnvInit(
+	  var envp: OCIEnv;
+	    
+	  mode: ub4;
+	  xtramemsz: Integer;
+	  usrmempp: pointer): sword; cdecl;
+	  
+  function OCIDescriptorAlloc(
+          parenth:pointer; 
+	  descpp:pointer; 
+	  AType:cardinal; 
+	  xtramem_sz:cardinal; 
+	  usrmempp:pointer):sword;cdecl;
+
+  function OCIDescriptorFree(
+          descp:pointer;
+	  AType:cardinal):sword;cdecl;
+
+  function OCIServerAttach(
+          srvhp:OCIServer; 
+	  errhp:OCIError; 
+	  dblink:PChar; 
+	  dblink_len:longint; 
+	  mode:cardinal):sword;cdecl;
+
+  function OCIServerDetach(
+          srvhp:OCIServer; 
+	  errhp:OCIError; 
+	  mode:cardinal):sword;cdecl;
+
+  function OCISessionBegin(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  usrhp:OCISession; 
+	  credt:cardinal; 
+	  mode:cardinal):sword;cdecl;
+
+  function OCISessionEnd(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  usrhp:OCISession; 
+	  mode:cardinal):sword;cdecl;
+
+  function OCILogon(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  var svchp:OCISvcCtx; 
+	  username:PChar; 
+	  uname_len:cardinal; 
+          password:PChar; 
+	  passwd_len:cardinal; 
+	  dbname:PChar; 
+	  dbname_len:cardinal):sword;cdecl;
+
+  function OCILogoff(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError):sword;cdecl;
+	  
+  {----------------------------------------------------------------------------}
+
+  function OCIPasswordChange(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  user_name:PChar; 
+	  usernm_len:cardinal; 
+	  opasswd:PChar; 
+	  opasswd_len:cardinal; 
+	  npasswd:PChar; 
+	  npasswd_len:cardinal; 
+	  mode:cardinal):sword;cdecl;
+
+  function OCIStmtPrepare(
+          stmtp:OCIStmt; 
+	  errhp:OCIError; 
+	  stmt:PChar; 
+	  stmt_len:cardinal; 
+	  language:cardinal; 
+	  mode:cardinal):sword;cdecl;
+
+  function OCIBindByPos(
+          stmtp:OCIStmt; 
+	  bindp:OCIBind; 
+	  errhp:OCIError; 
+	  position:cardinal; 
+	  valuep:pointer; 
+	  value_sz:longint; 
+	  dty:word; 
+	  indp:pointer; 
+	  alenp:pword; rcodep:pword; 
+	  maxarr_len:cardinal; 
+	  curelep:pcardinal; 
+	  mode:cardinal):sword;cdecl;
+
+  function OCIBindByName(
+          stmtp:OCIStmt; 
+	  bindp:OCIBind; 
+	  errhp:OCIError; 
+	  placeholder:PChar; 
+	  placeh_len:longint; 
+	  valuep:pointer; 
+	  value_sz:longint; 
+	  dty:word; 
+	  indp:pointer; 
+	  alenp:pword; 
+	  rcodep:pword; 
+	  maxarr_len:cardinal; 
+	  curelep:pcardinal; 
+	  mode:cardinal):sword;cdecl;
+
+  function OCIBindObject(
+          bindp:OCIBind; 
+	  errhp:OCIError; 
+	  AType:OCIType; 
+	  pgvpp:pointer; 
+	  pvszsp:pcardinal; 
+	  indpp:pointer; 
+	  indszp:pcardinal):sword;cdecl;
+
+  function OCIBindDynamic(
+          bindp:OCIBind; 
+	  errhp:OCIError; 
+	  ictxp:pointer; 
+	  icbfp:OCICallbackInBind; 
+	  octxp:pointer; 
+          ocbfp:OCICallbackOutBind):sword;cdecl;
+
+  function OCIBindArrayOfStruct(
+          bindp:OCIBind; 
+	  errhp:OCIError; 
+	  pvskip:cardinal; 
+	  indskip:cardinal; 
+	  alskip:cardinal; 
+          rcskip:cardinal):sword;cdecl;
+
+  function OCIStmtGetPieceInfo(
+          stmtp:OCIStmt; 
+	  errhp:OCIError; 
+	  hndlpp:pointer; 
+	  typep:pcardinal; 
+	  in_outp:pbyte; 
+          iterp:pcardinal; 
+	  idxp:pcardinal; 
+	  piecep:pbyte):sword;cdecl;
+
+  function OCIStmtSetPieceInfo(
+          hndlp:pointer; 
+	  AType:cardinal; 
+	  errhp:OCIError; 
+	  bufp:pointer; 
+	  alenp:pcardinal; 
+	  piece:byte; 
+	  indp:pointer; 
+	  rcodep:pword):sword;cdecl;
+
+  function OCIStmtExecute(
+          svchp:OCISvcCtx; 
+	  stmtp:OCIStmt; 
+	  errhp:OCIError; 
+	  iters:cardinal; 
+	  rowoff:cardinal; 
+          snap_in:OCISnapshot; 
+	  snap_out:OCISnapshot; 
+	  mode:cardinal):sword;cdecl;
+
+  function OCIDefineByPos(
+          stmtp:OCIStmt; 
+	  defnp:OCIDefine; 
+	  errhp:OCIError; 
+	  position:cardinal; 
+	  valuep:pointer; 
+          value_sz:longint; 
+	  dty:word; 
+	  indp:pointer; 
+	  rlenp:pword; 
+	  rcodep:pword; 
+          mode:cardinal):sword;cdecl;
+
+  function OCIDefineObject(
+          defnp:OCIDefine; 
+	  errhp:OCIError; 
+	  AType:OCIType; 
+	  pgvpp:pointer; 
+	  pvszsp:pcardinal; 
+    	  indpp:pointer; 
+	  indszp:pcardinal):sword;cdecl;
+
+  function OCIDefineDynamic(
+          defnp:OCIDefine; 
+	  errhp:OCIError; 
+	  octxp:pointer; 
+	  ocbfp:OCICallbackDefine):sword;cdecl;
+
+  function OCIDefineArrayOfStruct(
+          defnp:OCIDefine; 
+	  errhp:OCIError; 
+	  pvskip:cardinal; 
+	  indskip:cardinal; 
+	  rlskip:cardinal; 
+          rcskip:cardinal):sword;cdecl;
+
+  function OCIStmtFetch(
+          stmtp:OCIStmt; 
+	  errhp:OCIError; 
+	  nrows:cardinal; 
+	  orientation:word; 
+	  mode:cardinal):sword;cdecl;
+
+  function OCIStmtGetBindInfo(
+          stmtp:OCIStmt; 
+	  errhp:OCIError; 
+	  size:cardinal; 
+	  startloc:cardinal; 
+	  found:plongint; 
+          bvnp:PChar; 
+	  bvnl:byte; 
+	  invp:PChar; 
+	  inpl:byte; 
+	  dupl:byte; 
+          hndl:OCIBind):sword;cdecl;
+
+  function OCIDescribeAny(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  objptr:pointer; 
+	  objnm_len:cardinal; 
+	  objptr_typ:byte; 
+          info_level:byte; 
+	  objtyp:byte; 
+	  dschp:OCIDescribe):sword;cdecl;
+
+  function OCIParamGet(
+          hndlp:pointer; 
+	  htype:cardinal; 
+	  errhp:OCIError; 
+	  parmdpp:pointer; 
+	  pos:cardinal):sword;cdecl;
+
+  function OCIParamSet(
+          hdlp:pointer; 
+	  htyp:cardinal; 
+	  errhp:OCIError; 
+	  dscp:pointer; 
+	  dtyp:cardinal; 
+          pos:cardinal):sword;cdecl;
+
+  function OCITransStart(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  timeout:uword; 
+	  flags:cardinal):sword;cdecl;
+
+  function OCITransDetach(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  flags:cardinal):sword;cdecl;
+
+  function OCITransCommit(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  flags:cardinal):sword;cdecl;
+
+  function OCITransRollback(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  flags:cardinal):sword;cdecl;
+
+  function OCITransPrepare(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  flags:cardinal):sword;cdecl;
+
+  function OCITransForget(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  flags:cardinal):sword;cdecl;
+
+  function OCILobAppend(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  dst_locp:OCILobLocator; 
+	  src_locp:OCILobLocator):sword;cdecl;
+
+  function OCILobAssign(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  src_locp:OCILobLocator; 
+	  dst_locpp:OCILobLocator):sword;cdecl;
+
+  function OCILobCharSetForm(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  csfrm:pbyte):sword;cdecl;
+
+  function OCILobCharSetId(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  csid:pword):sword;cdecl;
+
+  function OCILobCopy(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  dst_locp:OCILobLocator; 
+	  src_locp:OCILobLocator; 
+	  amount:cardinal; 
+          dst_offset:cardinal; 
+	  src_offset:cardinal):sword;cdecl;
+
+  function OCILobDisableBuffering(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator):sword;cdecl;
+
+  function OCILobEnableBuffering(
+          svchp:OCISvcCtx;
+	  errhp:OCIError; 
+	  locp:OCILobLocator):sword;cdecl;
+
+  function OCILobErase(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  amount:pcardinal; 
+	  offset:cardinal):sword;cdecl;
+
+  function OCILobFileClose(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  filep:OCILobLocator):sword;cdecl;
+
+  function OCILobFileCloseAll(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError):sword;cdecl;
+
+  function OCILobFileExists(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  filep:OCILobLocator; 
+	  flag:pboolean):sword;cdecl;
+
+  function OCILobFileGetName(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  filep:OCILobLocator; 
+	  dir_alias:PChar; 
+	  d_length:pword; 
+    	  filename:PChar; 
+	  f_length:pword):sword;cdecl;
+
+  function OCILobFileIsOpen(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  filep:OCILobLocator; 
+	  flag:pboolean):sword;cdecl;
+
+  function OCILobFileOpen(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  filep:OCILobLocator; 
+	  mode:byte):sword;cdecl;
+
+  function OCILobFileSetName(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  filepp:OCILobLocator; 
+	  dir_alias:PChar; 
+	  d_length:word; 
+    	  filename:PChar; 
+	  f_length:word):sword;cdecl;
+
+  function OCILobFlushBuffer(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  flag:cardinal):sword;cdecl;
+
+  function OCILobGetLength(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  lenp:pcardinal):sword;cdecl;
+
+  function OCILobIsEqual(
+          envhp:OCIEnv; 
+	  x:OCILobLocator; 
+	  y:OCILobLocator; 
+	  is_equal:pboolean):sword;cdecl;
+
+  function OCILobLoadFromFile(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  dst_locp:OCILobLocator; 
+	  src_filep:OCILobLocator; 
+	  amount:cardinal; 
+	  dst_offset:cardinal; 
+	  src_offset:cardinal):sword;cdecl;
+
+  function OCILobLocatorIsInit(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  is_initialized:pboolean):sword;cdecl;
+
+  function OCILobRead(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  amtp:pcardinal; 
+	  offset:cardinal; 
+    	  bufp:pointer; 
+	  bufl:cardinal; 
+	  ctxp:pointer; 
+	  cbfp:pointer; 
+	  csid:word; 
+          csfrm:byte):sword;cdecl;
+
+  function OCILobTrim(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  newlen:cardinal):sword;cdecl;
+
+  function OCILobWrite(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  amtp:pcardinal; 
+	  offset:cardinal; 
+          bufp:pointer; 
+	  buflen:cardinal; 
+	  piece:byte; 
+	  ctxp:pointer; 
+	  cbfp:pointer; 
+          csid:word; 
+	  csfrm:byte):sword;cdecl;
+
+  function OCIBreak(
+          hndlp:pointer; 
+	  errhp:OCIError):sword;cdecl;
+
+  function OCIReset(
+          hndlp:pointer; 
+	  errhp:OCIError):sword;cdecl;
+
+  function OCIServerVersion(
+          hndlp:pointer; 
+	  errhp:OCIError; 
+	  bufp:PChar; 
+	  bufsz:cardinal; 
+	  hndltype:byte):sword;cdecl;
+
+  function OCIAttrGet(
+          trgthndlp:pointer; 
+	  trghndltyp:cardinal; 
+	  attributep:pointer; 
+	  sizep:pcardinal; 
+	  attrtype:cardinal; 
+          errhp:OCIError):sword;cdecl;
+
+  function OCIAttrSet(
+          trgthndlp:pointer; 
+	  trghndltyp:cardinal; 
+	  attributep:pointer; 
+	  size:cardinal; 
+	  attrtype:cardinal; 
+          errhp:OCIError):sword;cdecl;
+
+  function OCISvcCtxToLda(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  ldap:pLda_Def):sword;cdecl;
+
+  function OCILdaToSvcCtx(
+          svchpp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  ldap:pLda_Def):sword;cdecl;
+
+  function OCIResultSetToStmt(
+          rsetdp:OCIResult; 
+	  errhp:OCIError):sword;cdecl;
+
+  {-------------------------------------------------------------------------------------------}
+  { Security Package                                                                          }
+  {-------------------------------------------------------------------------------------------}
+  {
+  function OCISecurityInitialize(sechandle:pOCISecurity; error_handle:OCIError):sword;cdecl;
+
+  function OCISecurityTerminate(sechandle:pOCISecurity; error_handle:OCIError):sword;cdecl;
+
+  function OCISecurityOpenWallet(osshandle:pOCISecurity; error_handle:OCIError; wrllen:size_t; wallet_resource_locator:PChar; pwdlen:size_t; 
+             password:PChar; wallet:pnzttWallet):sword;cdecl;
+
+  function OCISecurityCloseWallet(osshandle:pOCISecurity; error_handle:OCIError; wallet:pnzttWallet):sword;cdecl;
+
+  function OCISecurityCreateWallet(osshandle:pOCISecurity; error_handle:OCIError; wrllen:size_t; wallet_resource_locator:PChar; pwdlen:size_t; 
+             password:PChar; wallet:pnzttWallet):sword;cdecl;
+
+  function OCISecurityDestroyWallet(osshandle:pOCISecurity; error_handle:OCIError; wrllen:size_t; wallet_resource_locator:PChar; pwdlen:size_t; 
+             password:PChar):sword;cdecl;
+
+  function OCISecurityStorePersona(osshandle:pOCISecurity; error_handle:OCIError; persona:ppnzttPersona; wallet:pnzttWallet):sword;cdecl;
+
+  function OCISecurityOpenPersona(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona):sword;cdecl;
+
+  function OCISecurityClosePersona(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona):sword;cdecl;
+
+  function OCISecurityRemovePersona(osshandle:pOCISecurity; error_handle:OCIError; persona:ppnzttPersona):sword;cdecl;
+
+  function OCISecurityCreatePersona(osshandle:pOCISecurity; error_handle:OCIError; identity_type:nzttIdentType; cipher_type:nzttCipherType; desc:pnzttPersonaDesc; 
+             persona:ppnzttPersona):sword;cdecl;
+
+  function OCISecuritySetProtection(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; crypto_engine_function:nzttcef; data_unit_format:nztttdufmt; 
+             protection_info:pnzttProtInfo):sword;cdecl;
+
+  function OCISecurityGetProtection(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; crypto_engine_function:nzttcef; data_unit_format_ptr:pnztttdufmt; 
+             protection_info:pnzttProtInfo):sword;cdecl;
+
+  function OCISecurityRemoveIdentity(osshandle:pOCISecurity; error_handle:OCIError; identity_ptr:ppnzttIdentity):sword;cdecl;
+
+  function OCISecurityCreateIdentity(osshandle:pOCISecurity; error_handle:OCIError; AType:nzttIdentType; desc:pnzttIdentityDesc; identity_ptr:ppnzttIdentity):sword;cdecl;
+
+  function OCISecurityAbortIdentity(osshandle:pOCISecurity; error_handle:OCIError; identity_ptr:ppnzttIdentity):sword;cdecl;
+
+  function OCISecurityFreeIdentity(osshandle:pOCISecurity; error_handle:OCIError; identity_ptr:ppnzttIdentity):sword;cdecl;
+
+  function OCISecurityStoreTrustedIdentity(osshandle:pOCISecurity; error_handle:OCIError; identity_ptr:ppnzttIdentity; persona:pnzttPersona):sword;cdecl;
+
+  function OCISecuritySign(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; signature_state:nzttces; input_length:size_t; 
+             input:pbyte; buffer_block:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecuritySignExpansion(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; inputlen:size_t; signature_length:psize_t):sword;cdecl;
+
+  function OCISecurityVerify(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; signature_state:nzttces; siglen:size_t; 
+             signature:pbyte; extracted_message:pnzttBufferBlock; verified:pboolean; validated:pboolean; signing_party_identity:ppnzttIdentity):sword;cdecl;
+
+  function OCISecurityValidate(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; identity:pnzttIdentity; validated:pboolean):sword;cdecl;
+
+  function OCISecuritySignDetached(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; signature_state:nzttces; input_length:size_t; 
+             input:pbyte; signature:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecuritySignDetExpansion(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; input_length:size_t; required_buffer_length:psize_t):sword;cdecl;
+
+  function OCISecurityVerifyDetached(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; signature_state:nzttces; data_length:size_t; 
+             data:pbyte; siglen:size_t; signature:pbyte; verified:pboolean; validated:pboolean; 
+             signing_party_identity:ppnzttIdentity):sword;cdecl;
+
+  function OCISecurity_PKEncrypt(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; number_of_recipients:size_t; recipient_list:pnzttIdentity; 
+             encryption_state:nzttces; input_length:size_t; input:pbyte; encrypted_data:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecurityPKEncryptExpansion(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; number_recipients:size_t; input_length:size_t; 
+             buffer_length_required:psize_t):sword;cdecl;
+
+  function OCISecurityPKDecrypt(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; encryption_state:nzttces; input_length:size_t; 
+             input:pbyte; encrypted_data:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecurityEncrypt(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; encryption_state:nzttces; input_length:size_t; 
+             input:pbyte; encrypted_data:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecurityEncryptExpansion(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; input_length:size_t; encrypted_data_length:psize_t):sword;cdecl;
+
+  function OCISecurityDecrypt(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; decryption_state:nzttces; input_length:size_t; 
+             input:pbyte; decrypted_data:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecurityEnvelope(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; number_of_recipients:size_t; identity:pnzttIdentity; 
+             encryption_state:nzttces; input_length:size_t; input:pbyte; enveloped_data:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecurityDeEnvelope(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; decryption_state:nzttces; input_length:size_t; 
+             input:pbyte; output_message:pnzttBufferBlock; verified:pboolean; validated:pboolean; sender_identity:ppnzttIdentity):sword;cdecl;
+
+  function OCISecurityKeyedHash(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; hash_state:nzttces; input_length:size_t; 
+             input:pbyte; keyed_hash:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecurityKeyedHashExpansion(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; input_length:size_t; required_buffer_length:psize_t):sword;cdecl;
+
+  function OCISecurityHash(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; hash_state:nzttces; input:size_t; 
+             input_length:pbyte; hash:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecurityHashExpansion(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; input_length:size_t; required_buffer_length:psize_t):sword;cdecl;
+
+  function OCISecuritySeedRandom(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; seed_length:size_t; seed:pbyte):sword;cdecl;
+
+  function OCISecurityRandomBytes(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; number_of_bytes_desired:size_t; random_bytes:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecurityRandomNumber(osshandle:pOCISecurity; error_handle:OCIError; persona:pnzttPersona; random_number_ptr:puword):sword;cdecl;
+
+  function OCISecurityInitBlock(osshandle:pOCISecurity; error_handle:OCIError; buffer_block:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecurityReuseBlock(osshandle:pOCISecurity; error_handle:OCIError; buffer_block:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecurityPurgeBlock(osshandle:pOCISecurity; error_handle:OCIError; buffer_block:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecuritySetBlock(osshandle:pOCISecurity; error_handle:OCIError; flags_to_set:uword; buffer_length:size_t; used_buffer_length:size_t; 
+             buffer:pbyte; buffer_block:pnzttBufferBlock):sword;cdecl;
+
+  function OCISecurityGetIdentity(osshandle:pOCISecurity; error_handle:OCIError; namelen:size_t; distinguished_name:PChar; identity:ppnzttIdentity):sword;cdecl;
+
+  function OCIAQEnq(svchp:OCISvcCtx; errhp:OCIError; queue_name:PChar; enqopt:pOCIAQEnqOptions; msgprop:pOCIAQMsgProperties; 
+             payload_tdo:pOCIType; payload:ppointer; payload_ind:ppointer; msgid:ppOCIRaw; flags:cardinal):sword;cdecl;
+
+  function OCIAQDeq(svchp:OCISvcCtx; errhp:OCIError; queue_name:PChar; deqopt:pOCIAQDeqOptions; msgprop:pOCIAQMsgProperties; 
+             payload_tdo:pOCIType; payload:ppointer; payload_ind:ppointer; msgid:ppOCIRaw; flags:cardinal):sword;cdecl;
+}
+
+  {-------------------------------------------------------------------------------------------}
+  { Datatype Mapping                                                                          }
+  {-------------------------------------------------------------------------------------------}
+
+  function OCIDateToText(
+      err:OCIError; 
+	  date:POCIDate; 
+	  fmt:PChar; 
+	  fmt_length:ub1; 
+	  lang_name:PChar; 
+      lang_length:ub4; 
+	  buf_size:PCardinal; 
+	  buf:PChar):sword;cdecl;
+
+implementation
+
+  function OCIInitialize(
+          mode:cardinal; 
+	  ctxp:pointer; 
+	  malocfp:pointer; 
+	  ralocfp:pointer; 
+	  mfreefp:pointer):sword;cdecl;external;
+
+  function OCIHandleAlloc(
+          parenth:pointer; 
+	  var hndlpp:pointer; 
+	  AType:cardinal; 
+	  xtramem_sz:cardinal; 
+	  usrmempp:pointer):sword;cdecl;external;
+
+  function OCIHandleFree(
+          hndlp:pointer; 
+	  AType:cardinal):sword;cdecl;external;
+
+  function OCIEnvInit(
+	  var envp: OCIEnv;
+	    
+	  mode: ub4;
+	  xtramemsz: Integer;
+	  usrmempp: pointer): sword; cdecl;external;
+
+  function OCIDescriptorAlloc(
+          parenth:pointer; 
+	  descpp:pointer; 
+	  AType:cardinal; 
+	  xtramem_sz:cardinal; 
+	  usrmempp:pointer):sword;cdecl;external;
+
+  function OCIDescriptorFree(
+          descp:pointer;
+	  AType:cardinal):sword;cdecl;external;
+
+  function OCIServerAttach(
+          srvhp:OCIServer; 
+	  errhp:OCIError; 
+	  dblink:PChar; 
+	  dblink_len:longint; 
+	  mode:cardinal):sword;cdecl;external;
+
+  function OCIServerDetach(
+          srvhp:OCIServer; 
+	  errhp:OCIError; 
+	  mode:cardinal):sword;cdecl;external;
+
+  function OCISessionBegin(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  usrhp:OCISession; 
+	  credt:cardinal; 
+	  mode:cardinal):sword;cdecl;external;
+
+  function OCISessionEnd(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  usrhp:OCISession; 
+	  mode:cardinal):sword;cdecl;external;
+
+  function OCILogon(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  var svchp:OCISvcCtx; 
+	  username:PChar; 
+	  uname_len:cardinal; 
+          password:PChar; 
+	  passwd_len:cardinal; 
+	  dbname:PChar; 
+	  dbname_len:cardinal):sword;cdecl;external;
+
+  function OCILogoff(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError):sword;cdecl;external;
+
+  function OCIErrorGet(
+          hndlp:pointer; 
+	  recordno:cardinal; 
+	  sqlstate:PChar; 
+	  var errcodep:PLongint; 
+	  bufp:PChar; 
+          bufsiz:cardinal; 
+	  AType:cardinal):sword;cdecl;external;
+
+  function OCIPasswordChange(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  user_name:PChar; 
+	  usernm_len:cardinal; 
+	  opasswd:PChar; 
+	  opasswd_len:cardinal; 
+	  npasswd:PChar; 
+	  npasswd_len:cardinal; 
+	  mode:cardinal):sword;cdecl;external;
+
+  function OCIStmtPrepare(
+          stmtp:OCIStmt; 
+	  errhp:OCIError; 
+	  stmt:PChar; 
+	  stmt_len:cardinal; 
+	  language:cardinal; 
+	  mode:cardinal):sword;cdecl;external;
+
+  function OCIBindByPos(
+          stmtp:OCIStmt; 
+	  bindp:OCIBind; 
+	  errhp:OCIError; 
+	  position:cardinal; 
+	  valuep:pointer; 
+	  value_sz:longint; 
+	  dty:word; 
+	  indp:pointer; 
+	  alenp:pword; rcodep:pword; 
+	  maxarr_len:cardinal; 
+	  curelep:pcardinal; 
+	  mode:cardinal):sword;cdecl;external;
+
+  function OCIBindByName(
+          stmtp:OCIStmt; 
+	  bindp:OCIBind; 
+	  errhp:OCIError; 
+	  placeholder:PChar; 
+	  placeh_len:longint; 
+	  valuep:pointer; 
+	  value_sz:longint; 
+	  dty:word; 
+	  indp:pointer; 
+	  alenp:pword; 
+	  rcodep:pword; 
+	  maxarr_len:cardinal; 
+	  curelep:pcardinal; 
+	  mode:cardinal):sword;cdecl;external;
+
+  function OCIBindObject(
+          bindp:OCIBind; 
+	  errhp:OCIError; 
+	  AType:OCIType; 
+	  pgvpp:pointer; 
+	  pvszsp:pcardinal; 
+	  indpp:pointer; 
+	  indszp:pcardinal):sword;cdecl;external;
+
+  function OCIBindDynamic(
+          bindp:OCIBind; 
+	  errhp:OCIError; 
+	  ictxp:pointer; 
+	  icbfp:OCICallbackInBind; 
+	  octxp:pointer; 
+          ocbfp:OCICallbackOutBind):sword;cdecl;external;
+
+  function OCIBindArrayOfStruct(
+          bindp:OCIBind; 
+	  errhp:OCIError; 
+	  pvskip:cardinal; 
+	  indskip:cardinal; 
+	  alskip:cardinal; 
+          rcskip:cardinal):sword;cdecl;external;
+
+  function OCIStmtGetPieceInfo(
+          stmtp:OCIStmt; 
+	  errhp:OCIError; 
+	  hndlpp:pointer; 
+	  typep:pcardinal; 
+	  in_outp:pbyte; 
+          iterp:pcardinal; 
+	  idxp:pcardinal; 
+	  piecep:pbyte):sword;cdecl;external;
+
+  function OCIStmtSetPieceInfo(
+          hndlp:pointer; 
+	  AType:cardinal; 
+	  errhp:OCIError; 
+	  bufp:pointer; 
+	  alenp:pcardinal; 
+	  piece:byte; 
+	  indp:pointer; 
+	  rcodep:pword):sword;cdecl;external;
+
+  function OCIStmtExecute(
+          svchp:OCISvcCtx; 
+	  stmtp:OCIStmt; 
+	  errhp:OCIError; 
+	  iters:cardinal; 
+	  rowoff:cardinal; 
+          snap_in:OCISnapshot; 
+	  snap_out:OCISnapshot; 
+	  mode:cardinal):sword;cdecl;external;
+
+  function OCIDefineByPos(
+          stmtp:OCIStmt; 
+	  defnp:OCIDefine; 
+	  errhp:OCIError; 
+	  position:cardinal; 
+	  valuep:pointer; 
+          value_sz:longint; 
+	  dty:word; 
+	  indp:pointer; 
+	  rlenp:pword; 
+	  rcodep:pword; 
+          mode:cardinal):sword;cdecl;external;
+
+  function OCIDefineObject(
+          defnp:OCIDefine; 
+	  errhp:OCIError; 
+	  AType:OCIType; 
+	  pgvpp:pointer; 
+	  pvszsp:pcardinal; 
+    	  indpp:pointer; 
+	  indszp:pcardinal):sword;cdecl;external;
+
+  function OCIDefineDynamic(
+          defnp:OCIDefine; 
+	  errhp:OCIError; 
+	  octxp:pointer; 
+	  ocbfp:OCICallbackDefine):sword;cdecl;external;
+
+  function OCIDefineArrayOfStruct(
+          defnp:OCIDefine; 
+	  errhp:OCIError; 
+	  pvskip:cardinal; 
+	  indskip:cardinal; 
+	  rlskip:cardinal; 
+          rcskip:cardinal):sword;cdecl;external;
+
+  function OCIStmtFetch(
+          stmtp:OCIStmt; 
+	  errhp:OCIError; 
+	  nrows:cardinal; 
+	  orientation:word; 
+	  mode:cardinal):sword;cdecl;external;
+
+  function OCIStmtGetBindInfo(
+          stmtp:OCIStmt; 
+	  errhp:OCIError; 
+	  size:cardinal; 
+	  startloc:cardinal; 
+	  found:plongint; 
+          bvnp:PChar; 
+	  bvnl:byte; 
+	  invp:PChar; 
+	  inpl:byte; 
+	  dupl:byte; 
+          hndl:OCIBind):sword;cdecl;external;
+
+  function OCIDescribeAny(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  objptr:pointer; 
+	  objnm_len:cardinal; 
+	  objptr_typ:byte; 
+          info_level:byte; 
+	  objtyp:byte; 
+	  dschp:OCIDescribe):sword;cdecl;external;
+
+  function OCIParamGet(
+          hndlp:pointer; 
+	  htype:cardinal; 
+	  errhp:OCIError; 
+	  parmdpp:pointer; 
+	  pos:cardinal):sword;cdecl;external;
+
+  function OCIParamSet(
+          hdlp:pointer; 
+	  htyp:cardinal; 
+	  errhp:OCIError; 
+	  dscp:pointer; 
+	  dtyp:cardinal; 
+          pos:cardinal):sword;cdecl;external;
+
+  function OCITransStart(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  timeout:uword; 
+	  flags:cardinal):sword;cdecl;external;
+
+  function OCITransDetach(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  flags:cardinal):sword;cdecl;external;
+
+  function OCITransCommit(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  flags:cardinal):sword;cdecl;external;
+
+  function OCITransRollback(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  flags:cardinal):sword;cdecl;external;
+
+  function OCITransPrepare(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  flags:cardinal):sword;cdecl;external;
+
+  function OCITransForget(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  flags:cardinal):sword;cdecl;external;
+
+  function OCILobAppend(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  dst_locp:OCILobLocator; 
+	  src_locp:OCILobLocator):sword;cdecl;external;
+
+  function OCILobAssign(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  src_locp:OCILobLocator; 
+	  dst_locpp:OCILobLocator):sword;cdecl;external;
+
+  function OCILobCharSetForm(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  csfrm:pbyte):sword;cdecl;external;
+
+  function OCILobCharSetId(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  csid:pword):sword;cdecl;external;
+
+  function OCILobCopy(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  dst_locp:OCILobLocator; 
+	  src_locp:OCILobLocator; 
+	  amount:cardinal; 
+          dst_offset:cardinal; 
+	  src_offset:cardinal):sword;cdecl;external;
+
+  function OCILobDisableBuffering(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator):sword;cdecl;external;
+
+  function OCILobEnableBuffering(
+          svchp:OCISvcCtx;
+	  errhp:OCIError; 
+	  locp:OCILobLocator):sword;cdecl;external;
+
+  function OCILobErase(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  amount:pcardinal; 
+	  offset:cardinal):sword;cdecl;external;
+
+  function OCILobFileClose(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  filep:OCILobLocator):sword;cdecl;external;
+
+  function OCILobFileCloseAll(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError):sword;cdecl;external;
+
+  function OCILobFileExists(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  filep:OCILobLocator; 
+	  flag:pboolean):sword;cdecl;external;
+
+  function OCILobFileGetName(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  filep:OCILobLocator; 
+	  dir_alias:PChar; 
+	  d_length:pword; 
+    	  filename:PChar; 
+	  f_length:pword):sword;cdecl;external;
+
+  function OCILobFileIsOpen(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  filep:OCILobLocator; 
+	  flag:pboolean):sword;cdecl;external;
+
+  function OCILobFileOpen(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  filep:OCILobLocator; 
+	  mode:byte):sword;cdecl;external;
+
+  function OCILobFileSetName(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  filepp:OCILobLocator; 
+	  dir_alias:PChar; 
+	  d_length:word; 
+    	  filename:PChar; 
+	  f_length:word):sword;cdecl;external;
+
+  function OCILobFlushBuffer(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  flag:cardinal):sword;cdecl;external;
+
+  function OCILobGetLength(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  lenp:pcardinal):sword;cdecl;external;
+
+  function OCILobIsEqual(
+          envhp:OCIEnv; 
+	  x:OCILobLocator; 
+	  y:OCILobLocator; 
+	  is_equal:pboolean):sword;cdecl;external;
+
+  function OCILobLoadFromFile(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  dst_locp:OCILobLocator; 
+	  src_filep:OCILobLocator; 
+	  amount:cardinal; 
+	  dst_offset:cardinal; 
+	  src_offset:cardinal):sword;cdecl;external;
+
+  function OCILobLocatorIsInit(
+          envhp:OCIEnv; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  is_initialized:pboolean):sword;cdecl;external;
+
+  function OCILobRead(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  amtp:pcardinal; 
+	  offset:cardinal; 
+    	  bufp:pointer; 
+	  bufl:cardinal; 
+	  ctxp:pointer; 
+	  cbfp:pointer; 
+	  csid:word; 
+          csfrm:byte):sword;cdecl;external;
+
+  function OCILobTrim(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  newlen:cardinal):sword;cdecl;external;
+
+  function OCILobWrite(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  locp:OCILobLocator; 
+	  amtp:pcardinal; 
+	  offset:cardinal; 
+          bufp:pointer; 
+	  buflen:cardinal; 
+	  piece:byte; 
+	  ctxp:pointer; 
+	  cbfp:pointer; 
+          csid:word; 
+	  csfrm:byte):sword;cdecl;external;
+
+  function OCIBreak(
+          hndlp:pointer; 
+	  errhp:OCIError):sword;cdecl;external;
+
+  function OCIReset(
+          hndlp:pointer; 
+	  errhp:OCIError):sword;cdecl;external;
+
+  function OCIServerVersion(
+          hndlp:pointer; 
+	  errhp:OCIError; 
+	  bufp:PChar; 
+	  bufsz:cardinal; 
+	  hndltype:byte):sword;cdecl;external;
+
+  function OCIAttrGet(
+          trgthndlp:pointer; 
+	  trghndltyp:cardinal; 
+	  attributep:pointer; 
+	  sizep:pcardinal; 
+	  attrtype:cardinal; 
+          errhp:OCIError):sword;cdecl;external;
+
+  function OCIAttrSet(
+          trgthndlp:pointer; 
+	  trghndltyp:cardinal; 
+	  attributep:pointer; 
+	  size:cardinal; 
+	  attrtype:cardinal; 
+          errhp:OCIError):sword;cdecl;external;
+
+  function OCISvcCtxToLda(
+          svchp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  ldap:pLda_Def):sword;cdecl;external;
+
+  function OCILdaToSvcCtx(
+          svchpp:OCISvcCtx; 
+	  errhp:OCIError; 
+	  ldap:pLda_Def):sword;cdecl;external;
+
+  function OCIResultSetToStmt(
+          rsetdp:OCIResult; 
+	  errhp:OCIError):sword;cdecl;external;
+
+  function OCIDateToText(
+      err:OCIError; 
+	  date:POCIDate; 
+	  fmt:PChar; 
+	  fmt_length:ub1; 
+	  lang_name:PChar; 
+      lang_length:ub4; 
+	  buf_size:PCardinal; 
+	  buf:PChar):sword;cdecl;external;
+
+end.
+
+{
+  $Log$
+  Revision 1.1  2000-12-02 15:14:15  michael
+  + Initial implementation of Pavel Stingl
+
+  Revision 1.1.1.1  2000/10/11 07:48:28  stingp1
+    * Import to cvs
+
+}

+ 58 - 0
packages/oracle/test01.pp

@@ -0,0 +1,58 @@
+{
+    $Id$
+    Copyright (c) 1999-2000 by Pavel Stingl <[email protected]>
+    
+
+    Test program for OraOCI units
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    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.
+
+ **********************************************************************}
+program test01;
+
+uses oraclew, oraoci,linux;
+
+{$H+}
+
+{
+    Constants user, pass & tnsc you must set by hand to values,
+    which you prefer.
+    
+    user = username
+    pass = password
+    tnsc = TNS connect string
+ **********************************************************************}
+
+const
+  user = 'every';
+  pass = 'tisova';
+  tnsc = 'etil.world';
+
+var
+  x : integer;
+  p : integer;
+begin
+  OraInit;
+  OraLogin(user,pass,tnsc);
+  OraSQLExec('select sysdate from sys.dual');
+  writeln(OraGetFieldName(1):20);
+  p := OraGetFieldCount; 
+  for x := 1 to p do
+  write(OraGetFieldName(x), ';');
+  WriteLn;
+  while OraNext do
+  begin
+    for x := 1 to p do
+      write(OraGetFieldAsString(x), ';'); 
+    writeln;
+  end;
+  
+  OraLogout;
+  OraFin;
+end.
+