summaryrefslogtreecommitdiff
path: root/rtl/aros
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/aros')
-rw-r--r--rtl/aros/Makefile2978
-rw-r--r--rtl/aros/Makefile.fpc235
-rw-r--r--rtl/aros/arosthreads.inc590
-rw-r--r--rtl/aros/doslibd.inc1371
-rw-r--r--rtl/aros/i386/doslibf.inc59
-rw-r--r--rtl/aros/i386/execd.inc1792
-rw-r--r--rtl/aros/i386/execf.inc89
-rw-r--r--rtl/aros/i386/prt0.as162
-rw-r--r--rtl/aros/i386/utild1.inc153
-rw-r--r--rtl/aros/i386/utild2.inc53
-rw-r--r--rtl/aros/i386/utilf.inc18
-rw-r--r--rtl/aros/system.pp465
-rw-r--r--rtl/aros/systemthreadh.inc2
-rw-r--r--rtl/aros/systhrd.inc359
-rw-r--r--rtl/aros/timerd.inc67
-rw-r--r--rtl/aros/tthread.inc161
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;