diff options
Diffstat (limited to 'rtl/aros')
-rw-r--r-- | rtl/aros/Makefile | 2978 | ||||
-rw-r--r-- | rtl/aros/Makefile.fpc | 235 | ||||
-rw-r--r-- | rtl/aros/arosthreads.inc | 590 | ||||
-rw-r--r-- | rtl/aros/doslibd.inc | 1371 | ||||
-rw-r--r-- | rtl/aros/i386/doslibf.inc | 59 | ||||
-rw-r--r-- | rtl/aros/i386/execd.inc | 1792 | ||||
-rw-r--r-- | rtl/aros/i386/execf.inc | 89 | ||||
-rw-r--r-- | rtl/aros/i386/prt0.as | 162 | ||||
-rw-r--r-- | rtl/aros/i386/utild1.inc | 153 | ||||
-rw-r--r-- | rtl/aros/i386/utild2.inc | 53 | ||||
-rw-r--r-- | rtl/aros/i386/utilf.inc | 18 | ||||
-rw-r--r-- | rtl/aros/system.pp | 465 | ||||
-rw-r--r-- | rtl/aros/systemthreadh.inc | 2 | ||||
-rw-r--r-- | rtl/aros/systhrd.inc | 359 | ||||
-rw-r--r-- | rtl/aros/timerd.inc | 67 | ||||
-rw-r--r-- | rtl/aros/tthread.inc | 161 |
16 files changed, 8554 insertions, 0 deletions
diff --git a/rtl/aros/Makefile b/rtl/aros/Makefile new file mode 100644 index 0000000000..ab35d8be75 --- /dev/null +++ b/rtl/aros/Makefile @@ -0,0 +1,2978 @@ +# +# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-12-07 rev 29213] +# +default: all +MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-dragonfly arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android jvm-java jvm-android i8086-msdos +BSDs = freebsd netbsd openbsd darwin dragonfly +UNIXs = linux $(BSDs) solaris qnx haiku aix +LIMIT83fs = go32v2 os2 emx watcom msdos +OSNeedsComspecToRunBatch = go32v2 watcom +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)))) +ifeq ($(PWD),) +$(error You need the GNU utils package to use this Makefile) +else +PWD:=$(firstword $(PWD)) +SRCEXEEXT= +endif +else +PWD:=$(firstword $(PWD)) +SRCEXEEXT=.exe +endif +ifndef inUnix +ifeq ($(OS),Windows_NT) +inWinNT=1 +else +ifdef OS2_SHELL +inOS2=1 +endif +endif +else +ifneq ($(findstring cygdrive,$(PATH)),) +inCygWin=1 +endif +endif +ifdef inUnix +SRCBATCHEXT=.sh +else +ifdef inOS2 +SRCBATCHEXT=.cmd +else +SRCBATCHEXT=.bat +endif +endif +ifdef COMSPEC +ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),) +ifndef RUNBATCH +RUNBATCH=$(COMSPEC) /C +endif +endif +endif +ifdef inUnix +PATHSEP=/ +else +PATHSEP:=$(subst /,\,/) +ifdef inCygWin +PATHSEP=/ +endif +endif +ifdef PWD +BASEDIR:=$(subst \,/,$(shell $(PWD))) +ifdef inCygWin +ifneq ($(findstring /cygdrive/,$(BASEDIR)),) +BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR)) +BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR))) +BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR)) +endif +endif +else +BASEDIR=. +endif +ifdef inOS2 +ifndef ECHO +ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(ECHO),) +ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(ECHO),) +ECHO=echo +else +ECHO:=$(firstword $(ECHO)) +endif +else +ECHO:=$(firstword $(ECHO)) +endif +endif +export ECHO +endif +override OS_TARGET_DEFAULT=aros +override CPU_TARGET_DEFAULT=i386 +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)) +ifneq ($(CPU_TARGET),) +FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB) +else +FPC:=$(shell $(FPCPROG) -PB) +endif +ifneq ($(findstring Error,$(FPC)),) +override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH))))) +else +ifeq ($(strip $(wildcard $(FPC))),) +FPC:=$(firstword $(FPCPROG)) +endif +endif +else +override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH))))) +endif +endif +override FPC:=$(subst $(SRCEXEEXT),,$(FPC)) +override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT) +FOUNDFPC:=$(strip $(wildcard $(FPC))) +ifeq ($(FOUNDFPC),) +FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH)))) +ifeq ($(FOUNDFPC),) +$(error Compiler $(FPC) not found) +endif +endif +ifndef FPC_COMPILERINFO +FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO) +endif +ifndef FPC_VERSION +FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO)) +endif +export FPC FPC_VERSION FPC_COMPILERINFO +unexport CHECKDEPEND ALLDEPENDENCIES +ifndef CPU_TARGET +ifdef CPU_TARGET_DEFAULT +CPU_TARGET=$(CPU_TARGET_DEFAULT) +endif +endif +ifndef OS_TARGET +ifdef OS_TARGET_DEFAULT +OS_TARGET=$(OS_TARGET_DEFAULT) +endif +endif +ifndef CPU_SOURCE +CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO)) +endif +ifndef CPU_TARGET +CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO)) +endif +ifndef OS_SOURCE +OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO)) +endif +ifndef OS_TARGET +OS_TARGET:=$(word 5,$(FPC_COMPILERINFO)) +endif +FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET) +FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE) +ifeq ($(CPU_TARGET),armeb) +ARCH=arm +override FPCOPT+=-Cb +else +ifeq ($(CPU_TARGET),armel) +ARCH=arm +override FPCOPT+=-CaEABI +else +ARCH=$(CPU_TARGET) +endif +endif +ifeq ($(FULL_TARGET),arm-embedded) +ifeq ($(SUBARCH),) +$(error When compiling for arm-embedded, a sub-architecture (e.g. SUBARCH=armv4t or SUBARCH=armv7m) must be defined) +endif +override FPCOPT+=-Cp$(SUBARCH) +endif +ifeq ($(FULL_TARGET),mipsel-embedded) +ifeq ($(SUBARCH),) +$(error When compiling for mipsel-embedded, a sub-architecture (e.g. SUBARCH=pic32mx) must be defined) +endif +override FPCOPT+=-Cp$(SUBARCH) +endif +ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),) +TARGETSUFFIX=$(OS_TARGET) +SOURCESUFFIX=$(OS_SOURCE) +else +ifneq ($(findstring $(OS_TARGET),$(LIMIT83fs)),) +TARGETSUFFIX=$(OS_TARGET) +else +TARGETSUFFIX=$(FULL_TARGET) +endif +SOURCESUFFIX=$(FULL_SOURCE) +endif +ifneq ($(FULL_TARGET),$(FULL_SOURCE)) +CROSSCOMPILE=1 +endif +ifeq ($(findstring makefile,$(MAKECMDGOALS)),) +ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),) +$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first) +endif +endif +ifneq ($(findstring $(OS_TARGET),$(BSDs)),) +BSDhier=1 +endif +ifeq ($(OS_TARGET),linux) +linuxHier=1 +endif +ifndef CROSSCOMPILE +BUILDFULLNATIVE=1 +export BUILDFULLNATIVE +endif +ifdef BUILDFULLNATIVE +BUILDNATIVE=1 +export BUILDNATIVE +endif +export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX 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:=$(BASEDIR) +ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),) +override FPCDIR=c:/pp +endif +endif +endif +endif +endif +ifndef CROSSBINDIR +CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX)) +endif +ifneq ($(findstring $(OS_TARGET),darwin iphonesim),) +ifeq ($(OS_SOURCE),darwin) +DARWIN2DARWIN=1 +endif +endif +ifndef BINUTILSPREFIX +ifndef CROSSBINDIR +ifdef CROSSCOMPILE +ifneq ($(OS_TARGET),msdos) +ifndef DARWIN2DARWIN +ifneq ($(CPU_TARGET),jvm) +BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)- +ifeq ($(OS_TARGET),android) +ifeq ($(CPU_TARGET),arm) +BINUTILSPREFIX=arm-linux-androideabi- +else +ifeq ($(CPU_TARGET),i386) +BINUTILSPREFIX=i686-linux-android- +else +ifeq ($(CPU_TARGET),mipsel) +BINUTILSPREFIX=mipsel-linux-android- +endif +endif +endif +endif +endif +endif +else +BINUTILSPREFIX=$(OS_TARGET)- +endif +endif +endif +endif +UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX)) +ifeq ($(UNITSDIR),) +UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET)) +endif +PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra) +ifndef FPCFPMAKE +ifdef CROSSCOMPILE +ifeq ($(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR)))),) +FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH)))) +ifneq ($(FPCPROG),) +FPCPROG:=$(firstword $(FPCPROG)) +FPCFPMAKE:=$(shell $(FPCPROG) -PB) +ifeq ($(strip $(wildcard $(FPCFPMAKE))),) +FPCFPMAKE:=$(firstword $(FPCPROG)) +endif +else +override FPCFPMAKE=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH))))) +endif +else +FPCFPMAKE=$(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR)))) +FPMAKE_SKIP_CONFIG=-n +export FPCFPMAKE +export FPMAKE_SKIP_CONFIG +endif +else +FPMAKE_SKIP_CONFIG=-n +FPCFPMAKE=$(FPC) +endif +endif +override PACKAGE_NAME=rtl +PACKAGEDIR_MAIN:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR)))))) +RTL=.. +INC=$(RTL)/inc +COMMON=$(RTL)/common +PROCINC=$(RTL)/$(CPU_TARGET) +AMIINC=$(RTL)/amicommon +UNITPREFIX=rtl +SYSTEMUNIT=system +ifdef RELEASE +override FPCOPT+=-Ur +endif +OBJPASDIR=$(RTL)/objpas +ifeq ($(FULL_TARGET),i386-linux) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-go32v2) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-win32) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-os2) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-freebsd) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-beos) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-haiku) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-netbsd) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-solaris) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-qnx) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-netware) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-openbsd) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-wdosx) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-darwin) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-emx) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-watcom) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-netwlibc) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-wince) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-embedded) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-symbian) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-nativent) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-iphonesim) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-android) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-aros) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),m68k-linux) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),m68k-freebsd) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),m68k-netbsd) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),m68k-amiga) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),m68k-atari) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),m68k-openbsd) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),m68k-palmos) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),m68k-embedded) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),powerpc-linux) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),powerpc-netbsd) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),powerpc-amiga) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),powerpc-macos) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),powerpc-darwin) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),powerpc-morphos) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),powerpc-embedded) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),powerpc-wii) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),powerpc-aix) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),sparc-linux) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),sparc-netbsd) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),sparc-solaris) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),sparc-embedded) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),x86_64-linux) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),x86_64-freebsd) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),x86_64-netbsd) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),x86_64-solaris) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),x86_64-openbsd) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),x86_64-darwin) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),x86_64-win64) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),x86_64-embedded) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),x86_64-dragonfly) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),arm-linux) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),arm-palmos) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),arm-darwin) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),arm-wince) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),arm-gba) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),arm-nds) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),arm-embedded) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),arm-symbian) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),arm-android) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),powerpc64-linux) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),powerpc64-darwin) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),powerpc64-embedded) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),powerpc64-aix) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),avr-embedded) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),armeb-linux) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),armeb-embedded) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),mips-linux) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),mipsel-linux) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),mipsel-embedded) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),mipsel-android) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),jvm-java) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),jvm-android) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i8086-msdos) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings fpintres dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst character +endif +ifeq ($(FULL_TARGET),i386-linux) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-go32v2) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-win32) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-os2) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-freebsd) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-beos) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-haiku) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-netbsd) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-solaris) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-qnx) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-netware) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-openbsd) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-wdosx) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-darwin) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-emx) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-watcom) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-netwlibc) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-wince) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-embedded) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-symbian) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-nativent) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-iphonesim) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-android) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-aros) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),m68k-linux) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),m68k-freebsd) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),m68k-netbsd) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),m68k-amiga) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),m68k-atari) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),m68k-openbsd) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),m68k-palmos) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),m68k-embedded) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),powerpc-linux) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),powerpc-netbsd) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),powerpc-amiga) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),powerpc-macos) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),powerpc-darwin) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),powerpc-morphos) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),powerpc-embedded) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),powerpc-wii) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),powerpc-aix) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),sparc-linux) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),sparc-netbsd) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),sparc-solaris) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),sparc-embedded) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),x86_64-linux) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),x86_64-freebsd) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),x86_64-netbsd) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),x86_64-solaris) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),x86_64-openbsd) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),x86_64-darwin) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),x86_64-win64) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),x86_64-embedded) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),x86_64-dragonfly) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),arm-linux) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),arm-palmos) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),arm-darwin) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),arm-wince) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),arm-gba) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),arm-nds) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),arm-embedded) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),arm-symbian) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),arm-android) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),powerpc64-linux) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),powerpc64-darwin) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),powerpc64-embedded) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),powerpc64-aix) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),avr-embedded) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),armeb-linux) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),armeb-embedded) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),mips-linux) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),mipsel-linux) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),mipsel-embedded) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),mipsel-android) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),jvm-java) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),jvm-android) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i8086-msdos) +override TARGET_IMPLICITUNITS+=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 unicodedata unicodenumtable +endif +ifeq ($(FULL_TARGET),i386-linux) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-go32v2) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-win32) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-os2) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-freebsd) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-beos) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-haiku) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-netbsd) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-solaris) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-qnx) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-netware) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-openbsd) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-wdosx) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-darwin) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-emx) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-watcom) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-netwlibc) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-wince) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-embedded) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-symbian) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-nativent) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-iphonesim) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-android) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-aros) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),m68k-linux) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),m68k-freebsd) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),m68k-netbsd) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),m68k-amiga) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),m68k-atari) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),m68k-openbsd) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),m68k-palmos) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),m68k-embedded) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),powerpc-linux) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),powerpc-netbsd) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),powerpc-amiga) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),powerpc-macos) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),powerpc-darwin) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),powerpc-morphos) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),powerpc-embedded) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),powerpc-wii) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),powerpc-aix) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),sparc-linux) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),sparc-netbsd) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),sparc-solaris) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),sparc-embedded) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),x86_64-linux) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),x86_64-freebsd) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),x86_64-netbsd) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),x86_64-solaris) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),x86_64-openbsd) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),x86_64-darwin) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),x86_64-win64) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),x86_64-embedded) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),x86_64-dragonfly) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),arm-linux) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),arm-palmos) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),arm-darwin) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),arm-wince) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),arm-gba) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),arm-nds) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),arm-embedded) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),arm-symbian) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),arm-android) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),powerpc64-linux) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),powerpc64-darwin) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),powerpc64-embedded) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),powerpc64-aix) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),avr-embedded) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),armeb-linux) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),armeb-embedded) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),mips-linux) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),mipsel-linux) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),mipsel-embedded) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),mipsel-android) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),jvm-java) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),jvm-android) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i8086-msdos) +override TARGET_LOADERS+=prt0 +endif +ifeq ($(FULL_TARGET),i386-linux) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-go32v2) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-win32) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-os2) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-freebsd) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-beos) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-haiku) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-netbsd) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-solaris) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-qnx) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-netware) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-openbsd) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-wdosx) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-darwin) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-emx) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-watcom) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-netwlibc) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-wince) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-embedded) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-symbian) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-nativent) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-iphonesim) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-android) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i386-aros) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),m68k-linux) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),m68k-freebsd) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),m68k-netbsd) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),m68k-amiga) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),m68k-atari) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),m68k-openbsd) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),m68k-palmos) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),m68k-embedded) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),powerpc-linux) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),powerpc-netbsd) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),powerpc-amiga) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),powerpc-macos) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),powerpc-darwin) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),powerpc-morphos) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),powerpc-embedded) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),powerpc-wii) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),powerpc-aix) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),sparc-linux) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),sparc-netbsd) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),sparc-solaris) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),sparc-embedded) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),x86_64-linux) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),x86_64-freebsd) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),x86_64-netbsd) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),x86_64-solaris) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),x86_64-openbsd) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),x86_64-darwin) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),x86_64-win64) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),x86_64-embedded) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),x86_64-dragonfly) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),arm-linux) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),arm-palmos) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),arm-darwin) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),arm-wince) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),arm-gba) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),arm-nds) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),arm-embedded) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),arm-symbian) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),arm-android) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),powerpc64-linux) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),powerpc64-darwin) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),powerpc64-embedded) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),powerpc64-aix) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),avr-embedded) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),armeb-linux) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),armeb-embedded) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),mips-linux) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),mipsel-linux) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),mipsel-embedded) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),mipsel-android) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),jvm-java) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),jvm-android) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +ifeq ($(FULL_TARGET),i8086-msdos) +override TARGET_RSTS+=math rtlconsts typinfo classes sysconst +endif +override INSTALL_FPCPACKAGE=y +ifeq ($(FULL_TARGET),i386-linux) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-go32v2) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-win32) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-os2) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-freebsd) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-beos) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-haiku) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-netbsd) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-solaris) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-qnx) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-netware) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-openbsd) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-wdosx) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-darwin) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-emx) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-watcom) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-netwlibc) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-wince) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-embedded) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-symbian) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-nativent) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-iphonesim) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-android) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-aros) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),m68k-linux) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),m68k-freebsd) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),m68k-netbsd) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),m68k-amiga) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),m68k-atari) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),m68k-openbsd) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),m68k-palmos) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),m68k-embedded) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),powerpc-linux) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),powerpc-netbsd) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),powerpc-amiga) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),powerpc-macos) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),powerpc-darwin) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),powerpc-morphos) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),powerpc-embedded) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),powerpc-wii) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),powerpc-aix) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),sparc-linux) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),sparc-netbsd) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),sparc-solaris) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),sparc-embedded) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),x86_64-linux) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),x86_64-freebsd) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),x86_64-netbsd) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),x86_64-solaris) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),x86_64-openbsd) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),x86_64-darwin) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),x86_64-win64) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),x86_64-embedded) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),x86_64-dragonfly) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),arm-linux) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),arm-palmos) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),arm-darwin) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),arm-wince) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),arm-gba) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),arm-nds) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),arm-embedded) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),arm-symbian) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),arm-android) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),powerpc64-linux) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),powerpc64-darwin) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),powerpc64-embedded) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),powerpc64-aix) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),avr-embedded) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),armeb-linux) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),armeb-embedded) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),mips-linux) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),mipsel-linux) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),mipsel-embedded) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),mipsel-android) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),jvm-java) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),jvm-android) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i8086-msdos) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-linux) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-go32v2) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-win32) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-os2) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-freebsd) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-beos) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-haiku) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-netbsd) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-solaris) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-qnx) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-netware) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-openbsd) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-wdosx) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-darwin) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-emx) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-watcom) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-netwlibc) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-wince) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-embedded) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-symbian) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-nativent) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-iphonesim) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-android) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-aros) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),m68k-linux) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),m68k-freebsd) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),m68k-netbsd) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),m68k-amiga) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),m68k-atari) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),m68k-openbsd) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),m68k-palmos) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),m68k-embedded) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),powerpc-linux) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),powerpc-netbsd) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),powerpc-amiga) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),powerpc-macos) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),powerpc-darwin) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),powerpc-morphos) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),powerpc-embedded) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),powerpc-wii) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),powerpc-aix) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),sparc-linux) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),sparc-netbsd) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),sparc-solaris) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),sparc-embedded) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),x86_64-linux) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),x86_64-freebsd) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),x86_64-netbsd) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),x86_64-solaris) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),x86_64-openbsd) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),x86_64-darwin) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),x86_64-win64) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),x86_64-embedded) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),x86_64-dragonfly) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),arm-linux) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),arm-palmos) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),arm-darwin) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),arm-wince) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),arm-gba) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),arm-nds) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),arm-embedded) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),arm-symbian) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),arm-android) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),powerpc64-linux) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),powerpc64-darwin) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),powerpc64-embedded) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),powerpc64-aix) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),avr-embedded) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),armeb-linux) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),armeb-embedded) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),mips-linux) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),mipsel-linux) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),mipsel-embedded) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),mipsel-android) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),jvm-java) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),jvm-android) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i8086-msdos) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifdef REQUIRE_UNITSDIR +override UNITSDIR+=$(REQUIRE_UNITSDIR) +endif +ifdef REQUIRE_PACKAGESDIR +override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR) +endif +ifdef ZIPINSTALL +ifneq ($(findstring $(OS_TARGET),$(UNIXs)),) +UNIXHier=1 +endif +else +ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),) +UNIXHier=1 +endif +endif +ifndef INSTALL_PREFIX +ifdef PREFIX +INSTALL_PREFIX=$(PREFIX) +endif +endif +ifndef INSTALL_PREFIX +ifdef UNIXHier +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 COMPILER_UNITTARGETDIR +ifdef PACKAGEDIR_MAIN +COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX) +else +COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX) +endif +endif +ifndef COMPILER_TARGETDIR +COMPILER_TARGETDIR=. +endif +ifndef INSTALL_BASEDIR +ifdef UNIXHier +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 UNIXHier +INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin +else +INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin +ifdef INSTALL_FPCPACKAGE +ifdef CROSSCOMPILE +ifdef CROSSINSTALL +INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX) +else +INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX) +endif +else +INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX) +endif +endif +endif +endif +ifndef INSTALL_UNITDIR +INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX) +ifdef INSTALL_FPCPACKAGE +ifdef PACKAGE_NAME +INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME) +endif +endif +endif +ifndef INSTALL_LIBDIR +ifdef UNIXHier +INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib +else +INSTALL_LIBDIR:=$(INSTALL_UNITDIR) +endif +endif +ifndef INSTALL_SOURCEDIR +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) +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 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 +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 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) +else +INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples +endif +endif +endif +ifndef INSTALL_DATADIR +INSTALL_DATADIR=$(INSTALL_BASEDIR) +endif +ifndef INSTALL_SHAREDDIR +INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib +endif +ifdef CROSSCOMPILE +ifndef CROSSBINDIR +CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX)) +ifeq ($(CROSSBINDIR),) +CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE)) +endif +endif +else +CROSSBINDIR= +endif +BATCHEXT=.bat +LOADEREXT=.as +EXEEXT=.exe +PPLEXT=.ppl +PPUEXT=.ppu +OEXT=.o +ASMEXT=.s +SMARTEXT=.sl +STATICLIBEXT=.a +SHAREDLIBEXT=.so +SHAREDLIBPREFIX=libfp +STATICLIBPREFIX=libp +IMPORTLIBPREFIX=libimp +RSTEXT=.rst +EXEDBGEXT=.dbg +ifeq ($(OS_TARGET),go32v1) +STATICLIBPREFIX= +SHORTSUFFIX=v1 +endif +ifeq ($(OS_TARGET),go32v2) +STATICLIBPREFIX= +SHORTSUFFIX=dos +IMPORTLIBPREFIX= +endif +ifeq ($(OS_TARGET),watcom) +STATICLIBPREFIX= +OEXT=.obj +ASMEXT=.asm +SHAREDLIBEXT=.dll +SHORTSUFFIX=wat +IMPORTLIBPREFIX= +endif +ifneq ($(CPU_TARGET),jvm) +ifeq ($(OS_TARGET),android) +BATCHEXT=.sh +EXEEXT= +HASSHAREDLIB=1 +SHORTSUFFIX=lnx +endif +endif +ifeq ($(OS_TARGET),linux) +BATCHEXT=.sh +EXEEXT= +HASSHAREDLIB=1 +SHORTSUFFIX=lnx +endif +ifeq ($(OS_TARGET),dragonfly) +BATCHEXT=.sh +EXEEXT= +HASSHAREDLIB=1 +SHORTSUFFIX=df +endif +ifeq ($(OS_TARGET),freebsd) +BATCHEXT=.sh +EXEEXT= +HASSHAREDLIB=1 +SHORTSUFFIX=fbs +endif +ifeq ($(OS_TARGET),netbsd) +BATCHEXT=.sh +EXEEXT= +HASSHAREDLIB=1 +SHORTSUFFIX=nbs +endif +ifeq ($(OS_TARGET),openbsd) +BATCHEXT=.sh +EXEEXT= +HASSHAREDLIB=1 +SHORTSUFFIX=obs +endif +ifeq ($(OS_TARGET),win32) +SHAREDLIBEXT=.dll +SHORTSUFFIX=w32 +endif +ifeq ($(OS_TARGET),os2) +BATCHEXT=.cmd +AOUTEXT=.out +STATICLIBPREFIX= +SHAREDLIBEXT=.dll +SHORTSUFFIX=os2 +ECHO=echo +IMPORTLIBPREFIX= +endif +ifeq ($(OS_TARGET),emx) +BATCHEXT=.cmd +AOUTEXT=.out +STATICLIBPREFIX= +SHAREDLIBEXT=.dll +SHORTSUFFIX=emx +ECHO=echo +IMPORTLIBPREFIX= +endif +ifeq ($(OS_TARGET),amiga) +EXEEXT= +SHAREDLIBEXT=.library +SHORTSUFFIX=amg +endif +ifeq ($(OS_TARGET),aros) +EXEEXT= +SHAREDLIBEXT=.library +SHORTSUFFIX=aros +endif +ifeq ($(OS_TARGET),morphos) +EXEEXT= +SHAREDLIBEXT=.library +SHORTSUFFIX=mos +endif +ifeq ($(OS_TARGET),atari) +EXEEXT=.ttp +SHORTSUFFIX=ata +endif +ifeq ($(OS_TARGET),beos) +BATCHEXT=.sh +EXEEXT= +SHORTSUFFIX=be +endif +ifeq ($(OS_TARGET),haiku) +BATCHEXT=.sh +EXEEXT= +SHORTSUFFIX=hai +endif +ifeq ($(OS_TARGET),solaris) +BATCHEXT=.sh +EXEEXT= +SHORTSUFFIX=sun +endif +ifeq ($(OS_TARGET),qnx) +BATCHEXT=.sh +EXEEXT= +SHORTSUFFIX=qnx +endif +ifeq ($(OS_TARGET),netware) +EXEEXT=.nlm +STATICLIBPREFIX= +SHORTSUFFIX=nw +IMPORTLIBPREFIX=imp +endif +ifeq ($(OS_TARGET),netwlibc) +EXEEXT=.nlm +STATICLIBPREFIX= +SHORTSUFFIX=nwl +IMPORTLIBPREFIX=imp +endif +ifeq ($(OS_TARGET),macos) +BATCHEXT= +EXEEXT= +DEBUGSYMEXT=.xcoff +SHORTSUFFIX=mac +IMPORTLIBPREFIX=imp +endif +ifneq ($(findstring $(OS_TARGET),darwin iphonesim),) +BATCHEXT=.sh +EXEEXT= +HASSHAREDLIB=1 +SHORTSUFFIX=dwn +EXEDBGEXT=.dSYM +endif +ifeq ($(OS_TARGET),gba) +EXEEXT=.gba +SHAREDLIBEXT=.so +SHORTSUFFIX=gba +endif +ifeq ($(OS_TARGET),symbian) +SHAREDLIBEXT=.dll +SHORTSUFFIX=symbian +endif +ifeq ($(OS_TARGET),NativeNT) +SHAREDLIBEXT=.dll +SHORTSUFFIX=nativent +endif +ifeq ($(OS_TARGET),wii) +EXEEXT=.dol +SHAREDLIBEXT=.so +SHORTSUFFIX=wii +endif +ifeq ($(OS_TARGET),aix) +BATCHEXT=.sh +EXEEXT= +SHORTSUFFIX=aix +endif +ifeq ($(OS_TARGET),java) +OEXT=.class +ASMEXT=.j +SHAREDLIBEXT=.jar +SHORTSUFFIX=java +endif +ifeq ($(CPU_TARGET),jvm) +ifeq ($(OS_TARGET),android) +OEXT=.class +ASMEXT=.j +SHAREDLIBEXT=.jar +SHORTSUFFIX=android +endif +endif +ifeq ($(OS_TARGET),msdos) +STATICLIBPREFIX= +STATICLIBEXT=.a +SHORTSUFFIX=d16 +endif +ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),) +FPCMADE=fpcmade.$(SHORTSUFFIX) +ZIPSUFFIX=$(SHORTSUFFIX) +ZIPCROSSPREFIX= +ZIPSOURCESUFFIX=src +ZIPEXAMPLESUFFIX=exm +else +FPCMADE=fpcmade.$(TARGETSUFFIX) +ZIPSOURCESUFFIX=.source +ZIPEXAMPLESUFFIX=.examples +ifdef CROSSCOMPILE +ZIPSUFFIX=.$(SOURCESUFFIX) +ZIPCROSSPREFIX=$(TARGETSUFFIX)- +else +ZIPSUFFIX=.$(TARGETSUFFIX) +ZIPCROSSPREFIX= +endif +endif +ifndef ECHO +ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(ECHO),) +ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(ECHO),) +ECHO= __missing_command_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= __missing_command_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= __missing_command_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= __missing_command_CPPROG +else +CPPROG:=$(firstword $(CPPROG)) +endif +endif +export CPPROG +ifndef RMPROG +RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(RMPROG),) +RMPROG= __missing_command_RMPROG +else +RMPROG:=$(firstword $(RMPROG)) +endif +endif +export RMPROG +ifndef MVPROG +MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(MVPROG),) +MVPROG= __missing_command_MVPROG +else +MVPROG:=$(firstword $(MVPROG)) +endif +endif +export MVPROG +ifndef MKDIRPROG +MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(MKDIRPROG),) +MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(MKDIRPROG),) +MKDIRPROG= __missing_command_MKDIRPROG +else +MKDIRPROG:=$(firstword $(MKDIRPROG)) +endif +else +MKDIRPROG:=$(firstword $(MKDIRPROG)) +endif +endif +export MKDIRPROG +ifndef ECHOREDIR +ifndef inUnix +ECHOREDIR=echo +else +ECHOREDIR=$(ECHO) +endif +endif +ifndef COPY +COPY:=$(CPPROG) -fp +endif +ifndef COPYTREE +COPYTREE:=$(CPPROG) -Rfp +endif +ifndef MKDIRTREE +MKDIRTREE:=$(MKDIRPROG) -p +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= __missing_command_PPUMOVE +else +PPUMOVE:=$(firstword $(PPUMOVE)) +endif +endif +export PPUMOVE +ifndef FPCMAKE +FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(FPCMAKE),) +FPCMAKE= __missing_command_FPCMAKE +else +FPCMAKE:=$(firstword $(FPCMAKE)) +endif +endif +export FPCMAKE +ifndef ZIPPROG +ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(ZIPPROG),) +ZIPPROG= __missing_command_ZIPPROG +else +ZIPPROG:=$(firstword $(ZIPPROG)) +endif +endif +export ZIPPROG +ifndef TARPROG +TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(TARPROG),) +TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(TARPROG),) +TARPROG= __missing_command_TARPROG +else +TARPROG:=$(firstword $(TARPROG)) +endif +else +TARPROG:=$(firstword $(TARPROG)) +endif +endif +export TARPROG +ASNAME=$(BINUTILSPREFIX)as +LDNAME=$(BINUTILSPREFIX)ld +ARNAME=$(BINUTILSPREFIX)ar +RCNAME=$(BINUTILSPREFIX)rc +NASMNAME=$(BINUTILSPREFIX)nasm +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 +ifndef NASMPROG +ifdef CROSSBINDIR +NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT) +else +NASMPROG=$(NASMNAME) +endif +endif +AS=$(ASPROG) +LD=$(LDPROG) +RC=$(RCPROG) +AR=$(ARPROG) +NASM=$(NASMPROG) +ifdef inUnix +PPAS=./ppas$(SRCBATCHEXT) +else +PPAS=ppas$(SRCBATCHEXT) +endif +ifdef inUnix +LDCONFIG=ldconfig +else +LDCONFIG= +endif +ifdef DATE +DATESTR:=$(shell $(DATE) +%Y%m%d) +else +DATESTR= +endif +ZIPOPT=-9 +ZIPEXT=.zip +ifeq ($(USETAR),bz2) +TAROPT=vj +TAREXT=.tar.bz2 +else +TAROPT=vz +TAREXT=.tar.gz +endif +ifndef NOCPUDEF +override FPCOPTDEF=$(ARCH) +endif +ifneq ($(OS_TARGET),$(OS_SOURCE)) +override FPCOPT+=-T$(OS_TARGET) +endif +ifneq ($(CPU_TARGET),$(CPU_SOURCE)) +override FPCOPT+=-P$(ARCH) +endif +ifeq ($(OS_SOURCE),openbsd) +override FPCOPT+=-FD$(NEW_BINUTILS_PATH) +override FPCMAKEOPT+=-FD$(NEW_BINUTILS_PATH) +endif +ifndef CROSSBOOTSTRAP +ifneq ($(BINUTILSPREFIX),) +override FPCOPT+=-XP$(BINUTILSPREFIX) +endif +ifneq ($(BINUTILSPREFIX),) +override FPCOPT+=-Xr$(RLINKPATH) +endif +endif +ifndef CROSSCOMPILE +ifneq ($(BINUTILSPREFIX),) +override FPCMAKEOPT+=-XP$(BINUTILSPREFIX) +endif +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 +ifneq ($(findstring 2.0.,$(FPC_VERSION)),) +ifeq ($(CPU_TARGET),i386) +FPCCPUOPT:=-OG2p3 +endif +ifeq ($(CPU_TARGET),powerpc) +FPCCPUOPT:=-O1r +endif +else +FPCCPUOPT:=-O2 +endif +override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n +override FPCOPTDEF+=RELEASE +endif +ifdef STRIP +override FPCOPT+=-Xs +endif +ifdef OPTIMIZE +override FPCOPT+=-O2 +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 CREATESHARED +override FPCOPT+=-Cg +endif +ifneq ($(findstring $(OS_TARGET),dragonfly freebsd openbsd netbsd linux solaris),) +ifeq ($(CPU_TARGET),x86_64) +override FPCOPT+=-Cg +endif +endif +ifdef LINKSHARED +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 AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET) +override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE) +ifneq ($(AFULL_TARGET),$(AFULL_SOURCE)) +override ACROSSCOMPILE=1 +endif +ifdef ACROSSCOMPILE +override FPCOPT+=$(CROSSOPT) +endif +override COMPILER:=$(strip $(FPC) $(FPCOPT)) +ifneq (,$(findstring -sh ,$(COMPILER))) +UseEXECPPAS=1 +endif +ifneq (,$(findstring -s ,$(COMPILER))) +ifeq ($(FULL_SOURCE),$(FULL_TARGET)) +UseEXECPPAS=1 +endif +endif +ifneq ($(UseEXECPPAS),1) +EXECPPAS= +else +ifdef RUNBATCH +EXECPPAS:=@$(RUNBATCH) $(PPAS) +else +EXECPPAS:=@$(PPAS) +endif +endif +.PHONY: fpc_loaders +ifneq ($(TARGET_LOADERS),) +override ALLTARGET+=fpc_loaders +override CLEANTARGET+=fpc_loaders_clean +override INSTALLTARGET+=fpc_loaders_install +override LOADEROFILES:=$(addsuffix $(OEXT),$(TARGET_LOADERS)) +endif +%$(OEXT): %$(LOADEREXT) +ifdef COMPILER_UNITTARGETDIR + $(AS) -o $(COMPILER_UNITTARGETDIR)/$*$(OEXT) $< +else + $(AS) -o $*$(OEXT) $< +endif +fpc_loaders: $(COMPILER_UNITTARGETDIR) $(LOADEROFILES) +fpc_loaders_clean: +ifdef COMPILER_UNITTARGETDIR + -$(DEL) $(addprefix $(COMPILER_UNITTARGETDIR)/,$(LOADEROFILES)) +else + -$(DEL) $(LOADEROFILES) +endif +fpc_loaders_install: + $(MKDIR) $(INSTALL_UNITDIR) +ifdef COMPILER_UNITTARGETDIR + $(INSTALL) $(addprefix $(COMPILER_UNITTARGETDIR)/,$(LOADEROFILES)) $(INSTALL_UNITDIR) +else + $(INSTALL) $(LOADEROFILES) $(INSTALL_UNITDIR) +endif +.PHONY: fpc_units +ifneq ($(TARGET_UNITS)$(TARGET_IMPLICITUNITS),) +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: $(COMPILER_UNITTARGETDIR) $(UNITPPUFILES) +ifdef TARGET_RSTS +override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS)) +override CLEANRSTFILES+=$(RSTFILES) +endif +.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared +$(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 .lpr .dpr .pp .rc .res +$(COMPILER_UNITTARGETDIR): + $(MKDIRTREE) $(COMPILER_UNITTARGETDIR) +$(COMPILER_TARGETDIR): + $(MKDIRTREE) $(COMPILER_TARGETDIR) +%$(PPUEXT): %.pp + $(COMPILER) $< + $(EXECPPAS) +%$(PPUEXT): %.pas + $(COMPILER) $< + $(EXECPPAS) +%$(EXEEXT): %.pp + $(COMPILER) $< + $(EXECPPAS) +%$(EXEEXT): %.pas + $(COMPILER) $< + $(EXECPPAS) +%$(EXEEXT): %.lpr + $(COMPILER) $< + $(EXECPPAS) +%$(EXEEXT): %.dpr + $(COMPILER) $< + $(EXECPPAS) +%.res: %.rc + windres -i $< -o $@ +vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) +vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) +vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) +vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) +vpath %.inc $(COMPILER_INCLUDEDIR) +vpath %$(OEXT) $(COMPILER_UNITTARGETDIR) +vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR) +.PHONY: fpc_shared +override INSTALLTARGET+=fpc_shared_install +ifndef SHARED_LIBVERSION +SHARED_LIBVERSION=$(FPC_VERSION) +endif +ifndef SHARED_LIBNAME +SHARED_LIBNAME=$(PACKAGE_NAME) +endif +ifndef SHARED_FULLNAME +SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT) +endif +ifndef SHARED_LIBUNITS +SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS) +override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS)) +endif +fpc_shared: +ifdef HASSHAREDLIB + $(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1 +ifneq ($(SHARED_BUILD),n) + $(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR) +endif +else + @$(ECHO) Shared Libraries not supported +endif +fpc_shared_install: +ifneq ($(SHARED_BUILD),n) +ifneq ($(SHARED_LIBUNITS),) +ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),) + $(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR) +endif +endif +endif +.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))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) +ifneq ($(UNITTARGETDIRPREFIX),) +override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES))) +override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES)))) +endif +override INSTALL_CREATEPACKAGEFPC=1 +endif +ifdef INSTALLEXEFILES +ifneq ($(TARGETDIRPREFIX),) +override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES))) +endif +endif +fpc_install: all $(INSTALLTARGET) +ifdef INSTALLEXEFILES + $(MKDIR) $(INSTALL_BINDIR) + $(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR) +endif +ifdef INSTALL_CREATEPACKAGEFPC +ifdef FPCMAKE +ifdef PACKAGE_VERSION +ifneq ($(wildcard Makefile.fpc),) + $(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc + $(MKDIR) $(INSTALL_UNITDIR) + $(INSTALL) Package.fpc $(INSTALL_UNITDIR) +endif +endif +endif +endif +ifdef INSTALLPPUFILES + $(MKDIR) $(INSTALL_UNITDIR) + $(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR) +ifneq ($(INSTALLPPULINKFILES),) + $(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR) +endif +ifneq ($(wildcard $(LIB_FULLNAME)),) + $(MKDIR) $(INSTALL_LIBDIR) + $(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR) +ifdef inUnix + ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME) +endif +endif +endif +ifdef INSTALL_FILES + $(MKDIR) $(INSTALL_DATADIR) + $(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR) +endif +fpc_sourceinstall: distclean + $(MKDIR) $(INSTALL_SOURCEDIR) + $(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR) +fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS)) +ifdef HASEXAMPLES + $(MKDIR) $(INSTALL_EXAMPLEDIR) +endif +ifdef EXAMPLESOURCEFILES + $(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR) +endif +ifdef TARGET_EXAMPLEDIRS + $(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR) +endif +.PHONY: fpc_clean fpc_cleanall fpc_distclean +ifdef EXEFILES +override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES)) +override CLEANEXEDBGFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEDBGFILES)) +endif +ifdef CLEAN_PROGRAMS +override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS))) +override CLEANEXEDBGFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEDBGEXT), $(CLEAN_PROGRAMS))) +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))) $(addprefix $(IMPORTLIBPREFIX),$(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 +fpc_clean: $(CLEANTARGET) +ifdef CLEANEXEFILES + -$(DEL) $(CLEANEXEFILES) +endif +ifdef CLEANEXEDBGFILES + -$(DELTREE) $(CLEANEXEDBGFILES) +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) + -$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT) +fpc_cleanall: $(CLEANTARGET) +ifdef CLEANEXEFILES + -$(DEL) $(CLEANEXEFILES) +endif +ifdef COMPILER_UNITTARGETDIR +ifdef CLEANPPUFILES + -$(DEL) $(CLEANPPUFILES) +endif +ifneq ($(CLEANPPULINKFILES),) + -$(DEL) $(CLEANPPULINKFILES) +endif +ifdef CLEANRSTFILES + -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES)) +endif +endif +ifdef CLEAN_FILES + -$(DEL) $(CLEAN_FILES) +endif + -$(DELTREE) units + -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) +ifneq ($(PPUEXT),.ppu) + -$(DEL) *.o *.ppu *.a +endif + -$(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 +fpc_distclean: cleanall +.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) SourceSuffix. $(SOURCESUFFIX) + @$(ECHO) TargetSuffix. $(TARGETSUFFIX) + @$(ECHO) FPC fpmake... $(FPCFPMAKE) + @$(ECHO) + @$(ECHO) == Directory info == + @$(ECHO) + @$(ECHO) Required pkgs... $(REQUIRE_PACKAGES) + @$(ECHO) + @$(ECHO) Basedir......... $(BASEDIR) + @$(ECHO) FPCDir.......... $(FPCDIR) + @$(ECHO) CrossBinDir..... $(CROSSBINDIR) + @$(ECHO) UnitsDir........ $(UNITSDIR) + @$(ECHO) PackagesDir..... $(PACKAGESDIR) + @$(ECHO) + @$(ECHO) GCC library..... $(GCCLIBDIR) + @$(ECHO) Other library... $(OTHERLIBDIR) + @$(ECHO) + @$(ECHO) == Tools info == + @$(ECHO) + @$(ECHO) As........ $(AS) + @$(ECHO) Ld........ $(LD) + @$(ECHO) Ar........ $(AR) + @$(ECHO) Rc........ $(RC) + @$(ECHO) + @$(ECHO) Mv........ $(MVPROG) + @$(ECHO) Cp........ $(CPPROG) + @$(ECHO) Rm........ $(RMPROG) + @$(ECHO) GInstall.. $(GINSTALL) + @$(ECHO) Echo...... $(ECHO) + @$(ECHO) Shell..... $(SHELL) + @$(ECHO) Date...... $(DATE) + @$(ECHO) FPCMake... $(FPCMAKE) + @$(ECHO) PPUMove... $(PPUMOVE) + @$(ECHO) 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) ZipName.............. $(ZIPNAME) + @$(ECHO) ZipPrefix............ $(ZIPPREFIX) + @$(ECHO) ZipCrossPrefix....... $(ZIPCROSSPREFIX) + @$(ECHO) ZipSuffix............ $(ZIPSUFFIX) + @$(ECHO) FullZipName.......... $(FULLZIPNAME) + @$(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 +units: fpc_units +examples: +shared: fpc_shared +install: fpc_install +sourceinstall: fpc_sourceinstall +exampleinstall: fpc_exampleinstall +distinstall: +zipinstall: +zipsourceinstall: +zipexampleinstall: +zipdistinstall: +clean: fpc_clean +distclean: fpc_distclean +cleanall: fpc_cleanall +info: fpc_info +makefiles: fpc_makefiles +.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles +ifneq ($(wildcard fpcmake.loc),) +include fpcmake.loc +endif +.NOTPARALLEL: +include $(INC)/makefile.inc +SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES)) +include $(PROCINC)/makefile.cpu +SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES)) +SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS) +prt0$(OEXT) : $(CPU_TARGET)/prt0.as + $(AS) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) $(CPU_TARGET)/prt0.as +$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp $(SYSDEPS) + $(COMPILER) -Us -Sg $(SYSTEMUNIT).pp $(REDIR) +uuchar$(PPUEXT): $(SYSTEMUNIT)$(PPUEXT) $(INC)/uuchar.pp +objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT) + $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR) +strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc \ + $(PROCINC)/strings.inc $(PROCINC)/stringss.inc \ + $(SYSTEMUNIT)$(PPUEXT) +dos$(PPUEXT) : $(AMIINC)/dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \ + $(SYSTEMUNIT)$(PPUEXT) +sysutils$(PPUEXT) : $(AMIINC)/sysutils.pp $(wildcard $(OBJPASDIR)/sysutils/*.inc) \ + objpas$(PPUEXT) dos$(PPUEXT) sysconst$(PPUEXT) + $(COMPILER) -Fi$(OBJPASDIR)/sysutils $(AMIINC)/sysutils.pp +classes$(PPUEXT) : $(AMIINC)/classes.pp $(wildcard $(OBJPASDIR)/classes/*.inc) \ + sysutils$(PPUEXT) typinfo$(PPUEXT) rtlconsts$(PPUEXT) types$(PPUEXT) fgl$(PPUEXT) + $(COMPILER) -Fi$(OBJPASDIR)/classes $(AMIINC)/classes.pp +typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT) + $(COMPILER) -Sg $(OBJPASDIR)/typinfo.pp $(REDIR) +math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT) + $(COMPILER) $(OBJPASDIR)/math.pp $(REDIR) +character$(PPUEXT): sysutils$(PPUEXT) $(OBJPASDIR)/character.pas objpas$(PPUEXT) rtlconsts$(PPUEXT) + $(COMPILER) $(OBJPASDIR)/character.pas +fgl$(PPUEXT) : $(OBJPASDIR)/fgl.pp objpas$(PPUEXT) types$(PPUEXT) system$(PPUEXT) sysutils$(PPUEXT) + $(COMPILER) $(OBJPASDIR)/fgl.pp +types$(PPUEXT) : $(OBJPASDIR/types.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) + $(COMPILER) $(OBJPASDIR)/types.pp +rtlconsts$(PPUEXT) : $(OBJPASDIR)/rtlconsts.pp + $(COMPILER) $(OBJPASDIR)/rtlconsts.pp +sysconst$(PPUEXT) : $(OBJPASDIR)/sysconst.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) + $(COMPILER) $(OBJPASDIR)/sysconst.pp +dateutil$(PPUEXT) : $(OBJPASDIR)/dateutil.pp + $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/dateutil.pp +macpas$(PPUEXT) : $(INC)/macpas.pp objpas$(PPUEXT) math$(PPUEXT) + $(COMPILER) $(INC)/macpas.pp $(REDIR) +ucomplex$(PPUEXT): $(INC)/ucomplex.pp math$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) +getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT) +heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT) + $(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR) +charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT) +cpall$(PPUEXT): $(RTL)/charmaps/cpall.pas system$(PPUEXT) charset$(PPUEXT) + $(COMPILER) -Fu$(INC) -Fi$(RTL)/charmaps $(RTL)/charmaps/cpall.pas +fpintres$(PPUEXT) : $(INC)/fpintres.pp $(SYSTEMUNIT)$(PPUEXT) + $(COMPILER) $(INC)/fpintres.pp diff --git a/rtl/aros/Makefile.fpc b/rtl/aros/Makefile.fpc new file mode 100644 index 0000000000..65f9ce527a --- /dev/null +++ b/rtl/aros/Makefile.fpc @@ -0,0 +1,235 @@ +# +# Makefile.fpc for Free Pascal Amiga RTL +# + +[package] +main=rtl + +[target] +loaders=prt0 +units=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings \ + fpintres dos heaptrc lineinfo ctypes \ + sysutils fgl classes math typinfo \ + charset cpall getopts \ + types rtlconsts sysconst character +implicitunits=exeinfo cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 \ + cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 \ + unicodedata unicodenumtable +# \ +# exec timer doslib utility hardware inputevent graphics layers \ +# intuition aboxlib mui \ +# these can be moved to packages later +# clipboard datatypes asl ahi tinygl get9 muihelper \ +rsts=math rtlconsts typinfo classes sysconst +#implicitunits=exeinfo + +[require] +nortl=y + +[install] +fpcpackage=y + +[default] +fpcdir=../.. +target=aros +cpu=i386 + +[compiler] +includedir=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +sourcedir=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) + +[prerules] +RTL=.. +INC=$(RTL)/inc +COMMON=$(RTL)/common +PROCINC=$(RTL)/$(CPU_TARGET) +AMIINC=$(RTL)/amicommon + +UNITPREFIX=rtl +SYSTEMUNIT=system + +# Use new feature from 1.0.5 version +# that generates release PPU files +# which will not be recompiled +ifdef RELEASE +override FPCOPT+=-Ur +endif + +# Paths +OBJPASDIR=$(RTL)/objpas + +[rules] +.NOTPARALLEL: +# Get the system independent include file names. +# This will set the following variables : +# SYSINCNAMES +include $(INC)/makefile.inc +SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES)) + +# Get the processor dependent include file names. +# This will set the following variables : +# CPUINCNAMES +include $(PROCINC)/makefile.cpu +SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES)) + +# Put system unit dependencies together. +SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS) + + +# +# Loaders +# + +prt0$(OEXT) : $(CPU_TARGET)/prt0.as + $(AS) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) $(CPU_TARGET)/prt0.as + +# +# Base Units (System, strings, os-dependent-base-unit) +# + +$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp $(SYSDEPS) + $(COMPILER) -Us -Sg $(SYSTEMUNIT).pp $(REDIR) + +uuchar$(PPUEXT): $(SYSTEMUNIT)$(PPUEXT) $(INC)/uuchar.pp + +objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT) + $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR) + +strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc \ + $(PROCINC)/strings.inc $(PROCINC)/stringss.inc \ + $(SYSTEMUNIT)$(PPUEXT) + +# +# System Dependent Units +# + +#ports$(PPUEXT) : ports.pas objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) + +#doscalls$(PPUEXT) : doscalls.pas strings$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) + +# +# TP7 Compatible RTL Units +# + +dos$(PPUEXT) : $(AMIINC)/dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \ + $(SYSTEMUNIT)$(PPUEXT) + +#crt$(PPUEXT) : crt.pas $(INC)/textrec.inc $(SYSTEMUNIT)$(PPUEXT) + +#objects$(PPUEXT) : $(INC)/objects.pp dos$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) + + +#graph$(PPUEXT) : graph.pp + +# +# Delphi Compatible Units +# + +sysutils$(PPUEXT) : $(AMIINC)/sysutils.pp $(wildcard $(OBJPASDIR)/sysutils/*.inc) \ + objpas$(PPUEXT) dos$(PPUEXT) sysconst$(PPUEXT) + $(COMPILER) -Fi$(OBJPASDIR)/sysutils $(AMIINC)/sysutils.pp + +classes$(PPUEXT) : $(AMIINC)/classes.pp $(wildcard $(OBJPASDIR)/classes/*.inc) \ + sysutils$(PPUEXT) typinfo$(PPUEXT) rtlconsts$(PPUEXT) types$(PPUEXT) fgl$(PPUEXT) + $(COMPILER) -Fi$(OBJPASDIR)/classes $(AMIINC)/classes.pp + +typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT) + $(COMPILER) -Sg $(OBJPASDIR)/typinfo.pp $(REDIR) + +math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT) + $(COMPILER) $(OBJPASDIR)/math.pp $(REDIR) + +#varutils$(PPUEXT) : $(OBJPASDIR)/cvarutil.inc $(OBJPASDIR)/varutils.inc \ +# $(OBJPASDIR)/varutilh.inc varutils.pp +# $(COMPILER) -I$(OBJPASDIR) varutils.pp $(REDIR) + +#fmtbcd$(PPUEXT) : $(OBJPASDIR)/fmtbcd.pp objpas$(PPUEXT) sysutils$(PPUEXT) variants$(PPUEXT) classes$(PPUEXT) system$(PPUEXT) +# $(COMPILER) $(OBJPASDIR)/fmtbcd.pp + +character$(PPUEXT): sysutils$(PPUEXT) $(OBJPASDIR)/character.pas objpas$(PPUEXT) rtlconsts$(PPUEXT) + $(COMPILER) $(OBJPASDIR)/character.pas + +fgl$(PPUEXT) : $(OBJPASDIR)/fgl.pp objpas$(PPUEXT) types$(PPUEXT) system$(PPUEXT) sysutils$(PPUEXT) + $(COMPILER) $(OBJPASDIR)/fgl.pp + +types$(PPUEXT) : $(OBJPASDIR/types.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) + $(COMPILER) $(OBJPASDIR)/types.pp + +rtlconsts$(PPUEXT) : $(OBJPASDIR)/rtlconsts.pp + $(COMPILER) $(OBJPASDIR)/rtlconsts.pp + +sysconst$(PPUEXT) : $(OBJPASDIR)/sysconst.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) + $(COMPILER) $(OBJPASDIR)/sysconst.pp + +dateutil$(PPUEXT) : $(OBJPASDIR)/dateutil.pp + $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/dateutil.pp + +# +# Mac Pascal Model +# + +macpas$(PPUEXT) : $(INC)/macpas.pp objpas$(PPUEXT) math$(PPUEXT) + $(COMPILER) $(INC)/macpas.pp $(REDIR) + +# +# Other system-independent RTL Units +# + +ucomplex$(PPUEXT): $(INC)/ucomplex.pp math$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) + +getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT) + +heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT) + $(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR) + +#lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT) + +charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT) + +cpall$(PPUEXT): $(RTL)/charmaps/cpall.pas system$(PPUEXT) charset$(PPUEXT) + $(COMPILER) -Fu$(INC) -Fi$(RTL)/charmaps $(RTL)/charmaps/cpall.pas + +fpintres$(PPUEXT) : $(INC)/fpintres.pp $(SYSTEMUNIT)$(PPUEXT) + $(COMPILER) $(INC)/fpintres.pp + +# +# Other system-dependent RTL Units +# + +#exec$(PPUEXT) : exec.pp execf.inc execd.inc + +#timer$(PPUEXT) : timer.pp timerd.inc timerf.inc + +#utility$(PPUEXT) : utility.pp exec$(PPUEXT) utilf.inc utild1.inc utild2.inc + +#doslib$(PPUEXT) : doslib.pp exec$(PPUEXT) timer$(PPUEXT) doslibd.inc doslibf.inc + +#hardware$(PPUEXT): hardware.pas exec$(PPUEXT) + +#inputevent$(PPUEXT): inputevent.pas exec$(PPUEXT) timer$(PPUEXT) utility$(PPUEXT) + +#graphics$(PPUEXT): graphics.pas exec$(PPUEXT) utility$(PPUEXT) hardware$(PPUEXT) + +#layers$(PPUEXT) : layers.pas exec$(PPUEXT) graphics$(PPUEXT) utility$(PPUEXT) + +#intuition$(PPUEXT): intuition.pas exec$(PPUEXT) graphics$(PPUEXT) utility$(PPUEXT) \ +# inputevent$(PPUEXT) timer$(PPUEXT) layers$(PPUEXT) + +#aboxlib$(PPUEXT): aboxlib.pas + +#clipboard$(PPUEXT): clipboard.pas exec$(PPUEXT) + +#datatype$(PPUEXT): datatypes.pas exec$(PPUEXT) doslib$(PPUEXT) intuition$(PPUEXT) \ +# utility$(PPUEXT) graphics$(PPUEXT) + +#asl$(PPUEXT): asl.pas exec$(PPUEXT) graphics$(PPUEXT) utility$(PPUEXT) + +#ahi$(PPUEXT): ahi.pas exec$(PPUEXT) utility$(PPUEXT) + +#mui$(PPUEXT): mui.pas exec$(PPUEXT) utility$(PPUEXT) intuition$(PPUEXT) graphics$(PPUEXT) + +#tinygl$(PPUEXT): tinygl.pp exec$(PPUEXT) + +#get9$(PPUEXT): get9.pas exec$(PPUEXT) + +#muihelper$(PPUEXT): muihelper.pas intuition$(PPUEXT) mui$(PPUEXT) doslib$(PPUEXT) utility$(PPUEXT) diff --git a/rtl/aros/arosthreads.inc b/rtl/aros/arosthreads.inc new file mode 100644 index 0000000000..fd0d9d0798 --- /dev/null +++ b/rtl/aros/arosthreads.inc @@ -0,0 +1,590 @@ + +type + TThreadEntryfunction = function(data: Pointer): Pointer; cdecl; + + + TMutextKind = (mkExclusive, mkShared); + + TAROSMutex = record + Semaphore: TSignalSemaphore; + end; + PAROSMutex = ^TAROSMutex; + + TCondition = record + Lock: TSignalSemaphore; + Waiters: array of Pointer; + end; + PCondition = ^TCondition; + + TAROSThread = record + Entry: TThreadEntryfunction; + Data: Pointer; + ThreadID: LongWord; + Priority: LongInt; + StackSize: LongInt; + Task: PProcess; + Lock: TSignalSemaphore; + StartupSemaphore: TSignalSemaphore; + EndCondition: PCondition; + EndMutex: PAROSMutex; + EndCount: Integer; + end; + PAROSThread = ^TAROSThread; + + TAROSThreadStruct = record + MutexListSem: TSignalSemaphore; + MutexList: array of PAROSMutex; + // + ThreadListSem: TSignalSemaphore; + ThreadList: array of PAROSThread; + // + ConditionListSem: TSignalSemaphore; + ConditionList: array of PCondition; + // + ThreadMemSem: TSignalSemaphore; + EmptySemaphore: TSignalSemaphore; + // + LastThreadNum: LongWord; + end; + PAROSThreadStruct = ^TAROSThreadStruct; + +var + AROSThreadStruct: PAROSThreadStruct external name 'AROS_THREADLIB'; + + +function CreateNewProcTags(const Tags: array of PtrUInt): PProcess; +begin + CreateNewProcTags := CreateNewProc(@Tags[0]); +end; + +// Mutexe + +function CreateMutex: PAROSMutex; +var + Mutex: PAROSMutex; + Idx, i: Integer; +begin + if not Assigned(AROSThreadStruct) then + Exit; + New(Mutex); + InitSemaphore(@(Mutex^.Semaphore)); + ObtainSemaphore(@(AROSThreadStruct^.MutexListSem)); + Idx := -1; + for i := 0 to High(AROSThreadStruct^.MutexList) do + begin + if not Assigned(AROSThreadStruct^.MutexList[i]) then + begin + Idx := i; + Break; + end; + end; + if Idx < 0 then + begin + Idx := Length(AROSThreadStruct^.MutexList); + SetLength(AROSThreadStruct^.MutexList, Idx + 1); + end; + AROSThreadStruct^.MutexList[Idx] := Mutex; + ReleaseSemaphore(@(AROSThreadStruct^.MutexListSem)); + Result := Mutex; +end; + +procedure DestroyMutex(Mutex: PAROSMutex); +var + i: Integer; +begin + if not Assigned(AROSThreadStruct) then + Exit; + ObtainSemaphore(@(AROSThreadStruct^.MutexListSem)); + for i := 0 to High(AROSThreadStruct^.MutexList) do + begin + if AROSThreadStruct^.MutexList[i] = Mutex then + begin + FillChar(Mutex^.Semaphore, SizeOf(TSignalSemaphore), 0); + Dispose(Mutex); + AROSThreadStruct^.MutexList[i] := nil; + end; + end; + ReleaseSemaphore(@(AROSThreadStruct^.MutexListSem)); +end; + + +function IsValidMutex(Mutex: PAROSMutex): Boolean; +var + i: Integer; +begin + Result := False; + if not Assigned(AROSThreadStruct) then + Exit; + ObtainSemaphore(@(AROSThreadStruct^.MutexListSem)); + for i := 0 to High(AROSThreadStruct^.MutexList) do + begin + if AROSThreadStruct^.MutexList[i] = Mutex then + begin + Result := True; + Break; + end; + end; + ReleaseSemaphore(@(AROSThreadStruct^.MutexListSem)); +end; + +procedure LockMutex(Mutex: PAROSMutex); +begin + if IsValidMutex(Mutex) then + begin + ObtainSemaphore(@(Mutex^.Semaphore)); + end; +end; + +function TryLockMutex(Mutex: PAROSMutex): Boolean; +begin + Result := False; + if IsValidMutex(Mutex) then + begin + Result := AttemptSemaphore(@(Mutex^.Semaphore)) <> 0; + end; +end; + +procedure UnLockMutex(Mutex: PAROSMutex); +begin + if IsValidMutex(Mutex) then + begin + ReleaseSemaphore(@(Mutex^.Semaphore)); + end; +end; + +// Conditions + +function CreateCondition: PCondition; +var + Idx, i: Integer; + NewCond: PCondition; +begin + if not Assigned(AROSThreadStruct) then + Exit; + New(NewCond); + SetLength(NewCond^.Waiters, 0); + InitSemaphore(@(NewCond^.Lock)); + ObtainSemaphore(@(AROSThreadStruct^.ConditionListSem)); + Idx := -1; + for i := 0 to High(AROSThreadStruct^.ConditionList) do + begin + if not Assigned(AROSThreadStruct^.ConditionList[i]) then + begin + Idx := i; + Break; + end; + end; + if Idx < 0 then + begin + Idx := Length(AROSThreadStruct^.ConditionList); + SetLength(AROSThreadStruct^.ConditionList, Idx + 1); + end; + AROSThreadStruct^.ConditionList[Idx] := NewCond; + ReleaseSemaphore(@(AROSThreadStruct^.ConditionListSem)); + Result := NewCond; +end; + +function DestroyCondition(Cond: PCondition): boolean; +var + Idx, i: Integer; +begin + if not Assigned(AROSThreadStruct) then + Exit; + ObtainSemaphore(@(Cond^.Lock)); + if Length(Cond^.Waiters) > 0 then + begin + ReleaseSemaphore(@(Cond^.Lock)); + Result := False; + Exit; + end; + ObtainSemaphore(@(AROSThreadStruct^.ConditionListSem)); + Idx := -1; + for i := 0 to High(AROSThreadStruct^.ConditionList) do + begin + if AROSThreadStruct^.ConditionList[i] = Cond then + begin + AROSThreadStruct^.ConditionList[i] := nil; + Dispose(Cond); + Break; + end; + end; + ReleaseSemaphore(@(AROSThreadStruct^.ConditionListSem)); + Result := True; +end; + +function WaitCondition(Cond: PCondition; Mutex: PAROSMutex): boolean; +var + Idx: Integer; +begin + if (not Assigned(Cond)) or (not Assigned(Mutex)) then + begin + Result := False; + Exit; + end; + ObtainSemaphore(@Cond^.Lock); + Idx := Length(Cond^.Waiters); + SetLength(Cond^.Waiters, Idx + 1); + Cond^.Waiters[Idx] := FindTask(nil); + ReleaseSemaphore(@Cond^.Lock); + + Forbid(); + UnLockMutex(Mutex); + Wait(SIGF_SINGLE); + Permit(); + LockMutex(Mutex); + Result := True; +end; + +procedure SignalCondition(Cond: PCondition); +var + Waiter: PTask; + Idx: Integer; +begin + if not Assigned(Cond) then + Exit; + ObtainSemaphore(@Cond^.Lock); + Waiter := nil; + //debugln(' found ' + IntToStr(Cond^.Waiters.Count) + ' Waiter'); + if Length(Cond^.Waiters) > 0 then + begin + Idx := High(Cond^.Waiters); + Waiter := Cond^.Waiters[Idx]; + SetLength(Cond^.Waiters, Idx); + end; + ReleaseSemaphore(@Cond^.Lock); + if not Assigned(Waiter) then + begin + //debugln('Waiter not assigned'); + Exit; + end; + //debugln('Signal Waiter'); + Signal(Waiter, SIGF_SINGLE); +end; + +procedure BroadcastCondition(Cond: PCondition); +var + Waiter: PTask; + I: Integer; +begin + if not Assigned(Cond) then + Exit; + Waiter := nil; + ObtainSemaphore(@Cond^.Lock); + for i := 0 to High(Cond^.Waiters) do + begin + Waiter := Cond^.Waiters[i]; + Signal(Waiter, SIGF_SINGLE); + end; + SetLength(Cond^.Waiters, 0); + ReleaseSemaphore(@Cond^.Lock); +end; + +// Threads + +procedure StarterFunc; cdecl; +var + NewThread: PAROSThread; + StackMem: Pointer; + sswap: TStackSwapStruct; + Proc: PTask; +begin + Proc := FindTask(nil); + NewThread := PAROSThread(Proc^.tc_UserData); + // create New Stack + StackMem := GetMem(NewThread^.StackSize); + sswap.stk_Lower := StackMem; + sswap.stk_Upper := Pointer(PtrUInt(sswap.stk_Lower) + NewThread^.StackSize); + sswap.stk_Pointer := sswap.stk_Upper; + ReleaseSemaphore(@AROSThreadStruct^.ThreadMemSem); + // semaphore against too fast startup + ReleaseSemaphore(@(NewThread^.StartupSemaphore)); + // swap stack, run program, swap stack back + Stackswap(@sswap); + NewThread^.Entry(NewThread^.Data); + Stackswap(@sswap); + //debugln('5'); + + // Free stack memory + ObtainSemaphore(@AROSThreadStruct^.ThreadMemSem); + FreeMem(StackMem); + ReleaseSemaphore(@AROSThreadStruct^.ThreadMemSem); + // finished mark as finished + ObtainSemaphore(@NewThread^.Lock); + NewThread^.Task := nil; + ReleaseSemaphore(@NewThread^.Lock); + // tell the others we are finished! + //Debugln('wait for end ' + IntToStr(NewThread^.ThreadId)); + LockMutex(NewThread^.EndMutex); + BroadcastCondition(NewThread^.EndCondition); + UnLockMutex(NewThread^.EndMutex); + //Debugln('End ' + IntToStr(NewThread^.ThreadId)); +end; + +procedure EmptyFunc; +begin + Delay(1); + ReleaseSemaphore(@AROSThreadStruct^.EmptySemaphore); +end; + + +function AROSCreateThread(Entry: TThreadEntryfunction; data: Pointer; StackSize: Integer = 262144; Priority: Integer = 0): LongWord; +var + NewThread: PAROSThread; + Idx, i: Integer; +begin + if not Assigned(AROSThreadStruct) then + Exit; + New(NewThread); + ObtainSemaphore(@AROSThreadStruct^.ThreadListSem); + Idx := -1; + for i := 0 to High(AROSThreadStruct^.ThreadList) do + begin + if not Assigned(AROSThreadStruct^.ThreadList[i]) then + begin + Idx := i; + Break; + end; + end; + if Idx < 0 then + begin + Idx := Length(AROSThreadStruct^.ThreadList); + SetLength(AROSThreadStruct^.ThreadList, Idx + 1); + end; + Inc(AROSThreadStruct^.LastThreadNum); + AROSThreadStruct^.ThreadList[Idx] := NewThread; + NewThread^.ThreadID := AROSThreadStruct^.LastThreadNum; + NewThread^.Entry := Entry; + NewThread^.Data := Data; + NewThread^.Priority := Priority; + NewThread^.StackSize := StackSize; + InitSemaphore(@(NewThread^.Lock)); + InitSemaphore(@(NewThread^.StartupSemaphore)); + NewThread^.EndCondition := CreateCondition; + NewThread^.EndMutex := CreateMutex; + NewThread^.EndCount := 0; + ReleaseSemaphore(@AROSThreadStruct^.ThreadListSem); + + ObtainSemaphore(@AROSThreadStruct^.ThreadMemSem); + + // Semaphore for too fast startup + ObtainSemaphore(@(NewThread^.StartupSemaphore)); + + // a very ugly Bugfix, for crashing AROS, on the very first Task after reboot + // recheck later if can be removed + if NewThread^.ThreadID = 1 then + begin + //debugln('make empty thread'); + ObtainSemaphore(@AROSThreadStruct^.EmptySemaphore); + NewThread^.Task := CreateNewProcTags([ + NP_Entry, PtrUInt(@EmptyFunc), + TAG_DONE, TAG_END]); + ObtainSemaphore(@AROSThreadStruct^.EmptySemaphore); + Delay(1); + end; + // + NewThread^.Task := CreateNewProcTags([ + NP_Entry, PtrUInt(@StarterFunc), + //NP_Name, PtrUInt(PChar('Thread' + IntToStr(LastThreadNum))), + //NP_StackSize, 10024 * 1024, + NP_Priority, Priority, + NP_UserData, PtrUInt(NewThread), + TAG_DONE, TAG_END]); + Result := NewThread^.ThreadID; +end; + +function AROSCurrentThread: LongInt; +var + Task: PProcess; + i: Integer; +begin + Result := 0; + Task := PProcess(FindTask(nil)); + ObtainSemaphore(@AROSThreadStruct^.ThreadListSem); + for i := 0 to High(AROSThreadStruct^.ThreadList) do + begin + if Assigned(AROSThreadStruct^.ThreadList[i]) then + begin + if AROSThreadStruct^.ThreadList[i]^.Task = Task then + begin + Result := AROSThreadStruct^.ThreadList[i]^.ThreadID; + Break; + end; + end; + end; + ReleaseSemaphore(@AROSThreadStruct^.ThreadListSem); +end; + + +function AROSWaitThread(ThreadID: LongWord): Boolean; +var + Thread: PAROSThread; + Idx, i: Integer; +begin + if not Assigned(AROSThreadStruct) then + Exit; + ObtainSemaphore(@AROSThreadStruct^.ThreadListSem); + Thread := nil; + Idx := -1; + for i := 0 to High(AROSThreadStruct^.ThreadList) do + begin + if Assigned(AROSThreadStruct^.ThreadList[i]) then + begin + if AROSThreadStruct^.ThreadList[i]^.ThreadID = ThreadID then + begin + Thread := AROSThreadStruct^.ThreadList[i]; + Idx := i; + break; + end; + end; + end; + ReleaseSemaphore(@AROSThreadStruct^.ThreadListSem); + if Thread = nil then + begin + //debugln('Thread not found'); + Result := False; + Exit; + end; + + // check some + ObtainSemaphore(@Thread^.Lock); + // hmm thats me... I do not wait for myself + if Thread^.Task = PProcess(FindTask(nil)) then + begin + //debugln(' hmm its me :O ' + IntToStr(ThreadID)); + ReleaseSemaphore(@Thread^.Lock); + Result := False; + Exit; + end; + // wait that the thread start is finished somehow ;) + ObtainSemaphore(@(Thread^.StartupSemaphore)); + ReleaseSemaphore(@(Thread^.StartupSemaphore)); + // check if Task is still running + if Thread^.Task <> nil then + begin + Inc(Thread^.EndCount); + ReleaseSemaphore(@Thread^.Lock); + LockMutex(Thread^.EndMutex); + //debugln(' Wait condition ' + IntToStr(ThreadID)); + WaitCondition(Thread^.EndCondition, Thread^.EndMutex); + //debugln(' got condition ' + IntToStr(ThreadID)); + UnlockMutex(Thread^.EndMutex); + ObtainSemaphore(@Thread^.Lock); + Dec(Thread^.EndCount); + end; + if Thread^.EndCount > 0 then + begin + ReleaseSemaphore(@Thread^.Lock); + Result := True; + Exit; + end; + if Assigned(AROSThreadStruct) then + begin + // destroy Thread + ObtainSemaphore(@AROSThreadStruct^.ThreadListSem); + AROSThreadStruct^.ThreadList[Idx] := nil; + ReleaseSemaphore(@AROSThreadStruct^.ThreadListSem); + end; + DestroyCondition(Thread^.EndCondition); + DestroyMutex(Thread^.EndMutex); + Dispose(Thread); + Result := true; +end; + +function AROSCurrentThread: LongWord; +var + i: Integer; + CurTask: PProcess; +begin + if not Assigned(AROSThreadStruct) then + Exit; + Result := 0; + ObtainSemaphore(@AROSThreadStruct^.ThreadListSem); + CurTask := PProcess(FindTask(nil)); + for i := 0 to High(AROSThreadStruct^.ThreadList) do + begin + if Assigned(AROSThreadStruct^.ThreadList[i]) then + begin + if AROSThreadStruct^.ThreadList[i]^.Task = CurTask then + begin + Result := AROSThreadStruct^.ThreadList[i]^.ThreadID; + Break; + end; + end; + end; + ReleaseSemaphore(@AROSThreadStruct^.ThreadListSem); +end; + + +procedure WaitAllThreads; +var + i: Integer; + TID: LongWord; +begin + if not Assigned(AROSThreadStruct) then + Exit; + ObtainSemaphore(@AROSThreadStruct^.ThreadListSem); + i := 0; + while i <= High(AROSThreadStruct^.ThreadList) do + begin + if Assigned(AROSThreadStruct^.ThreadList[i]) then + begin + TID := AROSThreadStruct^.ThreadList[i]^.ThreadID; + // + ObtainSemaphore(@(AROSThreadStruct^.ThreadList[i]^.StartupSemaphore)); + ReleaseSemaphore(@(AROSThreadStruct^.ThreadList[i]^.StartupSemaphore)); + // + ReleaseSemaphore(@AROSThreadStruct^.ThreadListSem); + AROSWaitThread(TID); + ObtainSemaphore(@AROSThreadStruct^.ThreadListSem); + end; + Inc(i); + end; + ReleaseSemaphore(@AROSThreadStruct^.ThreadListSem); +end; + +{$ifdef THREAD_SYSTEM} + +procedure InitThreadLib; +begin + New(AROSThreadStruct); + AROSThreadStruct^.LastThreadNum := 0; + InitSemaphore(@(AROSThreadStruct^.MutexListSem)); + InitSemaphore(@(AROSThreadStruct^.ConditionListSem)); + InitSemaphore(@(AROSThreadStruct^.ThreadListSem)); + InitSemaphore(@(AROSThreadStruct^.ThreadMemSem)); + InitSemaphore(@(AROSThreadStruct^.EmptySemaphore)); +end; + +procedure FinishThreadLib; +var + i: Integer; +begin + if not Assigned(AROSThreadStruct) then + Exit; + WaitAllThreads; + ObtainSemaphore(@AROSThreadStruct^.MutexListSem); + i := 0; + for i := 0 to High(AROSThreadStruct^.MutexList) do + begin + if Assigned(AROSThreadStruct^.MutexList[i]) then + begin + Dispose(AROSThreadStruct^.MutexList[i]); + end; + end; + ReleaseSemaphore(@AROSThreadStruct^.MutexListSem); + ObtainSemaphore(@AROSThreadStruct^.ConditionListSem); + i := 0; + for i := 0 to High(AROSThreadStruct^.ConditionList) do + begin + if Assigned(AROSThreadStruct^.ConditionList[i]) then + begin + Dispose(AROSThreadStruct^.ConditionList[i]); + end; + end; + ReleaseSemaphore(@AROSThreadStruct^.ConditionListSem); + Dispose(AROSThreadStruct); + AROSThreadStruct := nil; +end; + +{$endif THREAD_SYSTEM} + diff --git a/rtl/aros/doslibd.inc b/rtl/aros/doslibd.inc new file mode 100644 index 0000000000..8e01a3c23b --- /dev/null +++ b/rtl/aros/doslibd.inc @@ -0,0 +1,1371 @@ +{ + This file is part of the Free Pascal run time library. + + dos definitions (V50) for MorphOS/PowerPC + Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved. + + Free Pascal conversion + Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. <www.genesi.lu> + + AROS conversion + Copyright (c) 2011 Marcus Sackrow + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} + + + +{ * dos global definitions + ********************************************************************* + * } + + +const // Checked OK 04.08.2011 ALB + DOSNAME = 'dos.library'; + +const // Checked OK 04.08.2011 ALB + DOSTRUE = -1; + DOSFALSE = 0; + +const // Checked OK 04.08.2011 ALB + MODE_OLDFILE = 1005; + MODE_NEWFILE = 1006; + MODE_READWRITE = 1004; + +const // Checked OK 04.08.2011 ALB + OFFSET_BEGINNING = -1; + OFFSET_CURRENT = 0; + OFFSET_END = 1; + +const // Checked OK 04.08.2011 ALB + BITSPERBYTE = 8; + BYTESPERLONG = 4; + BITSPERLONG = 32; + _MAXINT = $7FFFFFFF; + _MININT = $80000000; + +const // Checked OK 04.08.2011 ALB + SHARED_LOCK = -2; + ACCESS_READ = SHARED_LOCK; + EXCLUSIVE_LOCK = -1; + ACCESS_WRITE = EXCLUSIVE_LOCK; + +type // Checked OK 04.08.2011 ALB + PDateStamp = ^TDateStamp; + TDateStamp = record + ds_Days : LongInt; + ds_Minute: LongInt; + ds_Tick : LongInt; + end; + +const // Checked OK 04.08.2011 ALB + TICKS_PER_SECOND = 50; + +const // Checked OK 04.08.2011 ALB + MAXFILENAMELENGTH = 108; + MAXCOMMENTLENGTH = 80; + +type // Checked OK 04.08.2011 ALB + PFileInfoBlock = ^TFileInfoBlock; + TFileInfoBlock = record + fib_DiskKey : PtrUInt; + fib_DirEntryType: LongInt; + fib_FileName : array[0..MAXFILENAMELENGTH - 1] of char; + fib_Protection : LongInt; + fib_EntryType : LongInt; + fib_Size : LongInt; + fib_NumBlocks : LongInt; + fib_Date : TDateStamp; + fib_Comment : Array[0..MAXCOMMENTLENGTH - 1] Of char; + + fib_OwnerUID : Word; + fib_OwnerGID : Word; + + fib_Reserved : array[0..31] of char; + end; + +const // Checked OK 04.08.2011 ALB + FIBB_OTR_READ = 15; + FIBB_OTR_WRITE = 14; + FIBB_OTR_EXECUTE = 13; + FIBB_OTR_DELETE = 12; + + FIBB_GRP_READ = 11; + FIBB_GRP_WRITE = 10; + FIBB_GRP_EXECUTE = 9; + FIBB_GRP_DELETE = 8; + + FIBB_SCRIPT = 6; // File is a script (DOS or ARexx). + FIBB_PURE = 5; // Make program resident on execution. + FIBB_ARCHIVE = 4; // File was archived (not used by OS). + FIBB_READ = 3; // File is readable. + FIBB_WRITE = 2; // File is writable. + FIBB_EXECUTE = 1; // File is executable (no scripts!). + FIBB_DELETE = 0; // File is deleteable. + +const // Checked OK 04.08.2011 ALB + FIBF_OTR_READ = (1 shl FIBB_OTR_READ); + FIBF_OTR_WRITE = (1 shl FIBB_OTR_WRITE); + FIBF_OTR_EXECUTE = (1 shl FIBB_OTR_EXECUTE); + FIBF_OTR_DELETE = (1 shl FIBB_OTR_DELETE); + + FIBF_GRP_READ = (1 shl FIBB_GRP_READ); + FIBF_GRP_WRITE = (1 shl FIBB_GRP_WRITE); + FIBF_GRP_EXECUTE = (1 shl FIBB_GRP_EXECUTE); + FIBF_GRP_DELETE = (1 shl FIBB_GRP_DELETE); + + FIBF_SCRIPT = (1 shl FIBB_SCRIPT); + FIBF_PURE = (1 shl FIBB_PURE); + FIBF_ARCHIVE = (1 shl FIBB_ARCHIVE); + FIBF_READ = (1 shl FIBB_READ); + FIBF_WRITE = (1 shl FIBB_WRITE); + FIBF_EXECUTE = (1 shl FIBB_EXECUTE); + FIBF_DELETE = (1 shl FIBB_DELETE); + +const // Checked OK 04.08.2011 ALB + FAULT_MAX = 82; + + +type // Checked OK 04.08.2011 ALB + BPTR = Pointer; + BSTR = Pointer; + +type // Checked OK 04.08.2011 ALB + PInfoData = ^TInfoData; + TInfoData = record + id_NumSoftErrors: LongInt; // Number of soft errors on device. + id_UnitNumber : LongInt; // Unit number of device. + id_DiskState : LongInt; // State the current volume is in (see below). + id_NumBlocks : LongInt; // Number of blocks on device. + id_NumBlocksUsed: LongInt; // Number of blocks in use. + id_BytesPerBlock: LongInt; // Bytes per block. + id_DiskType : LongInt; // Type of disk (see below). + id_VolumeNode : BPTR; + id_InUse : PtrUInt; // Set, if device is in use. + end; + + +const // Checked OK 04.08.2011 ALB + ID_WRITE_PROTECTED = 80; + ID_VALIDATING = 81; + ID_VALIDATED = 82; + + ID_NO_DISK_PRESENT = -1; + ID_UNREADABLE_DISK = $42414400; + ID_DOS_DISK = $444F5300; + ID_FFS_DISK = $444F5301; + ID_INTER_DOS_DISK = $444F5302; + ID_INTER_FFS_DISK = $444F5303; + ID_FASTDIR_DOS_DISK = $444F5304; + ID_FASTDIR_FFS_DISK = $444F5305; + ID_LNFS_DOS_DISK = $444F5306; + ID_LNFS_FFS_DISK = $444F5307; + ID_NOT_REALLY_DOS = $4E444F53; + ID_KICKSTART_DISK = $4B49434B; + ID_MSDOS_DISK = $4d534400; + ID_SFS_BE_DISK = $53465330; + ID_SFS_LE_DISK = $73667330; + +const // Checked OK 04.08.2011 ALB + ERROR_UNKNOWN = 100; + ERROR_NO_FREE_STORE = 103; + ERROR_TASK_TABLE_FULL = 105; + ERROR_BAD_TEMPLATE = 114; + ERROR_BAD_NUMBER = 115; + ERROR_REQUIRED_ARG_MISSING = 116; + ERROR_KEY_NEEDS_ARG = 117; + ERROR_TOO_MANY_ARGS = 118; + ERROR_UNMATCHED_QUOTES = 119; + ERROR_LINE_TOO_LONG = 120; + ERROR_FILE_NOT_OBJECT = 121; + ERROR_INVALID_RESIDENT_LIBRARY = 122; + ERROR_NO_DEFAULT_DIR = 201; + ERROR_OBJECT_IN_USE = 202; + ERROR_OBJECT_EXISTS = 203; + ERROR_DIR_NOT_FOUND = 204; + ERROR_OBJECT_NOT_FOUND = 205; + ERROR_BAD_STREAM_NAME = 206; + ERROR_OBJECT_TOO_LARGE = 207; + ERROR_ACTION_NOT_KNOWN = 209; + ERROR_INVALID_COMPONENT_NAME = 210; + ERROR_INVALID_LOCK = 211; + ERROR_OBJECT_WRONG_TYPE = 212; + ERROR_DISK_NOT_VALIDATED = 213; + ERROR_DISK_WRITE_PROTECTED = 214; + ERROR_RENAME_ACROSS_DEVICES = 215; + ERROR_DIRECTORY_NOT_EMPTY = 216; + ERROR_TOO_MANY_LEVELS = 217; + ERROR_DEVICE_NOT_MOUNTED = 218; + ERROR_SEEK_ERROR = 219; + ERROR_COMMENT_TOO_BIG = 220; + ERROR_DISK_FULL = 221; + ERROR_DELETE_PROTECTED = 222; + ERROR_WRITE_PROTECTED = 223; + ERROR_READ_PROTECTED = 224; + ERROR_NOT_A_DOS_DISK = 225; + ERROR_NO_DISK = 226; + ERROR_NO_MORE_ENTRIES = 232; + + ERROR_IS_SOFT_LINK = 233; + ERROR_OBJECT_LINKED = 234; + ERROR_BAD_HUNK = 235; + ERROR_NOT_IMPLEMENTED = 236; + ERROR_RECORD_NOT_LOCKED = 240; + ERROR_LOCK_COLLISION = 241; + ERROR_LOCK_TIMEOUT = 242; + ERROR_UNLOCK_ERROR = 243; + +const // Checked OK 04.08.2011 ALB + RETURN_OK = 0; + RETURN_WARN = 5; + RETURN_ERROR = 10; + RETURN_FAIL = 20; + +const // Checked OK 04.08.2011 ALB + SIGBREAKB_CTRL_C = 12; + SIGBREAKB_CTRL_D = 13; + SIGBREAKB_CTRL_E = 14; + SIGBREAKB_CTRL_F = 15; + + SIGBREAKF_CTRL_C = (1 shl SIGBREAKB_CTRL_C); + SIGBREAKF_CTRL_D = (1 shl SIGBREAKB_CTRL_D); + SIGBREAKF_CTRL_E = (1 shl SIGBREAKB_CTRL_E); + SIGBREAKF_CTRL_F = (1 shl SIGBREAKB_CTRL_F); + +const // Checked OK 04.08.2011 ALB + LOCK_DIFFERENT = -1; + LOCK_SAME = 0; + LOCK_SAME_VOLUME = 1; + +const // Checked OK 04.08.2011 ALB + CHANGE_LOCK = 0; + CHANGE_FH = 1; + +const // Checked OK 04.08.2011 ALB + LINK_HARD = 0; + LINK_SOFT = 1; + +const // Checked OK 04.08.2011 ALB + ITEM_EQUAL = -2; + ITEM_ERROR = -1; + ITEM_NOTHING = 0; + ITEM_UNQUOTED = 1; + ITEM_QUOTED = 2; + +const // Checked OK 04.08.2011 ALB + DOS_FILEHANDLE = 0; + DOS_EXALLCONTROL = 1; + DOS_FIB = 2; + DOS_STDPKT = 3; + DOS_CLI = 4; + DOS_RDARGS = 5; + + + +{ * dos date/time definitions + ********************************************************************* + * } + + +type // Checked OK 04.08.2011 ALB + { * Required to avoid conflict with default types * } + _PDateTime = ^_TDateTime; + _TDateTime = record + dat_Stamp : TDateStamp; + dat_Format : Byte; + dat_Flags : Byte; + dat_StrDay : PByte; + dat_StrDate: PByte; + dat_StrTime: PByte; + end; + +const // Checked OK 04.08.2011 ALB + LEN_DATSTRING = 16; + +const // Checked OK 04.08.2011 ALB + DTB_SUBST = 0; + DTF_SUBST = (1 Shl DTB_SUBST); + DTB_FUTURE = 1; + DTF_FUTURE = (1 Shl DTB_FUTURE); + +const // Checked OK 04.08.2011 ALB + FORMAT_DOS = 0; + FORMAT_INT = 1; + FORMAT_USA = 2; + FORMAT_CDN = 3; + FORMAT_MAX = FORMAT_CDN; + FORMAT_DEF = 4; + + + +{ * dos extended structures definitions + ********************************************************************* + * } + + +type // Checked OK 04.08.2011 ALB + PProcess = ^TProcess; + TProcess = record + pr_Task : TTask; // Embedded task structure + pr_MsgPort : TMsgPort; // Processes standard message-port. Used for various puposes. + pr_Pad : Word; // Private + pr_SegList : BPTR; // SegList array, used by this process. + pr_StackSize : LongInt; // StackSize of the current process. + pr_GlobVec : Pointer; + pr_TaskNum : LongInt; // CLI process number. This may be 0, in which case the process is not connected to a CLI. + pr_StackBase : BPTR; // Pointer to upper end of stack. + pr_Result2 : PtrInt; // Secondary return-value + pr_CurrentDir : BPTR; // Lock of the current directory + pr_CIS : BPTR; { BPTR } + pr_COS : BPTR; { BPTR } + pr_ConsoleTask : Pointer; + pr_FileSystemTask: Pointer; + pr_CLI : BPTR; { BPTR } + pr_ReturnAddr : Pointer; + pr_PktWait : Pointer; + pr_WindowPtr : Pointer; + pr_HomeDir : BPTR; { BPTR } + pr_Flags : LongInt; + pr_ExitCode : Pointer; { Procedure } + pr_ExitData : PtrUInt; + pr_Arguments : PChar; + pr_LocalVars : TMinList; + pr_ShellPrivate : DWord; + pr_CES : BPTR; { BPTR } + end; + +const // Checked OK 04.08.2011 ALB + PRB_FREESEGLIST = 0; + PRF_FREESEGLIST = (1 shl PRB_FREESEGLIST); + + PRB_FREECURRDIR = 1; + PRF_FREECURRDIR = (1 shl PRB_FREECURRDIR); + + PRB_FREECLI = 2; + PRF_FREECLI = (1 shl PRB_FREECLI); + + PRB_CLOSEINPUT = 3; + PRF_CLOSEINPUT = (1 shl PRB_CLOSEINPUT); + + PRB_CLOSEOUTPUT = 4; + PRF_CLOSEOUTPUT = (1 shl PRB_CLOSEOUTPUT); + + PRB_FREEARGS = 5; + PRF_FREEARGS = (1 shl PRB_FREEARGS); + + PRB_CLOSEERROR = 6; + PRF_CLOSEERROR = (1 shl PRB_CLOSEERROR); + + PRB_SYNCHRONOUS = 7; + PRF_SYNCHRONOUS = (1 shl PRB_SYNCHRONOUS); + + PRB_WAITINGFORCHILD = 8; // This one is subject to change! + PRF_WAITINGFORCHILD = (1 shl PRB_WAITINGFORCHILD); + + PRB_NOTIFYONDEATH = 9; + PRF_NOTIFYONDEATH = (1 shl PRB_NOTIFYONDEATH); + +type // Checked OK 04.08.2011 ALB + PFileHandle = ^TFileHandle; + TFileHandle = record + // The next three are used with packet-based filesystems + fh_Flags : DWord; + fh_Interactive: PMsgPort; // packet reply port // alias -> fh_Port + fh_Type : PMsgPort; // port to send packets to + + fh_Buf : BPTR; + fh_Pos : LongInt; + fh_End : LongInt; + + fh_Func1 : LongInt; + fh_Func2 : LongInt; + fh_Func3 : Pointer; + fh_Arg1 : PtrInt; + fh_Arg2 : Pointer; + + { *** V39+ *** } + fh_Size : DWord; + fh_Buf2 : BPTR; + end; + +(* OBSOLETE ************************* +type + PDOSPacket = ^TDOSPacket; + TDOSPacket = record + dp_Link: PMessage; + dp_Port: PMsgPort; + case Byte of + 0 : ( dp_Action : Longint; + dp_Status : Longint; + dp_Status2: Longint; + dp_BufAddr: Longint; + ); + 1 : ( dp_Type: Longint; + dp_Res1: Longint; + dp_Res2: Longint; + dp_Arg1: Longint; + dp_Arg2: Longint; + dp_Arg3: Longint; + dp_Arg4: Longint; + dp_Arg5: Longint; + dp_Arg6: Longint; + dp_Arg7: Longint; + ); + end; + +type + PStandardPacket = ^TStandardPacket; + TStandardPacket = record + sp_Msg: TMessage; + sp_Pkt: TDOSPacket; + end; + + +const + ACTION_NIL = 0; + ACTION_STARTUP = 0; + ACTION_GET_BLOCK = 2; { *** OBSOLETE *** } + ACTION_SET_MAP = 4; + ACTION_DIE = 5; + ACTION_EVENT = 6; + ACTION_CURRENT_VOLUME = 7; + ACTION_LOCATE_OBJECT = 8; + ACTION_RENAME_DISK = 9; + ACTION_WRITE = 'W'; + ACTION_READ = 'R'; + ACTION_FREE_LOCK = 15; + ACTION_DELETE_OBJECT = 16; + ACTION_RENAME_OBJECT = 17; + ACTION_MORE_CACHE = 18; + ACTION_COPY_DIR = 19; + ACTION_WAIT_CHAR = 20; + ACTION_SET_PROTECT = 21; + ACTION_CREATE_DIR = 22; + ACTION_EXAMINE_OBJECT = 23; + ACTION_EXAMINE_NEXT = 24; + ACTION_DISK_INFO = 25; + ACTION_INFO = 26; + ACTION_FLUSH = 27; + ACTION_SET_COMMENT = 28; + ACTION_PARENT = 29; + ACTION_TIMER = 30; + ACTION_INHIBIT = 31; + ACTION_DISK_TYPE = 32; + ACTION_DISK_CHANGE = 33; + ACTION_SET_DATE = 34; + + ACTION_SAME_LOCK = 40; + + ACTION_SCREEN_MODE = 994; + + ACTION_CHANGE_SIGNAL = 995; + + ACTION_READ_RETURN = 1001; + ACTION_WRITE_RETURN = 1002; + ACTION_SEEK = 1008; + ACTION_FINDUPDATE = 1004; + ACTION_FINDINPUT = 1005; + ACTION_FINDOUTPUT = 1006; + ACTION_END = 1007; + + ACTION_FORMAT = 1020; + ACTION_MAKE_LINK = 1021; + + ACTION_SET_FILE_SIZE = 1022; + ACTION_WRITE_PROTECT = 1023; + + ACTION_READ_LINK = 1024; + ACTION_FH_FROM_LOCK = 1026; + ACTION_IS_FILESYSTEM = 1027; + ACTION_CHANGE_MODE = 1028; + + ACTION_COPY_DIR_FH = 1030; + ACTION_PARENT_FH = 1031; + ACTION_EXAMINE_ALL = 1033; + ACTION_EXAMINE_FH = 1034; + + ACTION_EXAMINE_ALL_END = 1035; + ACTION_SET_OWNER = 1036; + + ACTION_LOCK_RECORD = 2008; + ACTION_FREE_RECORD = 2009; + + ACTION_ADD_NOTIFY = 4097; + ACTION_REMOVE_NOTIFY = 4098; + + ACTION_SERIALIZE_DISK = 4200; + + ACTION_GET_DISK_FSSM = 4201; + ACTION_FREE_DISK_FSSM = 4202; + +*) + +type // Checked OK 04.08.2011 ALB + PErrorString = ^TErrorString; + TErrorString = record + estr_Nums: PLongInt; + estr_Strings: PChar; + end; + +type // Checked OK 04.08.2011 ALB + PRootNode = ^TRootNode; + TRootNode = record + rn_TaskArray : BPTR; { BPTR } + rn_ConsoleSegment : BPTR; { BPTR } + rn_Time : TDateStamp; + rn_RestartSeg : Pointer; + rn_Info : BPTR; { BPTR } + rn_FileHandlerSegment: BPTR; { BPTR } + rn_CliList : TMinList; + rn_BootProc : PMsgPort; + rn_ShellSegment : BPTR; { BPTR } + rn_Flags : LongInt; + // Aros Special + rn_RootLock : TSignalSemaphore; + end; + +type // Checked OK 04.08.2011 ALB + // AROS Specific + PCLIInfo = ^TCLIInfo; + TCLIInfo = record + ci_Node: TNode; + ci_Process: PProcess; + end; + + +type // Checked OK 05.08.2011 ALB + PDOSLibrary = ^TDOSLibrary; + TDOSLibrary = record + dl_Lib : TLibrary; + dl_Root : PRootNode; + {$ifdef AROS_BINCOMPAT} + dl_GV : Pointer; + dl_A2 : LongInt; + dl_A5 : LongInt; + dl_A6 : LongInt; + {$endif} + dl_Errors : PErrorString; + dl_TimeReq : PTimeRequest; + dl_UtilityBase : PLibrary; + dl_IntuitionBase: PLibrary; + // AROS Specific private Fields + dl_TimerBase : PDevice; + dl_TimerIO : TTimeRequest; + dl_DevInfo : BPTR; //PDosList; + dl_SysBase : PExecBase; + dl_SegList : BPTR; + dl_NulHandler : PDevice; + dl_NulLock : PUnit; + // LDDemon private Data + dl_LDObjectsListSigSem : TSignalSemaphore; + dl_LDObjectsList : TEList; + dl_LDHandler : TInterrupt; + dl_LDDemonPort : PMsgPort; + dl_LDDemonTask : PProcess; + dl_LDReturn : Cardinal; + + // AROS-specific and private. Can go away in future + dl_SYSLock: BPTR; + // The flags are ORed with RootNode->rn_Flags. See below for definitions. + dl_Flags: Cardinal; + end; + + +const // Checked OK 04.08.2011 ALB + RNB_WILDSTAR = 24; + RNF_WILDSTAR = (1 Shl RNB_WILDSTAR); + +type // Checked OK 04.08.2011 ALB + PDOSInfo = ^TDOSInfo; + TDOSInfo = record + di_McName : BPTR; { BPTR } + di_DevInfo : BPTR; { BPTR } + di_Devices : BPTR; { BPTR } + di_Handlers : BPTR; { BPTR } + di_NetHand : BPTR; // Alias di_ResList + di_DevLock : TSignalSemaphore; + di_EntryLock : TSignalSemaphore; + di_DeleteLock: TSignalSemaphore; + end; + +type // Checked OK 04.08.2011 ALB + PSegment = ^TSegment; + TSegment = record + seg_Next : PSegment; // Pointer to next segment. + seg_UC : LongInt; + seg_Seg : BPTR; { BPTR } + seg_Name : Array[0..3] of char; + { * seg_Name continues * } + end; + + +const // Checked OK 04.08.2011 ALB + CMD_SYSTEM = -1; + CMD_INTERNAL = -2; + CMD_DISABLED = -999; + +type // Checked TODO 04.08.2011 ALB + PDeviceList = ^TDeviceList; + TDeviceList = record + dl_Next : PDeviceList; { BPTR } + dl_Type : LongInt; + dl_Task : PMsgPort; + dl_Lock : BPTR; { BPTR } + dl_VolumeDate: TDateStamp; + dl_LockList : BPTR; { BPTR } + dl_DiskType : LongInt; + dl_unused : LongInt; + // Padding Bytes? + dl_Name : BSTR; { BSTR } + // Missing DosListAROSExt + end; + +type // Checked OK 04.08.2011 ALB + PFileLock = ^TFileLock; + TFileLock = record + fl_Link : PFileLock; // (PFileLock) Pointer to next lock. + fl_Key : PtrUInt; + fl_Access: LongInt; + fl_Task : PMsgPort; + fl_Volume: PDeviceList; // (BPTR) + end; + + +type // Checked OK 04.08.2011 ALB + PCommandLineInterface = ^TCommandLineInterface; + TCommandLineInterface = record + cli_Result2 : LongInt; // Secondary error code, set by last command. + cli_SetName : BSTR; // Name of the current directory. + cli_CommandDir : PFileLock; // Lock of the first directory in path. + cli_ReturnCode : LongInt; // Error code, the last command returned. + cli_CommandName : BSTR; // Name of the command that is currently executed. + cli_FailLevel : LongInt; // Fail-Level as set by the command "FailAt". + cli_Prompt : BSTR; // Current prompt in the CLI window. + cli_StandardInput : PFileLock; // Standard/Default input file. + cli_CurrentInput : PFileLock; // Current input file. + cli_CommandFile : BSTR; // Name of the file that is currently executed. + cli_Interactive : LongInt; // TRUE if the currently CLI is connected to a controlling terminal, otherwise FALSE. + cli_Background : LongInt; // FALSE if there is no controlling terminal, otherwise TRUE. + cli_CurrentOutput : PFileLock; // Current output file. } + cli_DefaultStack : LongInt; // Default stack size as set by the command "Stack" + cli_StandardOutput: PFileLock; // Standard/Default output file. + cli_Module : BPTR; // SegList of currently loaded command. + // Aros Specific Part + cli_Standard_Error: PFileLock; // Standard/Default Error file. + end; + +const // Checked OK 04.08.2011 ALB + CLI_DEFAULTSTACK_UNIT = SizeOf(PtrUInt); + +type // Checked TODO 04.08.2011 ALB + PDevInfo = ^TDevInfo; + TDevInfo = record + dvi_Next : PDevInfo; { BPTR } + dvi_Type : LongInt; + dvi_Task : PMsgPort; + dvi_Lock : BPTR; { BPTR } + dvi_Handler : BSTR; { BSTR } + dvi_StackSize: LongInt; + dvi_Priority : LongInt; + dvi_Startup : BPTR; + dvi_NoAROS1 : BPTR; { BPTR } + dvi_NoAROS2 : BPTR; { BPTR } + dvi_Name : BSTR; { BSTR } + // missing Aros Extension... DosListAROSExt; + end; + +type // Checked TODO 04.08.2011 ALB + PAssignList = ^TAssignList; + TAssignList = record + al_Next: PAssignList; // Pointer to next assign node. + al_Lock: PFileLock; // Lock of on of the directories. + end; + +type // Checked TODO 04.08.2011 ALB + PDOSList = ^TDOSList; + TDOSList = record + dol_Next: BPTR; // PDOSList + dol_Type: LongInt; + dol_Task: PMsgPort; + dol_Lock: PFileLock; { BPTR } + case Byte of + 0: ( dol_handler : record + dol_Handler : BSTR; { BSTR } + dol_StackSize: LongInt; + dol_Priority : LongInt; + dol_Startup : BPTR; + dol_NoAROS1 : BPTR; { BPTR } + dol_NoAROS2 : BPTR; { BPTR } + dol_NoAROS3 : BPTR; { BPTR } + end; + ); + 1: ( dol_volume : record + dol_VolumeDate: TDateStamp; + dol_LockList : BPTR; { BPTR } + dol_DiskType : LongInt; + dol_unused : BPTR; + end; + ); + 2: ( dol_assign : record + dol_AssignName: PChar; + dol_List : PAssignList; + end; + ); + 3: ( dol_Misc: array[0..23] of Byte; + dol_Name: BSTR; + ); + // missing Aros Extension... DosListAROSExt; + end; + +const // Checked OK 04.08.2011 ALB + DLT_DEVICE = 0; + DLT_DIRECTORY = 1; + DLT_VOLUME = 2; + DLT_LATE = 3; + DLT_NONBINDING = 4; + DLT_PRIVATE = -1; + + +type // Checked OK 04.08.2011 ALB + PDevProc = ^TDevProc; + TDevProc = record + dvp_Port : PMsgPort; + dvp_Lock : PFileLock; { BPTR } + dvp_Flags : DWord; // see below + dvp_DevNode: PDOSList; // Private + end; + + +const // Checked OK 04.08.2011 ALB + DVPB_UNLOCK = 0; + DVPF_UNLOCK = (1 shl DVPB_UNLOCK); + + DVPB_ASSIGN = 1; + DVPF_ASSIGN = (1 shl DVPB_ASSIGN); + +const // Checked OK 04.08.2011 ALB + LDB_READ = 0; + LDF_READ = (1 shl LDB_READ); + + LDB_WRITE = 1; + LDF_WRITE = (1 shl LDB_WRITE); + + LDB_DEVICES = 2; + LDF_DEVICES = (1 shl LDB_DEVICES); + + LDB_VOLUMES = 3; + LDF_VOLUMES = (1 shl LDB_VOLUMES); + + LDB_ASSIGNS = 4; + LDF_ASSIGNS = (1 shl LDB_ASSIGNS); + + LDB_ENTRY = 5; + LDF_ENTRY = (1 shl LDB_ENTRY); + + LDB_DELETE = 6; + LDF_DELETE = (1 shl LDB_DELETE); + + LDF_ALL = (LDF_DEVICES or LDF_VOLUMES or LDF_ASSIGNS); + + +const // Checked OK 04.08.2011 ALB + REPORT_STREAM = 0; + REPORT_TASK = 1; + REPORT_LOCK = 2; + REPORT_VOLUME = 3; + REPORT_INSERT = 4; + +const // Checked OK 04.08.2011 ALB + ABORT_DISK_ERROR = 296; + ABORT_BUSY = 288; + +const // Checked OK 04.08.2011 ALB + RUN_EXECUTE = -1; + RUN_SYSTEM = -2; + RUN_SYSTEM_ASYNCH = -3; + +const // Checked OK 04.08.2011 ALB + ST_ROOT = 1; + ST_USERDIR = 2; + ST_SOFTLINK = 3; + ST_LINKDIR = 4; + ST_FILE = -3; + ST_LINKFILE = -4; + ST_PIPEFILE = -5; + + +{ * dos asl definitions + ********************************************************************* + * } + + +type // Checked OK 04.08.2011 ALB + PAChain = ^TAChain; + TAChain = record + an_Child : PAChain; + an_Parent: PAChain; + an_Lock : BPTR; + an_Info : TFileInfoBlock; + an_Flags : ShortInt; + an_String: array[0..0] of Char; + { * an_String continues * } + end; + +type // Checked OK 04.08.2011 ALB + PAnchorPath = ^TAnchorPath; + TAnchorPath = record + case Byte of // its not defined in AROS struct just by defines... + 0 : ( ap_First: PAChain; + ap_Last: PAChain; + ap_L1: LongInt; + ap_L2: LongInt; + ap_Length: ShortInt; + ); + 1 : ( ap_Base: PAChain; + ap_Current: PAChain; + ap_BreakBits: LongInt; + ap_FoundBreak: LongInt; + ap_Flags: ShortInt; + ap_Reserved: ShortInt; + ap_Strlen: SmallInt; + ap_Info: TFileInfoBlock; + ap_Buf: array[0..0] of char; + { * an_Buf continues * } + ); + end; + + +const // Checked OK 04.08.2011 ALB + // Please check for wildcards in supplied string. + APB_DOWILD = 0; + APF_DOWILD = (1 Shl APB_DOWILD); + // There is actually a wildcard in the supplied string. READ-ONLY + APB_ITSWILD = 1; + APF_ITSWILD = (1 Shl APB_ITSWILD); + // Set, if a directory is to be entered. Applications may clear this bit to prohibit the + // matching-functions from entering a directory. + APB_DODIR = 2; + APF_DODIR = (1 Shl APB_DODIR); + // Set, if directory was already searched. READ-ONLY + APB_DIDDIR = 3; + APF_DIDDIR = (1 Shl APB_DIDDIR); + // Set, if function was out of memory. READ-ONLY + APB_NOMEMERR = 4; + APF_NOMEMERR = (1 Shl APB_NOMEMERR); + // '.' may refer to the current directory (unix-style). + APB_DODOT = 5; + APF_DODOT = (1 Shl APB_DODOT); + // Directory changed since last call. + APB_DirChanged = 6; + APF_DirChanged = (1 Shl APB_DirChanged); + // Follow hardlinks, too. + APB_FollowHLinks = 7; + APF_FollowHLinks = (1 Shl APB_FollowHLinks); + +const // Checked OK 04.08.2011 ALB + DDB_PatternBit = 0; + DDF_PatternBit = (1 Shl DDB_PatternBit); + + DDB_ExaminedBit = 1; + DDF_ExaminedBit = (1 Shl DDB_ExaminedBit); + + DDB_Completed = 2; + DDF_Completed = (1 Shl DDB_Completed); + + DDB_AllBit = 3; + DDF_AllBit = (1 Shl DDB_AllBit); + + DDB_Single = 4; + DDF_Single = (1 Shl DDB_Single); + +const // Checked OK 04.08.2011 ALB + P_ANY = $80; // Matches everything ('#?' and '*') + P_SINGLE = $81; // Any character ('?') + P_ORSTART = $82; // Opening parenthesis for OR'ing ('(') + P_ORNEXT = $83; // Field delimiter for OR'ing ('|') + P_OREND = $84; // Closing parenthesis for OR'ing (')') + P_NOT = $85; // Inversion ('~') + P_NOTEND = $86; // Inversion end + P_NOTCLASS = $87; // Inversion class ('^') + P_CLASS = $88; // Class ('[' and ']') + P_REPBEG = $89; // Beginning of repetition ('[') + P_REPEND = $8A; // End of repetition (']') + P_STOP = $8B; + +const // Checked OK 04.08.2011 ALB + COMPLEX_BIT = 1; + EXAMINE_BIT = 2; + +const // Checked OK 04.08.2011 ALB + ERROR_BUFFER_OVERFLOW = 303; + ERROR_BREAK = 304; + ERROR_NOT_EXECUTABLE = 305; + + + +{ * dos hunk definitions + ********************************************************************* + * } + + +const // Checked OK 04.08.2011 ALB + HUNK_UNIT = 999; + HUNK_NAME = 1000; + HUNK_CODE = 1001; + HUNK_DATA = 1002; + HUNK_BSS = 1003; + + HUNK_RELOC32 = 1004; + HUNK_ABSRELOC32 = HUNK_RELOC32; + + HUNK_RELOC16 = 1005; + HUNK_RELRELOC16 = HUNK_RELOC16; + + HUNK_RELOC8 = 1006; + HUNK_RELRELOC8 = HUNK_RELOC8; + + HUNK_EXT = 1007; + HUNK_SYMBOL = 1008; + HUNK_DEBUG = 1009; + HUNK_END = 1010; + HUNK_HEADER = 1011; + + HUNK_OVERLAY = 1013; + HUNK_BREAK = 1014; + + HUNK_DREL32 = 1015; + HUNK_DREL16 = 1016; + HUNK_DREL8 = 1017; + + HUNK_LIB = 1018; + HUNK_INDEX = 1019; + + HUNK_RELOC32SHORT = 1020; + + HUNK_RELRELOC32 = 1021; + HUNK_ABSRELOC16 = 1022; + +const // Checked OK 04.08.2011 ALB + HUNKB_ADVISORY = 29; + HUNKB_CHIP = 30; + HUNKB_FAST = 31; + + HUNKF_ADVISORY = (1 shl HUNKB_ADVISORY); + HUNKF_CHIP = (1 shl HUNKB_CHIP); + HUNKF_FAST = (1 shl HUNKB_FAST); + +const // Checked OK 04.08.2011 ALB + EXT_SYMB = 0; + EXT_DEF = 1; + EXT_ABS = 2; + + EXT_REF32 = 129; + EXT_ABSREF32 = EXT_REF32; + + EXT_COMMON = 130; + EXT_ABSCOMMON = EXT_COMMON; + + EXT_REF16 = 131; + EXT_RELREF16 = EXT_REF16; + + EXT_REF8 = 132; + EXT_RELREF8 = EXT_REF8; + + EXT_DEXT32 = 133; + EXT_DEXT16 = 134; + EXT_DEXT8 = 135; + + EXT_RELREF32 = 136; + EXT_RELCOMMON = 137; + + EXT_ABSREF16 = 138; + + EXT_ABSREF8 = 139; + + + +{ * dos ExAll definitions + ********************************************************************* + * } + + +const // Checked OK 04.08.2011 ALB + ED_NAME = 1; + ED_TYPE = 2; + ED_SIZE = 3; + ED_PROTECTION = 4; + ED_DATE = 5; + ED_COMMENT = 6; + ED_OWNER = 7; + + +type // Checked OK 04.08.2011 ALB + PExAllData = ^TExAllData; + TExAllData = record + ed_Next : PExAllData; + ed_Name : PChar; + ed_Type : LongInt; + ed_Size : Cardinal; + ed_Prot : Cardinal; + ed_Days : Cardinal; + ed_Mins : Cardinal; + ed_Ticks : Cardinal; + ed_Comment : PChar; + ed_OwnerUID: Word; + ed_OwnerGID: Word; + end; + +type // Checked OK 04.08.2011 ALB + PExAllControl = ^TExAllControl; + TexAllControl = record + eac_Entries : Cardinal; + eac_LastKey : PtrUInt; // private + eac_MatchString: PChar; + eac_MatchFunc : PHook; + end; + + + +{ * dos record definitions + ********************************************************************* + * } + + +const // Checked OK 04.08.2011 ALB + REC_EXCLUSIVE = 0; + REC_EXCLUSIVE_IMMED = 1; + REC_SHARED = 2; + REC_SHARED_IMMED = 3; + + +type // Checked OK 04.08.2011 ALB + PRecordLock = ^TRecordLock; + TRecordLock = record + rec_FH : PFileHandle; + rec_Offset: Cardinal; + rec_Length: Cardinal; + rec_Mode : Cardinal; + end; + + + +{ * dos tag definitions + ********************************************************************* + * } + + +const // Checked OK 04.08.2011 ALB + SYS_Dummy = (TAG_USER + 32); + SYS_Input = (SYS_Dummy + 1); + SYS_Output = (SYS_Dummy + 2); + SYS_Asynch = (SYS_Dummy + 3); + SYS_UserShell = (SYS_Dummy + 4); + SYS_CustomShell = (SYS_Dummy + 5); + + { *** Aros Specific *** } + SYS_Error = (SYS_Dummy + 10); + SYS_ScriptInput = (SYS_Dummy + 11); + SYS_Background = (SYS_Dummy + 12); + SYS_CliNumPtr = (SYS_Dummy + 13); + + SYS_DupStream = 1; + +const // Checked OK 04.08.2011 ALB + NP_Dummy = (TAG_USER + 1000); + NP_Seglist = (NP_Dummy + 1); + NP_FreeSeglist = (NP_Dummy + 2); + NP_Entry = (NP_Dummy + 3); + NP_Input = (NP_Dummy + 4); + NP_Output = (NP_Dummy + 5); + NP_CloseInput = (NP_Dummy + 6); + NP_CloseOutput = (NP_Dummy + 7); + NP_Error = (NP_Dummy + 8); + NP_CloseError = (NP_Dummy + 9); + NP_CurrentDir = (NP_Dummy + 10); + NP_StackSize = (NP_Dummy + 11); + NP_Name = (NP_Dummy + 12); + NP_Priority = (NP_Dummy + 13); + NP_ConsoleTask = (NP_Dummy + 14); + NP_WindowPtr = (NP_Dummy + 15); + NP_HomeDir = (NP_Dummy + 16); + NP_CopyVars = (NP_Dummy + 17); + NP_Cli = (NP_Dummy + 18); + NP_Path = (NP_Dummy + 19); + NP_CommandName = (NP_Dummy + 20); + NP_Arguments = (NP_Dummy + 21); + + NP_NotifyOnDeath = (NP_Dummy + 22); + NP_Synchronous = (NP_Dummy + 23); + NP_ExitCode = (NP_Dummy + 24); + NP_ExitData = (NP_Dummy + 25); + + { *** AROS Specific *** } + NP_UserData = (NP_Dummy + 26); + +const // Checked OK 04.08.2011 ALB + ADO_Dummy = (TAG_USER + 2000); + ADO_FH_Mode = (ADO_Dummy + 1); + + ADO_DirLen = (ADO_Dummy + 2); + ADO_CommNameLen = (ADO_Dummy + 3); + ADO_CommFileLen = (ADO_Dummy + 4); + ADO_PromptLen = (ADO_Dummy + 5); + + + +{ * dos stdio definitions + ********************************************************************* + * } + + +const // Checked OK 04.08.2011 ALB + BUF_LINE = 0; + BUF_FULL = 1; + BUF_NONE = 2; + +const // Checked OK 04.08.2011 ALB + ENDSTREAMCH = -1; + + + +{ * dos env-var definitions + ********************************************************************* + * } + + +type // Checked OK 04.08.2011 ALB + PLocalVar = ^TLocalVar; + TLocalVar = record + lv_Node : TNode; + lv_Flags: Word; + lv_Value: PChar; + lv_Len : Cardinal; + end; + +type // Checked OK 04.08.2011 ALB + PScanVarsMsg = ^TScanVarsMsg; + TScanVarsMsg = record + sv_SVMSize: Cardinal; // Size of ScanVarsMsg structure + sv_Flags: Cardinal; // The flags parameter given to ScanVars() + sv_GDir: PChar; // Directory patch for global variables or empty string "\0" for local variables + sv_Name: PChar; // Name of the variable + sv_Var: PChar; // Pointer to the contents of the variable + sv_VarLen: Cardinal; // Size of the variable + end; + +const // Checked OK 04.08.2011 ALB + LV_VAR = 0; + LV_ALIAS = 1; + +const // Checked OK 04.08.2011 ALB + LVB_IGNORE = 7; + LVF_IGNORE = (1 Shl LVB_IGNORE); + + GVB_GLOBAL_ONLY = 8; + GVF_GLOBAL_ONLY = (1 Shl GVB_GLOBAL_ONLY); + + GVB_LOCAL_ONLY = 9; + GVF_LOCAL_ONLY = (1 Shl GVB_LOCAL_ONLY); + + GVB_BINARY_VAR = 10; + GVF_BINARY_VAR = (1 Shl GVB_BINARY_VAR); + + GVB_DONT_NULL_TERM = 11; + GVF_DONT_NULL_TERM = (1 Shl GVB_DONT_NULL_TERM); + + GVB_SAVE_VAR = 12; + GVF_SAVE_VAR = (1 Shl GVB_SAVE_VAR); + + + +{ * dos ReadArgs definitions + ********************************************************************* + * } + + +type // Checked OK 04.08.2011 ALB + PCSource = ^TCSource; + TCSource = record + CS_Buffer: PChar; + CS_Length: LongInt; + CS_CurChr: LongInt; + end; + +type // Checked OK 04.08.2011 ALB + PRDArgs = ^TRDArgs; + TRDArgs = record + RDA_Source : TCSource; + RDA_DAList : PtrUInt; + RDA_Buffer : PChar; + RDA_BufSiz : LongInt; + RDA_ExtHelp: PChar; + RDA_Flags : LongInt; + end; + + +const // Checked OK 04.08.2011 ALB + RDAB_STDIN = 0; + RDAF_STDIN = (1 Shl RDAB_STDIN); + + RDAB_NOALLOC = 1; + RDAF_NOALLOC = (1 Shl RDAB_NOALLOC); + + RDAB_NOPROMPT = 2; + RDAF_NOPROMPT = (1 Shl RDAB_NOPROMPT); + +const // Checked OK 04.08.2011 ALB + MAX_TEMPLATE_ITEMS = 100; + MAX_MULTIARGS = 128; + + + +{ * dos filehandler definitions + ********************************************************************* + * } + + +type // Checked OK 04.08.2011 ALB + PDosEnvec = ^TDosEnvec; + TDosEnvec = record + de_TableSize : PtrUInt; + de_SizeBlock : PtrUInt; + de_SecOrg : PtrUInt; + de_Surfaces : PtrUInt; + de_SectorPerBlock: PtrUInt; + de_BlocksPerTrack: PtrUInt; + de_Reserved : PtrUInt; + de_PreAlloc : PtrUInt; + de_Interleave : PtrUInt; + de_LowCyl : PtrUInt; + de_HighCyl : PtrUInt; + de_NumBuffers : PtrUInt; + de_BufMemType : PtrUInt; + de_MaxTransfer : PtrUInt; + de_Mask : PtrUInt; + de_BootPri : PtrInt; + de_DosType : PtrUInt; + de_Baud : PtrUInt; + de_Control : PtrUInt; + de_BootBlocks : PtrUInt; + end; + + +const // Checked OK 04.08.2011 ALB + DE_TABLESIZE = 0; + DE_SIZEBLOCK = 1; + DE_BLOCKSIZE = 2; + DE_NUMHEADS = 3; + DE_SECSPERBLOCK = 4; + DE_BLKSPERTRACK = 5; + DE_RESERVEDBLKS = 6; + DE_PREFAC = 7; + DE_INTERLEAVE = 8; + DE_LOWCYL = 9; + DE_HIGHCYL = 10; + DE_UPPERCYL = DE_HIGHCYL; + DE_NUMBUFFERS = 11; + DE_BUFMEMTYPE = 12; + DE_MEMBUFTYPE = DE_BUFMEMTYPE; + DE_MAXTRANSFER = 13; + DE_MASK = 14; + DE_BOOTPRI = 15; + DE_DOSTYPE = 16; + DE_BAUD = 17; + DE_CONTROL = 18; + DE_BOOTBLOCKS = 19; + + +type // Checked OK 04.08.2011 ALB + PFileSysStartupMsg = ^TFileSysStartupMsg; + TFileSysStartupMsg = record + fssm_Unit : PtrUInt; + fssm_Device : BSTR; + fssm_Environ: BPTR; + fssm_Flags : Cardinal; + end; + +type // Checked TODO 04.08.2011 ALB + PDeviceNode = ^TDeviceNode; + TDeviceNode = record + dn_Next : PDeviceNode; + dn_Type : Cardinal; + dn_Task : PMsgPort; + dn_Lock : BPTR; + dn_Handler : BSTR; + dn_StackSize: Cardinal; + dn_Priority : LongInt; + dn_Startup : BPTR; + dn_SegList : BPTR; + dn_GlobalVec: BPTR; + dn_Name : BSTR; + // Missing Extension DosListAROSExt + end; + +{ * dos notification definitions + ********************************************************************* + * } + + +const // Checked OK 04.08.2011 ALB + NOTIFY_CLASS = $40000000; + NOTIFY_CODE = $1234; + + +type // Checked OK 04.08.2011 ALB + PNotifyRequest = ^TNotifyRequest; + TNotifyRequest = record + nr_Name : PChar; + nr_FullName: PChar; + nr_UserData: Cardinal; + nr_Flags : Cardinal; + nr_stuff : record + case Byte of + 0 : ( nr_Msg : record + nr_Port: PMsgPort; + end ); + 1 : ( nr_Signal : record + nr_Task : PTask; + nr_SignalNum: Byte; + nr_pad : array[0..2] of Byte; + end ); + end; + nr_Reserved: array[0..3] of Cardinal; + nr_MsgCount: Cardinal; + nr_Handler : PMsgPort; + end; + +type // Checked OK 04.08.2011 ALB + PNotifyMessage = ^TNotifyMessage; + TNotifyMessage = record + nm_ExecMessage: TMessage; + nm_Class : Cardinal; + nm_Code : Word; + nm_NReq : PNotifyRequest; + nm_DoNotTouch : PtrUInt; + nm_DoNotTouch2: PtrUInt; + end; + + +const // Checked OK 04.08.2011 ALB + NRB_SEND_MESSAGE = 0; + NRB_SEND_SIGNAL = 1; + NRB_WAIT_REPLY = 3; + NRB_NOTIFY_INITIAL = 4; + NRB_MAGIC = 31; + NRF_SEND_MESSAGE = (1 shl NRB_SEND_MESSAGE); + NRF_SEND_SIGNAL = (1 shl NRB_SEND_SIGNAL); + NRF_WAIT_REPLY = (1 shl NRB_WAIT_REPLY); + NRF_NOTIFY_INITIAL = (1 shl NRB_NOTIFY_INITIAL); + NRF_MAGIC = (1 shl NRB_MAGIC); + + NR_HANDLER_FLAGS = $ffff0000; + + + + diff --git a/rtl/aros/i386/doslibf.inc b/rtl/aros/i386/doslibf.inc new file mode 100644 index 0000000000..058608e653 --- /dev/null +++ b/rtl/aros/i386/doslibf.inc @@ -0,0 +1,59 @@ +{ + This file is part of the Free Pascal run time library. + Copyright (c) 2011 by Marcus Sackrow + + dos.library functions for AROS + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} + +function Open(name: PChar; accessMode: longint): Cardinal; syscall AOS_DOSBase 5; +function dosClose(_file: Cardinal): LongBool; syscall AOS_DOSBase 6; +function dosRead(_file: Cardinal; buffer: Pointer; length: longint): longint; syscall AOS_DOSBase 7; +function dosWrite(_file: Cardinal; buffer: Pointer; length: longint): longint; syscall AOS_DOSBase 8; +function dosInput: Cardinal; syscall AOS_DOSBase 9; +function dosOutput: Cardinal; syscall AOS_DOSBase 10; +function DosError1: Cardinal; syscall AOS_DOSBase 142; +function dosSeek(_file: longint;position: longint;offset: longint): longint; syscall AOS_DOSBase 11; +function dosDeleteFile(const name: PChar): LongBool; syscall AOS_DOSBase 12; +function dosRename(const oldName: PChar;newName: PChar): LongInt; syscall AOS_DOSBase 13; +function Lock(const name: PChar;_type: longint): longint; syscall AOS_DOSBase 14; +function UnLock(lock: longint): longint; syscall AOS_DOSBase 15; +function DupLock(Lock: longint): longint; syscall AOS_DOSBase 16; +function Examine(lock: longint; fileInfoBlock: PFileInfoBlock): LongInt; syscall AOS_DOSBase 17; +function Info(lock: longint; parameterBlock: PInfoData): LongInt; syscall AOS_DOSBase 19; +function dosCreateDir(const name: PChar): longint; syscall AOS_DOSBase 20; +function CurrentDir(lock: longint): longint; syscall AOS_DOSBase 21; +function IoErr: longint; syscall AOS_DOSBase 22; +procedure dosExit(ErrCode: longint); syscall AOS_DOSBase 24; +function SetProtection(const name: PChar; protect: longword): LongInt; syscall AOS_DOSBase 31; +function DateStamp(date: PDateStamp): PDateStamp; syscall AOS_DOSBase 32; +procedure Delay(ticks: LongWord); syscall AOS_DOSBase 33; +function AllocDosObject(Type_: LongWord; const Tags: PTagItem): Pointer; syscall AOS_DOSBase 38; +procedure FreeDosObject(Type_: LongWord; Ptr: Pointer); syscall AOS_DOSBase 39; +function SetFileDate(name: PChar; date: PDateStamp): LongBool; syscall AOS_DOSBase 66; +function NameFromLock(lock: longint; buffer: PChar; len: longint): LongBool; syscall AOS_DOSBase 67; +function SetFileSize(fh: longint; pos: longint; mode: longint): longint; syscall AOS_DOSBase 76; +function Cli : pCommandLineInterface; syscall AOS_DOSBase 82; +function CreateNewProc(const Tags: PTagItem): PProcess; syscall AOS_DOSBase 83; +function GetArgStr: PChar; syscall AOS_DOSBase 89; +function GetCurrentDirName(buf: PChar; len: longint): LongBool; syscall AOS_DOSBase 94; +function GetProgramName(buf: PChar; len: longint): LongBool; syscall AOS_DOSBase 96; +function GetProgramDir: longint; syscall AOS_DOSBase 100; +function SystemTagList(command: PChar; tags: PTagItem): longint; syscall AOS_DOSBase 101; +function LockDosList(flags: longword): PDosList; syscall AOS_DOSBase 109; +procedure UnLockDosList(flags: longword); syscall AOS_DOSBase 110; +function NextDosEntry(dlist: PDosList; flags: longword): PDosList; syscall AOS_DOSBase 115; +function MatchFirst(pat: PChar; anchor: PAnchorPath): longint; syscall AOS_DOSBase 137; +function MatchNext(anchor: PAnchorPath): longint; syscall AOS_DOSBase 138; +procedure MatchEnd(anchor: PAnchorPath); syscall AOS_DOSBase 139; +function GetVar(name: PChar; buffer: PChar; size: longint; flags: longword): longint; syscall AOS_DOSBase 151; +function ExamineFH(Fh: BPTR; Fib: PFileInfoBlock): LongBool; syscall AOS_DOSBase 65; +function NameFromFH(Fh: BPTR; Buffer: PChar; Length: LongInt): LongBool; syscall AOS_DOSBase 68; + diff --git a/rtl/aros/i386/execd.inc b/rtl/aros/i386/execd.inc new file mode 100644 index 0000000000..c7a00ee80b --- /dev/null +++ b/rtl/aros/i386/execd.inc @@ -0,0 +1,1792 @@ +{ + This file is part of the Free Pascal run time library. + + exec definitions (V50) for MorphOS/PowerPC + Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved. + + Free Pascal conversion + Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. <www.genesi.lu> + + AROS conversion + Copyright (c) 2011 Marcus Sackrow + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} + +{include emuld.inc} +{$include utild1.inc} + + +{ * exec node definitions + ********************************************************************* + * } + + +type // Checked OK 05.08.2011 ALB + PNode = ^TNode; + TNode = record + ln_Succ: PNode; + ln_Pred: PNode; +{$ifdef AROS_BINCOMPAT} + ln_Type: Byte; + ln_Pri : ShortInt; + ln_Name: PChar; +{$else} + ln_Name: PChar; + ln_Type: Byte; + ln_Pri : ShortInt; +{$endif} + end; + +type // Checked OK 05.08.2011 ALB + PMinNode = ^TMinNode; + TMinNode = record + mln_Succ: PMinNode; + mln_Pred: PMinNode; + end; + + +const // Checked OK 05.08.2011 ALB + NT_UNKNOWN = 0; + NT_TASK = 1; + NT_INTERRUPT = 2; + NT_DEVICE = 3; + NT_MSGPORT = 4; + NT_MESSAGE = 5; + NT_FREEMSG = 6; + NT_REPLYMSG = 7; + NT_RESOURCE = 8; + NT_LIBRARY = 9; + NT_MEMORY = 10; + NT_SOFTINT = 11; + NT_FONT = 12; + NT_PROCESS = 13; + NT_SEMAPHORE = 14; + NT_SIGNALSEM = 15; + NT_BOOTNODE = 16; + NT_KICKMEM = 17; + NT_GRAPHICS = 18; + NT_DEATHMESSAGE = 19; + NT_HIDD = 20; // AROS specific + NT_USER = 254; + NT_EXTENDED = 255; + + + +{ * exec list definitions + ********************************************************************* + * } + + +type // Checked OK 05.08.2011 ALB + PList = ^TEList; + TEList = record + lh_Head : PNode; + lh_Tail : PNode; + lh_TailPred: PNode; + lh_Type : Byte; + lh_pad : Byte; + end; + +type // Checked OK 05.08.2011 ALB + PMinList = ^TMinList; + TMinList = record + mlh_Head : PMinNode; + mlh_Tail : PMinNode; + mlh_TailPred: PMinNode; + end; + + + +{ * exec alert definitions (V50) + ********************************************************************* + * } + + +const // Checked OK 04.08.2011 ALB +// General Types + AT_DeadEnd = $80000000; // Alert that crashes + AT_Recovery = $00000000; // Alert that returns +// General Errors + AG_NoMemory = $00010000; + AG_MakeLib = $00020000; + AG_OpenLib = $00030000; + AG_OpenDev = $00040000; + AG_OpenRes = $00050000; + AG_IOError = $00060000; + AG_NoSignal = $00070000; + AG_BadParm = $00080000; + AG_CloseLib = $00090000; + AG_CloseDev = $000A0000; + AG_ProcCreate = $000B0000; +// 680x0 Errors + ACPU_BusErr = $80000002; + ACPU_AddressErr = $80000003; + ACPU_InstErr = $80000004; + ACPU_DivZero = $80000005; + ACPU_CHK = $80000006; + ACPU_TRAPV = $80000007; + ACPU_PrivErr = $80000008; + ACPU_Trace = $80000009; + ACPU_LineA = $8000000A; + ACPU_LineF = $8000000B; + ACPU_Format = $8000000E; + ACPU_Spurious = $80000018; + ACPU_AutoVec1 = $80000019; + ACPU_AutoVec2 = $8000001A; + ACPU_AutoVec3 = $8000001B; + ACPU_AutoVec4 = $8000001C; + ACPU_AutoVec5 = $8000001D; + ACPU_AutoVec6 = $8000001E; + ACPU_AutoVec7 = $8000001F; +// Libraries + AO_ExecLib = $00008001; + AO_GraphicsLib = $00008002; + AO_LayersLib = $00008003; + AO_Intuition = $00008004; + AO_MathLib = $00008005; + AO_DOSLib = $00008007; + AO_RAMLib = $00008008; + AO_IconLib = $00008009; + AO_ExpansionLib = $0000800A; + AO_DiskfontLib = $0000800B; + AO_UtilityLib = $0000800C; + AO_KeyMapLib = $0000800D; +// Devices + AO_AudioDev = $00008010; + AO_ConsoleDev = $00008011; + AO_GamePortDev = $00008012; + AO_KeyboardDev = $00008013; + AO_TrackDiskDev = $00008014; + AO_TimerDev = $00008015; +// Resources + AO_CIARsrc = $00008020; + AO_DiskRsrc = $00008021; + AO_MiscRsrc = $00008022; +// Miscellaneous + AO_BootStrap = $00008030; + AO_Workbench = $00008031; + AO_DiskCopy = $00008032; + AO_GadTools = $00008033; + AO_Unknown = $00008035; +// AROS Additions, start at 0x40 + AO_ArosLib = $00008040; + AO_OOPLib = $00008041; + AO_HiddLib = $00008042; + + { * + * exec.library + * } +const // Checked OK 04.08.2011 ALB + AN_ExecLib = $01000000; + AN_ExcptVect = $01000001; + AN_BaseChkSum = $01000002; + AN_LibChkSum = $01000003; + AN_MemCorrupt = $81000005; + AN_IntrMem = $81000006; + AN_InitAPtr = $01000007; + AN_SemCorrupt = $01000008; + AN_FreeTwice = $01000009; + AN_BogusExcpt = $8100000A; + AN_IOUsedTwice = $0100000B; + AN_MemoryInsane = $0100000C; + AN_IOAfterClose = $0100000D; + AN_StackProbe = $0100000E; // stack has wrong size + AN_BadFreeAddr = $0100000F; + AN_BadSemaphore = $01000010; + + { * + * graphics.library + * } +const // Checked OK 04.08.2011 ALB + AN_GraphicsLib = $02000000; + AN_GfxNoMem = $82010000; + AN_GfxNoMemMspc = $82010001; + AN_LongFrame = $82010006; + AN_ShortFrame = $82010007; + AN_TextTmpRas = $02010009; + AN_BltBitMap = $8201000A; + AN_RegionMemory = $8201000B; + AN_MakeVPort = $82010030; + AN_GfxNewError = $0200000C; + AN_GfxFreeError = $0200000D; + AN_GfxNoLCM = $82011234; + AN_ObsoleteFont = $02000401; + + { * + * layers.library + * } +const // Checked OK 04.08.2011 ALB + AN_LayersLib = $03000000; + AN_LayersNoMem = $83010000; + + { * + * intuition.library + * } +const // Checked OK 04.08.2011 ALB + AN_Intuition = $04000000; + AN_GadgetType = $84000001; + AN_BadGadget = $04000001; + AN_CreatePort = $84010002; + AN_ItemAlloc = $04010003; + AN_SubAlloc = $04010004; + AN_PlaneAlloc = $84010005; + AN_ItemBoxTop = $84000006; + AN_OpenScreen = $84010007; + AN_OpenScrnRast = $84010008; + AN_SysScrnType = $84000009; + AN_AddSWGadget = $8401000A; + AN_OpenWindow = $8401000B; + AN_BadState = $8400000C; + AN_BadMessage = $8400000D; + AN_WeirdEcho = $8400000E; + AN_NoConsole = $8400000F; + AN_NoISem = $04000010; + AN_ISemOrder = $04000011; + + { * + * math.library + * } +const // Checked OK 04.08.2011 ALB + AN_MathLib = $05000000; + + { * + * dos.library + * } +const // Checked OK 04.08.2011 ALB + AN_DOSLib = $07000000; + AN_StartMem = $07010001; + AN_EndTask = $07000002; + AN_QPktFail = $07000003; + AN_AsyncPkt = $07000004; + AN_FreeVec = $07000005; + AN_DiskBlkSeq = $07000006; + AN_BitMap = $07000007; + AN_KeyFree = $07000008; + AN_BadChkSum = $07000009; + AN_DiskError = $0700000A; + AN_KeyRange = $0700000B; + AN_BadOverlay = $0700000C; + AN_BadInitFunc = $0700000D; + AN_FileReclosed = $0700000E; + + { * + * ramlib.library + * } +const // Checked OK 04.08.2011 ALB + AN_RAMLib = $08000000; + AN_BadSegList = $08000001; + + { * + * icon.library + * } +const // Checked OK 04.08.2011 ALB + AN_IconLib = $09000000; + + { * + * expansion.library + * } +const // Checked OK 04.08.2011 ALB + AN_ExpansionLib = $0A000000; + AN_BadExpansionFree = $0A000001; + + { * + * diskfont.library + * } +const // Checked OK 04.08.2011 ALB + AN_DiskfontLib = $0B000000; + + { * + * audio.device + * } +const // Checked OK 04.08.2011 ALB + AN_AudioDev = $10000000; + + { * + * console.device + * } +const // Checked OK 04.08.2011 ALB + AN_ConsoleDev = $11000000; + AN_NoWindow = $11000001; + + { * + * gameport.device + * } +const // Checked OK 04.08.2011 ALB + AN_GamePortDev = $12000000; + + { * + * keyboard.device + * } +const // Checked OK 04.08.2011 ALB + AN_KeyboardDev = $13000000; + + { * + * trackdisk.device + * } +const // Checked OK 04.08.2011 ALB + AN_TrackDiskDev = $14000000; + AN_TDCalibSeek = $14000001; + AN_TDDelay = $14000002; + + { * + * timer.device + * } +const // Checked OK 04.08.2011 ALB + AN_TimerDev = $15000000; + AN_TMBadReq = $15000001; + AN_TMBadSupply = $15000002; + + { * + * cia.resource + * } +const // Checked OK 04.08.2011 ALB + AN_CIARsrc = $20000000; + + { * + * disk.resource + * } +const // Checked OK 04.08.2011 ALB + AN_DiskRsrc = $21000000; + AN_DRHasDisk = $21000001; + AN_DRIntNoAct = $21000002; + + { * + * misc.resource + * } +const // Checked OK 04.08.2011 ALB + AN_MiscRsrc = $22000000; + + { * + * bootstrap + * } +const // Checked OK 04.08.2011 ALB + AN_BootStrap = $30000000; + AN_BootError = $30000001; + + { * + * Workbench + * } +const // Checked OK 04.08.2011 ALB + AN_Workbench = $31000000; + AN_NoFonts = $B1000001; + AN_WBBadStartupMsg1 = $31000001; + AN_WBBadStartupMsg2 = $31000002; + AN_WBBadIOMsg = $31000003; + AN_WBReLayoutToolMenu = $B1010009; + + { * + * DiskCopy + * } +const // Checked OK 04.08.2011 ALB + AN_DiskCopy = $32000000; + + { * + * toolkit for Intuition + * } +const // Checked OK 04.08.2011 ALB + AN_GadTools = $33000000; + + { * + * System utility library + * } +const // Checked OK 04.08.2011 ALB + AN_UtilityLib = $34000000; + + { * + * AROS Additions + * } + AN_Aros = $40000000; + AN_OOP = $41000000; +// Hidd Subsystem */ + AN_Hidd = $42000000; + AN_HiddNoRoot = $C2000001; // Could not create root device + + { * + * For use by any application that needs it + * } +const // Checked OK 04.08.2011 ALB + AN_Unknown = $35000000; + + + +{ * exec error definitions + ********************************************************************* + * } + + +const // Checked OK 04.08.2011 ALB + IOERR_OPENFAIL = (-1); + IOERR_ABORTED = (-2); + IOERR_NOCMD = (-3); + IOERR_BADLENGTH = (-4); + IOERR_BADADDRESS = (-5); + IOERR_UNITBUSY = (-6); + IOERR_SELFTEST = (-7); + + + +{ * exec resident definitions + ********************************************************************* + * } + + +type + PResident = ^TResident; + TResident = record + rt_MatchWord: Word; + rt_MatchTag : PResident; + rt_EndSkip : Pointer; + rt_Flags : Byte; + rt_Version : Byte; + rt_Type : Byte; + rt_Pri : Byte; + rt_Name : PChar; + rt_IdString : PChar; + rt_Init : Pointer; + { * Only valid when RTF_EXTENDED is set + * } + rt_Revision : Word; { * Revision Entry * } + rt_Tags : Pointer; + end; + + +const + RTC_MATCHWORD = $4AFC; + + RTF_AUTOINIT = (1 Shl 7); + RTF_EXTENDED = (1 Shl 6); { * structure extension is valid * } + { * rt_Init points to a PPC function which must be defined as + * + * struct Library* LIB_Init(struct Library *MyLibBase, + * BPTR SegList, + * struct ExecBase *SysBase) + * } + RTF_PPC = (1 Shl 3); + RTF_AFTERDOS = (1 Shl 2); + RTF_SINGLETASK = (1 Shl 1); + RTF_COLDSTART = (1 Shl 0); + + RTW_NEVER = 0; + RTW_COLDSTART = 1; + + + +{ * exec memory definitions + ********************************************************************* + * } + + +type // Checked OK 05.08.2011 ALB + PMemChunk = ^TMemChunk; + TMemChunk = record + nc_Next : PMemChunk; + nc_Bytes: PtrUInt; + end; + +type // Checked OK 05.08.2011 ALB + PMemHeader = ^TMemHeader; + TMemHeader = record + mh_Node : TNode; + mh_Attributes: Word; + mh_First : PMemChunk; + mh_Lower : Pointer; + mh_Upper : Pointer; + mh_Free : DWord; + end; + +type // Checked OK 05.08.2011 ALB + PMemEntry = ^TMemEntry; + TMemEntry = record + me_Un: record + case Byte of + 0 : (meu_Regs: DWord); + 1 : (meu_Addr: Pointer) + end; + me_Length: DWord; + end; + +type // Checked OK 05.08.2011 ALB + PMemList = ^TMemList; + TMemList = record + ml_Node : TNode; + ml_NumEntries: Word; + ml_ME : PMemEntry; + end; + + +const // Checked OK 05.08.2011 ALB + MEMF_ANY = 0; + MEMF_PUBLIC = (1 shl 0); + MEMF_CHIP = (1 shl 1); + MEMF_FAST = (1 shl 2); + MEMF_LOCAL = (1 shl 8); + MEMF_24BITDMA = (1 shl 9); + MEMF_KICK = (1 shl 10); + MEMF_SWAP = (1 shl 11); { * Memory that can be swapped out to disk * } + MEMF_31BIT = (1 shl 12); + + MEMF_CLEAR = (1 Shl 16); + MEMF_LARGEST = (1 Shl 17); + MEMF_REVERSE = (1 Shl 18); + MEMF_TOTAL = (1 Shl 19); + MEMF_HWALIGNED = (1 Shl 20); // For AllocMem() - align address and size to physical page boundary + MEMF_SEM_PROTECTED = (1 Shl 20); { * For CreatePool(): semaphore protection * } + MEMF_NO_EXPUNGE = (1 Shl 31); + + MEM_BLOCKSIZE = 8; + MEM_BLOCKMASK = (MEM_BLOCKSIZE - 1); + + +type // Checked OK 05.08.2011 ALB + PMemHandlerData = ^TMemHandlerData; + TMemHandlerData = record + memh_RequestSize : DWord; + memh_RequestFlags: DWord; + memh_Flags : DWord; + end; + + +const // Checked OK 05.08.2011 ALB + MEMHF_RECYCLE = (1 shl 0); + + MEM_DID_NOTHING = 0; + MEM_ALL_DONE = -1; + MEM_TRY_AGAIN = 1; + + + +{ * exec port definitions + ********************************************************************* + * } + + +type // Checked OK 05.08.2011 ALB + PMsgPort = ^TMsgPort; + TMsgPort = record + mp_Node : TNode; + mp_Flags : Byte; + mp_SigBit : Byte; + mp_SigTask: Pointer; + mp_MsgList: TEList; + end; + + +const + PF_ACTION = 3; + PA_SIGNAL = 0; + PA_SOFTINT = 1; + PA_IGNORE = 2; + + +type + PMessage = ^TMessage; + TMessage = record + mn_Node : TNode; + mn_ReplyPort: PMsgPort; + mn_Length : Word; + end; + + + +{ * exec task definitions (V50) + ********************************************************************* + * } + + +type + PTask = ^TTask; + TTask = record + tc_Node : TNode; + tc_Flags : Byte; + tc_State : Byte; + tc_IDNestCnt: ShortInt; + tc_TDNestCnt: ShortInt; + tc_SigAlloc : DWord; + tc_SigWait : DWord; + tc_SigRecvd : DWord; + tc_SigExcept: DWord; + {$IF 0} + tc_TrapAlloc: Word; + tc_TrapAble : Word; + {$ELSE} + tc_ETask: Pointer; + {$ENDIF} + tc_ExceptData: Pointer; + tc_ExceptCode: Pointer; + tc_TrapData : Pointer; + tc_TrapCode : Pointer; + tc_SPReg : Pointer; + tc_SPLower : Pointer; + tc_SPUpper : Pointer; + tc_Switch : Pointer; { *** OBSOLETE *** } + tc_Launch : Pointer; { *** OBSOLETE *** } + tc_MemEntry : TEList; + tc_UserData : Pointer; + end; + + +const + TB_PROCTIME = 0; + TB_ETASK = 3; + TB_STACKCHK = 4; + TB_EXCEPT = 5; + TB_SWITCH = 6; + TB_LAUNCH = 7; + + TF_PROCTIME = (1 Shl TB_PROCTIME); + TF_ETASK = (1 Shl TB_ETASK); + TF_STACKCHK = (1 Shl TB_STACKCHK); + TF_EXCEPT = (1 Shl TB_EXCEPT); + TF_SWITCH = (1 Shl TB_SWITCH); + TF_LAUNCH = (1 Shl TB_LAUNCH); + + TS_INVALID = 0; + TS_ADDED = 1; + TS_RUN = 2; + TS_READY = 3; + TS_WAIT = 4; + TS_EXCEPT = 5; + TS_REMOVED = 6; + + SIGB_ABORT = 0; + SIGB_CHILD = 1; + SIGB_BLIT = 4; + SIGB_SINGLE = 4; + SIGB_INTUITION = 5; + SIGB_NET = 7; + SIGB_DOS = 8; + + SIGF_ABORT = (1 Shl SIGB_ABORT); + SIGF_CHILD = (1 Shl SIGB_CHILD); + SIGF_BLIT = (1 Shl SIGB_BLIT); + SIGF_SINGLE = (1 Shl SIGB_SINGLE); + SIGF_INTUITION = (1 Shl SIGB_INTUITION); + SIGF_NET = (1 Shl SIGB_NET); + SIGF_DOS = (1 Shl SIGB_DOS); + + +type + PTaskTrapMessage = ^TTaskTrapMessage; + TTaskTrapMessage = record + Message: TMessage; { * Message Header * } + Task : TTask; { * connected Task * } + Version: DWord; { * version of the structure * } + TType : DWord; { * Exception Type * } + DAR : DWord; { * Exception Address Register * } + DSISR : DWord; { * Exception DSISR Reg * } + + { * This is undiscovered land... + * never assume a size of this structure + * } + end; + + +const + VERSION_TASKTRAPMESSAGE = $0; + + +type + PETask = ^TETask; + TETask = record + Message : TMessage; + Parent : PTask; + UniqueID : DWord; + Children : TMinList; + TrapAlloc: Word; + TrapAble : Word; + Result1 : DWord; + Result2 : Pointer; + MsgPort : TMsgPort; + + { * Don't touch!!!!!!!!!..there'll be an interface + * sooner than later. + * New Entries...most of the above entries + * are only their for structure compatability. + * They have no meaning as the OS never supported + * them. + * } + + { * A Task Pool for the task. + * } + MemPool: Pointer; + + { * PPC's Stack Lower Ptr + * The initial stack is allocated through + * AllocVec, so a FreeVec(ETask^.PPCSPLower); + * would work. + * If you use PPCStackSwap you must allocate + * your stack block with AllocVec(); + * } + PPCSPLower: Pointer; + + { * PPC's Stack Upper Ptr + * } + PPCSPUpper : Pointer; + PPCRegFrame: Pointer; + PPCLibData : Pointer; + + { * On a PPC exception this msgport + * is sent an exception msg... + * the task is stopped until somebody + * wakes it up again. + * (asynchron exception interface) + * If this Port is NULL the message is + * sent to SysBase->ex_PPCTrapMsgPort. + * } + PPCTrapMsgPort: PMsgPort; + PPCTrapMessage: PTaskTrapMessage; + + { * This is undiscovered land... + * never assume a size of this structure + * } + end; + + +type + PTaskInitExtension = ^TTaskInitExtension; + TTaskInitExtension = record + { * Must be filled with TRAP_PPCTASK + * } + Trap : Word; + Extension: Word; { * Must be set to 0 * } + Tags : Pointer; + end; + + +const + TASKTAG_DUMMY = (TAG_USER + $100000); + + { * Ptr to an ULONG Errorfield where a better error description + * can be stored. + * } + TASKTAG_ERROR = (TASKTAG_DUMMY + $0); + + { * Code type + * can be stored. + * } + TASKTAG_CODETYPE = (TASKTAG_DUMMY + $1); + + { * Start PC + * code must be of TASKTAG_CODETYPE + * } + TASKTAG_PC = (TASKTAG_DUMMY + $2); + + { * Final PC + * code must be of TASKTAG_CODETYPE + * } + TASKTAG_FINALPC = (TASKTAG_DUMMY + $3); + + { * Stacksize...Default 8192 + * } + TASKTAG_STACKSIZE = (TASKTAG_DUMMY + $4); + + { * Std Stacksize... + * Default(use the stack defined by tc_SPLower..tc_SPUpper) + * } + TASKTAG_STACKSIZE_M68K = (TASKTAG_DUMMY + $5); + + { * specify task name, name is copied + * } + TASKTAG_NAME = (TASKTAG_DUMMY + $6); + + { * tc_UserData + * } + TASKTAG_USERDATA = (TASKTAG_DUMMY + $7); + + { * Task priority + * } + TASKTAG_PRI = (TASKTAG_DUMMY + $8); + + { * Pool's Puddlesize + * } + TASKTAG_POOLPUDDLE = (TASKTAG_DUMMY + $9); + + { * Pool's ThreshSize + * } + TASKTAG_POOLTHRESH = (TASKTAG_DUMMY + $a); + + { * PPC First Argument..gpr3 + * } + TASKTAG_PPC_ARG1 = (TASKTAG_DUMMY + $10); + + { * PPC First Argument..gpr4 + * } + TASKTAG_PPC_ARG2 = (TASKTAG_DUMMY + $11); + + { * PPC First Argument..gpr5 + * } + TASKTAG_PPC_ARG3 = (TASKTAG_DUMMY + $12); + + { * PPC First Argument..gpr6 + * } + TASKTAG_PPC_ARG4 = (TASKTAG_DUMMY + $13); + + { * PPC First Argument..gpr7 + * } + TASKTAG_PPC_ARG5 = (TASKTAG_DUMMY + $14); + + { * PPC First Argument..gpr8 + * } + TASKTAG_PPC_ARG6 = (TASKTAG_DUMMY + $15); + + { * PPC First Argument..gpr9 + * } + TASKTAG_PPC_ARG7 = (TASKTAG_DUMMY + $16); + + { * PPC First Argument..gpr10 + * } + TASKTAG_PPC_ARG8 = (TASKTAG_DUMMY + $17); + + { * + * Startup message to be passed to task/process, ReplyMsg'd at RemTask() + * ti_Data: struct Message * + * } + TASKTAG_STARTUPMSG = (TASKTAG_DUMMY + $18); + + { * + * Create internal MsgPort for task/process, deleted at RemTask() + * ti_Data: struct MsgPort **, can be NULL + * } + TASKTAG_TASKMSGPORT = (TASKTAG_DUMMY + $19); + + +const + CODETYPE_M68K = $0; + { * + * System V4 ABI + * } + CODETYPE_PPC = $1; + +const + TASKERROR_OK = 0; + TASKERROR_NOMEMORY = 1; + + + { * + * Stack swap structure as passed to StackSwap() and PPCStackSwap() + * } +type + PStackSwapStruct = ^TStackSwapStruct; + TStackSwapStruct = record + stk_Lower : Pointer; { * Lowest byte of stack * } + stk_Upper : Pointer; { * Upper end of stack (size + Lowert) * } + stk_Pointer: Pointer; { * Stack pointer at switch point * } + end; + +type + PPPCStackSwapArgs = ^TPPCStackSwapArgs; + TPPCStackSwapArgs = record + Args: Array[0..7] Of DWord; { * The C register arguments from gpr3..gpr11 * } + end; + + + { * + * NewGetTaskAttrsA(), NewSetTaskAttrsA() tags + * } +const + TASKINFOTYPE_ALLTASK = $0; + TASKINFOTYPE_NAME = $1; + TASKINFOTYPE_PRI = $2; + TASKINFOTYPE_TYPE = $3; + TASKINFOTYPE_STATE = $4; + TASKINFOTYPE_FLAGS = $5; + TASKINFOTYPE_SIGALLOC = $6; + TASKINFOTYPE_SIGWAIT = $7; + TASKINFOTYPE_SIGRECVD = $8; + TASKINFOTYPE_SIGEXCEPT = $9; + TASKINFOTYPE_EXCEPTDATA = $a; + TASKINFOTYPE_EXCEPTCODE = $b; + TASKINFOTYPE_TRAPDATA = $c; + TASKINFOTYPE_TRAPCODE = $d; + TASKINFOTYPE_STACKSIZE_M68K = $e; + TASKINFOTYPE_STACKSIZE = $f; + TASKINFOTYPE_USEDSTACKSIZE_M68K = $10; + TASKINFOTYPE_USEDSTACKSIZE = $11; + TASKINFOTYPE_TRAPMSGPORT = $12; + TASKINFOTYPE_STARTUPMSG = $13; + TASKINFOTYPE_TASKMSGPORT = $14; + TASKINFOTYPE_POOLPTR = $15; + TASKINFOTYPE_POOLMEMFLAGS = $16; + TASKINFOTYPE_POOLPUDDLESIZE = $17; + TASKINFOTYPE_POOLTHRESHSIZE = $18; + + { * + * Task Scheduler statistics (exec 50.42) + * } + TASKINFOTYPE_NICE = $19; + TASKINFOTYPE_AGETICKS = $1a; + TASKINFOTYPE_CPUTIME = $1b; + TASKINFOTYPE_LASTSECCPUTIME = $1c; + TASKINFOTYPE_RECENTCPUTIME = $1d; + TASKINFOTYPE_VOLUNTARYCSW = $1e; + TASKINFOTYPE_INVOLUNTARYCSW = $1f; + TASKINFOTYPE_LASTSECVOLUNTARYCSW = $20; + TASKINFOTYPE_LASTSECINVOLUNTARYCSW = $21; + { * Added in exec 50.45 * } + TASKINFOTYPE_LAUNCHTIMETICKS = $22; + TASKINFOTYPE_LAUNCHTIMETICKS1978 = $23; + TASKINFOTYPE_PID = $24; + + TASKINFOTYPE_68K_NEWFRAME = $50; + + TASKINFOTYPE_PPC_SRR0 = $100; + TASKINFOTYPE_PPC_SRR1 = $101; + TASKINFOTYPE_PPC_LR = $102; + TASKINFOTYPE_PPC_CTR = $103; + TASKINFOTYPE_PPC_CR = $104; + TASKINFOTYPE_PPC_XER = $105; + TASKINFOTYPE_PPC_GPR = $106; + TASKINFOTYPE_PPC_FPR = $107; + TASKINFOTYPE_PPC_FPSCR = $108; + TASKINFOTYPE_PPC_VSCR = $109; + TASKINFOTYPE_PPC_VMX = $10a; + TASKINFOTYPE_PPC_VSAVE = $10b; + TASKINFOTYPE_PPC_FRAME = $10c; + TASKINFOTYPE_PPC_FRAMESIZE = $10d; + TASKINFOTYPE_PPC_NEWFRAME = $10e; + + TASKINFOTAG_DUMMY = (TAG_USER + $110000); + { * Used with TASKINFOTYPE_ALLTASK + * } + TASKINFOTAG_HOOK = (TASKINFOTAG_DUMMY + $0); + { * Used with TASKINFOTYPE_PPC_GPR,TASKINFOTYPE_PPC_FPR,TASKINFOTYPE_PPC_VMX + * to define the copy area + * } + TASKINFOTAG_REGSTART = (TASKINFOTAG_DUMMY + $1); + { * Used with TASKINFOTYPE_PPC_GPR,TASKINFOTYPE_PPC_FPR,TASKINFOTYPE_PPC_VMX + * to define the copy area + * } + TASKINFOTAG_REGCOUNT = (TASKINFOTAG_DUMMY + $2); + + + { * + * NewSetTaskAttrsA(..,@TaskFrame68k,sizeof(TTaskFrame68k),TASKINFOTYPE_68K_NEWFRAME,...); + * } +type + PTaskFrame68k = ^TTaskFrame68k; + TTaskFrame68k = record + PC: Pointer; + SR: Word; + Xn: Array[0..14] Of LongInt; + end; + + + { * + * Don't depend on these + * } +const + DEFAULT_PPCSTACKSIZE = 32768; + DEFAULT_M68KSTACKSIZE = 2048; + DEFAULT_TASKPUDDLESIZE = 4096; + DEFAULT_TASKTHRESHSIZE = 4096; + + +{ * exec interrupt definitions + ********************************************************************* + * } + + +type // Checked OK 05.08.2011 ALB + PInterrupt = ^TInterrupt; + TInterrupt = record + is_Node: TNode; + is_Data: Pointer; + is_Code: Pointer; // server code entry + end; + +type // Checked OK 05.08.2011 ALB + PIntVector = ^TIntVector; + TIntVector = record + iv_Data: Pointer; + iv_Code: Pointer; + iv_Node: PNode; + end; + +type // Checked OK 05.08.2011 ALB + PSoftIntList = ^TSoftIntList; + TSoftIntList = record + sh_List: TEList; + sh_Pad : Word; + end; + + +const // Checked OK 05.08.2011 ALB + SIH_PRIMASK = $f0; + + INTB_NMI = 15; + INTF_NMI = (1 Shl INTB_NMI); + + + +{ * exec semaphore definitions (V50) + ********************************************************************* + * } + + + { * + * Shouldn't be available public.. + * } +type + PSemaphoreRequest = ^TSemaphoreRequest; + TSemaphoreRequest = record + sr_Link : TMinNode; + sr_Waiter: PTask; + end; + +type + PSignalSemaphore = ^TSignalSemaphore; + TSignalSemaphore = record + ss_Link : TNode; + ss_NestCount : SmallInt; + ss_WaitQueue : TMinList; + ss_MultipleLink: TSemaphoreRequest; + ss_Owner : PTask; + ss_QueueCount : SmallInt; + end; + +type + PSemaphoreMessage = ^TSemaphoreMessage; + TSemaphoreMessage = record + ssm_Message : TMessage; + ssm_Semaphore: PSignalSemaphore; + end; + + +const + SM_SHARED = 1; + SM_EXCLUSIVE = 0; + + + +{ * exec machine definitions (V50) + ********************************************************************* + * } + + +const + MACHINE_M68k = $0; + MACHINE_PPC = $1; + MACHINE_NO = $ffffffff; + + + +{ * exec library definitions + ********************************************************************* + * } + + +const // Checked OK 05.08.2011 ALB + LIB_VECTSIZE = 6; + LIB_RESERVED = 4; + LIB_BASE = (-LIB_VECTSIZE); + LIB_USERDEF = (LIB_BASE - (LIB_RESERVED * LIB_VECTSIZE)); + LIB_NONSTD = (LIB_USERDEF); + + LIB_OPEN = (LIB_BASE * 1); + LIB_CLOSE = (LIB_BASE * 2); + LIB_EXPUNGE = (LIB_BASE * 3); + LIB_EXTFUNC = (LIB_BASE * 4); + + +type // Checked OK 05.08.2011 ALB + PLibrary = ^TLibrary; + TLibrary = record + lib_Node : TNode; + lib_Flags : Byte; + lib_pad : Byte; + lib_NegSize : Word; + lib_PosSize : Word; + lib_Version : Word; + lib_Revision: Word; + lib_IdString: PChar; + lib_Sum : DWord; + lib_OpenCnt : Word; + end; + + +const // Checked OK 05.08.2011 ALB + LIBF_SUMMING = (1 shl 0); + LIBF_CHANGED = (1 shl 1); + LIBF_SUMUSED = (1 shl 2); + LIBF_DELEXP = (1 shl 3); + +const // Checked OK 05.08.2011 ALB + {* ID numbers for Exec/TaggedOpenLibrary + *} + TAGGEDOPEN_GRAPHICS = 1; + TAGGEDOPEN_LAYERS = 2; + TAGGEDOPEN_INTUITION = 3; + TAGGEDOPEN_DOS = 4; + TAGGEDOPEN_ICON = 5; + TAGGEDOPEN_EXPANSION = 6; + TAGGEDOPEN_UTILITY = 7; + TAGGEDOPEN_KEYMAP = 8; + TAGGEDOPEN_GADTOOLS = 9; + TAGGEDOPEN_WORKBENCH = 10; + +const + SETFUNCTAG_Dummy = (TAG_USER +$01000000); + + { * Set the machine type of the function + * Default is 68k + * } + SETFUNCTAG_MACHINE = (SETFUNCTAG_Dummy + $1); + + { * Function type specifier + * } + SETFUNCTAG_TYPE = (SETFUNCTAG_Dummy + $2); + + { * ID String + * } + SETFUNCTAG_IDNAME = (SETFUNCTAG_Dummy + $3); + + { * + * Set to TRUE if the replaced function will never be used + * again. + * } + SETFUNCTAG_DELETE = (SETFUNCTAG_Dummy + $4); + + + { * See emul/emulinterface.h for more informations + * } + + { * Save Emulation PPC Registers + * Call Function + * Restore Emulation PPC Registers + * REG_D0 = Result + * } +const + SETFUNCTYPE_NORMAL = 0; + { * Call Function + * Must use the global register settings of the emulation + * REG_D0 = Result + * } + SETFUNCTYPE_QUICK = 1; + { * Save Emulation PPC Registers + * Call Function + * Restore Emulation PPC Registers + * No Result + * Needed to replace functions like + * forbid,obtainsemaphores which are + * defined as trashing no registers + * } + SETFUNCTYPE_NORMALNR = 2; + { * Call Function + * Must use the global register settings of the emulation + * No Result + * Needed to replace functions like + * forbid,obtainsemaphores which are + * defined as trashing no registers + * } + SETFUNCTYPE_QUICKNR = 3; + SETFUNCTYPE_NORMALSR = 4; + SETFUNCTYPE_NORMALSRNR = 5; + SETFUNCTYPE_NORMALD0_D1 = 6; + SETFUNCTYPE_NORMALRESTORE = 7; + SETFUNCTYPE_SYSTEMV = 8; + SETFUNCTYPE_NORMALD0D1SR = 9; + SETFUNCTYPE_NORMALD0D1A0A1SR = 10; + + + { * CreateLibrary extensions + * } + LIBTAG_BASE = (TAG_USER + $01000100); + + { * + * Function/Vector Array + * } + LIBTAG_FUNCTIONINIT = (LIBTAG_BASE+$0); + { * + * Struct Init + * } + LIBTAG_STRUCTINIT = (LIBTAG_BASE+$1); + { * + * Library Init + * } + LIBTAG_LIBRARYINIT = (LIBTAG_BASE+$2); + { * + * Init Code Type + * } + LIBTAG_MACHINE = (LIBTAG_BASE+$3); + { * + * Library Base Size + * } + LIBTAG_BASESIZE = (LIBTAG_BASE+$4); + { * + * SegList Ptr + * } + LIBTAG_SEGLIST = (LIBTAG_BASE+$5); + { * + * Library Priority + * } + LIBTAG_PRI = (LIBTAG_BASE+$6); + { * + * Library Type..Library,Device,Resource,whatever + * } + LIBTAG_TYPE = (LIBTAG_BASE+$7); + { * + * Library Version + * (UWORD) + * } + LIBTAG_VERSION = (LIBTAG_BASE+$8); + { * + * Library Flags + * } + LIBTAG_FLAGS = (LIBTAG_BASE+$9); + { * + * Library Name + * } + LIBTAG_NAME = (LIBTAG_BASE+$a); + { * + * Library IDString + * } + LIBTAG_IDSTRING = (LIBTAG_BASE+$b); + { * + * AddDevice(),AddLibrary(),AddResource().. + * depends on LibNode.ln_Type field which + * can be set by some Init function, Struct Scripts + * or LIBTAG_TYPE. + * If you set LIBTAG_PUBLIC the library + * is added to the right system list. + * } + LIBTAG_PUBLIC = (LIBTAG_BASE+$c); + { * + * Library Revision + * (UWORD) + * } + LIBTAG_REVISION = (LIBTAG_BASE+$d); + { * + * Library QueryInfo Flag + * (Boolean) + * } + LIBTAG_QUERYINFO = (LIBTAG_BASE+$e); + + + { * Private + * don`t touch...floating design + * } + { +type + PFuncEntry = ^TFuncEntry; + TFuncEntry = record + EmulLibEntry : TEmulLibEntry; + OldFunction : Pointer; { * Needed for bookkeeping * } + end; + + PFuncOldEntry = ^TFuncOldEntry; + TFuncOldEntry = record + Command : Word; + FuncEntry: PFuncEntry; + end; +} + + { * + * EmulLibEntry.Extension + * } +const + FUNCENTRYEXTF_LIBRARY = $1; { * Entry created by the OS * } + + { * + * Functionarray first ULONG ID defines the format + * of the functionarray for MakeFunctions()/MakeLibrary(). + * + * If there`s not such id the functionarray is a + * 32Bit 68k function ptr array. + * (ULONG) $ffffffff stops it + * } + + { * 68k 16bit relative functionarray ptrs + * (UWORD) $ffff stops it + * } + + FUNCARRAY_16BIT_OLD = $ffffffff; + + { * PPC 32bit functionarray ptrs + * (ULONG) $ffff stops it + * } + FUNCARRAY_32BIT_NATIVE = $fffefffe; + + { * Starts a functionarray block. + * This way it`s possible to mix 68k and PPC + * function definitions. + * BASE: + * FUNCTIONARRAY_BEGIN + * FUNCARRAY_32BIT_NATIVE + * FUNC0 + * FUNC1 + * . + * FUNCn + * $ffffffff + * FUNCn+1 (No ID->32Bit 68k) + * FUNCn+2 + * . + * FUNCm + * $ffffffff + * FUNCARRAY_16BIT_OLD + * FUNCm+1-BASE + * FUNCm+2-BASE + * . + * FUNCo-BASE + * $ffff + * FUNCTIONARRAY_END + * } + + FUNCARRAY_BEGIN = $fffdfffd; + + { * Ends a functionarray block. + * } + FUNCARRAY_END = $fffcfffc; + + { * PPC 32bit Quick functionarray ptrs. + * These functions must comply to the emulation's + * register layout which is defined inside the + * emul/emulregs.h. That means the register layout + * MUST also be valid during interrupts/task switches. + * You can't just destroy A7(r31), SR or PC. + * + * You shouldn't use this for any normal code + * as there's no real reason to do so. If you + * really think you need to use it please ask + * us first on the dev mailinglist. + * (ULONG) $ffffffff stops it + * } + FUNCARRAY_32BIT_QUICK_NATIVE = $fffbfffb; + + { * PPC 32bit QuickNR(No Result) functionarray ptrs + * (ULONG) $ffffffff stops it + * } + FUNCARRAY_32BIT_QUICKNR_NATIVE = $fffafffa; + + { * PPC 32bit no result functionarray ptrs + * (ULONG) $ffffffff stops it + * } + FUNCARRAY_32BIT_NR_NATIVE = $fff9fff9; + + { * PPC 32bit SR functionarray ptrs + * (ULONG) $ffffffff stops it + * } + FUNCARRAY_32BIT_SR_NATIVE = $fff8fff8; + + { * PPC 32bit SR(no result) functionarray ptrs + * (ULONG) $ffffffff stops it + * } + FUNCARRAY_32BIT_SRNR_NATIVE = $fff7fff7; + + { * PPC 32bit D0_D1 functionarray ptrs + * (ULONG) $ffffffff stops it + * } + FUNCARRAY_32BIT_D0D1_NATIVE = $fff6fff6; + + { * PPC 32bit Restore1 functionarray ptrs + * (ULONG) $ffffffff stops it + * } + FUNCARRAY_32BIT_RESTORE_NATIVE = $fff5fff5; + + { * PPC 32bit SystemV ABI entry + * these function entries DON'T comply + * to the amiga register modell REG_D0-A6 + * but comply to the PPC SystemV ABI so + * you can directly use PPC C Argument + * parsing. That way you're also not limited + * with the register count. + * Such library functions can't be used + * by 68k emulation, so you can only use + * them for new code. + * As we allow these new functions to be + * used with old functions we keep the + * 6 bytes function entry steps in the library. + * Layout is + * + * CODE_JMP, &FuncEntry ; Old Entry + * CODE_ILLEGAL, Function ; SystemV ABI Entry + * + * + * (ULONG) $ffffffff stops it + * } + FUNCARRAY_32BIT_SYSTEMV = $fff4fff4; + + { * PPC 32bit D0D1SR functionarray ptrs + * (ULONG) $ffffffff stops it + * } + FUNCARRAY_32BIT_D0D1SR_NATIVE = $fff3fff3; + + { * PPC 32bit D0D1A0A1SR functionarray ptrs + * (ULONG) $ffffffff stops it + * } + FUNCARRAY_32BIT_D0D1A0A1SR_NATIVE = $fff2fff2; + + + +{ * exec device definitions + ********************************************************************* + * } + + +type // Checked OK 04.08.2011 ALB + PDevice = ^TDevice; + TDevice = record + dd_Library: TLibrary; + end; + +type // Checked OK 04.08.2011 ALB + PUnit = ^TUnit; + TUnit = record + unit_MsgPort: TMsgPort; + unit_flags : Byte; + unit_pad : Byte; + unit_OpenCnt: Word; + end; + + +const // Checked OK 04.08.2011 ALB + UNITF_ACTIVE = (1 shl 0); + UNITF_INTASK = (1 shl 1); + + + +{ * exec io definitions + ********************************************************************* + * } + + +type // Checked OK 05.08.2011 ALB + PIORequest = ^TIORequest; + TIORequest = record + io_Message: TMessage; + io_Device : PDevice; + io_Unit : PUnit; + io_Command: Word; + io_Flags : Byte; + io_Error : ShortInt; + end; + +type // Checked OK 05.08.2011 ALB + PIOStdReq = ^TIOStdReq; + TIOStdReq = record + io_Message: TMessage; + io_Device : PDevice; + io_Unit : PUnit; + io_Command: Word; + io_Flags : Byte; + io_Error : ShortInt; + io_Actual : DWord; + io_Length : DWord; + io_Data : Pointer; + io_Offset : DWord; + end; + + +const // Checked OK 05.08.2011 ALB + DEV_BEGINIO = -30; + DEV_ABORTIO = -36; + + IOB_QUICK = 0; + IOF_QUICK = (1 Shl IOB_QUICK); + + CMD_INVALID = 0; + CMD_RESET = 1; + CMD_READ = 2; + CMD_WRITE = 3; + CMD_UPDATE = 4; + CMD_CLEAR = 5; + CMD_STOP = 6; + CMD_START = 7; + CMD_FLUSH = 8; + CMD_NONSTD = 9; + +type + + PArosSupportBase = ^TArosSupportBase; + TArosSupportBase = record + StdOut: Pointer; + kPrintfPtr: Pointer; + rkPrintfPtr: Pointer; + vkPrintfPtr: Pointer; + DebugConfig: Pointer; + end; + +{ * exec include + ********************************************************************* + * } + + +type // Checked OK 05.08.2011 ALB + PExecBase = ^TExecBase; + TExecBase = record + // lib structure for Exec + LIbNode : TLibrary; + + // system constants + + SoftVer : Word; // obsolete + LowMemChkSum: SmallInt; + ChkBase : PtrUInt; + ColdCapture : Pointer; + CoolCapture : Pointer; + WarmCapture : Pointer; + SysStkUpper : Pointer; // System Stack Bounds + SysStkLower : Pointer; + MaxLocMem : PtrUInt; // Chip Memory Pointer + DebugEntry : Pointer; + DebugData : Pointer; + AlertData : Pointer; + MaxExtMem : Pointer; // Extended Memory Pointer (may be nil) + ChkSum : Word; // SoftVer to MaxExtMem + + // interrupts + + IntVects : Array[0..15] Of TIntVector; + + // System Variables + + ThisTask : PTask; // Pointer to currently running Task READONLY + IdleCount : DWord; + DispCount : DWord; + Quantum : Word; // # of ticks a task may run + Elapsed : Word; // # of ticks the current task has run + SysFlags : Word; + IDNestCnt : ShortInt; + TDNestCnt : ShortInt; + AttnFlags : Word; // Attention Flags .. se below + AttnResched : Word; + ResModules : Pointer; + + TaskTrapCode : Pointer; + TaskExceptCode: Pointer; + TaskExitCode : Pointer; + TaskSigAlloc : DWord; + TaskTrapAlloc : Word; + + // Private Lists + + MemList : TEList; + ResourceList: TEList; + DeviceList : TEList; + IntrList : TEList; + LibList : TEList; + PortList : TEList; + TaskReady : TEList; + TaskWait : TEList; + SoftInts : Array[0..4] Of TSoftIntList; + + //stuff + + LastAlert : Array[0..3] Of LongInt; + + VBlankFrequency : Byte; + PowerSupplyFrequency: Byte; // AROS PRIVATE: VBlankFreq * PowerSupplyFreq = Timer Tick Rate + SemaphoreList : TEList; + + // Kickstart + + KickMemPtr : Pointer; + KickTagPtr : Pointer; + KickCheckSum : Pointer; + + // Miscellaneous stuff + + ex_Pad0 : Word; + ex_LaunchPoint : PtrUInt; + ex_RamLibPrivate : Pointer; + ex_EClockFrequency : DWord; + ex_CacheControl : DWord; + ex_TaskID : DWord; + ex_Reserved1 : Array[0..4] Of DWord; + ex_MMULock : Pointer; + ex_Reserved2 : Array[0..1] Of DWord; + ex_DebugFlags : DWord; { * Exec Debug Flags..*private* * } + + ex_MemHandlers : TMinList; + ex_MemHandler : Pointer; + // Additional field for AROS + DebugAROSBase : PArosSupportBase; + end; + + + { * + * Outdated 68k cpu informations + * + * } +const // Checked OK 05.08.2011 ALB + AFB_68010 = 0; + AFB_68020 = 1; + AFB_68030 = 2; + AFB_68040 = 3; + AFB_68881 = 4; + AFB_68882 = 5; + AFB_FPU40 = 6; + AFB_68060 = 7; + AFB_PRIVATE = 15; + + AFF_68010 = (1 shl AFB_68010); + AFF_68020 = (1 shl AFB_68020); + AFF_68030 = (1 shl AFB_68030); + AFF_68040 = (1 shl AFB_68040); + AFF_68881 = (1 shl AFB_68881); + AFF_68882 = (1 shl AFB_68882); + AFF_FPU40 = (1 shl AFB_FPU40); + AFF_68060 = (1 shl AFB_68060); + AFF_PRIVATE = (1 shl AFB_PRIVATE); + + { * + * Outdated 68k cache functionality + * Mostly without function. + * } +const // Checked OK 05.08.2011 ALB + CACRF_EnableI = (1 shl 0); + CACRF_FreezeI = (1 shl 1); + CACRF_ClearI = (1 shl 3); + CACRF_IBE = (1 shl 4); + CACRF_EnableD = (1 shl 8); + CACRF_FreezeD = (1 shl 9); + CACRF_ClearD = (1 shl 11); + CACRF_DBE = (1 shl 12); + CACRF_WriteAllocate = (1 shl 13); + CACRF_EnableE = (1 shl 30); + CACRF_CopyBack = (1 shl 31); + + DMA_Continue = (1 shl 1); + DMA_NoModify = (1 shl 2); + DMA_ReadFromRAM = (1 shl 3); +(* + SB_SAR = 15; + SB_TQE = 14; + SB_SINT = 13; + + SF_SAR = (1 shl SB_SAR); + SF_TQE = (1 shl SB_TQE); + SF_SINT = (1 shl SB_SINT); +*) + + { ****** Debug Flags...(don`t depend on them) ********** } +const // Checked OK 05.08.2011 ALB + EXECDEBUGF_INITRESIDENT = $1; + EXECDEBUGF_INITCODE = $2; + EXECDEBUGF_FINDRESIDENT = $4; + + EXECDEBUGF_CREATELIBRARY = $10; + EXECDEBUGF_SETFUNCTION = $20; + EXECDEBUGF_NEWSETFUNCTION = $40; + EXECDEBUGF_CHIPRAM = $80; + + EXECDEBUGF_ADDTASK = $100; + EXECDEBUGF_REMTASK = $200; + EXECDEBUGF_GETTASKATTR = $400; + EXECDEBUGF_SETTASKATTR = $800; + + EXECDEBUGF_EXCEPTHANDLER = $1000; + EXECDEBUGF_ADDDOSNODE = $2000; + EXECDEBUGF_PCI = $4000; + EXECDEBUGF_RAMLIB = $8000; + + EXECDEBUGF_NOLOGSERVER = $10000; + EXECDEBUGF_NOLOGWINDOW = $20000; + + { * + * "env:MorphOS/LogPath" contains the logfile path, + * If not specified it`s using "ram:.morphoslog" + * } + EXECDEBUGF_LOGFILE = $40000; + EXECDEBUGF_LOGKPRINTF = $80000; + + { * Memory Tracking Flags + * } + EXECDEBUGF_PERMMEMTRACK = $100000; + EXECDEBUGF_MEMTRACK = $200000; + + { * CyberGuardPPC Flags + * } + EXECDEBUGF_CYBERGUARDDEADLY = $400000; + + { * PPCLib Flags + * } + EXECDEBUGF_LOADSEG = $01000000; + EXECDEBUGF_UNLOADSEG = $02000000; + EXECDEBUGF_PPCSTART = $04000000; + + { * UserFlags + * } + + { * + * Enables debug output for cybergraphx + * } +const // Checked OK 05.08.2011 ALB + EXECDEBUGF_CGXDEBUG = $08000000; + + { * + * Should be used to control user LibInit/DevInit Debug output + * } + EXECDEBUGF_INIT = $40000000; + + { * + * Should be used to control logging + * } + EXECDEBUGF_LOG = $80000000; + + + +{* + * The following definitions are private! + *} +const // Checked OK 05.08.2011 ALB +// SysFlags + SFF_SoftInt = (1 shl 5); // There is a software interrupt + SFF_QuantumOver = (1 shl 13); // Task's time slice is over + +// AttnFlags + ARF_AttnSwitch = (1 shl 7); // Delayed Switch() pending + ARF_AttnDispatch = (1 shl 15); // Delayed Dispatch() pending + +const + { * + * Execbase list IDs + * } + EXECLIST_DEVICE = 0; + EXECLIST_INTERRUPT = 1; + EXECLIST_LIBRARY = 2; + EXECLIST_MEMHANDLER = 3; + EXECLIST_MEMHEADER = 4; + EXECLIST_PORT = 5; + EXECLIST_RESOURCE = 6; + EXECLIST_SEMAPHORE = 7; + EXECLIST_TASK = 8; + + + { * + * Execnotify hook message + * } +type + PExecNotifyMessage = ^TExecNotifyMessage; + TExecNotifyMessage = record + MType : DWord; + Flags : DWord; + Extra : DWord; + Extension: Pointer; + end; + + +const + EXECNOTIFYF_REMOVE = (1 Shl 0); { * if clear, is ADD * } + EXECNOTIFYF_POST = (1 Shl 1); { * if clear, is PRE * } + + + { * + * AddExecNodeTagList tags + * } +const + SAL_Dummy = (TAG_USER + 1000); + SAL_Type = (SAL_Dummy + 1); + SAL_Priority = (SAL_Dummy + 2); + SAL_Name = (SAL_Dummy + 3); + +{$include utild2.inc} + + + diff --git a/rtl/aros/i386/execf.inc b/rtl/aros/i386/execf.inc new file mode 100644 index 0000000000..0a15874015 --- /dev/null +++ b/rtl/aros/i386/execf.inc @@ -0,0 +1,89 @@ +{ + This file is part of the Free Pascal run time library. + Copyright (c) 2006 Karoly Balogh + + exec functions (V40) for Amiga/PowerPC + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} + +var + LocalExecBase : Pointer; external name '_ExecBase'; + +procedure Forbid; syscall AOS_ExecBase 22; +procedure Permit; syscall AOS_ExecBase 23; +function execAllocMem(byteSize: Cardinal; requirements: Cardinal): Pointer; syscall LocalExecBase 33; +procedure execFreeMem(memoryBlock: Pointer; byteSize: Cardinal); syscall LocalExecBase 35; +function FindTask(name: PChar): PTask; syscall LocalExecBase 49; +function SetSignal(newSignals: Cardinal; signalSet : Cardinal): Cardinal; syscall LocalExecBase 51; +function Wait(SignalSet: LongWord): LongWord; syscall AOS_ExecBase 53; +procedure Signal(Task: PTask; SignalSet: LongWord); syscall AOS_ExecBase 54; +function AllocSignal(signalNum: LongInt): ShortInt; syscall LocalExecBase 55; +procedure FreeSignal(signalNum: LongInt); syscall LocalExecBase 56; +procedure AddPort(port: PMsgPort); syscall LocalExecBase 59; +procedure RemPort(port: PMsgPort); syscall LocalExecBase 60; +function GetMsg(port: PMsgPort): PMessage; syscall LocalExecBase 62; +procedure ReplyMsg(message : pMessage); syscall LocalExecBase 63; +function WaitPort(port: PMsgPort): PMessage; syscall LocalExecBase 64; +procedure CloseLibrary(libHandle: PLibrary); syscall LocalExecBase 69; +function OpenDevice(devName: PChar; numunit: Cardinal; ioRequest: pIORequest; flags: Cardinal): ShortInt; syscall LocalExecBase 74; +procedure CloseDevice(ioRequest: PIORequest); syscall LocalExecBase 75; +function DoIO(ioRequest: PIORequest): ShortInt; syscall LocalExecBase 76; +function OpenLibrary(libname: PChar; libver : Cardinal): Pointer; syscall LocalExecBase 92; +procedure InitSemaphore(SigSem: PSignalSemaphore); syscall AOS_ExecBase 93; +procedure ObtainSemaphore(SigSem: PSignalSemaphore); syscall AOS_ExecBase 94; +procedure ReleaseSemaphore(SigSem: PSignalSemaphore); syscall AOS_ExecBase 95; +function AttemptSemaphore(SigSem: PSignalSemaphore): LongWord; syscall AOS_ExecBase 96; +function CreatePool(requirements: Cardinal; puddleSize: Cardinal; threshSize: Cardinal): Pointer; syscall LocalExecBase 116; +procedure DeletePool(poolHeader: Pointer); syscall LocalExecBase 117; +function AllocPooled(poolHeader: Pointer; memSize: Cardinal): Pointer; syscall LocalExecBase 118; +function FreePooled(poolHeader: Pointer; memory: Pointer; memSize: Cardinal): Pointer; syscall LocalExecBase 119; +procedure StackSwap(NewStack: PStackSwapStruct); syscall AOS_ExecBase 122; +procedure RawPutChar(c: Char); syscall AOS_ExecBase 86; + +//function RawDoFmt(const formatString : pCHAR;const dataStream : POINTER; putChProc : tPROCEDURE; putChData : POINTER): pointer; +function RawDoFmt(const formatString : pCHAR;const dataStream : POINTER; putChProc : POINTER; putChData : POINTER): pointer; syscall LocalExecBase 87; + +function GetLibAdress(Base: Pointer; Offset: LongInt): Pointer; inline; +begin + if Base = nil then + begin + RawDoFmt('FPC_FILE_DEBUG: Error! Illegal library access with not opened library: %d !'+#10,@Offset,pointer(1),nil); + Debugln('Illegal library access with not opened library'); + Halt(1); + end; + GetLibAdress := Pointer((Base -(Offset * SizeOf(Pointer)))^); +end; + +procedure Debug(s: string); +type + TkPrintf = function(Msg: PChar): Integer; cdecl; +var + kPrintf: TkPrintf; + d: string; + i: Integer; +begin + if Assigned(AOS_ExecBase) then + begin + if Assigned(PExecBase(AOS_ExecBase)^.DebugArosBase) then + begin + kPrintf := TKPrintF(PExecBase(AOS_ExecBase)^.DebugArosBase^.kprintfPtr); + if Assigned(kPrintf) then + begin + d := s + #0; + i := kPrintf(@d[1]); + end; + end; + end; +end; + +procedure Debugln(s: string); +begin + Debug(s + #10); +end; diff --git a/rtl/aros/i386/prt0.as b/rtl/aros/i386/prt0.as new file mode 100644 index 0000000000..527dc5cb7e --- /dev/null +++ b/rtl/aros/i386/prt0.as @@ -0,0 +1,162 @@ +# +# This file is part of the Free Pascal run time library. +# Copyright (c) 2011 by Marcus Sackrow +# +# Startup code for AROS/i386 RTL +# +# See the file COPYING.FPC, included in this distribution, +# for details about the copyright. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY;without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# + +# AROS Startup Code + .text + .align 4 + .section .aros.startup, "ax" + .globl _start + .globl start + .globl _haltproc + .globl haltproc +_start: +start: + + /* Save the exec library base */ + movl 12(%esp),%eax + movl %eax,_ExecBase + + /* Save the command line pointer length to CommandLineLen */ + movl 8(%esp),%eax + movl %eax,CommandLineLen + + /* Save the command line pointer to CommandLine */ + movl 4(%esp),%eax + movl %eax,CommandLine + + /* save all registers */ + pushal + + /* get the pointer to current stack */ + movl _ExecBase,%eax + pushl %eax + pushl $0 + movl -196(%eax),%eax /* FindTask(nil) */ + call *%eax + addl $8,%esp + + movl 64(%eax),%ecx /* SPUpper */ + subl 60(%eax),%ecx /* SPLower */ + +/* Uncomment the symbol line below to force system stack use, + and do not attempt to reallocate stack if the system-provided + stack is smaller than the user specified */ +# FORCE_USE_SYSTEM_STACK: + +.ifndef FORCE_USE_SYSTEM_STACK + /* Check if we need a new stack + Only allocate a new stack if the system-provided + stack is smaller than the one set compile time */ + cmpl __stklen,%ecx + jl _allocStack +.endif + + movl %ecx,__stklen /* Store the new stack size */ + xorl %eax,%eax + movl %eax,StackAreaPtr /* Clear the stackAreaPtr for exit test */ + jmp _noAllocStack + +_allocStack: + /* Allocating new stack */ + movl _ExecBase,%eax + pushl %eax + pushl $0 /* MEMF_ANY */ + pushl __stklen + movl -456(%eax),%eax /* AllocVec() */ + call *%eax + addl $12,%esp + + testl %eax,%eax + je __exit + movl %eax,StackAreaPtr + + /* Setting up StackSwap structure, and do the StackSwap */ + lea StackSwapStruct,%ecx + movl %eax,(%ecx) /* Bottom of the stack */ + addl __stklen,%eax + movl %eax,4(%ecx) /* Top of the stack */ + movl %eax,8(%ecx) /* Initial stackpointer */ + movl _ExecBase,%eax + pushl %eax + lea StackSwapArgs,%ebx + pushl %ebx + lea _initProc,%ebx + pushl %ebx + pushl %ecx + movl -536(%eax),%eax /* NewStackSwap() */ + call *%eax + addl $16,%esp + jmp _afterMain + +_noAllocStack: + call _initProc + +_afterMain: + /* check if we have a StackArea to free */ + movl StackAreaPtr,%eax + testl %eax,%eax + je __exit + +_freeStack: + /* Freeing up stack area */ + movl _ExecBase,%eax + pushl %eax + pushl StackAreaPtr + movl -460(%eax),%eax /* FreeVec() */ + call *%eax + addl $8,%esp + +__exit: + /* get back all registers */ + popal + /* get returncode */ + movl operatingsystem_result,%eax + /* bye bye */ + ret + + /* This function is getting called from NewStackSwap() or + as standalone if we don't do stackswap */ +_initProc: + pushal + /* Save stack pointer */ + movl %esp,STKPTR + + /* call the main function */ + call PASCALMAIN + + /* entry to stop the program */ +_haltproc: +haltproc: + /* restore the old stackPtr and return */ + movl STKPTR,%esp + popal + ret + + /*----------------------------------------------------*/ + + .bss + .global CommandLineLen # byte length of command line + .global CommandLine # comandline as PChar + .global STKPTR # Used to terminate the program, initial SP + .global _ExecBase # exec library base + .align 4 + +CommandLine: .skip 4 +CommandLineLen: .skip 4 +STKPTR: .skip 4 +_ExecBase: .skip 4 + +StackAreaPtr: .skip 4 +StackSwapStruct: .skip 12 +StackSwapArgs: .skip 32 diff --git a/rtl/aros/i386/utild1.inc b/rtl/aros/i386/utild1.inc new file mode 100644 index 0000000000..1ba0b964b1 --- /dev/null +++ b/rtl/aros/i386/utild1.inc @@ -0,0 +1,153 @@ +{ + This file is part of the Free Pascal run time library. + + utility definitions (V50) for MorphOS/PowerPC + Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved. + + Free Pascal conversion, first part + Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. <www.genesi.lu> + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} + + +{ * utility.library date defines + ********************************************************************* + * } + + +type + PClockData = ^TClockData; + TClockData = record + sec : Word; + min : Word; + hour : Word; + mday : Word; + month: Word; + year : Word; + wday : Word; + end; + + + +{ * utility.library tagitem defines + ********************************************************************* + * } + + +type + Tag = Cardinal; + +type + PPTagItem = ^PTagItem; + PTagItem = ^TTagItem; + TTagItem = record + ti_Tag : Tag; + ti_Data: Cardinal; + end; + + +const + TAG_DONE = 0; + TAG_END = 0; + TAG_IGNORE = 1; + TAG_MORE = 2; + TAG_SKIP = 3; + +const + TAG_USER = 1 Shl 31; + +const + TAGFILTER_AND = 0; + TAGFILTER_NOT = 1; + +const + MAP_REMOVE_NOT_FOUND = 0; + MAP_KEEP_NOT_FOUND = 1; + + + +{ * utility.library namespace defines + ********************************************************************* + * } + + +type + PNamedObject = ^TNamedObject; + TNamedObject = record + no_Object: Pointer; + end; + + +const + ANO_NameSpace = 4000; + ANO_UserSpace = 4001; + ANO_Priority = 4002; + ANO_Flags = 4003; + + NSB_NODUPS = 0; + NSB_CASE = 1; + + NSF_NODUPS = 1 Shl NSB_NODUPS; + NSF_CASE = 1 Shl NSB_CASE; + + + +{ * utility.library pack attributes and macros + ********************************************************************* + * } + + +const + PSTB_SIGNED = 31; + PSTB_UNPACK = 30; + PSTB_PACK = 29; + PSTB_EXISTS = 26; + + PSTF_SIGNED = (1 Shl PSTB_SIGNED); + PSTF_UNPACK = (1 Shl PSTB_UNPACK); + PSTF_PACK = (1 Shl PSTB_PACK); + PSTF_EXISTS = (1 Shl PSTB_EXISTS); + +const + PKCTRL_PACKUNPACK = $00000000; + PKCTRL_PACKONLY = $40000000; + PKCTRL_UNPACKONLY = $20000000; + + PKCTRL_BYTE = $80000000; + PKCTRL_WORD = $88000000; + PKCTRL_LONG = $90000000; + + PKCTRL_UBYTE = $00000000; + PKCTRL_UWORD = $08000000; + PKCTRL_ULONG = $10000000; + + PKCTRL_BIT = $18000000; + PKCTRL_FLIPBIT = $98000000; + +{$WARNING FIX ME!!! Some macros to convert} +{ + PK_BITNUM1(flg) ((flg) == 0x01 ? 0 : (flg) == 0x02 ? 1 : (flg) == 0x04 ? 2 : (flg) == 0x08 ? 3 : (flg) == 0x10 ? 4 : (flg) == 0x20 ? 5 : (flg) == 0x40 ? 6 : 7) + PK_BITNUM2(flg) ((flg < 0x100 ? PK_BITNUM1(flg) : 8 + PK_BITNUM1(flg >> 8))) + PK_BITNUM(flg) ((flg < 0x10000 ? PK_BITNUM2(flg) : 16 + PK_BITNUM2(flg >> 16))) + PK_WORDOFFSET(flg) ((flg) < 0x100 ? 1 : 0) + PK_LONGOFFSET(flg) ((flg) < 0x100 ? 3 : (flg) < 0x10000 ? 2 : (flg) < 0x1000000 ? 1 : 0) + PK_CALCOFFSET(type,field) ((ULONG)(&((struct type *)0)->field)) + + + PACK_STARTTABLE(tagbase) (tagbase) + PACK_NEWOFFSET(tagbase) (-1L),(tagbase) + PACK_ENDTABLE 0 + PACK_ENTRY(tagbase,tag,type,field,control) (control | ((tag-tagbase) << 16L) | PK_CALCOFFSET(type,field)) + PACK_BYTEBIT(tagbase,tag,type,field,control,flags) (control | ((tag-tagbase) << 16L) | PK_CALCOFFSET(type,field) | (PK_BITNUM(flags) << 13L)) + PACK_WORDBIT(tagbase,tag,type,field,control,flags) (control | ((tag-tagbase) << 16L) | (PK_CALCOFFSET(type,field) + PK_WORDOFFSET(flags)) | ((PK_BITNUM(flags) & 7) << 13L)) + PACK_LONGBIT(tagbase,tag,type,field,control,flags) (control | ((tag-tagbase) << 16L) | (PK_CALCOFFSET(type,field) + PK_LONGOFFSET(flags)) | ((PK_BITNUM(flags) & 7) << 13L)) +} + + diff --git a/rtl/aros/i386/utild2.inc b/rtl/aros/i386/utild2.inc new file mode 100644 index 0000000000..75992ceacc --- /dev/null +++ b/rtl/aros/i386/utild2.inc @@ -0,0 +1,53 @@ +{ + This file is part of the Free Pascal run time library. + + utility definitions (V50) for MorphOS/PowerPC + Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved. + + Free Pascal conversion, second part + Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. <www.genesi.lu> + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} + + +{ * utility.library include + ********************************************************************* + * } + + +const + UtilityName = 'utility.library'; + + +type + PUtilityBase = ^TUtilityName; + TUtilityName = record + ub_LibNode : TLibrary; + ub_Language: Byte; + ub_Reserved: Byte; + end; + + + +{ * utility.library hook defines + ********************************************************************* + * } + + +type + PHook = ^THook; + THook = record + h_MinNode : TMinNode; + h_Entry : Cardinal; + h_SubEntry: Cardinal; + h_Data : Pointer; + end; + + diff --git a/rtl/aros/i386/utilf.inc b/rtl/aros/i386/utilf.inc new file mode 100644 index 0000000000..e0ba18b659 --- /dev/null +++ b/rtl/aros/i386/utilf.inc @@ -0,0 +1,18 @@ +{ + This file is part of the Free Pascal run time library. + Copyright (c) 2011 by Marcus Sackrow + + utility.library functions for AROS + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} + +procedure Amiga2Date(date_amiga: longword; cd: PClockData); syscall AOS_UtilityBase 20; +function Date2Amiga(date: PClockData): longword; syscall AOS_UtilityBase 21; + diff --git a/rtl/aros/system.pp b/rtl/aros/system.pp new file mode 100644 index 0000000000..7c5c78b39d --- /dev/null +++ b/rtl/aros/system.pp @@ -0,0 +1,465 @@ +{ + This file is part of the Free Pascal run time library. + Copyright (c) 2004-2006 by Karoly Balogh + + AROS conversion + Copyright (c) 2011 by Marcus Sackrow + + System unit for AROS + + Uses parts of the Free Pascal 1.0.x for Commodore Amiga/68k port + by Carl Eric Codere and Nils Sjoholm + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} + +unit System; + +interface + +{$define FPC_IS_SYSTEM} + +{$define DISABLE_NO_THREAD_MANAGER} + +{$I systemh.inc} +{$I osdebugh.inc} + +const + LineEnding = #10; + LFNSupport = True; + DirectorySeparator = '/'; + DriveSeparator = ':'; + ExtensionSeparator = '.'; + PathSeparator = ';'; + AllowDirectorySeparators : set of char = ['\','/']; + AllowDriveSeparators : set of char = [':']; + maxExitCode = 255; + MaxPathLen = 256; + AllFilesMask = '#?'; + +const + UnusedHandle : THandle = 0; + StdInputHandle : THandle = 0; + StdOutputHandle : THandle = 0; + StdErrorHandle : THandle = 0; + + FileNameCaseSensitive : Boolean = False; + FileNameCasePreserving: boolean = True; + CtrlZMarksEOF: Boolean = false; (* #26 not considered as end of file *) + + sLineBreak = LineEnding; + DefaultTextLineBreakStyle : TTextLineBreakStyle = tlbsLF; + + BreakOn : Boolean = True; + + + +var + AOS_ExecBase : Pointer; external name '_ExecBase'; + AOS_DOSBase : Pointer; + AOS_UtilityBase: Pointer; + AROS_ThreadLib : Pointer; public name 'AROS_THREADLIB'; + + ASYS_heapPool : Pointer; { pointer for the OS pool for growing the heap } + ASYS_origDir : LongInt; { original directory on startup } + AOS_wbMsg : Pointer; + AOS_ConName : PChar ='CON:10/30/620/100/FPC Console Output/AUTO/CLOSE/WAIT'; + AOS_ConHandle: THandle; + + argc: LongInt; + argv: PPChar; + envp: PPChar; + killed : Boolean = False; + +function GetLibAdress(Base: Pointer; Offset: LongInt): Pointer; +procedure Debug(s: string); +procedure Debugln(s: string); + +implementation + +{$I system.inc} +{$I osdebug.inc} +type + PWBArg = ^TWBArg; + TWBArg = record + wa_Lock : LongInt; { a lock descriptor } + wa_Name : PChar; { a string relative to that lock } + end; + + WBArgList = array[1..100] of TWBArg; { Only 1..smNumArgs are valid } + PWBArgList = ^WBArgList; + + + PWBStartup = ^TWBStartup; + TWBStartup = record + sm_Message : TMessage; { a standard message structure } + sm_Process : Pointer; { the process descriptor for you } + sm_Segment : Pointer; { a descriptor for your code } + sm_NumArgs : Longint; { the number of elements in ArgList } + sm_ToolWindow : Pointer; { description of window } + sm_ArgList : PWBArgList; { the arguments themselves } + end; + +{***************************************************************************** + Misc. System Dependent Functions +*****************************************************************************} + +procedure haltproc(e:longint); cdecl; external name '_haltproc'; + +procedure System_exit; +var + oldDirLock: LongInt; +begin + if Killed then + Exit; + Killed := True; + { Closing opened files } + CloseList(ASYS_fileList); + // + if AOS_wbMsg <> nil then + ReplyMsg(AOS_wbMsg); + { Changing back to original directory if changed } + if ASYS_OrigDir <> 0 then begin + oldDirLock:=CurrentDir(ASYS_origDir); + { unlock our lock if its safe, so we won't leak the lock } + if (oldDirLock<>0) and (oldDirLock<>ASYS_origDir) then + Unlock(oldDirLock); + end; + if AOS_UtilityBase <> nil then + CloseLibrary(AOS_UtilityBase); + if ASYS_heapPool <> nil then + DeletePool(ASYS_heapPool); + AOS_UtilityBase := nil; + ASYS_HeapPool := nil; + // + if AOS_DOSBase<>nil then + CloseLibrary(AOS_DOSBase); + AOS_DOSBase := nil; + // + HaltProc(ExitCode); +end; + +{ Generates correct argument array on startup } +procedure GenerateArgs; +var + ArgVLen: LongInt; + + procedure AllocArg(Idx, Len: LongInt); + var + i, OldArgVLen : LongInt; + begin + if Idx >= ArgVLen then + begin + OldArgVLen := ArgVLen; + ArgVLen := (Idx + 8) and (not 7); + SysReAllocMem(Argv, Argvlen * SizeOf(Pointer)); + for i := OldArgVLen to ArgVLen - 1 do + ArgV[i]:=nil; + end; + ArgV[Idx] := SysAllocMem(Succ(Len)); + end; + +var + Count: Word; + Start: Word; + Ende: Word; + LocalIndex: Word; + P : PChar; + {$H+} + Temp : string; + InQuotes: boolean; +begin + P := GetArgStr; + ArgVLen := 0; + + { Set argv[0] } + Temp := ParamStr(0); + AllocArg(0, Length(Temp)); + Move(Temp[1], Argv[0]^, Length(Temp)); + Argv[0][Length(Temp)] := #0; + + { check if we're started from Workbench } + if AOS_wbMsg <> nil then + begin + ArgC := 0; + Exit; + end; + + InQuotes := False; + { Handle the other args } + Count := 0; + { first index is one } + LocalIndex := 1; + while (P[Count] <> #0) do + begin + while (p[count]=' ') or (p[count]=#9) or (p[count]=LineEnding) do + Inc(count); + if p[count] = '"' then + begin + inQuotes := True; + Inc(Count); + end; + start := count; + if inQuotes then + begin + while (p[count]<>#0) and (p[count]<>'"') and (p[count]<>LineEnding) do + begin + Inc(Count) + end; + end else + begin + while (p[count]<>#0) and (p[count]<>' ') and (p[count]<>#9) and (p[count]<>LineEnding) do + inc(count); + end; + ende := count; + if not inQuotes then + begin + while (p[start]=' ') and (Start < Ende) do + Inc(Start) + end; + if (ende-start>0) then + begin + allocarg(localindex,ende-start); + move(p[start],argv[localindex]^,ende-start); + argv[localindex][ende-start]:=#0; + if inQuotes and (argv[localindex][(ende-start) - 1] = '"') then + argv[localindex][(ende-start)-1] := #0; + inc(localindex); + end; + if inQuotes and (p[count] = '"') then + Inc(Count); + inQuotes := False; + end; + argc:=localindex; +end; + +function GetProgDir: String; +var + s1 : String; + alock : LongInt; + counter: Byte; +begin + GetProgDir:=''; + SetLength(s1, 256); + FillChar(s1,255,#0); + { GetLock of program directory } + + alock:=GetProgramDir; + if alock<>0 then begin + if NameFromLock(alock,@s1[1],255) then begin + counter:=1; + while (s1[counter]<>#0) and (counter<>0) do Inc(counter); + SetLength(s1, counter-1); + GetProgDir:=s1; + end; + end; +end; + +function GetProgramName: String; +{ Returns ONLY the program name } +var + s1 : String; + counter: Byte; +begin + GetProgramName:=''; + SetLength(s1, 256); + FillChar(s1,255,#0); + + if GetProgramName(@s1[1],255) then begin + { now check out and assign the length of the string } + counter := 1; + while (s1[counter]<>#0) and (counter<>0) do Inc(counter); + SetLength(s1, counter-1); + + { now remove any component path which should not be there } + for counter:=length(s1) downto 1 do + if (s1[counter] = '/') or (s1[counter] = ':') then break; + { readjust counterv to point to character } + if counter<>1 then Inc(counter); + + GetProgramName:=copy(s1,counter,length(s1)); + end; +end; + + +{***************************************************************************** + ParamStr/Randomize +*****************************************************************************} + +function GetWBArgsNum: Integer; +var + startup: PWBStartup; +begin + GetWBArgsNum := 0; + Startup := nil; + Startup := PWBStartup(AOS_wbMsg); + if Startup <> nil then + begin + Result := Startup^.sm_NumArgs - 1; + end; +end; + +function GetWBArg(Idx: Integer): string; +var + startup: PWBStartup; + wbarg: PWBArgList; + Path: array[0..254] of Char; + strPath: string; + Len: Integer; +begin + GetWBArg := ''; + FillChar(Path[0],255,#0); + Startup := PWBStartup(AOS_wbMsg); + if Startup <> nil then + begin + //if (Idx >= 0) and (Idx < Startup^.sm_NumArgs) then + begin + wbarg := Startup^.sm_ArgList; + if NameFromLock(wbarg^[Idx + 1].wa_Lock,@Path[0],255) then + begin + Len := 0; + while (Path[Len] <> #0) and (Len < 254) do + Inc(Len); + if Len > 0 then + if (Path[Len - 1] <> ':') and (Path[Len - 1] <> '/') then + Path[Len] := '/'; + strPath := Path; + end; + Result := strPath + wbarg^[Idx + 1].wa_Name; + end; + end; +end; + +{ number of args } +function paramcount : longint; +begin + if AOS_wbMsg<>nil then + paramcount:=GetWBArgsNum + else + paramcount:=argc-1; +end; + +{ argument number l } +function paramstr(l : longint) : string; +var + s1: String; +begin + paramstr:=''; + if AOS_wbMsg<>nil then + begin + paramstr := GetWBArg(l); + end else + begin + if l=0 then begin + s1:=GetProgDir; + if s1[length(s1)]=':' then paramstr:=s1+GetProgramName + else paramstr:=s1+'/'+GetProgramName; + end else begin + if (l>0) and (l+1<=argc) then paramstr:=strpas(argv[l]); + end; + end; +end; + +{ set randseed to a new pseudo random value } +procedure Randomize; +var + tmpTime: TDateStamp; +begin + DateStamp(@tmpTime); + randseed := tmpTime.ds_tick; +end; + + + + +{ AmigaOS specific startup } +procedure SysInitAmigaOS; +var + self: PProcess; +begin + self := PProcess(FindTask(nil)); + if self^.pr_CLI = NIL then begin + { if we're running from Ambient/Workbench, we catch its message } + WaitPort(@self^.pr_MsgPort); + AOS_wbMsg:=GetMsg(@self^.pr_MsgPort); + end; + + AOS_DOSBase := OpenLibrary('dos.library', 0); + if AOS_DOSBase = nil then + Halt(1); + AOS_UtilityBase := OpenLibrary('utility.library', 0); + if AOS_UtilityBase = nil then + Halt(1); + + { Creating the memory pool for growing heap } + ASYS_heapPool := CreatePool(MEMF_ANY or MEMF_SEM_PROTECTED, growheapsize2, growheapsize1); + if ASYS_heapPool = nil then + Halt(1); + + if AOS_wbMsg = nil then begin + StdInputHandle := THandle(dosInput); + StdOutputHandle := THandle(dosOutput); + StdErrorHandle := THandle(DosError1); + end else begin + AOS_ConHandle := Open(AOS_ConName, MODE_OLDFILE); + if AOS_ConHandle <> 0 then begin + StdInputHandle := AOS_ConHandle; + StdOutputHandle := AOS_ConHandle; + StdErrorHandle := AOS_ConHandle; + end else + Halt(1); + end; +end; + + +procedure SysInitStdIO; +begin + OpenStdIO(Input,fmInput,StdInputHandle); + OpenStdIO(Output,fmOutput,StdOutputHandle); + OpenStdIO(StdOut,fmOutput,StdOutputHandle); + OpenStdIO(StdErr,fmOutput,StdErrorHandle); +end; + +function GetProcessID: SizeUInt; +begin + GetProcessID := SizeUInt(FindTask(NIL)); +end; + +function CheckInitialStkLen(stklen : SizeUInt) : SizeUInt; +begin + result := stklen; +end; + +begin + IsConsole := TRUE; + SysResetFPU; + if not (IsLibrary) then + SysInitFPU; + StackLength := CheckInitialStkLen(InitialStkLen); + StackBottom := Sptr - StackLength; +{ OS specific startup } + AOS_wbMsg := nil; + ASYS_origDir := 0; + ASYS_fileList := nil; + envp := nil; + SysInitAmigaOS; +{ Set up signals handlers } + //InstallSignals; +{ Setup heap } + InitHeap; + SysInitExceptions; + initunicodestringmanager; +{ Setup stdin, stdout and stderr } + SysInitStdIO; +{ Reset IO Error } + InOutRes:=0; + { Arguments } + GenerateArgs; + InitSystemThreads; +end. diff --git a/rtl/aros/systemthreadh.inc b/rtl/aros/systemthreadh.inc new file mode 100644 index 0000000000..139597f9cb --- /dev/null +++ b/rtl/aros/systemthreadh.inc @@ -0,0 +1,2 @@ + + diff --git a/rtl/aros/systhrd.inc b/rtl/aros/systhrd.inc new file mode 100644 index 0000000000..904d1eb617 --- /dev/null +++ b/rtl/aros/systhrd.inc @@ -0,0 +1,359 @@ +{ + This file is part of the Free Pascal run time library. + Copyright (c) 2013 by Marcus Sackrow. + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} + + + +//type +// TThreadEntryfunction = function(data: Pointer): Pointer; cdecl; + +const + threadvarblocksize : dword = 0; // total size of allocated threadvars + thredvarsmainthread: pointer = nil; // to free the threadvars in the signal handler + +var + ThreadsVarList: array of Pointer; + +{$define THREAD_SYSTEM} +{$I arosthreads.inc} + +// Thread manager: +procedure SysInitThreadvar(var offset : dword;size : dword); +begin + //offset:=threadvarblocksize; + //inc(threadvarblocksize,size); +end; + +procedure SaveThreadVars(t: Pointer); +var + Idx: Integer; +begin + {Idx := AROSCurrentThread(); + if Idx >= 0 then + begin + if Idx > High(ThreadsVarList) then + SetLength(ThreadsVarList, Idx + 1); + ThreadsVarList[Idx] := t; + end;} +end; + +function GetThreadV: Pointer; +var + Idx: Integer; +begin + { + Result := nil; + Idx := AROSCurrentThread(); + if (Idx >= 0) and (Idx <= High(ThreadsVarList)) then + begin + Result := ThreadsVarList[Idx]; + end; + } +end; + +function SysRelocateThreadvar (offset: dword): Pointer; +begin + //SysRelocateThreadvar:= GetThreadV + offset; +end; + +procedure SaveThreadV(t: Pointer); +var + Idx: Integer; +begin + {Idx := AROSCurrentThread(); + if Idx >= 0 then + begin + if Idx > High(ThreadsVarList) then + SetLength(ThreadsVarList, Idx + 1); + ThreadsVarList[Idx] := t; + end;} +end; + +procedure SysAllocateThreadVars; +var + threadvars: Pointer; +begin + {threadvars := AllocPooled(AOS_heapPool, threadvarblocksize); + FillChar(threadvars^, threadvarblocksize, 0); + SaveThreadV(threadvars); + if thredvarsmainthread = nil then + thredvarsmainthread := threadvars;} +end; + +procedure SysReleaseThreadVars; +var + threadvars: Pointer; +begin + { release thread vars } + { + if threadvarblocksize > 0 then + begin + threadvars := GetThreadV; + if threadvars <> nil then + begin + FreePooled(AOS_heapPool, threadvars, threadvarblocksize); + SaveThreadVars(nil); + end; + end;} +end; + +type + TThreadInfo = record + F: TThreadfunc; + P: Pointer; + end; + PThreadinfo = ^TThreadinfo; + +function ThreadFunc(Data: Pointer): Pointer; cdecl; +var + Ti: TThreadinfo; +begin + {SysAllocateThreadVars; + ti := PThreadInfo(Data)^; + Dispose(PThreadInfo(Data)); + // execute + ThreadFunc := Pointer(Ti.f(Ti.p)); + DoneThread;} +end; + +function SysBeginThread(Sa: Pointer; StackSize: PtrUInt; ThreadFunction: TThreadfunc; p: Pointer; CreationFlags: dword; var ThreadId: TThreadID): TThreadID; +var + Ti: PThreadinfo; +begin + Result := 0; + if not IsMultiThread then + begin + InitThreadVars(@SysRelocateThreadvar); + IsMultithread:=true; + end; + New(Ti); + Ti^.f := ThreadFunction; + Ti^.p := p; + SetLength(ThreadsVarList, 200); + //SysBeginThread := CreateThread(@ThreadFunc, Ti); + ThreadID := SysBeginThread; +end; + + +procedure SysEndThread(ExitCode : DWord); +begin + DoneThread; + //ExitThread(Pointer(ExitCode)); +end; + + +procedure SysThreadSwitch; +begin + Delay(0); +end; + +function SysSuspendThread(ThreadHandle: THandle): dword; +begin + Result := 0; +end; + + +function SysResumeThread(ThreadHandle: THandle): dword; +begin + Result := 0; +end; + + +function SysKillThread(threadHandle: THandle): dword; +begin + SysKillThread := 0; {not supported for AROS} +end; + +function SysWaitForThreadTerminate(threadHandle: THandle; TimeoutMs: LongInt): dword; +begin + Result := 0; +end; + +function SysThreadSetPriority (threadHandle : THandle; Prio: longint): boolean; {-15..+15, 0=normal} +begin + SysThreadSetPriority := true; +end; + +function SysThreadGetPriority (threadHandle : THandle): Longint; +begin + SysThreadGetPriority := 0; +end; + + +function SysGetCurrentThreadId: LongInt; +begin + SysGetCurrentThreadId := AROSCurrentThread; +end; + +// Close all Semaphores +procedure SysCloseAllRemainingSemaphores; +var + i: Integer; +begin + ObtainSemaphore(@AROSThreadStruct^.MutexListSem); + i := 0; + for i := 0 to High(AROSThreadStruct^.MutexList) do + begin + if Assigned(AROSThreadStruct^.MutexList[i]) then + begin + Dispose(AROSThreadStruct^.MutexList[i]); + end; + end; + ReleaseSemaphore(@AROSThreadStruct^.MutexListSem); +end; + +// Critical Sections (done by Mutex) +procedure SysInitCriticalSection(var cs: TRTLCriticalSection); +begin + cs := CreateMutex; + //DebugLn('Create Mutex'); +end; + +procedure SysDoneCriticalsection(var cs: TRTLCriticalSection); +begin + //DebugLn('Destroy Mutex'); + if Assigned(cs) then + DestroyMutex(TRTLCriticalSection(cs)); + cs := nil; +end; + +procedure SysEnterCriticalsection(var cs: TRTLCriticalSection); +begin + //DebugLn('EnterMutex'); + if Assigned(cs) then + LockMutex(cs); +end; + +function SysTryEnterCriticalsection(var cs: TRTLCriticalSection): longint; +begin + //DebugLn('TryEnter Mutex'); + Result := 0; + if Assigned(cs) then + Result := LongInt(TryLockMutex(cs)); +end; + +procedure SysLeaveCriticalsection(var cs: TRTLCriticalSection); +begin + //DebugLn('Leave Mutex'); + if Assigned(cs) then + UnlockMutex(cs); +end; + +function SysSetThreadDataAreaPtr (newPtr:pointer):pointer; +begin +end; + +function intBasicEventCreate(EventAttributes : Pointer; +AManualReset,InitialState : Boolean;const Name : ansistring):pEventState; +begin +end; + +procedure intbasiceventdestroy(state:peventstate); +begin +end; + +procedure intbasiceventResetEvent(state:peventstate); +begin +end; + +procedure intbasiceventSetEvent(state:peventstate); +begin +end; + +function intbasiceventWaitFor(Timeout : Cardinal;state:peventstate) : longint; +begin +end; + +function intRTLEventCreate: PRTLEvent; +begin +end; + +procedure intRTLEventDestroy(AEvent: PRTLEvent); +begin +end; + +procedure intRTLEventSetEvent(AEvent: PRTLEvent); +begin +end; + +procedure intRTLEventResetEvent(AEvent: PRTLEvent); +begin +end; + +procedure intRTLEventWaitFor(AEvent: PRTLEvent); +begin +end; + +procedure intRTLEventWaitForTimeout(AEvent: PRTLEvent;timeout : longint); +begin +end; + + +function SysInitManager: Boolean; +begin + InitThreadLib; + Result := True; +end; + +function SysDoneManager: Boolean; +begin + FinishThreadLib; + Result := True; +end; + + +Var + AROSThreadManager : TThreadManager; + +procedure InitSystemThreads; +begin + + with AROSThreadManager do + begin + InitManager :=@SysInitManager; + DoneManager :=@SysDoneManager; + BeginThread :=@SysBeginThread; + EndThread :=@SysEndThread; + SuspendThread :=@SysSuspendThread; + ResumeThread :=@SysResumeThread; + KillThread :=@SysKillThread; + ThreadSwitch :=@SysThreadSwitch; + WaitForThreadTerminate :=@SysWaitForThreadTerminate; + ThreadSetPriority :=@SysThreadSetPriority; + ThreadGetPriority :=@SysThreadGetPriority; + GetCurrentThreadId :=@SysGetCurrentThreadId; + InitCriticalSection :=TCriticalSectionHandler(@SysInitCriticalSection); + DoneCriticalSection :=TCriticalSectionHandler(@SysDoneCriticalSection); + EnterCriticalSection :=TCriticalSectionHandler(@SysEnterCriticalSection); + LeaveCriticalSection :=TCriticalSectionHandler(@SysLeaveCriticalSection); + InitThreadVar :=@SysInitThreadVar; + RelocateThreadVar :=@SysRelocateThreadVar; + AllocateThreadVars :=@SysAllocateThreadVars; + ReleaseThreadVars :=@SysReleaseThreadVars; + BasicEventCreate :=@intBasicEventCreate; + basiceventdestroy :=@intbasiceventdestroy; + basiceventResetEvent :=@intbasiceventResetEvent; + basiceventSetEvent :=@intbasiceventSetEvent; + basiceventWaitFor :=@intbasiceventWaitFor; + RTLEventCreate :=@intRTLEventCreate; + RTLEventDestroy :=@intRTLEventDestroy; + RTLEventSetEvent :=@intRTLEventSetEvent; + RTLEventResetEvent :=@intRTLEventResetEvent; + RTLEventWaitFor :=@intRTLEventWaitFor; + RTLEventWaitForTimeout :=@intRTLEventWaitForTimeout; + end; + SetThreadManager(AROSThreadManager); + +end; + + + diff --git a/rtl/aros/timerd.inc b/rtl/aros/timerd.inc new file mode 100644 index 0000000000..0ac11a8259 --- /dev/null +++ b/rtl/aros/timerd.inc @@ -0,0 +1,67 @@ +{ + This file is part of the Free Pascal run time library. + + timer.device definitions (V50) for MorphOS/PowerPC + Copyright (c) 2002-3 The MorphOS Development Team, All Rights Reserved. + + Free Pascal conversion + Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. <www.genesi.lu> + + AROS conversion + Copyright (c) 2011 Marcus Sackrow + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} + + +{ * timer.device definitions + ********************************************************************* + * } + + +const // Checked OK 04.08.2011 ALB + UNIT_MICROHZ = 0; + UNIT_VBLANK = 1; + UNIT_ECLOCK = 2; + UNIT_WAITUNTIL = 3; + UNIT_WAITECLOCK = 4; + +const // Checked OK 04.08.2011 ALB + TIMERNAME = 'timer.device'; + + +type // Checked OK 04.08.2011 ALB + PTimeVal = ^TTimeVal; + TTimeVal = record + tv_secs : DWord; + tv_micro: DWord; + end; + +type // Checked OK 04.08.2011 ALB + PEClockVal = ^TEClockVal; + TEClockVal = record + ev_hi: DWord; + ev_lo: DWord; + end; + +type // Checked OK 04.08.2011 ALB + PTimeRequest = ^TTimeRequest; + TTimeRequest = record + tr_node: TIORequest; + tr_time: TTimeVal; + end; + + +const // Checked OK 04.08.2011 ALB + TR_ADDREQUEST = (CMD_NONSTD + 0); + TR_GETSYSTIME = (CMD_NONSTD + 1); + TR_SETSYSTIME = (CMD_NONSTD + 2); + + + diff --git a/rtl/aros/tthread.inc b/rtl/aros/tthread.inc new file mode 100644 index 0000000000..481533b0cc --- /dev/null +++ b/rtl/aros/tthread.inc @@ -0,0 +1,161 @@ +{$include execd.inc} +{$include execf.inc} +{$include timerd.inc} +{$include doslibd.inc} +{$include doslibf.inc} +{$include arosthreads.inc} + +function ThreadFunc(Data: Pointer): Pointer; cdecl; +var + LThread: TThread; + LFreeOnTerminate: Boolean; + ISuspended: Boolean; +begin + //Debugln('Enter ThreadFunc'); + Result := nil; + LThread := TThread(Data); + ISuspended := LThread.FInitialSuspended; + if ISuspended then + begin + if not LThread.FTerminated then + begin + LockMutex(LThread.FSem); + WaitCondition(LThread.FCond, LThread.FSem); + UnlockMutex(LThread.FSem); + end; + end; + //Sleep(1); + if not LThread.FTerminated then + begin + //Debugln('Execute Thread'); + try + LThread.Execute; + except + on E: Exception do + begin + //DebugLn('Exception in Thread '+ e.Classname + e.MEssage); + LThread.FFatalException := TObject(AcquireExceptionObject); + if E is EThreadDestroyCalled then + LThread.FFreeOnTerminate := true; + end; + end; + //Debugln('Back from Thread'); + //Sleep(1); + end; + LFreeOnTerminate := LThread.FreeOnTerminate; + LThread.DoTerminate; + LThread.FFinished := True; + if LFreeOnTerminate then + LThread.Free; + //debugln('Finished Thread?, then what to do now?') +end; + +procedure TThread.SysCreate(CreateSuspended: Boolean; const StackSize: SizeUInt); +begin + if not Assigned(AROSThreadStruct) then + raise EThread.CreateFmt(SThreadCreateError, ['ThreadLib not found']); + + FSuspended := CreateSuspended; + FInitialSuspended := CreateSuspended; + + // Mutex for suspend actions + FSem := CreateMutex; + FCond := CreateCondition; + + FHandle := AROSCreateThread(@ThreadFunc, Self, StackSize); + FThreadID := FHandle; + if FHandle = 0 then + raise EThread.CreateFmt(SThreadCreateError, ['Cannot Create Thread']); + // exception if Thread cannot be created + FFatalException := nil; +end; + + +procedure TThread.SysDestroy; +begin + if FHandle <> 0 then + begin + if not FFinished then + begin + Terminate; + if FSuspended then + begin + SignalCondition(FCond); + Sleep(0); + end; + WaitFor; + end; + end; + FHandle := 0; + DestroyCondition(FCond); + DestroyMutex(FSem); + FFatalException := nil; +end; + +procedure TThread.CallOnTerminate; +begin + FOnTerminate(Self); +end; + +procedure TThread.DoTerminate; +begin + if Assigned(FOnTerminate) then + Synchronize(@CallOnTerminate); +end; + +function TThread.GetPriority: TThreadPriority; +begin + // +end; + +procedure TThread.SetPriority(Value: TThreadPriority); +begin + // +end; + +procedure TThread.SetSuspended(Value: Boolean); +begin + if Value <> FSuspended then + if Value then + Suspend + else + Resume; +end; + +procedure TThread.Suspend; +begin + if FThreadID = GetCurrentThreadID then + begin + FSuspended := True; + LockMutex(FSem); + WaitCondition(FCond, FSem); + UnlockMutex(FSem); + end else + Raise EThread.create('Suspending one thread from inside another one is unsupported (because it is unsafe and deadlock prone) by AROS'); +end; + +procedure TThread.Resume; +begin + if FSuspended then + begin + SignalCondition(FCond); + Sleep(100); + end; + FSuspended := False; + FInitialSuspended := False; +end; + +procedure TThread.Terminate; +begin + FTerminated := True; +end; + +function TThread.WaitFor: Integer; +begin + Result := 0; + if (not FSuspended) and (FHandle <> 0) then + begin + Sleep(1); + AROSWaitThread(FHandle); + end; +end; |