Prechádzať zdrojové kódy

make netware rtl compilable under 1.9.5

armin 21 rokov pred
rodič
commit
8d1c71a835

+ 173 - 83
rtl/netware/Makefile

@@ -1,15 +1,25 @@
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/07/07]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/07/22]
 #
 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))
+MAKEFILETARGETS=netware
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) sunos qnx
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
 ifeq ($(findstring ;,$(PATH)),)
 inUnix=1
 SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
 else
 SEARCHPATH:=$(subst ;, ,$(PATH))
 endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
 PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
 ifeq ($(PWD),)
 PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
@@ -36,22 +46,13 @@ 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
+SRCBATCHEXT=.sh
 else
 ifdef inOS2
-BATCHEXT=.cmd
+SRCBATCHEXT=.cmd
 else
-BATCHEXT=.bat
+SRCBATCHEXT=.bat
 endif
 endif
 ifdef inUnix
@@ -155,6 +156,12 @@ ifeq ($(findstring $(OS_TARGET),$(MAKEFILETARGETS)),)
 $(error The Makefile doesn't support target $(OS_TARGET), please run fpcmake first)
 endif
 endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
 export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE CROSSCOMPILE
 ifdef FPCDIR
 override FPCDIR:=$(subst \,/,$(FPCDIR))
@@ -184,11 +191,14 @@ override FPCDIR:=$(FPCDIR)/..
 ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
 override FPCDIR:=$(FPCDIR)/..
 ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
 override FPCDIR=c:/pp
 endif
 endif
 endif
 endif
+endif
 ifndef CROSSDIR
 CROSSDIR:=$(FPCDIR)/cross/$(FULL_TARGET)
 endif
@@ -218,9 +228,9 @@ override FPCOPT+=-Ur
 override FPCOPT+=-dMT
 CREATESMART=0
 OBJPASDIR=$(RTL)/objpas
-override TARGET_UNITS+=$(SYSTEMUNIT) systhrds objpas strings winsock dos crt objects matrix sysutils classes typinfo math cpu mmx getopts heaptrc lineinfo sockets aio varutils video mouse keyboard types nwsnut nwserv nwnit nwprot sysconst
+override TARGET_UNITS+=$(SYSTEMUNIT) systhrds objpas strings lineinfo winsock heaptrc matrix initc dos crt objects sysutils classes typinfo math varutils cpu mmx getopts   sockets video mouse keyboard types dateutils rtlconst sysconst strutils convutils aio nwsnut nwserv nwnit nwprot
 override TARGET_LOADERS+=nwpre prelude
-override TARGET_RSTS+=math typinfo varutils classes
+override TARGET_RSTS+=math varutils typinfo classes dateutils sysconst
 override INSTALL_FPCPACKAGE=y
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC)
@@ -232,42 +242,12 @@ 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
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=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
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
 endif
 endif
 ifndef INSTALL_PREFIX
@@ -276,7 +256,7 @@ INSTALL_PREFIX=$(PREFIX)
 endif
 endif
 ifndef INSTALL_PREFIX
-ifdef UNIXINSTALLDIR
+ifdef UNIXHier
 INSTALL_PREFIX=/usr/local
 else
 ifdef INSTALL_FPCPACKAGE
@@ -295,7 +275,7 @@ DIST_DESTDIR:=$(BASEDIR)
 endif
 export DIST_DESTDIR
 ifndef INSTALL_BASEDIR
-ifdef UNIXINSTALLDIR
+ifdef UNIXHier
 ifdef INSTALL_FPCPACKAGE
 INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
 else
@@ -306,10 +286,18 @@ INSTALL_BASEDIR:=$(INSTALL_PREFIX)
 endif
 endif
 ifndef INSTALL_BINDIR
-ifdef UNIXINSTALLDIR
+ifdef UNIXHier
+ifdef CROSSCOMPILE
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/bin
+else
 INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+endif
+else
+ifdef CROSSCOMPILE
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/bin
 else
 INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+endif
 ifdef INSTALL_FPCPACKAGE
 INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(OS_TARGET)
 endif
@@ -328,19 +316,23 @@ endif
 endif
 endif
 ifndef INSTALL_LIBDIR
-ifdef UNIXINSTALLDIR
+ifdef UNIXHier
 INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
 else
 INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
 endif
 endif
 ifndef INSTALL_SOURCEDIR
-ifdef UNIXINSTALLDIR
+ifdef UNIXHier
 ifdef BSDhier
 SRCPREFIXDIR=share/src
 else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
 SRCPREFIXDIR=src
 endif
+endif
 ifdef INSTALL_FPCPACKAGE
 ifdef INSTALL_FPCSUBDIR
 INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
@@ -363,12 +355,16 @@ endif
 endif
 endif
 ifndef INSTALL_DOCDIR
-ifdef UNIXINSTALLDIR
+ifdef UNIXHier
 ifdef BSDhier
 DOCPREFIXDIR=share/doc
 else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
 DOCPREFIXDIR=doc
 endif
+endif
 ifdef INSTALL_FPCPACKAGE
 INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
 else
@@ -383,20 +379,28 @@ endif
 endif
 endif
 ifndef INSTALL_EXAMPLEDIR
-ifdef UNIXINSTALLDIR
+ifdef UNIXHier
 ifdef INSTALL_FPCPACKAGE
 ifdef BSDhier
 INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
 else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
 INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
 endif
+endif
 else
 ifdef BSDhier
 INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
 else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
 INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
 endif
 endif
+endif
 else
 ifdef INSTALL_FPCPACKAGE
 INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
@@ -418,6 +422,7 @@ endif
 else
 CROSSBINDIR=
 endif
+BATCHEXT=.bat
 LOADEREXT=.as
 EXEEXT=.exe
 PPLEXT=.ppl
@@ -441,25 +446,37 @@ STATICLIBPREFIX=
 FPCMADE=fpcmade.dos
 ZIPSUFFIX=go32
 endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+FPCMADE=fpcmade.wat
+ZIPSUFFIX=watc
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+endif
 ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
 EXEEXT=
 HASSHAREDLIB=1
 FPCMADE=fpcmade.lnx
 ZIPSUFFIX=linux
 endif
 ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
 EXEEXT=
 HASSHAREDLIB=1
 FPCMADE=fpcmade.freebsd
 ZIPSUFFIX=freebsd
 endif
 ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
 EXEEXT=
 HASSHAREDLIB=1
 FPCMADE=fpcmade.netbsd
 ZIPSUFFIX=netbsd
 endif
 ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
 EXEEXT=
 HASSHAREDLIB=1
 FPCMADE=fpcmade.openbsd
@@ -471,6 +488,7 @@ FPCMADE=fpcmade.w32
 ZIPSUFFIX=w32
 endif
 ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
 AOUTEXT=.out
 STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
@@ -479,6 +497,7 @@ ZIPSUFFIX=os2
 ECHO=echo
 endif
 ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
 AOUTEXT=.out
 STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
@@ -491,21 +510,29 @@ EXEEXT=
 SHAREDLIBEXT=.library
 FPCMADE=fpcmade.amg
 endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+FPCMADE=fpcmade.mos
+endif
 ifeq ($(OS_TARGET),atari)
 EXEEXT=.ttp
 FPCMADE=fpcmade.ata
 endif
 ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
 EXEEXT=
 FPCMADE=fpcmade.be
 ZIPSUFFIX=be
 endif
 ifeq ($(OS_TARGET),sunos)
+BATCHEXT=.sh
 EXEEXT=
 FPCMADE=fpcmade.sun
 ZIPSUFFIX=sun
 endif
 ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
 EXEEXT=
 FPCMADE=fpcmade.qnx
 ZIPSUFFIX=qnx
@@ -517,10 +544,14 @@ FPCMADE=fpcmade.nw
 ZIPSUFFIX=nw
 endif
 ifeq ($(OS_TARGET),macos)
+BATCHEXT=
 EXEEXT=
-FPCMADE=fpcmade.mcc
+FPCMADE=fpcmade.macos
+ZIPSUFFIX=macos
+DEBUGSYMEXT=.xcoff
 endif
 ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
 EXEEXT=
 HASSHAREDLIB=1
 FPCMADE=fpcmade.darwin
@@ -543,25 +574,34 @@ STATICLIBPREFIX=
 FPCMADE=fpcmade.dos
 ZIPSUFFIX=go32
 endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+FPCMADE=fpcmade.dos
+ZIPSUFFIX=watcom
+endif
 ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
 EXEEXT=
 HASSHAREDLIB=1
 FPCMADE=fpcmade.lnx
 ZIPSUFFIX=linux
 endif
 ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
 EXEEXT=
 HASSHAREDLIB=1
 FPCMADE=fpcmade.freebsd
 ZIPSUFFIX=freebsd
 endif
 ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
 EXEEXT=
 HASSHAREDLIB=1
 FPCMADE=fpcmade.netbsd
 ZIPSUFFIX=netbsd
 endif
 ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
 EXEEXT=
 HASSHAREDLIB=1
 FPCMADE=fpcmade.openbsd
@@ -578,6 +618,7 @@ FPCMADE=fpcmade.w32
 ZIPSUFFIX=w32
 endif
 ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
 PPUEXT=.ppo
 ASMEXT=.so2
 OEXT=.oo2
@@ -610,6 +651,7 @@ EXEEXT=.ttp
 FPCMADE=fpcmade.ata
 endif
 ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
 PPUEXT=.ppu
 ASMEXT=.s
 OEXT=.o
@@ -620,6 +662,7 @@ FPCMADE=fpcmade.be
 ZIPSUFFIX=be
 endif
 ifeq ($(OS_TARGET),sunos)
+BATCHEXT=.sh
 PPUEXT=.ppu
 ASMEXT=.s
 OEXT=.o
@@ -630,6 +673,7 @@ FPCMADE=fpcmade.sun
 ZIPSUFFIX=sun
 endif
 ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
 PPUEXT=.ppu
 ASMEXT=.s
 OEXT=.o
@@ -652,13 +696,15 @@ ZIPSUFFIX=nw
 EXEEXT=.nlm
 endif
 ifeq ($(OS_TARGET),macos)
+BATCHEXT=
 PPUEXT=.ppu
 ASMEXT=.s
 OEXT=.o
 SMARTEXT=.sl
 STATICLIBEXT=.a
 EXEEXT=
-FPCMADE=fpcmade.mcc
+DEBUGSYMEXT=.xcoff
+FPCMADE=fpcmade.macos
 endif
 endif
 ifndef ECHO
@@ -666,7 +712,7 @@ ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(ECHO),)
 ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(ECHO),)
-ECHO=
+ECHO= __missing_command__
 else
 ECHO:=$(firstword $(ECHO))
 endif
@@ -680,7 +726,7 @@ DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(DATE),)
 DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(DATE),)
-DATE=
+DATE= __missing_command__
 else
 DATE:=$(firstword $(DATE))
 endif
@@ -694,7 +740,7 @@ GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(GINSTALL),)
 GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(GINSTALL),)
-GINSTALL=
+GINSTALL= __missing_command__
 else
 GINSTALL:=$(firstword $(GINSTALL))
 endif
@@ -706,7 +752,7 @@ export GINSTALL
 ifndef CPPROG
 CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(CPPROG),)
-CPPROG=
+CPPROG= __missing_command__
 else
 CPPROG:=$(firstword $(CPPROG))
 endif
@@ -715,7 +761,7 @@ export CPPROG
 ifndef RMPROG
 RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(RMPROG),)
-RMPROG=
+RMPROG= __missing_command__
 else
 RMPROG:=$(firstword $(RMPROG))
 endif
@@ -724,14 +770,18 @@ export RMPROG
 ifndef MVPROG
 MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(MVPROG),)
-MVPROG=
+MVPROG= __missing_command__
 else
 MVPROG:=$(firstword $(MVPROG))
 endif
 endif
 export MVPROG
 ifndef ECHOREDIR
-ECHOREDIR:=$(subst /,$(PATHSEP),$(ECHO))
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
 endif
 ifndef COPY
 COPY:=$(CPPROG) -fp
@@ -769,7 +819,7 @@ export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
 ifndef PPUMOVE
 PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(PPUMOVE),)
-PPUMOVE=
+PPUMOVE= __missing_command__
 else
 PPUMOVE:=$(firstword $(PPUMOVE))
 endif
@@ -778,7 +828,7 @@ export PPUMOVE
 ifndef FPCMAKE
 FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(FPCMAKE),)
-FPCMAKE=
+FPCMAKE= __missing_command__
 else
 FPCMAKE:=$(firstword $(FPCMAKE))
 endif
@@ -787,7 +837,7 @@ export FPCMAKE
 ifndef ZIPPROG
 ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(ZIPPROG),)
-ZIPPROG=
+ZIPPROG= __missing_command__
 else
 ZIPPROG:=$(firstword $(ZIPPROG))
 endif
@@ -796,21 +846,25 @@ export ZIPPROG
 ifndef TARPROG
 TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(TARPROG),)
-TARPROG=
+TARPROG= __missing_command__
 else
 TARPROG:=$(firstword $(TARPROG))
 endif
 endif
 export TARPROG
-ASNAME=as
-LDNAME=ld
-ARNAME=ar
-RCNAME=rc
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
 ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
 ASNAME=asw
 LDNAME=ldw
 ARNAME=arw
 endif
+endif
+endif
 ifndef ASPROG
 ifdef CROSSBINDIR
 ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
@@ -843,7 +897,7 @@ AS=$(ASPROG)
 LD=$(LDPROG)
 RC=$(RCPROG)
 AR=$(ARPROG)
-PPAS=ppas$(BATCHEXT)
+PPAS=ppas$(SRCBATCHEXT)
 ifdef inUnix
 LDCONFIG=ldconfig
 else
@@ -891,6 +945,14 @@ endif
 ifeq ($(OS_SOURCE),openbsd)
 override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
 endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX) -Xc
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
 ifdef UNITDIR
 override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
 endif
@@ -917,8 +979,12 @@ ifdef RELEASE
 ifeq ($(CPU_TARGET),i386)
 FPCCPUOPT:=-OG2p3
 else
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1
+else
 FPCCPUOPT:=
 endif
+endif
 override FPCOPT+=-Xs $(FPCCPUOPT) -n
 override FPCOPTDEF+=RELEASE
 endif
@@ -1000,7 +1066,7 @@ EXECPPAS:=@$(PPAS)
 endif
 endif
 .PHONY: fpc_loaders
-ifdef TARGET_LOADERS
+ifneq ($(TARGET_LOADERS),)
 override ALLTARGET+=fpc_loaders
 override CLEANTARGET+=fpc_loaders_clean
 override INSTALLTARGET+=fpc_loaders_install
@@ -1015,7 +1081,7 @@ fpc_loaders_install:
 	$(MKDIR) $(INSTALL_UNITDIR)
 	$(INSTALL) $(LOADEROFILES) $(INSTALL_UNITDIR)
 .PHONY: fpc_units
-ifdef TARGET_UNITS
+ifneq ($(TARGET_UNITS),)
 override ALLTARGET+=fpc_units
 override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))
 override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS))
@@ -1037,7 +1103,7 @@ fpc_debug:
 	$(MAKE) all DEBUG=1
 fpc_release:
 	$(MAKE) all RELEASE=1
-.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp .rc .res
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .dpr .pp .rc .res
 %$(PPUEXT): %.pp
 	$(COMPILER) $<
 	$(EXECPPAS)
@@ -1050,10 +1116,14 @@ fpc_release:
 %$(EXEEXT): %.pas
 	$(COMPILER) $<
 	$(EXECPPAS)
+%$(EXEEXT): %.dpr
+	$(COMPILER) $<
+	$(EXECPPAS)
 %.res: %.rc
 	windres -i $< -o $@
 vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
 vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
 vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
 .PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
 ifdef INSTALL_UNITS
@@ -1130,6 +1200,9 @@ override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
 endif
 ifdef CLEANPPUFILES
 override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES)) 
+endif
 override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
 override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
 endif
@@ -1153,6 +1226,7 @@ ifdef LIB_NAME
 	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
 endif
 	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
 fpc_distclean: clean
 ifdef COMPILER_UNITTARGETDIR
 TARGETDIRCLEAN=fpc_clean
@@ -1164,9 +1238,13 @@ endif
 	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
 	-$(DELTREE) *$(SMARTEXT)
 	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT)
 ifdef AOUTEXT
 	-$(DEL) *$(AOUTEXT)
 endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
 .PHONY: fpc_baseinfo
 override INFORULES+=fpc_baseinfo
 fpc_baseinfo:
@@ -1309,11 +1387,13 @@ objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
 strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\
 		   $(PROCINC)/strings.inc $(PROCINC)/stringss.inc\
 		   $(SYSTEMUNIT)$(PPUEXT)
+systhrds$(PPUEXT): systhrds.pp $(INC)/threadh.inc $(SYSTEMUNIT)$(PPUEXT) objpas$(PPUEXT)
 netware$(PPUEXT) : netware.pp $(SYSTEMUNIT)$(PPUEXT)
 	$(COMPILER) -I$(WININC) netware.pp
 winsock2$(PPUEXT) : winsock2.pp qos.inc netware$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
 sockets$(PPUEXT) : sockets.pp netware$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
 		   $(INC)/sockets.inc $(INC)/socketsh.inc
+initc$(PPUEXT) : initc.pp $(SYSTEMUNIT)$(PPUEXT)
 dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
 crt$(PPUEXT) : crt.pp $(INC)/textrec.inc $(SYSTEMUNIT)$(PPUEXT) objpas$(PPUEXT) dos$(PPUEXT)
 objects$(PPUEXT) : $(INC)/objects.pp $(SYSTEMUNIT)$(PPUEXT)
@@ -1321,7 +1401,7 @@ sysutils$(PPUEXT) : sysutils.pp $(wildcard $(OBJPASDIR)/sysutils/*.inc) \
 		    objpas$(PPUEXT) dos$(PPUEXT) nwsys.inc sysconst$(PPUEXT)
 	$(COMPILER) -Fi$(OBJPASDIR)/sysutils sysutils.pp
 classes$(PPUEXT) : classes.pp $(wildcard $(OBJPASDIR)/classes/*.inc) \
-		   sysutils$(PPUEXT) typinfo$(PPUEXT)
+		   sysutils$(PPUEXT) typinfo$(PPUEXT) rtlconst$(PPUEXT) sysconst$(PPUEXT)
 	$(COMPILER) -Fi$(OBJPASDIR)/classes classes.pp
 typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT)
 	$(COMPILER) -Sg $(OBJPASDIR)/typinfo.pp
@@ -1329,11 +1409,21 @@ math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT)
 	$(COMPILER) $(OBJPASDIR)/math.pp
 gettext$(PPUEXT): $(OBJPASDIR)/gettext.pp objpas$(PPUEXT) sysutils$(PPUEXT)
 	$(COMPILER) $(OBJPASDIR)/gettext.pp
-varutils$(PPUEXT) : $(OBJPASDIR)/cvarutil.inc $(OBJPASDIR)/varutils.inc \
-		    $(OBJPASDIR)/varutilh.inc varutils.pp
-	$(COMPILER) -I$(OBJPASDIR) $(UNIXINC)/varutils.pp
+varutils$(PPUEXT) : varutils.pp $(OBJPASDIR)/cvarutil.inc \
+		    objpas$(PPUEXT) $(OBJPASDIR)/varutilh.inc
+	$(COMPILER) -I$(OBJPASDIR) varutils.pp
 types$(PPUEXT) : $(OBJPASDIR/types.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
 	$(COMPILER) $(OBJPASDIR)/types.pp
+rtlconst$(PPUEXT) : $(OBJPASDIR)/rtlconst.pp
+	$(COMPILER) $(OBJPASDIR)/rtlconst.pp
+sysconst$(PPUEXT) : $(OBJPASDIR)/sysconst.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
+	$(COMPILER) $(OBJPASDIR)/sysconst.pp
+dateutils$(PPUEXT) : $(OBJPASDIR)/dateutils.pp
+	$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/dateutils.pp
+convutils$(PPUEXT) : $(OBJPASDIR)/convutils.pp
+	$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/convutils.pp
+strutils$(PPUEXT) : $(OBJPASDIR)/strutils.pp
+	$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/strutils.pp
 cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMUNIT)$(PPUEXT)
 mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
 getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)

+ 33 - 12
rtl/netware/Makefile.fpc

@@ -8,14 +8,15 @@ main=rtl
 [target]
 loaders=nwpre prelude
 units=$(SYSTEMUNIT) systhrds objpas strings \
-      winsock \
-      dos crt objects matrix \
-      sysutils classes typinfo math \
-      cpu mmx getopts heaptrc lineinfo \
-      sockets aio varutils \
-      video mouse keyboard types \
-      nwsnut nwserv nwnit nwprot sysconst
-rsts=math typinfo varutils classes
+      lineinfo winsock heaptrc matrix initc \
+      dos crt objects \
+      sysutils classes typinfo math varutils \
+      cpu mmx getopts   \
+      sockets \
+      video mouse keyboard types dateutils rtlconst sysconst \
+      strutils convutils \
+      aio nwsnut nwserv nwnit nwprot
+rsts=math varutils typinfo classes dateutils sysconst
 
 [require]
 nortl=y
@@ -111,6 +112,7 @@ objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
 strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\
                    $(PROCINC)/strings.inc $(PROCINC)/stringss.inc\
                    $(SYSTEMUNIT)$(PPUEXT)
+systhrds$(PPUEXT): systhrds.pp $(INC)/threadh.inc $(SYSTEMUNIT)$(PPUEXT) objpas$(PPUEXT)
 
 #
 # System Dependent Units
@@ -127,6 +129,9 @@ sockets$(PPUEXT) : sockets.pp netware$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
 
 #dynlibs$(PPUEXT) : $(INC)/dynlibs.pp windows$(PPUEXT)
 
+initc$(PPUEXT) : initc.pp $(SYSTEMUNIT)$(PPUEXT)
+
+
 #
 # TP7 Compatible RTL Units
 #
@@ -146,7 +151,7 @@ sysutils$(PPUEXT) : sysutils.pp $(wildcard $(OBJPASDIR)/sysutils/*.inc) \
         $(COMPILER) -Fi$(OBJPASDIR)/sysutils sysutils.pp
 
 classes$(PPUEXT) : classes.pp $(wildcard $(OBJPASDIR)/classes/*.inc) \
-                   sysutils$(PPUEXT) typinfo$(PPUEXT)
+                   sysutils$(PPUEXT) typinfo$(PPUEXT) rtlconst$(PPUEXT) sysconst$(PPUEXT)
         $(COMPILER) -Fi$(OBJPASDIR)/classes classes.pp
 
 typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT)
@@ -158,13 +163,29 @@ math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT)
 gettext$(PPUEXT): $(OBJPASDIR)/gettext.pp objpas$(PPUEXT) sysutils$(PPUEXT)
         $(COMPILER) $(OBJPASDIR)/gettext.pp
 
-varutils$(PPUEXT) : $(OBJPASDIR)/cvarutil.inc $(OBJPASDIR)/varutils.inc \
-                    $(OBJPASDIR)/varutilh.inc varutils.pp
-        $(COMPILER) -I$(OBJPASDIR) $(UNIXINC)/varutils.pp
+varutils$(PPUEXT) : varutils.pp $(OBJPASDIR)/cvarutil.inc \
+                    objpas$(PPUEXT) $(OBJPASDIR)/varutilh.inc
+        $(COMPILER) -I$(OBJPASDIR) varutils.pp
 
 types$(PPUEXT) : $(OBJPASDIR/types.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
         $(COMPILER) $(OBJPASDIR)/types.pp
 
+rtlconst$(PPUEXT) : $(OBJPASDIR)/rtlconst.pp
+        $(COMPILER) $(OBJPASDIR)/rtlconst.pp
+
+sysconst$(PPUEXT) : $(OBJPASDIR)/sysconst.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
+        $(COMPILER) $(OBJPASDIR)/sysconst.pp
+
+dateutils$(PPUEXT) : $(OBJPASDIR)/dateutils.pp
+        $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/dateutils.pp
+
+convutils$(PPUEXT) : $(OBJPASDIR)/convutils.pp
+        $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/convutils.pp
+
+strutils$(PPUEXT) : $(OBJPASDIR)/strutils.pp
+        $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/strutils.pp
+
+
 #
 # Other system-independent RTL Units
 #

+ 377 - 36
rtl/netware/sockets.pp

@@ -17,9 +17,25 @@ unit Sockets;
 
 Interface
 
+{$macro on}
+{$define maybelibc:=}
+
+
   Uses
      winsock;
 
+Type
+  cushort=word;
+  cuint16=word;
+  cuint32=cardinal;
+  size_t =cuint32;
+  ssize_t=cuint16;
+  cint   =longint;
+  pcint  =^cint;
+  tsocklen=cint;
+  psocklen=^tsocklen;
+
+
   Const
      AF_MAX          = WinSock.AF_MAX;
      PF_MAX          = AF_MAX;
@@ -35,87 +51,78 @@ Implementation
 {******************************************************************************
                           Basic Socket Functions
 ******************************************************************************}
-
-Function socket(Domain,SocketType,Protocol:Longint):Longint;
+(***
+Function fpsocket(Domain,SocketType,Protocol:Longint):Longint;
 begin
-  Socket:=WinSock.Socket(Domain,SocketType,ProtoCol);
-  if Socket<0 then
-    SocketError:=WSAGetLastError
+  fpSocket:=WinSock.Socket(Domain,SocketType,ProtoCol);
+  if fpSocket<0 then
+    fpSocketError:=WSAGetLastError
   else
-    SocketError:=0;
+    fpSocketError:=0;
 end;
 
-Function CloseSocket(Sock:Longint):Longint;
+Function fpCloseSocket(s:cint):Longint;
 var i : longint;
 begin
-  i := Winsock.CloseSocket (Sock);
+  i := Winsock.CloseSocket (s);
   if i <> 0 then
   begin
     SocketError:=WSAGetLastError;
-    CloseSocket := i;
+    fpCloseSocket := i;
   end else
   begin
-    CloseSocket := 0;
+    fpCloseSocket := 0;
     SocketError := 0;
   end;
 end;
 
-Function Send(Sock:Longint;const Buf;BufLen,Flags:Longint):Longint;
+Function fpSend(s:cint;const Buf;BufLen,Flags:Longint):Longint;
 begin
-  Send:=WinSock.Send(Sock,Buf,BufLen,Flags);
-  if Send<0 then
+  fpSend:=WinSock.Send(s,Buf,BufLen,Flags);
+  if fpSend<0 then
     SocketError:=WSAGetLastError
   else
     SocketError:=0;
 end;
 
-Function SendTo(Sock:Longint;Const Buf;BufLen,Flags:Longint;Var Addr; AddrLen : Longint):Longint;
+Function fpSendTo(s:cint;Const Buf;BufLen,Flags:Longint;Var Addr; AddrLen : Longint):Longint;
 begin
   // Dubious construct, this should be checked.
-  SendTo:=WinSock.SendTo(Sock,Buf,BufLen,Flags,Winsock.TSockAddr(Addr),AddrLen);
-  if SendTo<0 then
+  fpSendTo:=WinSock.SendTo(s,Buf,BufLen,Flags,Winsock.TSockAddr(Addr),AddrLen);
+  if fpSendTo<0 then
     SocketError:=WSAGetLastError
   else
     SocketError:=0;
 end;
 
-Function Recv(Sock:Longint;Var Buf;BufLen,Flags:Longint):Longint;
+Function fpRecv(S:cint;Var Buf;BufLen,Flags:Longint):Longint;
 begin
-  Recv:=WinSock.Recv(Sock,Buf,BufLen,Flags);
-  if Recv<0 then
+  fpRecv:=WinSock.Recv(Sock,Buf,BufLen,Flags);
+  if fpRecv<0 then
     SocketError:=WSAGetLastError
   else
     SocketError:=0;
 end;
 
 
-Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Addr; AddrLen : Integer) : longint;
-
+Function fpRecvFrom(s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
 begin
-  RecvFrom:=WinSock.RecvFrom(Sock,Buf,BufLen,Flags,Winsock.TSockAddr(Addr),AddrLen);
-  if RecvFrom<0 then
+  fpRecvFrom:=WinSock.RecvFrom(s,Buf,len,flags,Winsock.TSockAddr(from^),FromLen^);
+  if fpRecvFrom<0 then
     SocketError:=WSAGetLastError
   else
     SocketError:=0;
 end;
 
-Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
 
-  var
-     l : longint;
+function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
 
 begin
-  l:=WinSock.Bind(Sock,WinSock.PSockAddr(@Addr),AddrLen);
-  if l<0 then
-    begin
-       SocketError:=WSAGetLastError;
-       Bind:=false;
-    end
+  fpbind:=WinSock.Bind(S,WinSock.PSockAddr(Addrx),AddrLen);
+  if fpbind<0 then
+       SocketError:=WSAGetLastError
   else
-    begin
        SocketError:=0;
-       Bind:=true;
-    end;
 end;
 
 Function Listen(Sock,MaxConnect:Longint):Boolean;
@@ -248,6 +255,337 @@ function fdRead(handle : longint;var bufptr;size : dword) : dword;
   end;
 
 
+{$i sockets.inc}
+
+{ winsocket stack needs an init. and cleanup code }
+var
+  wsadata : twsadata;
+
+initialization
+  WSAStartUp($2,wsadata);
+finalization
+  WSACleanUp;
+end.
+***)
+
+function fpsocket 	(domain:cint; xtype:cint; protocol: cint):cint;
+begin
+  fpSocket:=WinSock.Socket(Domain,xtype,ProtoCol);
+  if fpSocket<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+function fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t;
+begin
+  fpSend:=WinSock.Send(S,msg,len,flags);
+  if fpSend<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+function fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t;
+begin
+  // Dubious construct, this should be checked. (IPV6 fails ?)
+  fpSendTo:=WinSock.SendTo(S,msg,Len,Flags,Winsock.TSockAddr(tox^),toLen);
+  if fpSendTo<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+function fprecv 	(s:cint; buf: pointer; len: size_t; flags: cint):ssize_t; 
+begin
+  fpRecv:=WinSock.Recv(S,Buf,Len,Flags);
+  if fpRecv<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+function fprecvfrom    (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t; 
+
+begin
+  fpRecvFrom:=WinSock.RecvFrom(S,Buf,Len,Flags,Winsock.TSockAddr(from^),FromLen^);
+  if fpRecvFrom<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+function fpconnect     (s:cint; name  : psockaddr; namelen : tsocklen):cint;
+
+begin
+  fpConnect:=WinSock.Connect(S,WinSock.TSockAddr(name^),nameLen);
+  if fpConnect<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+function fpshutdown 	(s:cint; how:cint):cint; 
+begin
+  fpShutDown:=WinSock.ShutDown(S,How);
+  if fpShutDown<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+Function socket(Domain,SocketType,Protocol:Longint):Longint;
+begin
+  socket:=fpsocket(Domain,sockettype,protocol);
+end;
+
+Function Send(Sock:Longint;Const Buf;BufLen,Flags:Longint):Longint;
+
+begin
+  send:=fpsend(sock,@buf,buflen,flags);
+end;
+
+Function SendTo(Sock:Longint;Const Buf;BufLen,Flags:Longint;Var Addr; AddrLen : Longint):Longint;
+
+begin
+  sendto:=fpsendto(sock,@buf,buflen,flags,@addr,addrlen);
+end;
+
+Function Recv(Sock:Longint;Var Buf;BufLen,Flags:Longint):Longint;
+begin
+  Recv:=fpRecv(Sock,@Buf,BufLen,Flags);
+end;
+
+Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Addr; var AddrLen : longint) : longint;
+begin
+  RecvFrom:=fpRecvFrom(Sock,@Buf,BufLen,Flags,@Addr,@AddrLen);
+end;
+
+function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
+
+begin
+  fpbind:=WinSock.Bind(S,WinSock.PSockAddr(Addrx),AddrLen);
+  if fpbind<0 then
+       SocketError:=WSAGetLastError
+  else
+       SocketError:=0;
+end;
+
+function fplisten      (s:cint; backlog : cint):cint;
+
+begin
+  fplisten:=WinSock.Listen(S,backlog);
+  if fplisten<0 then
+       SocketError:=WSAGetLastError
+  else
+       SocketError:=0;
+end;
+
+function fpaccept      (s:cint; addrx : psockaddr; addrlen : psocklen):cint; 
+begin
+  fpAccept:=WinSock.Accept(S,WinSock.PSockAddr(Addrx),plongint(@AddrLen));
+  if fpAccept<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+function fpgetsockname (s:cint; name  : psockaddr; namelen : psocklen):cint; 
+
+begin
+  fpGetSockName:=WinSock.GetSockName(S,WinSock.TSockAddr(name^),nameLen^);
+  if fpGetSockName<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+function fpgetpeername (s:cint; name  : psockaddr; namelen : psocklen):cint; 
+begin
+  fpGetPeerName:=WinSock.GetPeerName(S,WinSock.TSockAddr(name^),NameLen^);
+  if fpGetPeerName<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+function fpgetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint; 
+begin
+  fpGetSockOpt:=WinSock.GetSockOpt(S,Level,OptName,OptVal,OptLen^);
+  if fpGetSockOpt<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+function fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen :tsocklen):cint; 
+
+begin
+  fpSetSockOpt:=WinSock.SetSockOpt(S,Level,OptName,OptVal,OptLen);
+  if fpSetSockOpt<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+function fpsocketpair  (d:cint; xtype:cint; protocol:cint; sv:pcint):cint; 
+begin
+end;
+
+Function CloseSocket(Sock:Longint):Longint;
+var i : longint;
+begin
+  i := Winsock.CloseSocket (Sock);
+  if i <> 0 then
+  begin
+    SocketError:=WSAGetLastError;
+    CloseSocket := i;
+  end else
+  begin
+    CloseSocket := 0;
+    SocketError := 0;
+  end;
+end;
+
+Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
+
+begin
+  bind:=fpBind(Sock,@Addr,AddrLen)=0;
+end;
+
+Function Listen(Sock,MaxConnect:Longint):Boolean;
+
+begin
+  Listen:=fplisten(Sock,MaxConnect)=0;
+end;
+
+Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
+
+begin
+  Accept:=FPAccept(sock,@addr,@addrlen);
+end;
+
+Function Shutdown(Sock:Longint;How:Longint):Longint;
+
+begin
+ shutdown:=fpshutdown(sock,how);
+end;
+
+Function Connect(Sock:Longint;Const Addr;Addrlen:Longint):Boolean;
+
+begin
+ connect:=fpconnect(sock,@addr,addrlen)=0;
+end;
+
+Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
+begin
+ GetSocketName:=fpGetSockName(sock,@addr,@addrlen);
+end;
+
+Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
+begin
+ GetPeerName:=fpGetPeerName(Sock,@addr,@addrlen);
+end;
+
+Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen:longint):Longint;
+begin
+ GetSocketOptions:=fpGetSockOpt(sock,level,optname,@optval,@optlen);
+end;
+
+Function SetSocketOptions(Sock,Level,OptName:Longint;Const OptVal;optlen:longint):Longint;
+
+begin
+ SetSocketOptions:=fpsetsockopt(sock,level,optname,@optval,optlen);
+end;
+
+Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
+begin
+  // SocketPair:=SocketCall(Socket_Sys_SocketPair,Domain,SocketType,Protocol,longint(@Pair),0,0);a
+end;
+
+
+{$ifdef unix}
+{ mimic the linux fpWrite/fpRead calls for the file/text socket wrapper }
+function fpWrite(handle : longint;Const bufptr;size : dword) : dword;
+begin
+  fpWrite := dword(WinSock.send(handle, bufptr, size, 0));
+  if fpWrite = dword(SOCKET_ERROR) then
+  begin
+    SocketError := WSAGetLastError;
+    fpWrite := 0;
+  end
+  else
+    SocketError := 0;
+end;
+
+function fpRead(handle : longint;var bufptr;size : dword) : dword;
+  var
+     d : dword;
+
+  begin
+     if ioctlsocket(handle,FIONREAD,@d) = SOCKET_ERROR then
+       begin
+         SocketError:=WSAGetLastError;
+         fpRead:=0;
+         exit;
+       end;
+     if d>0 then
+       begin
+         if size>d then
+           size:=d;
+         fpRead := dword(WinSock.recv(handle, bufptr, size, 0));
+         if fpRead = dword(SOCKET_ERROR) then
+         begin
+           SocketError:= WSAGetLastError;
+           fpRead := 0;
+         end else
+           SocketError:=0;
+       end
+     else
+       SocketError:=0;
+  end;
+{$else}
+{ mimic the linux fdWrite/fdRead calls for the file/text socket wrapper }
+function fdWrite(handle : longint;Const bufptr;size : dword) : dword;
+begin
+  fdWrite := dword(WinSock.send(handle, bufptr, size, 0));
+  if fdWrite = dword(SOCKET_ERROR) then
+  begin
+    SocketError := WSAGetLastError;
+    fdWrite := 0;
+  end
+  else
+    SocketError := 0;
+end;
+
+function fdRead(handle : longint;var bufptr;size : dword) : dword;
+  var
+     d : dword;
+
+  begin
+     if ioctlsocket(handle,FIONREAD,@d) = SOCKET_ERROR then
+       begin
+         SocketError:=WSAGetLastError;
+         fdRead:=0;
+         exit;
+       end;
+     if d>0 then
+       begin
+         if size>d then
+           size:=d;
+         fdRead := dword(WinSock.recv(handle, bufptr, size, 0));
+         if fdRead = dword(SOCKET_ERROR) then
+         begin
+           SocketError:= WSAGetLastError;
+           fdRead := 0;
+         end else
+           SocketError:=0;
+       end
+     else
+       SocketError:=0;
+  end;
+{$endif}
+
 {$i sockets.inc}
 
 { winsocket stack needs an init. and cleanup code }
@@ -261,7 +599,10 @@ finalization
 end.
 {
   $Log$
-  Revision 1.4  2003-03-25 18:17:54  armin
+  Revision 1.5  2004-07-30 15:05:25  armin
+  make netware rtl compilable under 1.9.5
+
+  Revision 1.4  2003/03/25 18:17:54  armin
   * support for fcl, support for linking without debug info
   * renamed winsock2 to winsock for win32 compatinility
   * new sockets unit for netware

+ 41 - 32
rtl/netware/system.pp

@@ -27,13 +27,11 @@ interface
   {$define Set_i386_Exception_handler}
 {$endif cpui386}
 
-
 { include system-independent routine headers }
 
 {$I systemh.inc}
 
-type
- THandle = cardinal;
+type THandle = DWord;
 
 {Platform specific information}
 const
@@ -44,27 +42,16 @@ const
  PathSeparator = ';';
 { FileNameCaseSensitive is defined separately below!!! }
 
-type
-   { the fields of this record are os dependent  }
-   { and they shouldn't be used in a program     }
-   { only the type TCriticalSection is important }
-   TRTLCriticalSection = packed record
-      SemaHandle : LONGINT;
-      SemaIsOpen : BOOLEAN;
-   end;
-
-{ include threading stuff }
-{ i threadh.inc}
 
 { include heap support headers }
 {$I heaph.inc}
 
 CONST
   { Default filehandles }
-   UnusedHandle    : longint = -1;
-   StdInputHandle  : longint = 0;
-   StdOutputHandle : longint = 0;
-   StdErrorHandle  : longint = 0;
+   UnusedHandle    : THandle = -1;
+   StdInputHandle  : THandle = 0;
+   StdOutputHandle : THandle = 0;
+   StdErrorHandle  : THandle = 0;
 
    FileNameCaseSensitive : boolean = false;
 
@@ -261,6 +248,7 @@ var  HeapSbrkBlockList : ^THeapSbrkBlockList = nil;
 { exit (to avoid message "Module did not release xx resources") }
 Function Sbrk(size : longint):pointer;
 var P2 : POINTER;
+    i  : longint;
 begin
   Sbrk := _malloc (size);
   if Sbrk <> nil then begin
@@ -276,6 +264,13 @@ begin
       fillchar (HeapSbrkBlockList^,sizeof(HeapSbrkBlockList^),0);
       HeapSbrkAllocated := HeapInitialMaxBlocks;
     end;
+    if (HeapSbrkLastUsed > 0) then
+      for i := 1 to HeapSbrkLastUsed do
+        if (HeapSbrkBlockList^[i] = nil) then
+        begin  // reuse free slot
+	  HeapSbrkBlockList^[i] := Sbrk;
+	  exit;
+        end;
     if (HeapSbrkLastUsed = HeapSbrkAllocated) then
     begin  { grow }
       p2 := _realloc (HeapSbrkBlockList, HeapSbrkAllocated + HeapInitialMaxBlocks);
@@ -299,7 +294,8 @@ begin
   if HeapSbrkBlockList <> nil then
   begin
     for i := 1 to HeapSbrkLastUsed do
-      _free (HeapSbrkBlockList^[i]);
+      if (HeapSbrkBlockList^[i] <> nil) then
+        _free (HeapSbrkBlockList^[i]);
     _free (HeapSbrkBlockList);
     HeapSbrkAllocated := 0;
     HeapSbrkLastUsed := 0;
@@ -319,8 +315,18 @@ end;
 {$define HAS_SYSOSFREE}
 
 procedure SysOSFree(p: pointer; size: ptrint);
+var i : longint;
 begin
-  fpmunmap(p, size);
+//fpmunmap(p, size);
+  if (HeapSbrkLastUsed > 0) then
+    for i := 1 to HeapSbrkLastUsed do
+      if (HeapSbrkBlockList^[i] = p) then
+      begin
+	_free (p);
+	HeapSbrkBlockList^[i] := nil;
+	exit;
+      end;
+  HandleError (204);  // invalid pointer operation
 end;
 
 { include standard heap management }
@@ -383,7 +389,7 @@ BEGIN
 END;
 
 { close a file from the handle value }
-procedure do_close(handle : longint);
+procedure do_close(handle : thandle);
 VAR res : LONGINT;
 begin
   res := _close (handle);
@@ -413,10 +419,10 @@ begin
     InOutRes := 0
 end;
 
-function do_write(h,addr,len : longint) : longint;
+function do_write(h:thandle;addr:pointer;len : longint) : longint;
 VAR res : LONGINT;
 begin
-  res := _write (h,POINTER(addr),len);
+  res := _write (h,addr,len);
   IF res > 0 THEN
     InOutRes := 0
   ELSE
@@ -424,10 +430,10 @@ begin
   do_write := res;
 end;
 
-function do_read(h,addr,len : longint) : longint;
+function do_read(h:thandle;addr:pointer;len : longint) : longint;
 VAR res : LONGINT;
 begin
-  res := _read (h,POINTER(addr),len);
+  res := _read (h,addr,len);
   IF res > 0 THEN
     InOutRes := 0
   ELSE
@@ -436,7 +442,7 @@ begin
 end;
 
 
-function do_filepos(handle : longint) : longint;
+function do_filepos(handle : thandle) : longint;
 VAR res : LONGINT;
 begin
   InOutRes:=1;
@@ -453,7 +459,7 @@ CONST SEEK_SET = 0; // Seek from beginning of file.
       SEEK_END = 2; // Seek from end of file.
 
 
-procedure do_seek(handle,pos : longint);
+procedure do_seek(handle:thandle;pos : longint);
 VAR res : LONGINT;
 begin
   res := _lseek (handle,pos, SEEK_SET);
@@ -463,7 +469,7 @@ begin
     SetFileError (res);
 end;
 
-function do_seekend(handle:longint):longint;
+function do_seekend(handle:thandle):longint;
 VAR res : LONGINT;
 begin
   res := _lseek (handle,0, SEEK_END);
@@ -475,7 +481,7 @@ begin
 end;
 
 
-function do_filesize(handle : longint) : longint;
+function do_filesize(handle : thandle) : longint;
 VAR res     : LONGINT;
 begin
   res := _filelength (handle);
@@ -491,7 +497,7 @@ begin
 end;
 
 { truncate at a given position }
-procedure do_truncate (handle,pos:longint);
+procedure do_truncate (handle:thandle;pos:longint);
 VAR res : LONGINT;
 begin
   res := _chsize (handle,pos);
@@ -582,7 +588,7 @@ Begin
     InOutRes := 0;
 End;
 
-function do_isdevice(handle:longint):boolean;
+function do_isdevice(handle:THandle):boolean;
 begin
   do_isdevice := (_isatty (handle) > 0);
 end;
@@ -835,7 +841,10 @@ Begin
 End.
 {
   $Log$
-  Revision 1.22  2004-06-17 16:16:14  peter
+  Revision 1.23  2004-07-30 15:05:25  armin
+  make netware rtl compilable under 1.9.5
+
+  Revision 1.22  2004/06/17 16:16:14  peter
     * New heapmanager that releases memory back to the OS, donated
       by Micha Nelissen
 

+ 140 - 56
rtl/netware/systhrds.pp

@@ -13,6 +13,7 @@
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
  **********************************************************************}
+{$mode objfpc}
 unit systhrds;
 interface
 
@@ -29,8 +30,19 @@ interface
     termination because some versions of netware will abend if there
     are open semaphores on nlm unload.
 }
-{ Include generic thread interface }
-{$i threadh.inc }
+
+type
+   { the fields of this record are os dependent  }
+   { and they shouldn't be used in a program     }
+   { only the type TCriticalSection is important }
+   PRTLCriticalSection = ^TRTLCriticalSection;
+   TRTLCriticalSection = packed record
+      SemaHandle : LONGINT;
+      SemaIsOpen : BOOLEAN;
+   end;
+
+{ include threading stuff }
+{$i threadh.inc}
 
 {Delphi/Windows compatible priority constants, they are also defined for Unix and Win32}
 const
@@ -44,6 +56,8 @@ const
 
 implementation
 
+function  SysGetCurrentThreadId : dword;forward;
+
 {$i thread.inc }
 
 { some declarations for Netware API calls }
@@ -51,6 +65,12 @@ implementation
 
 {  define DEBUG_MT}
 
+{*****************************************************************************
+                             Threadvar support
+*****************************************************************************}
+
+{$ifdef HASTHREADVAR}
+
 const
    threadvarblocksize : dword = 0;     // total size of allocated threadvars
    thredvarsmainthread: pointer = nil; // to free the threadvars in the signal handler
@@ -128,6 +148,8 @@ end;
 { Include OS independent Threadvar initialization }
 {$i threadvr.inc}
 
+{$endif HASTHREADVAR}
+
 
 {*****************************************************************************
                             Thread starting
@@ -147,7 +169,9 @@ procedure DoneThread;
 
   begin
      { release thread vars }
+{$ifdef HASTHREADVAR}
      SysReleaseThreadVars;
+{$endif}
   end;
 
 
@@ -157,7 +181,11 @@ function ThreadMain(param : pointer) : dword; cdecl;
      ti : tthreadinfo;
 
   begin
+{$ifdef HASTHREADVAR}
+     { Allocate local thread vars, this must be the first thing,
+       because the exception management and io depends on threadvars }
      SysAllocateThreadVars;
+{$endif HASTHREADVAR}
 {$ifdef DEBUG_MT}
      ConsolePrintf(#13'New thread started, initialising ...'#13#10);
 {$endif DEBUG_MT}
@@ -171,10 +199,9 @@ function ThreadMain(param : pointer) : dword; cdecl;
      DoneThread;
   end;
 
-
-function BeginThread(sa : Pointer;stacksize : dword;
-  ThreadFunction : tthreadfunc;p : pointer;creationFlags : dword;
-  var ThreadId : DWord) : DWord;
+function SysBeginThread(sa : Pointer;stacksize : dword;
+                         ThreadFunction : tthreadfunc;p : pointer;
+                         creationFlags : dword; var ThreadId : DWord) : DWord;
 
   var ti : pthreadinfo;
 
@@ -182,11 +209,13 @@ function BeginThread(sa : Pointer;stacksize : dword;
 {$ifdef DEBUG_MT}
      ConsolePrintf(#13'Creating new thread'#13#10);
 {$endif DEBUG_MT}
+{$ifdef HASTHREADVAR}
      if not IsMultiThread then
      begin
        InitThreadVars(@SysRelocateThreadvar);
        IsMultithread:=true;
      end;
+{$endif}     
      { the only way to pass data to the newly created thread }
      { in a MT safe way, is to use the heap                  }
      new(ti);
@@ -196,18 +225,17 @@ function BeginThread(sa : Pointer;stacksize : dword;
 {$ifdef DEBUG_MT}
      ConsolePrintf(#13'Starting new thread'#13#10);
 {$endif DEBUG_MT}
-     BeginThread :=
+     SysBeginThread :=
        _BeginThread (@ThreadMain,NIL,Stacksize,ti);
   end;
 
 
-procedure EndThread(ExitCode : DWord);
+procedure SysEndThread(ExitCode : DWord);
 begin
   DoneThread;
   ExitThread(ExitCode , TSR_THREAD);
 end;
 
-
 {*****************************************************************************
                             Thread handling
 *****************************************************************************}
@@ -217,34 +245,34 @@ function __SuspendThread (threadId : dword) : dword; cdecl; external 'clib' name
 function __ResumeThread (threadId : dword) : dword; cdecl; external 'clib' name 'ResumeThread';
 procedure __ThreadSwitchWithDelay; cdecl; external 'clib' name 'ThreadSwitchWithDelay';
 
-{redefined because the interface has not cdecl calling convention}
-function SuspendThread (threadHandle : dword) : dword;
+procedure SysThreadSwitch;
 begin
-  SuspendThread := __SuspendThread (threadHandle);
+  __ThreadSwitchWithDelay;
 end;
 
 
-function ResumeThread (threadHandle : dword) : dword;
+{redefined because the interface has not cdecl calling convention}
+function SysSuspendThread (threadHandle : dword) : dword;
 begin
-  ResumeThread := __ResumeThread (threadHandle);
+  SysSuspendThread := __SuspendThread (threadHandle);
 end;
 
 
-procedure ThreadSwitch;
+function SysResumeThread (threadHandle : dword) : dword;
 begin
-  __ThreadSwitchWithDelay;
+  SysResumeThread := __ResumeThread (threadHandle);
 end;
 
 
-function  KillThread (threadHandle : dword) : dword;
+function  SysKillThread (threadHandle : dword) : dword;
 begin
-  KillThread := 1;  {not supported for netware}
+  SysKillThread := 1;  {not supported for netware}
 end;
 
 function GetThreadName  (threadId : longint; var threadName) : longint; cdecl; external 'clib' name 'GetThreadName';
 //function __RenameThread (threadId : longint; threadName:pchar) : longint; cdecl; external 'clib' name 'RenameThread';
 
-function  WaitForThreadTerminate (threadHandle : dword; TimeoutMs : longint) : dword;
+function  SysWaitForThreadTerminate (threadHandle : dword; TimeoutMs : longint) : dword;
 var
   status : longint;
   buf : array [0..50] of char;
@@ -254,24 +282,24 @@ begin
     status := GetThreadName (ThreadHandle,Buf); {should return EBADHNDL if thread is terminated}
     ThreadSwitch;
   until status <> 0;
-  WaitForThreadTerminate:=0;
+  SysWaitForThreadTerminate:=0;
 end;
 
-function  ThreadSetPriority (threadHandle : dword; Prio: longint): boolean; {-15..+15, 0=normal}
+function  SysThreadSetPriority (threadHandle : dword; Prio: longint): boolean; {-15..+15, 0=normal}
 begin
-  ThreadSetPriority := true;
+  SysThreadSetPriority := true;
 end;
 
-function  ThreadGetPriority (threadHandle : dword): Integer;
+function  SysThreadGetPriority (threadHandle : dword): Integer;
 begin
-  ThreadGetPriority := 0;
+  SysThreadGetPriority := 0;
 end;
 
 function GetThreadID : dword; cdecl; external 'clib' name 'GetThreadID';
 
-function  GetCurrentThreadId : dword;
+function  SysGetCurrentThreadId : dword;
 begin
-  GetCurrentThreadId := GetThreadID;
+  SysGetCurrentThreadId := GetThreadID;
 end;
 
 
@@ -352,44 +380,56 @@ end;
 { this allows to do a lot of things in MT safe way }
 { it is also used to make the heap management      }
 { thread safe                                      }
-procedure InitCriticalSection(var cs : TRTLCriticalSection);
+procedure SysInitCriticalSection(var cs);// : TRTLCriticalSection);
 begin
-  cs.SemaHandle := _OpenLocalSemaphore (1);
-  if cs.SemaHandle <> 0 then
-  begin
-    cs.SemaIsOpen := true;
-    SaveSema (cs.SemaHandle);
-  end else
+  with PRTLCriticalSection(@cs)^ do
   begin
-    cs.SemaIsOpen := false;
-    ConsolePrintf (#13'fpc-rtl: InitCriticalsection, OpenLocalSemaphore returned error'#13#10,0);
+    SemaHandle := _OpenLocalSemaphore (1);
+    if SemaHandle <> 0 then
+    begin
+      SemaIsOpen := true;
+      SaveSema (SemaHandle);
+    end else
+    begin
+      SemaIsOpen := false;
+      ConsolePrintf (#13'fpc-rtl: InitCriticalsection, OpenLocalSemaphore returned error'#13#10,0);
+    end;
   end;
 end;
 
-procedure DoneCriticalsection(var cs : TRTLCriticalSection);
+procedure SysDoneCriticalsection(var cs);
 begin
-  if cs.SemaIsOpen then
+  with PRTLCriticalSection(@cs)^ do
   begin
-    _CloseLocalSemaphore (cs.SemaHandle);
-    ReleaseSema (cs.SemaHandle);
-    cs.SemaIsOpen := FALSE;
+    if SemaIsOpen then
+    begin
+      _CloseLocalSemaphore (SemaHandle);
+      ReleaseSema (SemaHandle);
+      SemaIsOpen := FALSE;
+    end;
   end;
 end;
 
-procedure EnterCriticalsection(var cs : TRTLCriticalSection);
+procedure SysEnterCriticalsection(var cs);
 begin
-  if cs.SemaIsOpen then
-    _WaitOnLocalSemaphore (cs.SemaHandle)
-  else
-    ConsolePrintf (#13'fpc-rtl: EnterCriticalsection, TRTLCriticalSection not open'#13#10,0);
+  with PRTLCriticalSection(@cs)^ do
+  begin
+    if SemaIsOpen then
+      _WaitOnLocalSemaphore (SemaHandle)
+    else
+      ConsolePrintf (#13'fpc-rtl: EnterCriticalsection, TRTLCriticalSection not open'#13#10,0);
+  end;
 end;
 
-procedure LeaveCriticalsection(var cs : TRTLCriticalSection);
+procedure SysLeaveCriticalSection(var cs);
 begin
-  if cs.SemaIsOpen then
-    _SignalLocalSemaphore (cs.SemaHandle)
-  else
-    ConsolePrintf (#13'fpc-rtl: LeaveCriticalsection, TRTLCriticalSection not open'#13#10,0);
+  with PRTLCriticalSection(@cs)^ do
+  begin
+    if SemaIsOpen then
+      _SignalLocalSemaphore (SemaHandle)
+    else
+      ConsolePrintf (#13'fpc-rtl: LeaveCriticalsection, TRTLCriticalSection not open'#13#10,0);
+  end;
 end;
 
 
@@ -406,7 +446,7 @@ end;
 {*****************************************************************************
                            Heap Mutex Protection
 *****************************************************************************}
-			
+
 var
   HeapMutex : TRTLCriticalSection;
 				
@@ -424,7 +464,7 @@ procedure NWHeapMutexLock;
 begin
   EnterCriticalSection(heapmutex);
 end;
-														
+
 procedure NWHeapMutexUnlock;
 begin
   LeaveCriticalSection(heapmutex);
@@ -437,24 +477,68 @@ const
            MutexLock : @NWHeapMutexLock;
     	   MutexUnlock : @NWHeapMutexUnlock;
   );
-																							
+
 procedure InitHeapMutexes;
 begin
   SetMemoryMutexManager(NWMemoryMutexManager);
 end;
 
+Var
+  NWThreadManager : TThreadManager;
 
+Procedure SetNWThreadManager;
 
-initialization
+begin
+  With NWThreadManager do
+    begin
+    InitManager            :=Nil;
+    DoneManager            :=Nil;
+    BeginThread            :=@SysBeginThread;
+    EndThread              :=@SysEndThread;
+    SuspendThread          :=@SysSuspendThread;
+    ResumeThread           :=@SysResumeThread;
+    KillThread             :=@SysKillThread;
+    ThreadSwitch           :=@SysThreadSwitch;
+    WaitForThreadTerminate :=@SysWaitForThreadTerminate;
+    ThreadSetPriority      :=@SysThreadSetPriority;
+    ThreadGetPriority      :=@SysThreadGetPriority;
+    GetCurrentThreadId     :=@SysGetCurrentThreadId;
+    InitCriticalSection    :=@SysInitCriticalSection;
+    DoneCriticalSection    :=@SysDoneCriticalSection;
+    EnterCriticalSection   :=@SysEnterCriticalSection;
+    LeaveCriticalSection   :=@SysLeaveCriticalSection;
+{$ifdef HASTHREADVAR}
+    InitThreadVar          :=@SysInitThreadVar;
+    RelocateThreadVar      :=@SysRelocateThreadVar;
+    AllocateThreadVars     :=@SysAllocateThreadVars;
+    ReleaseThreadVars      :=@SysReleaseThreadVars;
+{$endif HASTHREADVAR}
+    BasicEventCreate       :=@NoBasicEventCreate;
+    basiceventdestroy      :=@Nobasiceventdestroy;
+    basiceventResetEvent   :=@NobasiceventResetEvent;
+    basiceventSetEvent     :=@NobasiceventSetEvent;
+    basiceventWaitFor      :=@NobasiceventWaitFor;
+    end;
+  SetThreadManager(NWThreadManager);
   InitHeapMutexes;
+end;
+
+initialization
+  SetNWThreadManager;
   NWSysSetThreadFunctions (@CloseAllRemainingSemaphores,
                            @SysReleaseThreadVars,
-                           @SetThreadDataAreaPtr);
+			   @SetThreadDataAreaPtr);
+
 end.
 
+
+
 {
   $Log$
-  Revision 1.3  2003-10-01 21:00:09  peter
+  Revision 1.4  2004-07-30 15:05:25  armin
+  make netware rtl compilable under 1.9.5
+
+  Revision 1.3  2003/10/01 21:00:09  peter
     * GetCurrentThreadHandle renamed to GetCurrentThreadId
 
   Revision 1.2  2003/03/27 17:14:27  armin

+ 10 - 7
rtl/netware/tthread.inc

@@ -118,7 +118,7 @@ end;
 
 
 { TThread }
-function ThreadProc(args:pointer): Integer;cdecl;
+function ThreadProc(args:pointer): Integer;
 var
   FreeThread: Boolean;
   Thread : TThread absolute args;
@@ -129,7 +129,7 @@ begin
     Thread.FFatalException := TObject(AcquireExceptionObject);
   end;
   FreeThread := Thread.FFreeOnTerminate;
-  Result := Thread.FReturnValue;
+  ThreadProc := Thread.FReturnValue;
   Thread.FFinished := True;
   Thread.DoTerminate;
   if FreeThread then
@@ -146,7 +146,7 @@ begin
   AddThread(self);
   FSuspended := CreateSuspended;
   { Create new thread }
-  FHandle := BeginThread (@ThreadProc,self);
+  FHandle := BeginThread (@ThreadProc,pointer(self));
   if FSuspended then Suspend;
   FThreadID := FHandle;
   //IsMultiThread := TRUE;  {already set by systhrds}
@@ -162,8 +162,8 @@ begin
      Terminate;
      WaitFor;
    end;
-  if FHandle <> -1 then
-    KillThread (FHandle);  {something went wrong, kill the thread (not possible on netware)}
+  {if FHandle <> -1 then
+    KillThread (FHandle);}  {something went wrong, kill the thread (not possible on netware)}
   FFatalException.Free;
   FFatalException := nil;
   inherited Destroy;
@@ -255,12 +255,15 @@ function TThread.WaitFor: Integer;
 begin
   Result := WaitForThreadTerminate (FHandle,0);
   if Result = 0 then
-    FHandle := -1;
+    FHandle := 0;
 end;
 
 {
   $Log$
-  Revision 1.1  2003-10-06 21:01:06  peter
+  Revision 1.2  2004-07-30 15:05:25  armin
+  make netware rtl compilable under 1.9.5
+
+  Revision 1.1  2003/10/06 21:01:06  peter
     * moved classes unit to rtl
 
   Revision 1.3  2003/10/06 17:06:55  florian