Browse Source

+ ftpapi interface unit added

Tomas Hajny 23 years ago
parent
commit
747b98e0f0

+ 1292 - 0
packages/extra/os2units/ftpapi/Makefile

@@ -0,0 +1,1292 @@
+#
+# Don't edit, this file is generated by FPCMake Version 1.1 [2002/08/01]
+#
+default: all
+MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx
+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 cygwin,$(MACHTYPE)),)
+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 /,\,/)
+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_VERSION:=$(shell $(FPC) -iV)
+endif
+export FPC FPC_VERSION
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+COMPILERINFO:=$(shell $(FPC) -iSP -iTP -iSO -iTO)
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 1,$(COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 2,$(COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 3,$(COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 4,$(COMPILERINFO))
+endif
+else
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(shell $(FPC) -iSP)
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(shell $(FPC) -iTP)
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(shell $(FPC) -iSO)
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(shell $(FPC) -iTO)
+endif
+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=ftpapi
+override PACKAGE_VERSION=1.0.6
+override TARGET_UNITS+=ftpapi
+override INSTALL_FPCPACKAGE=y
+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 ($(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=.ppn
+OEXT=.on
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+FPCMADE=fpcmade.nw
+ZIPSUFFIX=nw
+EXEEXT=.nlm
+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 
+ifeq ($(OS_TARGET),linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(OS_TARGET),go32v2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(OS_TARGET),win32)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(OS_TARGET),os2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(OS_TARGET),freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(OS_TARGET),beos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(OS_TARGET),netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(OS_TARGET),amiga)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(OS_TARGET),atari)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(OS_TARGET),sunos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(OS_TARGET),qnx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(OS_TARGET),netware)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(OS_TARGET),openbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(OS_TARGET),wdosx)
+REQUIRE_PACKAGES_RTL=1
+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
+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
+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 ($(OS_SOURCE),$(OS_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_distinstall
+fpc_distinstall: install exampleinstall
+.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall
+ifndef PACKDIR
+ifndef inUnix
+PACKDIR=$(BASEDIR)/../fpc-pack
+else
+PACKDIR=/tmp/fpc-pack
+endif
+endif
+ifndef ZIPNAME
+ifdef DIST_ZIPNAME
+ZIPNAME=$(DIST_ZIPNAME)
+else
+ZIPNAME=$(ZIPPREFIX)$(PACKAGE_NAME)$(ZIPSUFFIX)
+endif
+endif
+ifndef ZIPTARGET
+ifdef DIST_ZIPTARGET
+ZIPTARGET=DIST_ZIPTARGET
+else
+ZIPTARGET=install
+endif
+endif
+ifndef USEZIP
+ifdef inUnix
+USETAR=1
+endif
+endif
+ifndef inUnix
+USEZIPWRAPPER=1
+endif
+ifdef USEZIPWRAPPER
+ZIPPATHSEP=$(PATHSEP)
+ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(BATCHEXT))
+else
+ZIPPATHSEP=/
+endif
+ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))
+ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
+ifdef USETAR
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(ZIPNAME)$(TAREXT)
+ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) *
+else
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(ZIPNAME)$(ZIPEXT)
+ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
+endif
+fpc_zipinstall:
+	$(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1
+	$(MKDIR) $(DIST_DESTDIR)
+	$(DEL) $(ZIPDESTFILE)
+ifdef USEZIPWRAPPER
+ifneq ($(ECHOREDIR),echo)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER)
+else
+	echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER)
+	echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER)
+	echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER)
+endif
+ifdef inUnix
+	/bin/sh $(ZIPWRAPPER)
+else
+	$(ZIPWRAPPER)
+endif
+	$(DEL) $(ZIPWRAPPER)
+else
+	$(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)
+endif
+	$(DELTREE) $(PACKDIR)
+fpc_zipsourceinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=src
+fpc_zipexampleinstall:
+ifdef HASEXAMPLES
+	$(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=exm
+endif
+fpc_zipdistinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=distinstall
+.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)  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: fpc_distinstall
+zipinstall: fpc_zipinstall
+zipsourceinstall: fpc_zipsourceinstall
+zipexampleinstall: fpc_zipexampleinstall
+zipdistinstall: fpc_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

+ 17 - 0
packages/extra/os2units/ftpapi/Makefile.fpc

@@ -0,0 +1,17 @@
+#
+#   Makefile.fpc for FTPAPI.DLL interface unit
+#
+
+[package]
+name=ftpapi
+version=1.0.6
+
+[target]
+units=ftpapi
+examples=ftptest
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../../..

+ 1206 - 0
packages/extra/os2units/ftpapi/ftpapi.pas

@@ -0,0 +1,1206 @@
+{
+    $Id$
+    Copyright (c) 2002 by Yuri Prokushev ([email protected]).
+
+    Functions from FTPAPI.DLL (part of standard OS/2 Warp 4/eCS installation).
+
+    This program is free software; you can redistribute it and/or modify it
+    under the terms of the GNU Library General Public License (LGPL) as
+    published by the Free Software Foundation; either version 2 of the
+    License, or (at your option) any later version. This program is
+    distributed in the hope that it will be useful, but WITHOUT ANY
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.
+
+    See the GNU Library General Public License for more details. You should
+    have received a copy of the GNU Library General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ **********************************************************************}
+
+{
+@abstract(a unit to handle FTP)
+@author(Yuri Prokushev ([email protected]))
+@created(22 Jul 2002)
+@lastmod(01 Oct 2002)
+This is functions from FTPAPI.DLL. Goal is ftp manipulation.
+Warning: This code is alfa. Future versions of this unit will propably
+not be compatible.
+@todo(Rework some functions to support strings longer then 255 chars)
+@todo(Finish functions description)
+}
+unit FTPAPI;
+
+{****************************************************************************
+
+                             RTL configuration
+
+****************************************************************************}
+
+
+interface
+
+uses
+  OS2Def,
+  PMWin,
+  Strings;
+
+Const
+  // window message id for post xfer updates
+  WM_FTPAPI_XFER_UPDATE = WM_USER + 1000;
+
+  // Transfer types is ASCII
+  T_ASCII  = 1;
+  // Transfer types is EBCDIC
+  T_EBCDIC = 2;
+  // Transfer types is BINARY
+  T_BINARY = 3;
+
+  // command/reply trace file modes
+  M_OVERLAY = 1;
+  M_APPEND  = 2;
+
+  // command/reply tracing error codes
+
+  // invalid trace file open mode
+  TRCMODE = 1;
+  // unable to open trace file
+  TRCOPEN = 2;
+
+  // Common error codes (try Ftp_ErrNo, all other functions returns usually
+  // 0 if all ok, -1 if all bad)
+
+  // No any error
+  FTPNOERROR    = 00;
+  // Unknown service.
+  FTPSERVICE    = 01;
+  // Unknown host.
+  FTPHOST       = 02;
+  // Unable to obtain socket.
+  FTPSOCKET     = 03;
+  // Unable to connect to server.
+  FTPCONNECT    = 04;
+  // Login failed.
+  FTPLOGIN      = 05;
+  // Transfer aborted.
+  FTPABORT      = 06;
+  // Problem opening the local file.
+  FTPLOCALFILE  = 07;
+  // Problem initializing data connection.
+  FTPDATACONN   = 08;
+  // Command failed.
+  FTPCOMMAND    = 09;
+  // Proxy server does not support third party transfers.
+  FTPPROXYTHIRD = 10;
+  // No primary connection for proxy transfer.
+  FTPNOPRIMARY  = 11;
+  // No code page translation table was loaded
+  FTPNOXLATETBL = 12;
+
+  // ping error codes
+
+  // All ok
+  PINGOK        = 0;
+  // Host does not reply
+  PINGREPLY     = -1;
+  // Unable to obtain socket
+  PINGSOCKET    = -3;
+  // Unknown protocol ICMP
+  PINGPROTO     = -4;
+  // Send failed
+  PINGSEND      = -5;
+  // Recv() failed
+  PINGRECV      = -6;
+  // Unknown host (can't resolve)
+  PINGHOST      = -7;
+
+  // Restart Specific
+  REST_GET = 1;
+  REST_PUT = 2;
+
+Const
+  // Short functions vars
+  ShortHost: String='';
+  ShortUserId: String='';
+  ShortPasswd: String='';
+  ShortAcct: String='';
+  ShortTransferType: Integer = T_ASCII;
+
+  ShortTransferTexts: array [T_ASCII..T_BINARY] of String [10] =
+                                                 ('ASCII', 'EBCDIC', 'BINARY');
+
+{****************************************************************************
+
+                          Opening and Closing Functions
+
+****************************************************************************}
+
+// Defines Host, UserId, Passwd and Acct for short function calls
+Function FtpSetUser(Host, UserId, Passwd, Acct: String): Integer;
+
+// Defines TransferType for short function calls
+Function FtpSetBinary(TransferType: Integer): Integer;
+
+// Stores the string containing the FTP API version
+//   Buf is the buffer to store version string
+//   BufLen is length of the buffer
+// Version string is null-terminated and truncated to buffer length
+Function FtpVer(var Buf; BufLen: Integer): Integer; cdecl;
+
+Function FtpVer(Var Buf: String): Integer;
+
+// Closes all current connections
+Procedure FtpLogoff; cdecl;
+
+{****************************************************************************
+
+                       File Action Functions
+
+****************************************************************************}
+
+// Appends information to a remote file
+//   Host is hostname. Use 'hostname portnumber' to specify non-standard port
+//   UserID is user ID
+//   Passwd is password
+//   Acct is account (can be nil)
+//   Local is local filename
+//   Remote is Remote filename
+//   TransferType is type of transfer (T_* constants)
+Function FTPAppend(Host, UserId, Passwd, Acct, Local, Remote: PChar;
+                   Transfertype: Integer): Integer; cdecl;
+
+Function FTPAppend(Host, UserId, Passwd, Acct, Local, Remote: String;
+                   Transfertype: Integer): Integer;
+
+Function FTPAppend(Local, Remote: PChar; Transfertype: Integer): Integer;
+Function FTPAppend(Local, Remote: String; Transfertype: Integer): Integer;
+
+Function FTPAppend(Local, Remote: PChar): Integer;
+Function FTPAppend(Local, Remote: String): Integer;
+
+// Deletes files on a remote host
+Function FtpDelete(Host, UserId, Passwd, Acct, Name: PChar): Integer; cdecl;
+
+Function FtpDelete(Host, UserId, Passwd, Acct, Name: String): Integer;
+
+Function FtpDelete(Name: PChar): Integer;
+Function FtpDelete(Name: String): Integer;
+
+// Renames a file on a remote host
+Function FtpRename(Host, UserId, Passwd, Acct, NameFrom, NameTo: PChar): Integer; cdecl;
+
+Function FtpRename(Host, UserId, Passwd, Acct, NameFrom, NameTo: String): Integer;
+
+Function FtpRename(NameFrom, NameTo: PChar): Integer;
+Function FtpRename(NameFrom, NameTo: String): Integer;
+
+// Gets a file from an FTP server
+Function FtpGet(Host, UserId, Passwd, Acct, Local, Remote, Mode: PChar; TransferType: integer): Integer; cdecl;
+
+Function FtpGet(Host, UserId, Passwd, Acct, Local, Remote, Mode: String; TransferType: integer): Integer;
+
+Function FtpGet(Local, Remote, Mode: PChar; TransferType: integer): Integer;
+Function FtpGet(Local, Remote, Mode: String; TransferType: integer): Integer;
+
+Function FtpGet(Local, Remote, Mode: PChar): Integer;
+Function FtpGet(Local, Remote, Mode: String): Integer;
+
+Function FtpGet(Local, Remote: PChar): Integer;
+Function FtpGet(Local, Remote: String): Integer;
+
+
+// Transfers a file to an FTP server
+Function FtpPut(Host, UserId, Passwd, Acct, Local, Remote: PChar; TransferType: Integer): Integer; cdecl;
+
+Function FtpPut(Host, UserId, Passwd, Acct, Local, Remote: String; TransferType: Integer): Integer;
+
+Function FtpPut(Local, Remote: PChar; TransferType: Integer): Integer;
+Function FtpPut(Local, Remote: String; TransferType: Integer): Integer;
+
+Function FtpPut(Local, Remote: PChar): Integer;
+Function FtpPut(Local, Remote: String): Integer;
+
+// Transfers a file to a host and ensures it is created with a unique name
+Function FtpPutUnique(Host, UserId, Passwd, Acct, Local, Remote: PChar; TransferType: Integer): Integer; cdecl;
+
+Function FtpPutUnique(Host, UserId, Passwd, Acct, Local, Remote: String; TransferType: Integer): Integer;
+
+Function FtpPutUnique(Local, Remote: PChar; TransferType: Integer): Integer;
+Function FtpPutUnique(Local, Remote: String; TransferType: Integer): Integer;
+
+Function FtpPutUnique(Local, Remote: PChar): Integer;
+Function FtpPutUnique(Local, Remote: String): Integer;
+
+// Restarts an aborted transaction from the point of interruption
+Function FtpReStart(Host, UserId, Passwd, Acct, Local, Remote, Mode: PChar; TransferType, Rest: Integer): Longint; cdecl;
+
+Function FtpReStart(Host, UserId, Passwd, Acct, Local, Remote, Mode: String; TransferType, Rest: Integer): Longint;
+
+Function FtpReStart(Local, Remote, Mode: String; TransferType, Rest: Integer): Longint;
+Function FtpReStart(Local, Remote, Mode: String; Rest: Integer): Longint;
+
+
+{****************************************************************************
+
+                          Directory Listing Functions
+
+****************************************************************************}
+
+// Gets directory information in short format from a remote host and stores it to a local file
+// You can use named pipes here to avoid a need for creating a real file
+Function FtpLs(Host, Userid, Passwd, Acct, Local, Pattern: PChar): Integer; cdecl;
+
+Function FtpLs(Host, Userid, Passwd, Acct, Local, Pattern: String): Integer;
+
+Function FtpLs(Local, Pattern: String): Integer;
+
+// Gets a directory in wide format from a host and stores it in file Local
+// See comment regarding named pipes above
+Function FtpDir(Host, UserId, Passwd, Acct, Local, Pattern: PChar): Integer; cdecl;
+
+Function FtpDir(Host, Userid, Passwd, Acct, Local, Pattern: String): Integer;
+
+Function FtpDir(Local, Pattern: String): Integer;
+
+
+{****************************************************************************
+
+                          Directory Action Functions
+
+****************************************************************************}
+
+// Changes the current working directory on a host
+Function FtpCd(Host, Userid, Passwd, Acct, Dir: PChar): Integer; cdecl;
+
+Function FtpCd(Host, Userid, Passwd, Acct, Dir: String): Integer;
+
+Function FtpCd(Dir: String): Integer;
+
+// Creates a new directory on a target machine
+Function FtpMkd(Host, Userid, Passwd, Acct, Dir: PChar): Integer; cdecl;
+
+Function FtpMkd(Host, Userid, Passwd, Acct, Dir: String): Integer;
+
+Function FtpMkd(Dir: String): Integer;
+
+// Removes a directory on a target machine
+Function FtpRmd(Host, UserId, Passwd, Acct, Dir: PChar): Integer; cdecl;
+
+Function FtpRmd(Host, UserId, Passwd, Acct, Dir: String): Integer;
+
+Function FtpRmd(Dir: String): Integer;
+
+// Stores the string containing the FTP server description of the current
+// working directory on the host to the buffer
+Function FtpPwd(Host, UserId, Passwd, Acct, Buf: PChar; BufLen: Integer): Integer; cdecl;
+
+Function FtpPwd(Host, UserId, Passwd, Acct: String; var Buf: String): Integer;
+
+Function FtpPwd(var Buf: String): Integer;
+
+{****************************************************************************
+
+                             Remote Server Functions
+
+****************************************************************************}
+
+// Sends a string to the server verbatim
+Function FtpQuote(Host, UserId, Passwd, Acct, QuoteStr: PChar): Integer; cdecl;
+
+Function FtpQuote(Host, UserId, Passwd, Acct, QuoteStr: String): Integer;
+
+Function FtpQuote(QuoteStr: String): Integer;
+
+// Executes the site command
+Function FtpSite(Host, UserId, Passwd, Acct, SiteStr: PChar): Integer; cdecl;
+
+Function FtpSite(Host, UserId, Passwd, Acct, SiteStr: String): Integer;
+
+Function FtpSite(SiteStr: String): Integer;
+
+// Stores the string containing the FTP server description of the operating
+// system running on the host in a buffer
+Function FtpSys(Host, UserId, Passwd, Acct, Buf: PChar; BufLen: Integer): Integer; cdecl;
+
+Function FtpSys(Host, UserId, Passwd, Acct: String; var Buf: String): Integer;
+
+Function FtpSys(var Buf: String): Integer;
+
+
+// Transfers a file between two remote servers without sending the file to
+// the local host
+Function FtpProxy(Host1, UserId1, Passwd1, Acct1,
+                  Host2, UserId2, Passwd2, Acct2,
+                  FN1, FN2: PChar; TransferType: Integer): Integer; cdecl;
+
+Function FtpProxy(Host1, UserId1, Passwd1, Acct1,
+                  Host2, UserId2, Passwd2, Acct2,
+                  FN1, FN2: String; TransferType: Integer): Integer;
+
+Function FtpProxy(Host1, UserId1, Passwd1, Acct1,
+                  Host2, UserId2, Passwd2, Acct2,
+                  FN1, FN2: String): Integer;
+
+// Resolves a host name and sends a ping to the remote host to determine if the host is responding
+Function FtpPing(Host: PChar; Len: Integer; var Addr: Longint): Integer; cdecl;
+
+Function FtpPing(Host: String; Len: Integer; var Addr: Longint): Integer;
+
+// Sends a ping to the remote host to determine if the host is responding
+Function Ping(Addr: Longint; Len: Integer): Integer; cdecl;
+
+// Returns the size of a file on the remote host
+Function FtpRemSize(Host, UserId, Passwd, Acct, Local, Remote, Mode: Pchar; TransferType: Integer): Longint; cdecl;
+
+Function FtpRemSize(Host, UserId, Passwd, Acct, Local, Remote, Mode: String; TransferType: Integer): Longint;
+
+Function FtpRemSize(Local, Remote, Mode: String; TransferType: Integer): Longint;
+
+Function FtpRemSize(Local, Remote, Mode: String): Longint;
+
+// Maintain the original date/time of files received.
+Function Keep_File_Date(LocalFile, RemoteFile: PChar): Boolean; cdecl;
+
+Function Keep_File_Date(LocalFile, RemoteFile: String): Boolean;
+
+{****************************************************************************
+
+                                  Trace Functions
+
+****************************************************************************}
+
+
+// Opens the trace file specified and starts tracing
+Function FtpTrcOn(FileSpec: PChar; Mode: Integer): Integer; cdecl;
+
+Function FtpTrcOn(FileSpec: String; Mode: Integer): Integer; cdecl;
+
+// Closes the trace file, and stops tracing of the command and reply sequences that
+// were sent over the control connection between the local and remote hosts
+Function FtpTrcOff: Integer; cdecl;
+
+{****************************************************************************
+
+                                  Other Functions
+
+****************************************************************************}
+
+// FTP error No
+Function Ftp_ErrNo: Integer; cdecl;
+
+
+(* Undocumented / unimplemented functions:
+Function FtpXLate(Dig: Longint; St:PChar): Longint; cdecl;
+Procedure FtpXferWnd(var _hwnd: HWND); cdecl;
+Procedure FtpSetConvertMode(var code: integer); cdecl;
+Procedure FtpSetEncodeMode(var code: integer); cdecl;
+Procedure FtpSetDecodeMode(var code: integer); cdecl;
+Function FtpSetActiveMode(var UseActiveOnly: integer): integer; cdecl;
+*)
+
+implementation
+
+const
+  FTPAPIDLL = 'FTPAPI';
+
+Function FTPAppend(Host, UserId, Passwd, Acct, Local, Remote: PChar;
+                   Transfertype: Integer): Integer; cdecl;
+    external FTPAPIDLL index 1;
+
+Function FTPAppend(Host, UserId, Passwd, Acct, Local, Remote: String;
+                   Transfertype: Integer): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Local, _Remote: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, Host);
+  StrPCopy(@_UserId, UserId);
+  StrPCopy(@_Passwd, Passwd);
+  StrPCopy(@_Acct, Acct);
+  StrPCopy(@_Local, Local);
+  StrPCopy(@_Remote, Remote);
+  FtpAppend:=FtpAppend(@_Host, @_UserId, @_Passwd, @_Acct, @_Local, @_Remote, TransferType);
+End;
+
+Function FTPAppend(Local, Remote: PChar; TransferType: Integer): Integer;
+Var
+  Host, UserId, Passwd, Acct: Array[0..255] of Char;
+Begin
+  StrPCopy(@Host, ShortHost);
+  StrPCopy(@UserId, ShortUserId);
+  StrPCopy(@Passwd, ShortPasswd);
+  StrPCopy(@Acct, ShortAcct);
+  FtpAppend:=FtpAppend(@Host, @UserId, @Passwd, @Acct, Local, Remote, TransferType);
+End;
+
+Function FTPAppend(Local, Remote: PChar): Integer;
+Begin
+  FtpAppend:=FtpAppend(Local, Remote, ShortTransferType);
+End;
+
+Function FTPAppend(Local, Remote: String; TransferType: Integer): Integer;
+Var
+  _Local, _Remote: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Local, Local);
+  StrPCopy(@_Remote, Remote);
+  FtpAppend:=FtpAppend(@_Local, @_Remote, TransferType);
+End;
+
+Function FTPAppend(Local, Remote: String): Integer;
+Var
+  _Local, _Remote: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Local, Local);
+  StrPCopy(@_Remote, Remote);
+  FtpAppend:=FtpAppend(@_Local, @_Remote);
+End;
+
+Function FtpCd(Host, Userid, Passwd, Acct, Dir: PChar): Integer; cdecl;
+    external FTPAPIDLL index 2;
+
+Function FtpCd(Host, Userid, Passwd, Acct, Dir: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Dir: PChar;
+Begin
+  GetMem(_Host, Length(Host)+1);
+  GetMem(_UserId, Length(UserId)+1);
+  GetMem(_Passwd, Length(Passwd)+1);
+  GetMem(_Acct, Length(Acct)+1);
+  GetMem(_Dir, Length(Dir)+1);
+  StrPCopy(_Host, Host);
+  StrPCopy(_UserId, UserId);
+  StrPCopy(_Passwd, Passwd);
+  StrPCopy(_Acct, Acct);
+  StrPCopy(_Dir, Dir);
+  FtpCd:=FtpCd(_Host, _Userid, _Passwd, _Acct, _Dir);
+  FreeMem(_Host, Length(Host)+1);
+  FreeMem(_UserId, Length(UserId)+1);
+  FreeMem(_Passwd, Length(Passwd)+1);
+  FreeMem(_Acct, Length(Acct)+1);
+  FreeMem(_Dir, Length(Dir)+1);
+End;
+
+Function FtpCd(Dir: String): Integer;
+Begin
+  FtpCd:=FtpCd(ShortHost, ShortUserId, ShortPasswd, ShortAcct, Dir);
+End;
+
+Function FtpDelete(Host, UserId, Passwd, Acct, Name: PChar): Integer; cdecl;
+    external FTPAPIDLL index 3;
+
+Function FtpDelete(Host, UserId, Passwd, Acct, Name: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Name: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, Host);
+  StrPCopy(@_UserId, UserId);
+  StrPCopy(@_Passwd, Passwd);
+  StrPCopy(@_Acct, Acct);
+  StrPCopy(@_Name, Name);
+  FtpDelete:=FtpDelete(@_Host, @_UserId, @_Passwd, @_Acct, @_Name);
+End;
+
+Function FtpDelete(Name: PChar): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  FtpDelete:=FtpDelete(@_Host, @_UserId, @_Passwd, @_Acct, Name);
+End;
+
+Function FtpDelete(Name: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Name: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  StrPCopy(@_Name, Name);
+  FtpDelete:=FtpDelete(@_Host, @_UserId, @_Passwd, @_Acct, @_Name);
+End;
+
+Function FtpDir(Host, UserId, Passwd, Acct, Local, Pattern: PChar): Integer; cdecl;
+    external FTPAPIDLL index 4;
+
+Function FtpDir(Host, Userid, Passwd, Acct, Local, Pattern: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Local, _Pattern: PChar;
+Begin
+  GetMem(_Host, Length(Host)+1);
+  GetMem(_UserId, Length(UserId)+1);
+  GetMem(_Passwd, Length(Passwd)+1);
+  GetMem(_Acct, Length(Acct)+1);
+  GetMem(_Local, Length(Local)+1);
+  GetMem(_Pattern, Length(Pattern)+1);
+  StrPCopy(_Host, ShortHost);
+  StrPCopy(_UserId, ShortUserId);
+  StrPCopy(_Passwd, ShortPasswd);
+  StrPCopy(_Acct, ShortAcct);
+  StrPCopy(_Local, Local);
+  StrPCopy(_Pattern, Pattern);
+  FtpDir:=FtpDir(_Host, _Userid, _Passwd, _Acct, _Local, _Pattern);
+  FreeMem(_Host, Length(Host)+1);
+  FreeMem(_UserId, Length(UserId)+1);
+  FreeMem(_Passwd, Length(Passwd)+1);
+  FreeMem(_Acct, Length(Acct)+1);
+  FreeMem(_Local, Length(Local)+1);
+  FreeMem(_Pattern, Length(Pattern)+1);
+End;
+
+Function FtpDir(Local, Pattern: String): Integer;
+Begin
+  FtpDir:=FtpDir(ShortHost, ShortUserId, ShortPasswd, ShortAcct, Local, Pattern);
+End;
+
+
+Function FtpLs(Host, Userid, Passwd, Acct, Local, Pattern: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Local, _Pattern: PChar;
+Begin
+  GetMem(_Host, Length(Host)+1);
+  GetMem(_UserId, Length(UserId)+1);
+  GetMem(_Passwd, Length(Passwd)+1);
+  GetMem(_Acct, Length(Acct)+1);
+  GetMem(_Local, Length(Local)+1);
+  GetMem(_Pattern, Length(Pattern)+1);
+  StrPCopy(_Host, ShortHost);
+  StrPCopy(_UserId, ShortUserId);
+  StrPCopy(_Passwd, ShortPasswd);
+  StrPCopy(_Acct, ShortAcct);
+  StrPCopy(_Local, Local);
+  StrPCopy(_Pattern, Pattern);
+  FtpLs:=FtpLs(_Host, _Userid, _Passwd, _Acct, _Local, _Pattern);
+  FreeMem(_Host, Length(Host)+1);
+  FreeMem(_UserId, Length(UserId)+1);
+  FreeMem(_Passwd, Length(Passwd)+1);
+  FreeMem(_Acct, Length(Acct)+1);
+  FreeMem(_Local, Length(Local)+1);
+  FreeMem(_Pattern, Length(Pattern)+1);
+End;
+
+Function FtpLs(Local, Pattern: String): Integer;
+Begin
+  FtpLs:=FtpLs(ShortHost, ShortUserId, ShortPasswd, ShortAcct, Local, Pattern);
+End;
+
+Function FtpGet(Host, UserId, Passwd, Acct, Local, Remote, Mode: PChar; TransferType: integer): Integer; cdecl;
+    external FTPAPIDLL index 5;
+
+Function FtpGet(Host, UserId, Passwd, Acct, Local, Remote, Mode: String; TransferType: integer): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Local, _Remote, _Mode: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, Host);
+  StrPCopy(@_UserId, UserId);
+  StrPCopy(@_Passwd, Passwd);
+  StrPCopy(@_Acct, Acct);
+  StrPCopy(@_Local, Local);
+  StrPCopy(@_Remote, Remote);
+  StrPCopy(@_Mode, Mode);
+  FtpGet:=FtpGet(@_Host, @_UserId, @_Passwd, @_Acct, @_Local, @_Remote, @_Mode, TransferType);
+End;
+
+Function FtpGet(Local, Remote, Mode: PChar; TransferType: integer): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  FtpGet:=FtpGet(@_Host, @_UserId, @_Passwd, @_Acct, Local, Remote, Mode, TransferType);
+End;
+
+Function FtpGet(Local, Remote, Mode: String; TransferType: integer): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Local, _Remote, _Mode: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  StrPCopy(@_Local, Local);
+  StrPCopy(@_Remote, Remote);
+  StrPCopy(@_Mode, Mode);
+  FtpGet:=FtpGet(@_Host, @_UserId, @_Passwd, @_Acct, @_Local, @_Remote, @_Mode, TransferType);
+End;
+
+Function FtpGet(Local, Remote, Mode: PChar): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  FtpGet:=FtpGet(@_Host, @_UserId, @_Passwd, @_Acct, Local, Remote, Mode, ShortTransferType);
+End;
+
+Function FtpGet(Local, Remote, Mode: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Local, _Remote, _Mode: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  StrPCopy(@_Local, Local);
+  StrPCopy(@_Remote, Remote);
+  StrPCopy(@_Mode, Mode);
+  FtpGet:=FtpGet(@_Host, @_UserId, @_Passwd, @_Acct, @_Local, @_Remote, @_Mode, ShortTransferType);
+End;
+
+Function FtpGet(Local, Remote: PChar): Integer;
+begin
+ FtpGet := FtpGet (Local, Remote, @ShortTransferTexts [ShortTransferType, 1]);
+end;
+
+Function FtpGet(Local, Remote: String): Integer;
+begin
+ FtpGet := FtpGet (Local, Remote, ShortTransferTexts [ShortTransferType]);
+end;
+
+Procedure FtpLogoff; cdecl;
+    external FTPAPIDLL index 6;
+
+Function FtpLs(Host, Userid, Passwd, Acct, Local, Pattern: PChar): Integer; cdecl;
+    external FTPAPIDLL index 7;
+
+Function FtpMkd(Host, Userid, Passwd, Acct, Dir: PChar): Integer; cdecl;
+    external FTPAPIDLL index 8;
+
+Function FtpMkD(Host, Userid, Passwd, Acct, Dir: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Dir: PChar;
+Begin
+  GetMem(_Host, Length(Host)+1);
+  GetMem(_UserId, Length(UserId)+1);
+  GetMem(_Passwd, Length(Passwd)+1);
+  GetMem(_Acct, Length(Acct)+1);
+  GetMem(_Dir, Length(Dir)+1);
+  StrPCopy(_Host, Host);
+  StrPCopy(_UserId, UserId);
+  StrPCopy(_Passwd, Passwd);
+  StrPCopy(_Acct, Acct);
+  StrPCopy(_Dir, Dir);
+  FtpMkD:=FtpMkD(_Host, _Userid, _Passwd, _Acct, _Dir);
+  FreeMem(_Host, Length(Host)+1);
+  FreeMem(_UserId, Length(UserId)+1);
+  FreeMem(_Passwd, Length(Passwd)+1);
+  FreeMem(_Acct, Length(Acct)+1);
+  FreeMem(_Dir, Length(Dir)+1);
+End;
+
+Function FtpMkD(Dir: String): Integer;
+Begin
+  FtpMkD:=FtpMkD(ShortHost, ShortUserId, ShortPasswd, ShortAcct, Dir);
+End;
+
+Function FtpPing(Host: PChar; Len: Integer; var Addr: Longint): Integer; cdecl;
+    external FTPAPIDLL index 9;
+
+Function FtpPing(Host: String; Len: Integer; var Addr: Longint): Integer;
+var
+  _Host: PChar;
+Begin
+  GetMem(_Host, Length(Host)+1);
+  StrPCopy(_Host, Host);
+  FtpPing:=FtpPing(_Host, Len, Addr);
+  FreeMem(_Host, Length(Host)+1);
+End;
+
+Function FtpProxy(Host1, UserId1, Passwd1, Acct1,
+                  Host2, UserId2, Passwd2, Acct2,
+                  FN1, FN2: PChar; TransferType: Integer): Integer; cdecl;
+    external FTPAPIDLL index 10;
+
+Function FtpProxy(Host1, UserId1, Passwd1, Acct1,
+                  Host2, UserId2, Passwd2, Acct2,
+                  FN1, FN2: String; TransferType: Integer): Integer;
+Begin
+  Host1:=Host2+#0;
+  Host2:=Host2+#0;
+  UserId1:=UserId1+#0;
+  UserId2:=UserId2+#0;
+  Passwd1:=Passwd1+#0;
+  Passwd2:=Passwd2+#0;
+  Acct1:=Acct1+#0;
+  Acct2:=Acct2+#0;
+  FN1:=FN1+#0;
+  FN2:=FN2+#0;
+  FtpProxy:=FtpProxy(@Host1[1], @UserId1[1], @Passwd1[1], @Acct1[1],
+                  @Host2[1], @UserId2[1], @Passwd2[1], @Acct2[1],
+                  @FN1[1], @FN2[1], TransferType);
+End;
+
+Function FtpProxy(Host1, UserId1, Passwd1, Acct1,
+                  Host2, UserId2, Passwd2, Acct2,
+                  FN1, FN2: String): Integer;
+Begin
+  FtpProxy:=FtpProxy(Host1, UserId1, Passwd1, Acct1,
+                  Host2, UserId2, Passwd2, Acct2,
+                  FN1, FN2, ShortTransferType);
+End;
+
+Function FtpPut(Host, UserId, Passwd, Acct, Local, Remote: PChar; TransferType: Integer): Integer; cdecl;
+    external FTPAPIDLL index 11;
+
+Function FtpPut(Host, UserId, Passwd, Acct, Local, Remote: String; TransferType: Integer): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Local, _Remote: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, Host);
+  StrPCopy(@_UserId, UserId);
+  StrPCopy(@_Passwd, Passwd);
+  StrPCopy(@_Acct, Acct);
+  StrPCopy(@_Local, Local);
+  StrPCopy(@_Remote, Remote);
+  FtpPut:=FtpPut(@_Host, @_UserId, @_Passwd, @_Acct, @_Local, @_Remote, TransferType);
+End;
+
+Function FtpPut(Local, Remote: PChar; TransferType: Integer): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  FtpPut:=FtpPut(@_Host, @_UserId, @_Passwd, @_Acct, Local, Remote, TransferType);
+End;
+
+Function FtpPut(Local, Remote: String; TransferType: Integer): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Local, _Remote: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  StrPCopy(@_Local, Local);
+  StrPCopy(@_Remote, Remote);
+  FtpPut:=FtpPut(@_Host, @_UserId, @_Passwd, @_Acct, @_Local, @_Remote, TransferType);
+End;
+
+Function FtpPut(Local, Remote: PChar): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  FtpPut:=FtpPut(@_Host, @_UserId, @_Passwd, @_Acct, Local, Remote, ShortTransferType);
+End;
+
+Function FtpPut(Local, Remote: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Local, _Remote: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  StrPCopy(@_Local, Local);
+  StrPCopy(@_Remote, Remote);
+  FtpPut:=FtpPut(@_Host, @_UserId, @_Passwd, @_Acct, @_Local, @_Remote, ShortTransferType);
+End;
+
+Function FtpPutUnique(Host, UserId, Passwd, Acct, Local, Remote: PChar; TransferType: Integer): Integer; cdecl;
+    external FTPAPIDLL index 12;
+
+Function FtpPutUnique(Host, UserId, Passwd, Acct, Local, Remote: String; TransferType: Integer): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Local, _Remote: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, Host);
+  StrPCopy(@_UserId, UserId);
+  StrPCopy(@_Passwd, Passwd);
+  StrPCopy(@_Acct, Acct);
+  StrPCopy(@_Local, Local);
+  StrPCopy(@_Remote, Remote);
+  FtpPutUnique:=FtpPutUnique(@_Host, @_UserId, @_Passwd, @_Acct, @_Local, @_Remote, TransferType);
+End;
+
+Function FtpPutUnique(Local, Remote: PChar; TransferType: Integer): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  FtpPutUnique:=FtpPutUnique(@_Host, @_UserId, @_Passwd, @_Acct, Local, Remote, TransferType);
+End;
+
+Function FtpPutUnique(Local, Remote: String; TransferType: Integer): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Local, _Remote: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  StrPCopy(@_Local, Local);
+  StrPCopy(@_Remote, Remote);
+  FtpPutUnique:=FtpPutUnique(@_Host, @_UserId, @_Passwd, @_Acct, @_Local, @_Remote, TransferType);
+End;
+
+Function FtpPutUnique(Local, Remote: PChar): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  FtpPutUnique:=FtpPutUnique(@_Host, @_UserId, @_Passwd, @_Acct, Local, Remote, ShortTransferType);
+End;
+
+Function FtpPutUnique(Local, Remote: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Local, _Remote: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  StrPCopy(@_Local, Local);
+  StrPCopy(@_Remote, Remote);
+  FtpPutUnique:=FtpPutUnique(@_Host, @_UserId, @_Passwd, @_Acct, @_Local, @_Remote, ShortTransferType);
+End;
+
+Function FtpPwd(Host, UserId, Passwd, Acct, Buf: PChar; BufLen: Integer): Integer; cdecl;
+    external FTPAPIDLL index 13;
+
+Function FtpPwd(Host, UserId, Passwd, Acct: String; var Buf: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct: PChar;
+  _Buf: Array[0..255] of Char;
+Begin
+  GetMem(_Host, Length(Host)+1);
+  GetMem(_UserId, Length(UserId)+1);
+  GetMem(_Passwd, Length(Passwd)+1);
+  GetMem(_Acct, Length(Acct)+1);
+  StrPCopy(_Host, Host);
+  StrPCopy(_UserId, UserId);
+  StrPCopy(_Passwd, Passwd);
+  StrPCopy(_Acct, Acct);
+  FtpPwd:=FtpPwd(_Host, _UserId, _Passwd, _Acct, @_Buf, SizeOf(_Buf));
+  Buf:=StrPas(@_Buf);
+  FreeMem(_Host, Length(Host)+1);
+  FreeMem(_UserId, Length(UserId)+1);
+  FreeMem(_Passwd, Length(Passwd)+1);
+  FreeMem(_Acct, Length(Acct)+1);
+End;
+
+Function FtpPwd(var Buf: String): Integer;
+Begin
+  FtpPwd:=FtpPwd(ShortHost, ShortUserId, ShortPasswd, ShortAcct, Buf);
+End;
+
+
+Function FtpQuote(Host, UserId, Passwd, Acct, QuoteStr: PChar): Integer; cdecl;
+    external FTPAPIDLL index 14;
+
+Function FtpQuote(Host, UserId, Passwd, Acct, QuoteStr: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _QuoteStr: PChar;
+Begin
+  GetMem(_Host, Length(Host)+1);
+  GetMem(_UserId, Length(UserId)+1);
+  GetMem(_Passwd, Length(Passwd)+1);
+  GetMem(_Acct, Length(Acct)+1);
+  GetMem(_QuoteStr, Length(QuoteStr)+1);
+  StrPCopy(_Host, Host);
+  StrPCopy(_UserId, UserId);
+  StrPCopy(_Passwd, Passwd);
+  StrPCopy(_Acct, Acct);
+  StrPCopy(_QuoteStr, QuoteStr);
+  FtpQuote:=FtpQuote(_Host, _UserId, _Passwd, _Acct, _QuoteStr);
+  FreeMem(_Host, Length(Host)+1);
+  FreeMem(_UserId, Length(UserId)+1);
+  FreeMem(_Passwd, Length(Passwd)+1);
+  FreeMem(_Acct, Length(Acct)+1);
+  FreeMem(_QuoteStr, Length(QuoteStr)+1);
+End;
+
+Function FtpQuote(QuoteStr: String): Integer;
+Begin
+  FtpQuote:=FtpQuote(ShortHost, ShortUserId, ShortPasswd, ShortAcct, QuoteStr);
+End;
+
+Function FtpRename(Host, UserId, Passwd, Acct, NameFrom, NameTo: PChar): Integer; cdecl;
+    external FTPAPIDLL index 15;
+
+Function FtpRename(Host, UserId, Passwd, Acct, NameFrom, NameTo: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _NameFrom, _NameTo: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, Host);
+  StrPCopy(@_UserId, UserId);
+  StrPCopy(@_Passwd, Passwd);
+  StrPCopy(@_Acct, Acct);
+  StrPCopy(@_NameTo, NameTo);
+  StrPCopy(@_NameFrom, NameFrom);
+  FtpRename:=FtpRename(@_Host, @_UserId, @_Passwd, @_Acct, @_NameFrom, @_NameTo);
+End;
+
+Function FtpRename(NameFrom, NameTo: PChar): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  FtpRename:=FtpRename(@_Host, @_UserId, @_Passwd, @_Acct, NameFrom, NameTo);
+End;
+
+Function FtpRename(NameFrom, NameTo: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _NameFrom, _NameTo: Array[0..255] of Char;
+Begin
+  StrPCopy(@_Host, ShortHost);
+  StrPCopy(@_UserId, ShortUserId);
+  StrPCopy(@_Passwd, ShortPasswd);
+  StrPCopy(@_Acct, ShortAcct);
+  StrPCopy(@_NameTo, NameTo);
+  StrPCopy(@_NameFrom, NameFrom);
+  FtpRename:=FtpRename(@_Host, @_UserId, @_Passwd, @_Acct, @_NameFrom, @_NameTo);
+End;
+
+Function FtpRmd(Host, UserId, Passwd, Acct, Dir: PChar): Integer; cdecl;
+    external FTPAPIDLL index 16;
+
+Function FtpRmD(Host, Userid, Passwd, Acct, Dir: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Dir: PChar;
+Begin
+  GetMem(_Host, Length(Host)+1);
+  GetMem(_UserId, Length(UserId)+1);
+  GetMem(_Passwd, Length(Passwd)+1);
+  GetMem(_Acct, Length(Acct)+1);
+  GetMem(_Dir, Length(Dir)+1);
+  StrPCopy(_Host, Host);
+  StrPCopy(_UserId, UserId);
+  StrPCopy(_Passwd, Passwd);
+  StrPCopy(_Acct, Acct);
+  StrPCopy(_Dir, Dir);
+  FtpRmD:=FtpRmD(_Host, _Userid, _Passwd, _Acct, _Dir);
+  FreeMem(_Host, Length(Host)+1);
+  FreeMem(_UserId, Length(UserId)+1);
+  FreeMem(_Passwd, Length(Passwd)+1);
+  FreeMem(_Acct, Length(Acct)+1);
+  FreeMem(_Dir, Length(Dir)+1);
+End;
+
+Function FtpRmD(Dir: String): Integer;
+Begin
+  FtpRmD:=FtpRmD(ShortHost, ShortUserId, ShortPasswd, ShortAcct, Dir);
+End;
+
+Function FtpSite(Host, UserId, Passwd, Acct, SiteStr: PChar): Integer; cdecl;
+    external FTPAPIDLL index 17;
+
+Function FtpSite(Host, UserId, Passwd, Acct, SiteStr: String): Integer;
+Var
+  _Host, _UserId, _Passwd, _Acct, _SiteStr: PChar;
+Begin
+  GetMem(_Host, Length(Host)+1);
+  GetMem(_UserId, Length(UserId)+1);
+  GetMem(_Passwd, Length(Passwd)+1);
+  GetMem(_Acct, Length(Acct)+1);
+  GetMem(_SiteStr, Length(SiteStr)+1);
+  StrPCopy(_Host, Host);
+  StrPCopy(_UserId, UserId);
+  StrPCopy(_Passwd, Passwd);
+  StrPCopy(_Acct, Acct);
+  StrPCopy(_SiteStr, SiteStr);
+  FtpSite:=FtpSite(_Host, _Userid, _Passwd, _Acct, _SiteStr);
+  FreeMem(_Host, Length(Host)+1);
+  FreeMem(_UserId, Length(UserId)+1);
+  FreeMem(_Passwd, Length(Passwd)+1);
+  FreeMem(_Acct, Length(Acct)+1);
+  FreeMem(_SiteStr, Length(SiteStr)+1);
+End;
+
+Function FtpSite(SiteStr: String): Integer;
+Begin
+  FtpSite:=FtpSite(ShortHost, ShortUserid, ShortPasswd, ShortAcct, SiteStr);
+End;
+
+Function FtpSys(Host, UserId, Passwd, Acct, Buf: PChar; BufLen: Integer): Integer; cdecl;
+    external FTPAPIDLL index 18;
+
+Function FtpSys(Host, UserId, Passwd, Acct: String; var Buf: String): Integer;
+var
+  _Buf: Array[0..255] of char;
+Begin
+  Host:=Host+#0;
+  UserId:=UserId+#0;
+  Passwd:=Passwd+#0;
+  Acct:=Acct+#0;
+  FtpSys:=FtpSys(@Host[1], @UserId[1], @Passwd[1], @Acct[1], @_Buf, SizeOf(Buf));
+  Buf:=StrPas(@_Buf);
+End;
+
+Function FtpSys(var Buf: String): Integer;
+Begin
+  FtpSys:=FtpSys(ShortHost, ShortUserId, ShortPasswd, ShortAcct, Buf);
+End;
+
+Function Ping(Addr: Longint; Len: Integer): Integer; cdecl;
+    external FTPAPIDLL index 19;
+
+Function Ftp_ErrNo: Integer; cdecl;
+    external FTPAPIDLL index 21;
+
+Function FtpVer(var Buf; BufLen: Integer): Integer; cdecl;
+    external FTPAPIDLL index 23;
+
+Function FtpVer(var Buf: String): Integer;
+var
+  T:array[0..255] of char;
+begin
+  FtpVer:=FtpVer(T, SizeOf(T));
+  Buf:=StrPas(T);
+end;
+
+Function FtpTrcOn(FileSpec: PChar; Mode: Integer): Integer; cdecl;
+    external FTPAPIDLL index 24;
+
+Function FtpTrcOn(FileSpec: String; Mode: Integer): Integer; cdecl;
+Begin
+  FileSpec:=FileSpec+#0;
+  FtpTrcOn:=FtpTrcOn(@FileSpec[1], Mode);
+End;
+
+Function FtpTrcOff: Integer; cdecl;
+    external FTPAPIDLL index 25;
+
+Function Keep_File_Date(LocalFile, RemoteFile: PChar): Boolean; cdecl;
+    external FTPAPIDLL index 30;
+
+Function Keep_File_Date(LocalFile, RemoteFile: String): Boolean;
+Begin
+  LocalFile:=LocalFile+#0;
+  RemoteFile:=RemoteFile+#0;
+  Keep_File_Date:=Keep_File_Date(@LocalFile[1], @RemoteFile[1]);
+End;
+
+Function FtpReStart(Host, UserId, Passwd, Acct, Local, Remote, Mode: PChar; TransferType, Rest: Integer): Longint; cdecl;
+    external FTPAPIDLL index 31;
+
+Function FtpReStart(Host, UserId, Passwd, Acct, Local, Remote, Mode: String; TransferType, Rest: Integer): Longint;
+Var
+  _Host, _UserId, _Passwd, _Acct, _Local, _Remote, _Mode: PChar;
+Begin
+  GetMem(_Host, Length(Host)+1);
+  GetMem(_UserId, Length(UserId)+1);
+  GetMem(_Passwd, Length(Passwd)+1);
+  GetMem(_Acct, Length(Acct)+1);
+  GetMem(_Local, Length(Local)+1);
+  GetMem(_Remote, Length(Remote)+1);
+  GetMem(_Mode, Length(Mode)+1);
+  StrPCopy(_Host, Host);
+  StrPCopy(_UserId, UserId);
+  StrPCopy(_Passwd, Passwd);
+  StrPCopy(_Acct, Acct);
+  StrPCopy(_Local, Local);
+  StrPCopy(_Remote, Remote);
+  StrPCopy(_Mode, Mode);
+  FtpReStart:=FtpReStart(_Host, _UserId, _Passwd, _Acct, _Local, _Remote, _Mode, TransferType, Rest);
+  FreeMem(_Host, Length(Host)+1);
+  FreeMem(_UserId, Length(UserId)+1);
+  FreeMem(_Passwd, Length(Passwd)+1);
+  FreeMem(_Acct, Length(Acct)+1);
+  FreeMem(_Local, Length(Local)+1);
+  FreeMem(_Remote, Length(Remote)+1);
+  FreeMem(_Mode, Length(Mode)+1);
+End;
+
+Function FtpReStart(Local, Remote, Mode: String; TransferType, Rest: Integer): Longint;
+Begin
+  FtpReStart:=FtpReStart(ShortHost, ShortUserId, ShortPasswd, ShortAcct, Local, Remote, Mode, TransferType, Rest);
+End;
+
+Function FtpReStart(Local, Remote, Mode: String; Rest: Integer): Longint;
+Begin
+  FtpReStart:=FtpReStart(ShortHost, ShortUserId, ShortPasswd, ShortAcct, Local, Remote, Mode, ShortTransferType, Rest);
+End;
+
+Function FtpRemSize(Host, UserId, Passwd, Acct, Local, Remote, Mode: Pchar; TransferType: Integer): Longint; cdecl;
+    external FTPAPIDLL index 32;
+
+Function FtpRemSize(Host, UserId, Passwd, Acct, Local, Remote, Mode: String; TransferType: Integer): Longint;
+Begin
+  Host:=Host+#0;
+  UserId:=UserId+#0;
+  Passwd:=Passwd+#0;
+  Acct:=Acct+#0;
+  Local:=Local+#0;
+  Remote:=Remote+#0;
+  Mode:=Mode+#0;
+  FtpRemSize:=FtpRemSize(@Host[1], @UserId[1], @Passwd[1], @Acct[1], @Local[1], @Remote[1], @Mode[1], TransferType);
+End;
+
+Function FtpRemSize(Local, Remote, Mode: String; TransferType: Integer): Longint;
+Begin
+  FtpRemSize:=FtpRemSize(ShortHost, ShortUserId, ShortPasswd, ShortAcct, Local, Remote, Mode, TransferType);
+End;
+
+Function FtpRemSize(Local, Remote, Mode: String): Longint;
+Begin
+  FtpRemSize:=FtpRemSize(Local, Remote, Mode, ShortTransferType);
+End;
+
+Function FtpSetUser(Host, UserId, Passwd, Acct: String): Integer;
+Begin
+  ShortHost:=Host;
+  ShortUserId:=UserId;
+  ShortPasswd:=Passwd;
+  ShortAcct:=Acct;
+  FtpSetUser:=0;
+  If (Host='') or (UserId='') then FtpSetUser:=-1;
+End;
+
+Function FtpSetBinary(TransferType: Integer): Integer;
+Begin
+  ShortTransferType:=TransferType;
+  FtpSetBinary:=0;
+End;
+
+(* Undocumented functions follow
+Function FtpXLate(Dig: Longint; St:PChar): Longint; cdecl;
+                                                   external FTPAPIDLL index 22;
+Procedure FtpXferWnd(var _hwnd: HWND); cdecl; external FTPAPIDLL index 26;
+Procedure FtpSetConvertMode(var code: integer); cdecl;
+                                                   external FTPAPIDLL index 27;
+Procedure FtpSetEncodeMode(var code: integer); cdecl;
+                                                   external FTPAPIDLL index 28;
+Procedure FtpSetDecodeMode(var code: integer); cdecl;
+                                                   external FTPAPIDLL index 29;
+
+Absolutely no information about following functions:
+
+Function FtpErrNo: integer; cdecl; external FTPAPIDLL index 20; // seems to be a copy of ftp_errno
+//³ 00033 ³ FTPQUOTEREPLY     // Seems to be direct command send (reply to ftpquote)
+//³ 00034 ³ FtpSetActiveMode
+
+*)
+
+End.
+
+{
+  $Log$
+  Revision 1.1  2002-10-21 21:43:08  hajny
+    + ftpapi interface unit added
+
+
+}

+ 93 - 0
packages/extra/os2units/ftpapi/ftptest.pas

@@ -0,0 +1,93 @@
+program FTPTest;
+
+uses
+ FTPApi;
+
+const
+ TstName1 = 'FTPTEST1';
+ TstName2 = 'FTPTEST2';
+{$IFDEF USECON}
+ ListName = 'CON';
+     (* Using output file name 'CON' here causes output directly to console. *)
+{$ELSE USECON}
+ ListName = 'FTP.LST';
+{$ENDIF USECON}
+ TstText = 'This is a sample test file for FTPTest'#13#10'check it for yourself.';
+
+var
+ Hst, Usr, Pwd: string;
+ T: text;
+ L: longint;
+ S: string;
+
+begin
+ if ParamCount < 1 then
+ begin
+  WriteLn ('Syntax: FTPTest <host_name> [<user_name> [<password>]] ' + LineEnding + LineEnding +
+           '        User "anonymous" is used if no user name is supplied on command line,' + LineEnding +
+           '        password is being asked for if omitted');
+  Halt (1);
+ end;
+ WriteLn;
+ Hst := ParamStr (1);
+ if ParamCount > 1 then
+ begin
+  Usr := ParamStr (2);
+  if ParamCount > 2 then Pwd := ParamStr (3) else
+  begin
+   Write ('Password for user "' + Usr + '" (it _will_ be displayed on screen!): ');
+   ReadLn (Pwd);
+  end;
+ end else
+ begin
+  Usr := 'anonymous';
+  Pwd := '[email protected]';
+ end;
+ Write ('Preparing test file ' + TstName1 + '... ');
+ Assign (T, TstName1);
+ Rewrite (T);
+ WriteLn (T, TstText);
+ Close (T);
+ WriteLn ('done');
+ FtpVer (S);
+ WriteLn ('FTPAPI.DLL was compiled ', S);
+ FtpSetUser (Hst, Usr, Pwd, '');
+ WriteLn ('Finding out the current directory on "', Hst, '"...');
+ L := FtpPwd (S);
+ if L = 0 then WriteLn (S);
+ WriteLn ('RC = ', L);
+ Write ('The remote system is ');
+ L := FtpSys (S);
+ if L = 0 then WriteLn (S);
+ WriteLn ('RC = ', L);
+ WriteLn ('Switching to binary');
+ FtpSetBinary (T_BINARY);
+ Write ('Uploading "' + TstName1 + '" to "' + Hst + '" as "' + TstName2 + '"... ');
+ WriteLn ('RC = ', FtpPut (TstName1, TstName2));
+ WriteLn ('Getting dir listing from "' + Hst + '" to "' + ListName + '"... ');
+ L := FtpDir (ListName, '');
+{$IFNDEF USECON}
+ if L = 0 then
+ begin
+  Assign (T, ListName);
+  Reset (T);
+  while not (Eof (T)) do
+  begin
+   ReadLn (T, S);
+   WriteLn (S);
+  end;
+  Close (T);
+ end;
+{$ENDIF USECON}
+ WriteLn ('RC = ', L);
+ Write ('Downloading "' + TstName2 + '"... ');
+ WriteLn ('RC = ', FtpGet (TstName2, TstName2));
+ Write ('Setting time of the downloaded file to that one on server... ');
+ WriteLn ('Result = ', Keep_File_Date (TstName2, TstName2));
+ Write ('Removing "', TstName2, '" again from "', Hst, '"... ');
+ WriteLn ('RC = ', FtpDelete (TstName2));
+ Write ('Closing all connections... ');
+ FtpLogoff;
+ WriteLn ('done.');
+ WriteLn (LineEnding + 'Finished.');
+end.