Browse Source

+ Initial check-in

michael 22 years ago
parent
commit
ec34ddb661
3 changed files with 2804 additions and 0 deletions
  1. 1470 0
      fcl/db/sqlite/Makefile
  2. 21 0
      fcl/db/sqlite/Makefile.fpc
  3. 1313 0
      fcl/db/sqlite/sqlitedataset.pas

+ 1470 - 0
fcl/db/sqlite/Makefile

@@ -0,0 +1,1470 @@
+#
+# Don't edit, this file is generated by FPCMake Version 1.1 [2003/09/24]
+#
+default: all
+MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx
+override PATH:=$(subst \,/,$(PATH))
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifeq ($(OS_TARGET),freebsd)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),netbsd)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),openbsd)
+BSDhier=1
+endif
+ifdef inUnix
+BATCHEXT=.sh
+else
+ifdef inOS2
+BATCHEXT=.cmd
+else
+BATCHEXT=.bat
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPC:=$(shell $(FPCPROG) -PB)
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=ppc386
+endif
+else
+override FPC=ppc386
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+ifndef FPC_VERSION
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(OS_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(OS_TARGET), please run fpcmake first)
+endif
+endif
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+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 $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+ifndef CROSSDIR
+CROSSDIR:=$(FPCDIR)/cross/$(FULL_TARGET)
+endif
+ifndef CROSSTARGETDIR
+CROSSTARGETDIR=$(CROSSDIR)/$(FULL_TARGET)
+endif
+ifdef CROSSCOMPILE
+UNITSDIR:=$(wildcard $(CROSSTARGETDIR)/units)
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+else
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+override PACKAGE_NAME=fcl
+override TARGET_UNITS+=sqlitedataset
+override INSTALL_FPCPACKAGE=y
+override COMPILER_TARGETDIR+=../../$(OS_TARGET)
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifeq ($(OS_TARGET),linux)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),freebsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),netbsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),openbsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),sunos)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),qnx)
+UNIXINSTALLDIR=1
+endif
+else
+ifeq ($(OS_SOURCE),linux)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_SOURCE),freebsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_SOURCE),netbsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_SOURCE),openbsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),sunos)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),qnx)
+UNIXINSTALLDIR=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXINSTALLDIR
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef INSTALL_BASEDIR
+ifdef UNIXINSTALLDIR
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXINSTALLDIR
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(OS_TARGET)
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+ifdef CROSSCOMPILE
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/units
+else
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(OS_TARGET)
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXINSTALLDIR
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXINSTALLDIR
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXINSTALLDIR
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXINSTALLDIR
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(FULL_SOURCE))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+STATICLIBPREFIX=libp
+RSTEXT=.rst
+FPCMADE=fpcmade
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+FPCMADE=fpcmade.v1
+PACKAGESUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+FPCMADE=fpcmade.dos
+ZIPSUFFIX=go32
+endif
+ifeq ($(OS_TARGET),linux)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.lnx
+ZIPSUFFIX=linux
+endif
+ifeq ($(OS_TARGET),freebsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.freebsd
+ZIPSUFFIX=freebsd
+endif
+ifeq ($(OS_TARGET),netbsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.netbsd
+ZIPSUFFIX=netbsd
+endif
+ifeq ($(OS_TARGET),openbsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.openbsd
+ZIPSUFFIX=openbsd
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+FPCMADE=fpcmade.w32
+ZIPSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+FPCMADE=fpcmade.os2
+ZIPSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),emx)
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+FPCMADE=fpcmade.emx
+ZIPSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+FPCMADE=fpcmade.amg
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+FPCMADE=fpcmade.ata
+endif
+ifeq ($(OS_TARGET),beos)
+EXEEXT=
+FPCMADE=fpcmade.be
+ZIPSUFFIX=be
+endif
+ifeq ($(OS_TARGET),sunos)
+EXEEXT=
+FPCMADE=fpcmade.sun
+ZIPSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+EXEEXT=
+FPCMADE=fpcmade.qnx
+ZIPSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+FPCMADE=fpcmade.nw
+ZIPSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),macos)
+EXEEXT=
+FPCMADE=fpcmade.mcc
+endif
+ifeq ($(OS_TARGET),darwin)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.darwin
+ZIPSUFFIX=darwin
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+FPCMADE=fpcmade.v1
+PACKAGESUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+FPCMADE=fpcmade.dos
+ZIPSUFFIX=go32
+endif
+ifeq ($(OS_TARGET),linux)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.lnx
+ZIPSUFFIX=linux
+endif
+ifeq ($(OS_TARGET),freebsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.freebsd
+ZIPSUFFIX=freebsd
+endif
+ifeq ($(OS_TARGET),netbsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.netbsd
+ZIPSUFFIX=netbsd
+endif
+ifeq ($(OS_TARGET),openbsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.openbsd
+ZIPSUFFIX=openbsd
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+FPCMADE=fpcmade.w32
+ZIPSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+FPCMADE=fpcmade.os2
+ZIPSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.asm
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+FPCMADE=fpcmade.amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+FPCMADE=fpcmade.ata
+endif
+ifeq ($(OS_TARGET),beos)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+FPCMADE=fpcmade.be
+ZIPSUFFIX=be
+endif
+ifeq ($(OS_TARGET),sunos)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+FPCMADE=fpcmade.sun
+ZIPSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+FPCMADE=fpcmade.qnx
+ZIPSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+FPCMADE=fpcmade.nw
+ZIPSUFFIX=nw
+EXEEXT=.nlm
+endif
+ifeq ($(OS_TARGET),macos)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+FPCMADE=fpcmade.mcc
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE=
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL=
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG=
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG=
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG=
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef ECHOREDIR
+ECHOREDIR:=$(subst /,$(PATHSEP),$(ECHO))
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -rfp
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE=
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE=
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG=
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG=
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=as
+LDNAME=ld
+ARNAME=ar
+RCNAME=rc
+ifeq ($(OS_TARGET),win32)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(BATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+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
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vI
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl sqlite
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),powerpc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),sparc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),go32v2)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),os2)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),freebsd)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),freebsd)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),beos)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),netbsd)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),netbsd)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),amiga)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),atari)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),sunos)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),sunos)
+ifeq ($(CPU_TARGET),sparc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),qnx)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),netware)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),openbsd)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),openbsd)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),wdosx)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),palmos)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),macos)
+ifeq ($(CPU_TARGET),powerpc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),darwin)
+ifeq ($(CPU_TARGET),powerpc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),emx)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/$(OS_TARGET)/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/$(OS_TARGET)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/$(OS_TARGET)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifdef REQUIRE_PACKAGES_SQLITE
+PACKAGEDIR_SQLITE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /sqlite/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_SQLITE),)
+ifneq ($(wildcard $(PACKAGEDIR_SQLITE)/$(OS_TARGET)),)
+UNITDIR_SQLITE=$(PACKAGEDIR_SQLITE)/$(OS_TARGET)
+else
+UNITDIR_SQLITE=$(PACKAGEDIR_SQLITE)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_SQLITE)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_SQLITE) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_SQLITE)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_SQLITE=
+UNITDIR_SQLITE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /sqlite/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_SQLITE),)
+UNITDIR_SQLITE:=$(firstword $(UNITDIR_SQLITE))
+else
+UNITDIR_SQLITE=
+endif
+endif
+ifdef UNITDIR_SQLITE
+override COMPILER_UNITDIR+=$(UNITDIR_SQLITE)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(CPU_TARGET)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+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
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+else
+FPCCPUOPT:=
+endif
+override FPCOPT+=-Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-OG2p3
+endif
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(FPC_VERSION),1.0.6)
+override FPCOPTDEF+=HASUNIX
+endif
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+EXECPPAS:=@$(PPAS)
+endif
+endif
+.PHONY: fpc_units
+ifdef TARGET_UNITS
+override ALLTARGET+=fpc_units
+override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))
+override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS))
+override INSTALLPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+override CLEANPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+endif
+fpc_units: $(UNITPPUFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+	@$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+	$(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+	$(MAKE) all DEBUG=1
+fpc_release:
+	$(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp .rc .res
+%$(PPUEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(PPUEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%.res: %.rc
+	windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILES))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILES)))
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(INSTALLEXEFILES))
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+	-$(UPXPROG) $(INSTALLEXEFILES)
+endif
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+	$(FPCMAKE) -p -T$(OS_TARGET) Makefile.fpc
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+	$(MKDIR) $(INSTALL_LIBDIR)
+	$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+	ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+	$(MKDIR) $(INSTALL_DATADIR)
+	$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+	$(MKDIR) $(INSTALL_SOURCEDIR)
+	$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+	$(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+	$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(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 CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+fpc_distclean: clean
+ifdef COMPILER_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) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Upx....... $(UPXPROG)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+examples:
+shared:
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall:
+zipinstall:
+zipsourceinstall:
+zipexampleinstall:
+zipdistinstall:
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif

+ 21 - 0
fcl/db/sqlite/Makefile.fpc

@@ -0,0 +1,21 @@
+#
+# Makefile.fpc for SQLIte FCL db units
+#
+
+[package]
+main=fcl
+
+[target]
+units=sqlitedataset
+
+[require]
+packages=sqlite
+
+[compiler]
+targetdir=../../$(OS_TARGET)
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../..

+ 1313 - 0
fcl/db/sqlite/sqlitedataset.pas

@@ -0,0 +1,1313 @@
+{$mode objfpc}
+{$h+}
+unit SQLiteDataset;
+{
+Improved class sqLite,copyright(c) 2002-2003 Marcin Krzetowski
[email protected]
+http://www.a-i.prv.pl
+simple class interface for SQLite. Hacked in by Ben Hochstrasser ([email protected])
+Thanks to Roger Reghin ([email protected]) for his idea to ValueList. 
+
+}
+
+interface
+
+uses 
+  Classes,db,sysutils,Contnrs;
+
+{$ifndef linux}
+{$R *.DCR}
+{$endif}
+
+type
+  PRecInfo = ^TRecInfo;
+  TRecInfo = record
+    Index: Integer;
+    Bookmark: Longint;
+    BookmarkFlag: TBookmarkFlag;
+  end;
+
+type
+        pBinBookMark = ^tBinBookMark;
+        tBinBookmark = record
+        RecPtr : Int64;
+end;
+
+
+type
+  TSQLiteExecCallback = function(Sender: TObject; Columns: Integer; ColumnValues: Pointer; ColumnNames: Pointer): integer of object; cdecl;
+  TSQLiteBusyCallback = function(Sender: TObject; ObjectName: PChar; BusyCount: integer): integer of object; cdecl;
+  TOnData = Procedure(Sender: TObject; Columns: Integer; ColumnNames, ColumnValues: String) of object;
+  TOnBusy = Procedure(Sender: TObject; ObjectName: String; BusyCount: integer; var Cancel: Boolean) of object;
+  TOnQueryComplete = Procedure(Sender: TObject) of object;
+
+
+Type
+        tSqliteField = class(tObject)
+protected
+        FOwner : tObject;
+        data : string;
+        fFieldKind: tFieldKind;
+        fFieldType: tFieldType;
+{        tIntegerType : Integer;
+        tLongIntegerType : int64;
+        tDateTimeType : tDateTime;}
+//        procedure SetName(const Value: string);
+        procedure SetFieldKind(const Value: tFieldKind);
+        procedure SetFieldType(const Value: tFieldType);        
+public
+
+        constructor create(aOwner : tObject);
+        destructor destroy; override;
+        procedure SetData(pt : pChar; NativeFormat : boolean);
+        function GetData(Buffer: Pointer; NativeFormat : Boolean) : boolean;
+        function GetData(Buffer: Pointer{=True}) : boolean; 
+//        property FieldName : string read fName write SetName;
+        property FieldKind : tFieldKind read fFieldKind write SetFieldKind;
+        property FieldType : tFieldType read fFieldType write SetFieldType;
+
+
+end;
+
+tSqliteRows = class (tObject)
+private
+        function getItem(index: integer): tSqliteField;
+        procedure SetItem(index: integer; const Value: tSqliteField);
+        function checkIndex(index : integer) : boolean;
+
+
+public
+        BookmarkFlag : tBookmarkFlag;
+        Bookmark : LongInt;
+        DataPointer : Pointer;
+        constructor Create(fieldCount : integer);
+        destructor destroy; override;
+        procedure Push(item : tSqliteField);
+        function Pop : tSqliteField;
+        property Items[index : integer] : tSqliteField read getItem write SetItem;
+        procedure Clear;
+        procedure ClearCalcFields;
+        function add(pt : Pchar; ptName : pCHar) : boolean;
+
+
+protected
+        fbuffercount : integer;
+        fBuffer : ^tSqliteField;
+        internalCount : integer;
+        procedure clearBuffer;
+end;
+
+
+  TSQLite = class(TDataSet)
+  private
+    maxLengthInit : boolean;
+    maxiL : pinteger;
+    maxilcount : integer;
+    fDoExceptions : boolean;
+    fDoSQL : boolean;
+    fIsCancel: boolean;
+    fSQLite: Pointer;
+    fMsg: String;
+    fIsOpen: Boolean;
+    fBusy: Boolean;
+    fError: Integer;
+    fVersion: String;
+    fEncoding: String;
+    fTable: tStrings;
+    fLstName: TStringList;
+    fLstVal: TStringList;
+//    fbuffer : tObjectList;
+    fOnData: TOnData;
+    fOnBusy: TOnBusy;
+    fOnQueryComplete: TOnQueryComplete;
+    fBusyTimeout: integer;
+    fPMsg: PChar;
+    fChangeCount: integer;
+    fSQL: tStringlist;
+    fonwer : tComponent;
+    fDataBaseName : string;
+    fDataBase: string;
+    fTableName: string;
+    factive : boolean;
+    procedure SetBusyTimeout(Timeout: integer);
+    procedure SetDataBase(DBFileName: String);
+    procedure setTableName(const Value: string);
+    function getIsCancel: boolean;
+    procedure clearBuffer;
+  protected
+    fCalcFieldsOfs,fRecordSize : integer;
+    fBookMarkOfs,fRecordBufferSize : integer;
+    fCurrentRecord : int64;
+    fRecordCount : int64;
+    fCursorOpen : boolean;
+    fFieldOffset : tList;
+  //  procedure internalInsert; override;
+    function getActive: boolean;
+   // procedure setActive(Value: boolean); override;
+    function getRecNo : integer; override;
+    function getBookmarkFlag(Buffer : pChar) : tBookMarkFlag; override;
+    procedure InitBufferPointers;
+    procedure GetBookmarkData(Buffer : pChar; Data : Pointer); override;
+    procedure SetBookMarkData(Buffer : pChar; Data : Pointer); override;
+    procedure InternalGotoBookmark(ABookMark : Pointer) ; override;
+    function FieldDefsStored : boolean;
+    procedure ClearCalcFields(Buffer : pChar); override;
+    procedure OpenCursor(InfoQuery : Boolean); override;
+    function getRecordCount : integer; override;
+    procedure SetRecNo (value : integer); override;
+    function getRecord(Buffer : pChar; GetMode : tGetMode; DoCheck : Boolean): tGetResult; override;
+    procedure InternalInitFieldDefs; override;
+    procedure InternalOpen; override;
+    procedure InternalClose; override;
+    procedure InternalAddRecord(Buffer : Pointer; DoAppend : boolean); override;
+    procedure InternalDelete; override;
+    procedure InternalFirst; override;
+    procedure InternalHandleException; override;
+    procedure InternalInitRecord(Buffer : pChar); override;
+    procedure InternalLast;override;
+    procedure InternalPost;override;
+    procedure InternalSetToRecord (Buffer : pChar); override;
+    function isCursorOpen : Boolean; override;
+    procedure SetBookmarkFlag(Buffer : pChar; value : tBookmarkFlag); override;
+    procedure SetFieldData(Field : tField; Buffer : Pointer); override;
+    function allocRecordBuffer : pChar; override;
+    procedure FreeRecordBuffer(var Buffer : pChar); override;
+    function getRecordSize : Word; override;
+    function getCanModify : boolean; override;
+  public
+      fbuffer : tObjectList; //po zakonczeniu debuggowania usunac
+    constructor create(Aowner : tComponent); override;
+    destructor Destroy; override;
+    function getFieldData(Field : tField; Buffer : Pointer) : boolean; override;    
+    function Query(ASql: String{table= nil}) : Boolean;
+    Function Query(ASQL: String; Table: TStrings): boolean;
+    function ExecSQL : boolean;
+    function ErrorMessage(ErrNo: Integer): string;
+    function IsComplete(ASql: String): boolean;
+    function LastInsertRow: integer;
+    procedure Cancel; override;
+    function DatabaseDetails(Table: TStrings): boolean;
+    function CreateTable : boolean;
+    procedure countMaxiLength(pt: pChar;index : int64);
+    procedure InitMaxLength(length : integer);    
+  published
+    property LastErrorMessage: string read fMsg;
+    property LastError: Integer read fError;
+    property Version: String read fVersion;
+    property Encoding: String read fEncoding;
+    property OnData: TOnData read fOnData write fOnData;
+    property OnBusy: TOnBusy read fOnBusy write fOnBusy;
+    property OnQueryComplete: TOnQueryComplete read fOnQueryComplete write fOnQueryComplete;
+    property BusyTimeout: Integer read fBusyTimeout write SetBusyTimeout;
+    property ChangeCount: Integer read fChangeCount;
+    property SQL : tStringlist  read fSQL write fSQL;
+//    property Fields : tstringlist read fFields;
+    property DataBase : string read fDataBase write SetDataBase;
+    property TableName : string read fTableName write setTableName;
+    property Active : boolean read getActive write setActive;
+    property isCancel : boolean read getIsCancel;
+    property DoExceptions : boolean read fDoExceptions write fDoExceptions  stored true default true;
+  end;
+  function Pas2SQLStr(const PasString: string): string;
+  function SQL2PasStr(const SQLString: string): string;
+  function QuoteStr(const s: string; QuoteChar: Char): string;
+  function UnQuoteStr(const s: string; QuoteChar: Char): string;
+  function QuoteStr(const s: string{; QuoteChar: Char = #39}): string;
+  function UnQuoteStr(const s: string{; QuoteChar: Char = #39}): string;
+  procedure ValueList(const ColumnNames, ColumnValues: String; NameValuePairs: TStrings);
+
+
+  procedure Register;
+  
+implementation
+
+{$ifndef dynload}
+uses sqlite;
+{$else}
+uses dynlibs;
+
+function GetProcAddress(S : String) : Pointer;
+
+begin
+
+end;
+{$endif}
+const
+  SQLITE_OK         =  0;   // Successful result
+  SQLITE_ERROR      =  1;   // SQL error or missing database
+  SQLITE_INTERNAL   =  2;   // An internal logic error in SQLite
+  SQLITE_PERM       =  3;   // Access permission denied
+  SQLITE_ABORT      =  4;   // Callback routine requested an abort
+  SQLITE_BUSY       =  5;   // The database file is locked
+  SQLITE_LOCKED     =  6;   // A table in the database is locked
+  SQLITE_NOMEM      =  7;   // A malloc() failed
+  SQLITE_READONLY   =  8;   // Attempt to write a readonly database
+  SQLITE_INTERRUPT  =  9;   // Operation terminated by sqlite_interrupt()
+  SQLITE_IOERR      = 10;   // Some kind of disk I/O error occurred
+  SQLITE_CORRUPT    = 11;   // The database disk image is malformed
+  SQLITE_NOTFOUND   = 12;   // (Internal Only) Table or record not found
+  SQLITE_FULL       = 13;   // Insertion failed because database is full
+  SQLITE_CANTOPEN   = 14;   // Unable to open the database file
+  SQLITE_PROTOCOL   = 15;   // Database lock protocol error
+  SQLITE_EMPTY      = 16;   // (Internal Only) Database table is empty
+  SQLITE_SCHEMA     = 17;   // The database schema changed
+  SQLITE_TOOBIG     = 18;   // Too much data for one row of a table
+  SQLITE_CONSTRAINT = 19;   // Abort due to contraint violation
+  SQLITE_MISMATCH   = 20;   // Data type mismatch
+  SQLITEDLL: PChar  = 'sqlite.dll';
+  DblQuote: Char    = '"';
+  SngQuote: Char    = #39;
+  Crlf: String      = #13#10;
+  Tab: Char         = #9;
+  _DO_EXCEPTIONS = 1; //Handle or not exceptions in dataset  
+
+{$ifdef dynload}
+var
+  SQLite_Open: function(dbname: PChar; mode: Integer; var ErrMsg: PChar): Pointer; cdecl;
+  SQLite_Close: procedure(db: Pointer); cdecl;
+  SQLite_Exec: function(db: Pointer; SQLStatement: PChar; CallbackPtr: Pointer; Sender: TObject; var ErrMsg: PChar): integer; cdecl;
+  SQLite_Version: function(): PChar; cdecl;
+  SQLite_Encoding: function(): PChar; cdecl;
+  SQLite_ErrorString: function(ErrNo: Integer): PChar; cdecl;
+  SQLite_GetTable: function(db: Pointer; SQLStatement: PChar; var ResultPtr: Pointer; var RowCount: Cardinal; var ColCount: Cardinal; var ErrMsg: PChar): integer; cdecl;
+  SQLite_FreeTable: procedure(Table: PChar); cdecl;
+  SQLite_FreeMem: procedure(P: PChar); cdecl;
+  SQLite_Complete: function(P: PChar): boolean; cdecl;
+  SQLite_LastInsertRow: function(db: Pointer): integer; cdecl;
+  SQLite_Cancel: procedure(db: Pointer); cdecl;
+  SQLite_BusyHandler: procedure(db: Pointer; CallbackPtr: Pointer; Sender: TObject); cdecl;
+  SQLite_BusyTimeout: procedure(db: Pointer; TimeOut: integer); cdecl;
+  SQLite_Changes: function(db: Pointer): integer; cdecl;
+  LibsLoaded: Boolean;
+  DLLHandle: THandle;
+{$endif}
+
+Var
+  MsgNoError: String;
+
+function QuoteStr(const s: string): string;
+begin
+  Result := QuoteStr(S,#39);
+end;
+
+function QuoteStr(const s: string; QuoteChar: Char): string;
+begin
+  Result := Concat(QuoteChar, s, QuoteChar);
+end;
+
+function UnQuoteStr(const s: string): string;
+begin
+  Result := UnQuoteStr(s,#39);
+end;
+
+function UnQuoteStr(const s: string; QuoteChar: Char): string;
+begin
+  Result := s;
+  if length(Result) > 1 then
+  begin
+    if Result[1] = QuoteChar then
+      Delete(Result, 1, 1);
+    if Result[Length(Result)] = QuoteChar then
+      Delete(Result, Length(Result), 1);
+  end;
+end;
+
+function Pas2SQLStr(const PasString: string): string;
+var
+  n: integer;
+begin
+  Result := SQL2PasStr(PasString);
+  n := Length(Result);
+  while n > 0 do
+  begin
+    if Result[n] = SngQuote then
+      Insert(SngQuote, Result, n);
+    dec(n);
+  end;
+  Result := QuoteStr(Result);
+end;
+
+function SQL2PasStr(const SQLString: string): string;
+const
+  DblSngQuote: String = #39#39;
+var
+  p: integer;
+begin
+  Result := SQLString;
+  p := pos(DblSngQuote, Result);
+  while p > 0 do
+  begin
+    Delete(Result, p, 1);
+    p := pos(DblSngQuote, Result);
+  end;
+  Result := UnQuoteStr(Result);
+end;
+
+procedure ValueList(const ColumnNames, ColumnValues: String; NameValuePairs: TStrings);
+var
+  n: integer;
+  lstName, lstValue: TStringList;
+begin
+  if NameValuePairs <> nil then
+  begin
+    lstName := TStringList.Create;
+    lstValue := TStringList.Create;
+    lstName.CommaText := ColumnNames;
+    lstValue.CommaText := ColumnValues;
+    NameValuePairs.Clear;
+    if lstName.Count = LstValue.Count then
+      if lstName.Count > 0 then
+        for n := 0 to lstName.Count - 1 do
+          NameValuePairs.Append(Concat(lstName.Strings[n], '=', lstValue.Strings[n]));
+    lstValue.Free;
+    lstName.Free;
+  end;
+end;
+
+{$ifdef dynload}
+function LoadLibs: Boolean;
+begin
+  Result := False;
+  DLLHandle := LoadLibrary(SQLITEDLL);
+  if DLLHandle <> 0 then
+  begin
+    @SQLite_Open := GetProcAddress(DLLHandle, 'sqlite_open');
+    if not Assigned(@SQLite_Open) then exit;
+    @SQLite_Close := GetProcAddress(DLLHandle, 'sqlite_close');
+    if not Assigned(@SQLite_Close) then exit;
+    @SQLite_Exec := GetProcAddress(DLLHandle, 'sqlite_exec');
+    if not Assigned(@SQLite_Exec) then exit;
+    @SQLite_Version := GetProcAddress(DLLHandle, 'sqlite_libversion');
+    if not Assigned(@SQLite_Version) then exit;
+    @SQLite_Encoding := GetProcAddress(DLLHandle, 'sqlite_libencoding');
+    if not Assigned(@SQLite_Encoding) then exit;
+    @SQLite_ErrorString := GetProcAddress(DLLHandle, 'sqlite_error_string');
+    if not Assigned(@SQLite_ErrorString) then exit;
+    @SQLite_GetTable := GetProcAddress(DLLHandle, 'sqlite_get_table');
+    if not Assigned(@SQLite_GetTable) then exit;
+    @SQLite_FreeTable := GetProcAddress(DLLHandle, 'sqlite_free_table');
+    if not Assigned(@SQLite_FreeTable) then exit;
+    @SQLite_FreeMem := GetProcAddress(DLLHandle, 'sqlite_freemem');
+    if not Assigned(@SQLite_FreeMem) then exit;
+    @SQLite_Complete := GetProcAddress(DLLHandle, 'sqlite_complete');
+    if not Assigned(@SQLite_Complete) then exit;
+    @SQLite_LastInsertRow := GetProcAddress(DLLHandle, 'sqlite_last_insert_rowid');
+    if not Assigned(@SQLite_LastInsertRow) then exit;
+    @SQLite_Cancel := GetProcAddress(DLLHandle, 'sqlite_interrupt');
+    if not Assigned(@SQLite_Cancel) then exit;
+    @SQLite_BusyTimeout := GetProcAddress(DLLHandle, 'sqlite_busy_timeout');
+    if not Assigned(@SQLite_BusyTimeout) then exit;
+    @SQLite_BusyHandler := GetProcAddress(DLLHandle, 'sqlite_busy_handler');
+    if not Assigned(@SQLite_BusyHandler) then exit;
+    @SQLite_Changes := GetProcAddress(DLLHandle, 'sqlite_changes');
+    if not Assigned(@SQLite_Changes) then exit;
+    Result := True;
+  end;
+end;
+{$endif}
+
+function SystemErrorMsg(ErrNo: Integer): String;
+var
+  buf: PChar;
+  size: Integer;
+  MsgLen: Integer;
+begin
+  msglen:=0;
+  size := 256;
+  GetMem(buf, size);
+{
+  If ErrNo = - 1 then
+    ErrNo := GetLastError;
+  MsgLen := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, ErrNo, 0, buf, size, nil);
+}
+  if MsgLen = 0 then
+    Result := 'ERROR'
+  else
+    Result := buf;
+end;
+
+function SystemErrorMsg: String;
+
+begin
+  SystemErrorMsg(-1);
+end;
+
+function BusyCallback(Sender: Pointer; ObjectName: PChar; BusyCount: integer): integer; cdecl;
+var
+  sObjName: String;
+  bCancel: Boolean;
+begin
+  Result := -1;
+  with TSQLite(Sender) do
+  begin
+    if Assigned(fOnBusy) then
+    begin
+      bCancel := False;
+      sObjName := ObjectName;
+      fOnBusy(Tsqlite(Sender), sObjName, BusyCount, bCancel);
+      if bCancel then
+        Result := 0;
+    end;
+  end;
+end;
+
+function ExecCallback(Sender: TObject; Columns: Integer; ColumnValues: Pointer; ColumnNames: Pointer): integer; cdecl;
+var
+  PVal, PName: ^PChar;
+  n: integer;
+  sVal, sName: String;
+begin
+  Result := 0;
+  with Sender as TSQLite do
+  begin
+    if (Assigned(fOnData) or Assigned(fTable)) then
+    begin
+      fLstName.Clear;
+      fLstVal.Clear;
+      if Columns > 0 then
+      begin
+        PName := ColumnNames;
+        PVal := ColumnValues;
+        for n := 0 to Columns - 1 do
+        begin
+          fLstName.Append(PName^);
+          fLstVal.Append(PVal^);
+          if Assigned(fTable) then
+          begin
+                fTable.Append(PVal^);
+          end;
+          inc(PName);
+          inc(PVal);
+        end;
+      end;
+      sVal := fLstVal.CommaText;
+      sName := fLstName.CommaText;
+      if Assigned(fOnData) then
+        fOnData(Sender, Columns, sName, sVal);
+
+    end;
+//    InternalOpen;
+  end;
+end;
+
+function ExecCallback2(Sender: TObject; Columns: Integer; ColumnValues: Pointer; ColumnNames: Pointer): integer; cdecl;
+var
+  PVal, PName: ^PChar;
+  n: integer;
+  sVal, sName: String;
+  t : tSqliteRows;
+  p : pointer;
+  temp : LongInt;
+
+begin
+  Result := 0;
+  with Sender as TSQLite do begin
+    if (Assigned(fOnData) or assigned(fBuffer)) then begin
+    fLstName.Clear;
+//      fLstVal.Clear;
+      if Columns > 0 then begin
+        PName := ColumnNames;
+        PVal := ColumnValues;
+        fBuffer.Add(tSqliteRows.Create(Columns));
+        temp:=fBuffer.count-1;
+        initMaxLength(columns);
+        for n := 0 to Columns - 1 do begin
+                fLstName.Append(PName^);
+                if Assigned(fBuffer) then begin
+                        p:=fBuffer.Items[temp];
+                        t:=tSqliteRows(p);
+                        if t=nil then continue;
+                        t.Add(PVAL^,PNAME^);
+
+                end;
+                countMaxiLength(PVAL^,n);
+          inc(PName);
+          inc(PVal);
+        end;
+        // at last we add the bookmark info
+        t.Bookmark:=temp;
+      end;
+      if Assigned(fOnData) then begin
+              sVal := fLstVal.CommaText;
+              sName := fLstName.CommaText;
+              fOnData(Sender, Columns, sName, sVal);
+      end;
+
+    end;
+//    InternalOpen;
+  end;
+end;
+
+procedure  TSQLite.SetDataBase(DBFileName: String);
+var
+  afPMsg: PChar;
+begin
+
+  fError := SQLITE_ERROR;
+  fIsOpen := False;
+  fOnData := nil;
+  fOnBusy := nil;
+  fOnQueryComplete := nil;
+  fChangeCount := 0;
+{$ifdef dynload}
+  if LibsLoaded then
+    begin
+{$endif}
+    fSQLite := SQLite_Open(PChar(DBFileName), 1, @afPMsg);
+    SQLite_FreeMem(afPMsg);
+    if fSQLite <> nil then
+    begin
+      {$ifndef fpc}
+      fVersion := strpas(SQLite_Version);
+      fEncoding := strpas(SQLite_Encoding);
+      {$endif}
+      fIsOpen := True;
+      fError := SQLITE_OK;
+    end;
+{$ifdef dynload}
+  end;
+{$endif}
+  fMsg := ErrorMessage(fError);
+end;
+
+destructor TSQLite.Destroy;
+begin
+try
+if assigned(fSQl) then begin
+        fsql.free;
+        fsql:=nil;
+end;
+  if fIsOpen then
+    SQLite_Close(fSQLite);
+  fIsOpen := False;
+if assigned(fLstName) then begin
+  fLstName.Free;
+  fLstName:=nil;
+end;
+if assigned(fLstVal) then begin
+  fLstVal.Free;
+  fLstVal:=nil;
+end;
+  fSQLite := nil;
+  fOnData := nil;
+  fOnBusy := nil;
+  fOnQueryComplete := nil;
+  fLstName := nil;
+  fLstVal := nil;
+if assigned(fBuffer) then begin
+        clearBuffer;
+        fBuffer.Free;
+        fBuffer:=nil;
+end;
+except
+end;
+  inherited Destroy;
+end;
+
+function TSQLite.Query(ASql: String): boolean;
+
+begin
+  Result:=Query(ASql,Nil);
+end;
+
+function TSQLite.Query(ASql: String; Table: TStrings): boolean;
+//var
+//  fPMsg: PChar;
+begin
+  maxLengthInit:=false;
+  fError := SQLITE_ERROR;
+  if fIsOpen then
+  begin
+    fPMsg := nil;
+    fBusy := True;
+    fTable := Table;
+    if fTable <> nil then
+      fTable.Clear;
+    fError := SQLite_Exec(fSQLite, PChar(ASql), @ExecCallback, Self, @fPMsg);
+    SQLite_FreeMem(fPMsg);
+    fChangeCount := SQLite_Changes(fSQLite);
+    fTable := nil;
+    fBusy := False;
+    if Assigned(fOnQueryComplete) then
+      fOnQueryComplete(Self);
+  end;
+  fMsg := ErrorMessage(fError);
+  Result := not (fError <> SQLITE_OK);//function should return true, if execution of query ends ok..
+  if result and not active then
+        factive:=true;
+  fDoSql:=true;
+end;
+
+
+procedure TSQLite.SetBusyTimeout(Timeout: Integer);
+begin
+  fBusyTimeout := Timeout;
+  if fIsOpen then
+  begin
+    SQLite_Busy_Timeout(fSQLite, fBusyTimeout);
+    if fBusyTimeout > 0 then
+      SQLite_Busy_Handler(fSQLite, @BusyCallback, Self)
+    else
+      SQLite_Busy_Handler(fSQLite, nil, nil);
+  end;
+end;
+
+function TSQLite.LastInsertRow: integer;
+begin
+  if fIsOpen then
+    Result := SQLite_Last_Insert_Rowid(fSQLite)
+  else
+    Result := -1;
+end;
+
+function TSQLite.ErrorMessage(ErrNo: Integer): string;
+begin
+{$ifdef dynload}
+  if LibsLoaded then
+  begin
+{$endif}
+    if ErrNo = 0 then
+      Result := MsgNoError
+    else
+      Result := SQLite_Error_String(ErrNo);
+{$ifdef dynload}
+  end else
+    Raise exception.Create('Library "sqlite.dll" not found.');
+{$endif}   
+end;
+
+function TSQLite.IsComplete(ASql: String): boolean;
+begin
+  Result := SQLite_Complete(PChar(ASql))=0;
+end;
+
+function TSQLite.DatabaseDetails(Table: TStrings): boolean;
+begin
+  Result := Query('SELECT * FROM SQLITE_MASTER;', Table);
+end;
+
+function TSQLite.ExecSQL: boolean;
+var i : integer;
+
+begin
+  result:=false;
+  maxLengthInit:=false;  
+  fError := SQLITE_ERROR;
+  if fIsOpen then
+  begin
+    fPMsg := nil;
+    fBusy := True;
+
+    if fTable <> nil then
+      fTable.Clear;
+    for i:=0 to fsql.Count-1 do begin
+    fError := SQLite_Exec(fSQLite, PChar(fSql[i]), @ExecCallback2, Self, @fPMsg);
+    SQLite_FreeMem(fPMsg);
+    end;
+    fChangeCount := SQLite_Changes(fSQLite);
+    fTable := nil;
+    fBusy := False;
+    if Assigned(fOnQueryComplete) then
+      fOnQueryComplete(Self);
+  end;
+  fMsg := ErrorMessage(fError);
+  Result :=not (fError <> SQLITE_OK);
+  if result and not active then
+        factive:=true;
+  fDoSQl:=true;
+end;
+
+constructor TSQLite.Create(Aowner: tComponent);
+begin
+inherited create(owner);
+fLstName := TStringList.Create;
+fLstVal := TStringList.Create;
+fDoSql:=false;
+fsql:=tStringList.Create;
+fOnwer:=owner;
+fBuffer:=tObjectList.Create(true);
+if length(fDataBase)>1 then
+        setDataBase(fDataBase);
+end;
+
+procedure TSQLite.setTableName(const Value: string);
+begin
+if (not active) and (length(value)>0) then begin
+  fTableName := Value;
+  sql.Clear;
+  sql.add('select rowid,* from '+tableName+';');
+end;
+end;
+
+function TSQLite.getActive: boolean;
+begin
+result:=fActive;
+end;
+
+{
+procedure TSQLite.setActive(Value: boolean);
+begin
+  if value then 
+    begin
+    //switch for  active=true;
+    if active then
+      active:=false;
+    end 
+  else 
+    begin
+    fDoSQL:=value;
+    end;
+  inherited setActive(value);        
+end;
+}
+
+function TSQLite.getRecNo: integer;
+begin
+result:=self.fCurrentRecord;
+end;
+
+procedure TSQLite.Cancel;
+begin
+  inherited;
+  fIsCancel := False;
+  if fBusy and fIsOpen then
+  begin
+    do_SQLite_interrupt(fSQLite);
+    fBusy := false;
+    fIsCancel := True;
+  end;
+
+end;
+
+function TSQLite.getIsCancel: boolean;
+begin
+
+end;
+
+function TSQLite.getBookmarkFlag(Buffer: pChar): tBookMarkFlag;
+begin
+result:= pRecInfo(Buffer)^.BookmarkFlag;
+end;
+
+procedure TSQLite.InitBufferPointers;
+begin
+fCalcFieldsOfs :=fRecordSize;
+//fRecInfoOfs :=fCalcFieldsOfs + CalcFieldsSize;
+//fBookMarkOfs := fRecInfoOfs+SizeOf(tRecInfo);
+fRecordBufferSize :=fBookmarkOfs + BookmarkSize;
+end;
+
+procedure TSQLite.GetBookmarkData(Buffer: pChar; Data: Pointer);
+begin
+Move(Buffer[fBookMarkOfs],Data^,SizeOf(tBinBookMark));
+//implementacja jest watpliwa
+end;
+
+procedure TSQLite.SetBookMarkData(Buffer: pChar; Data: Pointer);
+begin
+Move(Data^,Buffer[fBookMarkOfs],SizeOf(tbinBookMark));
+
+end;
+
+procedure TSQLite.InternalGotoBookmark(ABookMark: Pointer);
+begin
+with pBinBookMark(ABookMark)^ do begin
+    fCurrentRecord :=RecPtr;
+end;
+end;
+
+function TSQLite.FieldDefsStored: boolean;
+begin
+
+end;
+
+procedure TSQLite.ClearCalcFields(Buffer: pChar);
+var p : pointer;
+t : tSQliteRows;
+begin
+inherited;
+p:=buffer;
+if p<>nil then begin
+try
+        t:=tSQliteRows(p);
+        t.clearCalcFields;
+except
+end;
+end;
+end;
+
+function TSQLite.getRecordCount: integer;
+begin
+result :=fRecordCount;
+end;
+
+procedure TSQLite.OpenCursor(InfoQuery: Boolean);
+begin
+  inherited;
+
+end;
+
+procedure TSQLite.SetRecNo(value: integer);
+begin
+  inherited;
+
+end;
+
+function TSQLite.CreateTable: boolean;
+begin
+
+end;
+
+function TSQLite.getRecord(Buffer: pChar; GetMode: tGetMode;
+  DoCheck: Boolean): tGetResult;
+begin
+if fRecordCount<1 then
+        result:=grEof
+else begin
+        result:=grOk;
+        Case GetMode of
+                gmNext :
+                        if fCurrentRecord>= (fRecordCount-1) then
+                                result:=grEof
+                        else
+                                Inc(fCurrentRecord);
+                gmPrior :
+                        if (fCurrentRecord <=0) then
+                                result:=grBof
+                        else
+                                Dec(fCurrentRecord);
+                gmCurrent :
+                        if (fCurrentRecord >= fRecordCount) or (fCurrentRecord <0) then
+                                result:=grError;
+        end;
+end;
+if result=grOk then begin
+        self.fRecordBufferSize:=sizeOf(fBuffer[fCurrentRecord]);
+        self.fRecordSize:=self.fRecordBufferSize;
+       // Buffer:=fBuffer.List[fcurrentRecord];
+        //read data from psyh buffer sqlite..;)
+        GetCalcFields(Buffer);
+ {       with fBuffer.Items[fCurrentRecord] as tSqliteRows do begin
+                BookmarkFlag := bfCurrent;
+        end;}
+    with PRecInfo(Buffer)^ do
+    begin
+      Index := fCurrentRecord;
+      BookmarkFlag := bfCurrent;
+      Bookmark := Integer (fCurrentRecord);
+    end;
+        
+
+
+end;
+if result=grError then begin
+        if DoCheck and DoExceptions then
+                raise edataBaseError.Create('Invalid Record');
+end;
+end;
+
+procedure TSQLite.InternalInitFieldDefs;
+var i : integer;
+begin
+FieldDefs.Clear;
+for i:=0 to fLstname.Count-1 do begin
+        FieldDefs.Add(fLstName[i],ftString,MaxiL[i],false);
+end;
+end;
+
+procedure TSQLite.InternalOpen;
+begin
+if fBUffer<>nil then begin
+        clearBuffer;
+
+end;
+if (length(tableName)>0) and (fSQL.Count<1) then begin
+        fsql.add('select rowid,* from '+fTableName);
+end;
+if not fDoSQL then
+        fActive:=execSQL;
+InternalInitFieldDefs;
+{
+if ((fLstName.count-1)>0) and (fBuffer<>nil) then
+        fRecordCount:=(fBuffer.Count-1) div (fLstName.Count-1)
+else
+        fRecordCount:=0;
+}
+if  (fBuffer<>nil) then
+        fRecordCount:=(fBuffer.Count-1)
+else
+        fRecordCount:=0;
+if DefaultFields then
+        CreateFields;
+BindFields(true);
+FisOpen:=true;
+  FRecordSize := sizeof (TRecInfo);
+  FCurrentRecord := -1;
+  BookmarkSize := sizeOf (Integer);
+end;
+
+procedure TSQLite.InternalClose;
+begin
+clearBuffer;
+end;
+
+function TSQLite.allocRecordBuffer: pChar;
+var p : pointer;
+begin
+//now is time to calculate currentRecordSize...
+  GetMem(Result,GetRecordSize);
+  FillChar(Result^,GetRecordSize,0);
+end;
+
+procedure TSQLite.FreeRecordBuffer(var Buffer: pChar);
+begin
+//FreeMem(Buffer,sizeOf(Buffer));
+FreeMem(Buffer,GetRecordSize);
+end;
+
+function TSQLite.getRecordSize: Word;
+begin
+
+  Result:=sizeof(TRecInfo);
+
+end;
+
+procedure TSQLite.InternalAddRecord(Buffer: Pointer; DoAppend: boolean);
+begin
+
+end;
+
+procedure TSQLite.InternalDelete;
+begin
+
+end;
+
+procedure TSQLite.InternalFirst;
+begin
+  self.fCurrentRecord:=0;
+end;
+
+procedure TSQLite.InternalHandleException;
+begin
+{
+  if _DO_EXCEPTIONS=1 then
+        Application.HandleException(Self)
+}
+end;
+
+procedure TSQLite.InternalInitRecord(Buffer: pChar);
+begin
+
+end;
+
+procedure TSQLite.InternalLast;
+begin
+  fCurrentRecord:=fRecordCount;
+end;
+
+procedure TSQLite.InternalPost;
+begin
+end;
+
+procedure TSQLite.InternalSetToRecord(Buffer: pChar);
+
+begin
+
+end;
+
+function TSQLite.isCursorOpen: Boolean;
+begin
+
+end;
+
+
+procedure TSQLite.SetFieldData(Field: tField; Buffer: Pointer);
+// var aa : string;
+begin
+// Does NOthing ??
+// aa:=Field.NewValue;
+//  inherited;
+
+end;
+
+procedure TSQLite.SetBookmarkFlag(Buffer: pChar; value: tBookmarkFlag);
+begin
+//  inherited;
+
+end;
+
+function TSQLite.getFieldData(Field: tField; Buffer: Pointer): boolean;
+var i,k : integer;
+p : tSqliteField;
+r : tSqliteRows;
+pt : pointer;
+begin
+
+result:=false;
+k:=fieldDefs.Count-1;
+self.fLstName.Count;
+r:=fBuffer[PRecInfo(ActiveBuffer)^.Index] as tSqliteRows;
+if r=nil then exit;
+for i:=0 to k do begin
+                if lowercase(fLstName[i])=lowercase(field.FieldName) then begin
+                        p:=r.items[i];
+                        if p = nil then break;
+                        p.GetData(Buffer,true);
+                        result:=true;
+                        break;
+                end;
+end;
+end;
+
+{ tSqliteRows }
+
+procedure tSqliteRows.Push(item: tSqliteField);
+begin
+if internalcount<fBuffercount then begin
+        fBuffer[internalCount]:=item;
+        inc(internalCount);
+end;
+end;
+
+constructor tSqliteRows.Create(fieldCount: integer);
+begin
+
+inherited create;
+
+if fieldCount<=0 then
+        fieldCount:=1;
+ fbuffercount:=fieldcount+1;
+getmem(fBuffer,fbuffercount*sizeof(pointer));
+end;
+
+destructor tSqliteRows.destroy;
+
+
+begin
+
+  clearBuffer;
+  inherited;
+end;
+
+function tSqliteRows.Pop: tSqliteField;
+begin
+result:=nil;
+if (internalCount>0) and (internalCount<fBuffercount) then begin
+        result:=fBuffer[internalCount];
+        Dec(internalCount);
+end;
+end;
+
+function tSqliteRows.getItem(index: integer): tSqliteField;
+begin
+result:=nil;
+if checkIndex(index) then
+        result:=fBuffer[Index];
+end;
+
+procedure tSqliteRows.SetItem(index: integer; const Value: tSqliteField);
+begin
+if checkIndex(index) then
+        fBuffer[index]:=Value;
+end;
+
+function tSqliteRows.checkIndex(index : integer): boolean;
+begin
+result:=false;
+if (index>=0) and (index<internalCount) then
+        result:=true;
+end;
+
+procedure tSqliteRows.clearBuffer;
+var i : integer;
+begin
+if internalcount>0 then begin
+for i:=0 to internalCount do begin
+        if fBuffer[i]<>nil then begin
+                fBuffer[i].Free;
+                fBuffer[i]:=nil;
+        try
+        except
+                continue;
+        end;
+        end;
+end;
+fbuffercount:=0;
+FreeMem(fBuffer);
+end;
+
+end;
+
+procedure tSqliteRows.Clear;
+begin
+clearBuffer;
+internalCount:=0;
+end;
+
+procedure tSqliteRows.ClearCalcFields;
+begin
+
+end;
+
+function tSqliteRows.Add(pt: pChar;ptName : pChar):boolean;
+var tmp : int64;
+begin
+Push(tSqliteField.Create(nil));
+tmp:=internalCount-1;
+items[tmp].FieldKind:=fkData;
+items[tmp].SetFieldType(ftString);
+items[tmp].SetData(pt,true);
+end;
+
+
+procedure tSqlite.countMaxiLength(pt: pChar; index : int64);
+begin
+if length(pt)>maxil[index] then
+        maxiL[index]:=length(pt);
+end;
+
+{ tSqliteField }
+
+constructor tSqliteField.create(aOwner: tObject);
+begin
+
+inherited create;
+fOwner:=aOwner;
+end;
+
+destructor tSqliteField.destroy;
+begin
+
+  inherited;
+end;
+
+function tSqliteField.GetData(Buffer: Pointer) : boolean;
+
+begin
+  Result:=GetData(Buffer,True);
+end ;
+
+function tSqliteField.GetData(Buffer: Pointer;
+  NativeFormat: Boolean): boolean;
+  var
+ l,tIntegerType : integer;
+ tDateTimeType : tDateTime;
+begin
+try
+result:=false;
+
+if not nativeFormat then begin
+        Move(data,Buffer^,sizeOf(data));
+        result:=true;
+end else begin
+        case self.fieldType of
+        ftInteger : begin
+                        tIntegerType:=StrToInt(data);
+                        Move(tIntegerType,Buffer^,sizeOf(data));
+                end;
+        ftDateTime  : begin
+                        tDateTimeType:=StrToDate(data);
+                        Move(tDateTimeType,Buffer^,sizeOf(data));
+                end;
+        ftString : begin
+                  //      L:=length(data);
+                  //      Move(data,Buffer^,l);
+                      StrCopy (Buffer, pchar(data));                  
+                end;
+        else
+                        Move(data,Buffer^,sizeOf(data));
+        end;
+        result:=true;
+end;
+except
+        Buffer:=nil;
+end;
+end;
+
+procedure tSqliteField.SetData(pt: pChar; NativeFormat: boolean);
+begin
+data:=pt;
+end;
+
+procedure tSqliteField.SetFieldKind(const Value: tFieldKind);
+begin
+  fFieldKind := Value;
+end;
+
+procedure tSqliteField.SetFieldType(const Value: tFieldType);
+begin
+  fFieldType := Value;
+end;
+{
+procedure tSqliteField.SetName(const Value: string);
+begin
+  fName := Value;
+end;
+ }
+function TSQLite.getCanModify: boolean;
+begin
+result:=false;
+exit;//temporary
+if length(fTableName)>0 then
+        result:=true;
+end;
+
+procedure TSQLite.InitMaxLength(length: integer);
+begin
+if not maxLengthInit and (length>0) then begin
+        maxLengthInit:=true;
+        maxilcount:=length;
+        getmem(maxiL,maxilcount*sizeof(integer));
+end;
+end;
+
+procedure TSQLite.clearBuffer;
+
+begin
+if assigned(fBuffer) then begin
+        if fBuffer.count>0 then begin
+                fBuffer.pack;
+                fBuffer.clear;
+        end;
+end;
+if assigned(fLstVal) then begin
+        fLstVal.Clear;
+end;
+if assigned(fLstName) then begin
+        fLstName.Clear;
+end;
+end;
+
+{
+procedure TSQLite.internalInsert;
+begin
+  inherited;
+ if not getCanModify then exit;
+end;
+}
+
+procedure Register;
+begin
+  RegisterComponents('MK', [tSqlite]);
+end;
+
+initialization
+{$ifdef dynload}
+  LibsLoaded := LoadLibs;
+{$endif}
+{$ifdef fpc}
+  MsgNoError := SystemErrorMsg(0);
+{$else}
+  MsgNoError := 'The operation completed successfully';
+{$endif}
+
+finalization
+{$ifdef dynload}
+  if DLLHandle <> 0 then
+    FreeLibrary(DLLHandle);
+{$endif}
+
+
+
+end.
+