Browse Source

AROS: initial RTL, based on the work by Marcus Sackrow. this is enough to have a working native compiler. contains duplicated code from the Amiga and MorphOS RTLs, but the three Amiga variants will be merged soon, and then it will go away.

git-svn-id: trunk@28445 -
Károly Balogh 11 years ago
parent
commit
4179e8812d

+ 22 - 0
.gitattributes

@@ -7870,6 +7870,28 @@ rtl/arm/strings.inc svneol=native#text/plain
 rtl/arm/stringss.inc svneol=native#text/plain
 rtl/arm/thumb.inc svneol=native#text/plain
 rtl/arm/thumb2.inc svneol=native#text/plain
+rtl/aros/Makefile svneol=native#text/plain
+rtl/aros/Makefile.fpc svneol=native#text/plain
+rtl/aros/classes.pp svneol=native#text/plain
+rtl/aros/dos.pp svneol=native#text/plain
+rtl/aros/doslibd.inc svneol=native#text/plain
+rtl/aros/i386/doslibf.inc svneol=native#text/plain
+rtl/aros/i386/execd.inc svneol=native#text/plain
+rtl/aros/i386/execf.inc svneol=native#text/plain
+rtl/aros/i386/prt0.as svneol=native#text/plain
+rtl/aros/i386/utild1.inc svneol=native#text/plain
+rtl/aros/i386/utild2.inc svneol=native#text/plain
+rtl/aros/i386/utilf.inc svneol=native#text/plain
+rtl/aros/rtldefs.inc svneol=native#text/plain
+rtl/aros/sysdir.inc svneol=native#text/plain
+rtl/aros/sysfile.inc svneol=native#text/plain
+rtl/aros/sysheap.inc svneol=native#text/plain
+rtl/aros/sysos.inc svneol=native#text/plain
+rtl/aros/sysosh.inc svneol=native#text/plain
+rtl/aros/system.pp svneol=native#text/plain
+rtl/aros/sysutils.pp svneol=native#text/plain
+rtl/aros/timerd.inc svneol=native#text/plain
+rtl/aros/tthread.inc svneol=native#text/plain
 rtl/atari/Makefile svneol=native#text/plain
 rtl/atari/Makefile.fpc svneol=native#text/plain
 rtl/atari/prt0.as svneol=native#text/plain

+ 2952 - 0
rtl/aros/Makefile

@@ -0,0 +1,2952 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-08-17 rev 28432]
+#
+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 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
+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)
+UNITPREFIX=rtl
+SYSTEMUNIT=system
+ifdef RELEASE
+override FPCOPT+=-Ur
+endif
+OBJPASDIR=$(RTL)/objpas
+GRAPHDIR=$(INC)/graph
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-nativent)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-iphonesim)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-android)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i386-aros)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),powerpc-wii)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),powerpc-aix)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),x86_64-netbsd)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),x86_64-openbsd)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),arm-android)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),powerpc64-aix)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),mips-linux)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),jvm-java)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),jvm-android)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+endif
+ifeq ($(FULL_TARGET),i8086-msdos)
+override TARGET_IMPLICITUNITS+=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+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),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),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)
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-nativent)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-iphonesim)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-android)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-aros)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),powerpc-wii)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),powerpc-aix)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),x86_64-netbsd)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),x86_64-openbsd)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),arm-android)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),powerpc64-aix)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),mips-linux)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),jvm-java)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),jvm-android)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i8086-msdos)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET)
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-nativent)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-iphonesim)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-android)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-aros)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),powerpc-wii)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),powerpc-aix)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),x86_64-netbsd)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),x86_64-openbsd)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),arm-android)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),powerpc64-aix)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),mips-linux)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),jvm-java)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),jvm-android)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i8086-msdos)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(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),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),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) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
+	       $(SYSTEMUNIT)$(PPUEXT)
+sysutils$(PPUEXT) : sysutils.pp $(wildcard $(OBJPASDIR)/sysutils/*.inc) \
+		    objpas$(PPUEXT) dos$(PPUEXT) sysconst$(PPUEXT)
+	$(COMPILER) -Fi$(OBJPASDIR)/sysutils sysutils.pp
+classes$(PPUEXT) : classes.pp $(wildcard $(OBJPASDIR)/classes/*.inc) \
+		   sysutils$(PPUEXT) typinfo$(PPUEXT) rtlconsts$(PPUEXT) types$(PPUEXT) fgl$(PPUEXT)
+	$(COMPILER) -Fi$(OBJPASDIR)/classes 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)
+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

+ 231 - 0
rtl/aros/Makefile.fpc

@@ -0,0 +1,231 @@
+#
+#   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 
+implicitunits=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 \
+      cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
+# \
+#      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)
+sourcedir=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON)
+
+
+[prerules]
+RTL=..
+INC=$(RTL)/inc
+COMMON=$(RTL)/common
+PROCINC=$(RTL)/$(CPU_TARGET)
+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
+GRAPHDIR=$(INC)/graph
+
+[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) : 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) : sysutils.pp $(wildcard $(OBJPASDIR)/sysutils/*.inc) \
+                    objpas$(PPUEXT) dos$(PPUEXT) sysconst$(PPUEXT)
+        $(COMPILER) -Fi$(OBJPASDIR)/sysutils sysutils.pp
+
+classes$(PPUEXT) : classes.pp $(wildcard $(OBJPASDIR)/classes/*.inc) \
+                   sysutils$(PPUEXT) typinfo$(PPUEXT) rtlconsts$(PPUEXT) types$(PPUEXT) fgl$(PPUEXT)
+        $(COMPILER) -Fi$(OBJPASDIR)/classes 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
+
+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)

+ 49 - 0
rtl/aros/classes.pp

@@ -0,0 +1,49 @@
+{
+    This file is part of the Free Component Library (FCL)
+    Copyright (c) 1999-2011 by the Free Pascal development team
+
+    Classes unit 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.
+
+ **********************************************************************}
+
+{$mode objfpc}
+
+{ determine the type of the resource/form file }
+{$define Win16Res}
+
+unit Classes;
+
+interface
+
+uses
+  sysutils,
+  rtlconsts,
+  types,
+{$ifdef FPC_TESTGENERICS}
+  fgl,
+{$endif}
+  typinfo;
+
+{$i classesh.inc}
+
+
+implementation
+
+{ OS - independent class implementations are in /inc directory. }
+{$i classes.inc}
+
+
+initialization
+  CommonInit;
+
+finalization
+  CommonCleanup;
+
+end.

+ 1021 - 0
rtl/aros/dos.pp

@@ -0,0 +1,1021 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2004 by Karoly Balogh for Genesi S.a.r.l.
+
+    Heavily based on the Commodore Amiga/m68k RTL by Nils Sjoholm and
+    Carl Eric Codere
+
+    MorphOS port was done on a free Pegasos II/G4 machine
+    provided by 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.
+
+ **********************************************************************}
+{$INLINE ON}
+
+unit Dos;
+
+{--------------------------------------------------------------------}
+{ LEFT TO DO:                                                        }
+{--------------------------------------------------------------------}
+{ o DiskFree / Disksize don't work as expected                       }
+{ o Implement EnvCount,EnvStr                                        }
+{ o FindFirst should only work with correct attributes               }
+{--------------------------------------------------------------------}
+
+
+interface
+
+type
+  SearchRec = Packed Record
+    { watch out this is correctly aligned for all processors }
+    { don't modify.                                          }
+    { Replacement for Fill }
+{0} AnchorPtr : Pointer;    { Pointer to the Anchorpath structure }
+{4} Fill: Array[1..15] of Byte; {future use}
+    {End of replacement for fill}
+    Attr : BYTE;        {attribute of found file}
+    Time : LongInt;     {last modify date of found file}
+    Size : LongInt;     {file size of found file}
+    Name : String[255]; {name of found file}
+  End;
+
+{$I dosh.inc}
+
+implementation
+
+{$DEFINE HAS_GETMSCOUNT}
+{$DEFINE HAS_GETCBREAK}
+{$DEFINE HAS_SETCBREAK}
+
+{$DEFINE FPC_FEXPAND_VOLUMES} (* Full paths begin with drive specification *)
+{$DEFINE FPC_FEXPAND_DRIVESEP_IS_ROOT}
+{$DEFINE FPC_FEXPAND_NO_DEFAULT_PATHS}
+{$I dos.inc}
+
+
+{ * include MorphOS specific functions & definitions * }
+
+{$include execd.inc}
+{$include execf.inc}
+{$include timerd.inc}
+{$include doslibd.inc}
+{$include doslibf.inc}
+{$include utilf.inc}
+
+const
+  DaysPerMonth :  Array[1..12] of ShortInt =
+         (031,028,031,030,031,030,031,031,030,031,030,031);
+  DaysPerYear  :  Array[1..12] of Integer  =
+         (031,059,090,120,151,181,212,243,273,304,334,365);
+  DaysPerLeapYear :    Array[1..12] of Integer  =
+         (031,060,091,121,152,182,213,244,274,305,335,366);
+  SecsPerYear      : LongInt  = 31536000;
+  SecsPerLeapYear  : LongInt  = 31622400;
+  SecsPerDay       : LongInt  = 86400;
+  SecsPerHour      : Integer  = 3600;
+  SecsPerMinute    : ShortInt = 60;
+  TICKSPERSECOND    = 50;
+
+
+{******************************************************************************
+                           --- Internal routines ---
+******************************************************************************}
+
+{ * PathConv is implemented in the system unit! * }
+function PathConv(path: string): string; external name 'PATHCONV';
+
+function dosLock(const name: String;
+                 accessmode: Longint) : LongInt;
+var
+ buffer: array[0..255] of Char;
+begin
+  move(name[1],buffer,length(name));
+  buffer[length(name)]:=#0;
+  dosLock:=Lock(buffer,accessmode);
+end;
+
+function BADDR(bval: LongInt): Pointer; Inline;
+begin
+  BADDR:=Pointer(bval Shl 2);
+end;
+
+function BSTR2STRING(s : Pointer): PChar; Inline;
+begin
+  BSTR2STRING:=PChar(BADDR(PtrInt(s)))+1;
+end;
+
+function BSTR2STRING(s : LongInt): PChar; Inline;
+begin
+  BSTR2STRING:=PChar(BADDR(s))+1;
+end;
+
+function IsLeapYear(Source : Word) : Boolean;
+begin
+  if (source Mod 400 = 0) or ((source Mod 4 = 0) and (source Mod 100 <> 0)) then
+    IsLeapYear:=True
+  else
+    IsLeapYear:=False;
+end;
+
+procedure Amiga2DateStamp(Date : LongInt; var TotalDays,Minutes,Ticks: longint);
+{ Converts a value in seconds past 1978 to a value in AMIGA DateStamp format }
+{ Taken from SWAG and modified to work with the Amiga format - CEC           }
+var
+  LocalDate : LongInt;
+  Done : Boolean;
+  TotDays : Integer;
+  Y: Word;
+  H: Word;
+  Min: Word;
+  S : Word;
+begin
+  Y   := 1978; H := 0; Min := 0; S := 0;
+  TotalDays := 0;
+  Minutes := 0;
+  Ticks := 0;
+  LocalDate := Date;
+  Done := false;
+  while not Done do
+  begin
+    if LocalDate >= SecsPerYear then
+    begin
+      Inc(Y,1);
+      Dec(LocalDate,SecsPerYear);
+      Inc(TotalDays,DaysPerYear[12]);
+    end else
+      Done := true;
+    if (IsLeapYear(Y+1)) and (LocalDate >= SecsPerLeapYear) and
+       (Not Done) then
+    begin
+      Inc(Y,1);
+      Dec(LocalDate,SecsPerLeapYear);
+      Inc(TotalDays,DaysPerLeapYear[12]);
+    end;
+  end; { END WHILE }
+
+  TotDays := LocalDate Div SecsPerDay;
+  { Total number of days }
+  TotalDays := TotalDays + TotDays;
+  Dec(LocalDate,TotDays*SecsPerDay);
+  { Absolute hours since start of day }
+  H := LocalDate Div SecsPerHour;
+  { Convert to minutes }
+  Minutes := H*60;
+  Dec(LocalDate,(H * SecsPerHour));
+  { Find the remaining minutes to add }
+  Min := LocalDate Div SecsPerMinute;
+  Dec(LocalDate,(Min * SecsPerMinute));
+  Minutes:=Minutes+Min;
+  { Find the number of seconds and convert to ticks }
+  S := LocalDate;
+  Ticks:=TICKSPERSECOND*S;
+end;
+
+
+function dosSetProtection(const name: string; mask:longint): Boolean;
+var
+  buffer : array[0..255] of Char;
+begin
+  move(name[1],buffer,length(name));
+  buffer[length(name)]:=#0;
+  dosSetProtection:=SetProtection(buffer,mask) <> 0;
+end;
+
+function dosSetFileDate(name: string; p : PDateStamp): Boolean;
+var
+  buffer : array[0..255] of Char;
+begin
+  move(name[1],buffer,length(name));
+  buffer[length(name)]:=#0;
+  dosSetFileDate:=SetFileDate(buffer,p);
+end;
+
+
+{******************************************************************************
+                        --- Info / Date / Time ---
+******************************************************************************}
+
+function DosVersion: Word;
+var p: PLibrary;
+begin
+  p:=PLibrary(AOS_DOSBase);
+  DosVersion:= p^.lib_Version or (p^.lib_Revision shl 8);
+end;
+
+{ Here are a lot of stuff just for setdate and settime }
+
+var
+  TimerBase : Pointer;
+
+
+procedure NewList (list: pList);
+begin
+  with list^ do begin
+    lh_Head     := pNode(@lh_Tail);
+    lh_Tail     := NIL;
+    lh_TailPred := pNode(@lh_Head)
+  end;
+end;
+
+function CreateExtIO (port: pMsgPort; size: Longint): pIORequest;
+var
+   IOReq: pIORequest;
+begin
+    IOReq := NIL;
+    if port <> NIL then
+    begin
+        IOReq := execAllocMem(size, MEMF_CLEAR);
+        if IOReq <> NIL then
+        begin
+            IOReq^.io_Message.mn_Node.ln_Type   := 7;
+            IOReq^.io_Message.mn_Length    := size;
+            IOReq^.io_Message.mn_ReplyPort := port;
+        end;
+    end;
+    CreateExtIO := IOReq;
+end;
+
+procedure DeleteExtIO (ioReq: pIORequest);
+begin
+    if ioReq <> NIL then
+    begin
+        ioReq^.io_Message.mn_Node.ln_Type := $FF;
+        ioReq^.io_Message.mn_ReplyPort    := pMsgPort(-1);
+        ioReq^.io_Device                  := pDevice(-1);
+        execFreeMem(ioReq, ioReq^.io_Message.mn_Length);
+    end
+end;
+
+function Createport(name : PChar; pri : longint): pMsgPort;
+var
+   sigbit : ShortInt;
+   port    : pMsgPort;
+begin
+   sigbit := AllocSignal(-1);
+   if sigbit = -1 then CreatePort := nil;
+   port := execAllocMem(sizeof(tMsgPort),MEMF_CLEAR);
+   if port = nil then begin
+      FreeSignal(sigbit);
+      CreatePort := nil;
+   end;
+   with port^ do begin
+       if assigned(name) then
+       mp_Node.ln_Name := name
+       else mp_Node.ln_Name := nil;
+       mp_Node.ln_Pri := pri;
+       mp_Node.ln_Type := 4;
+       mp_Flags := 0;
+       mp_SigBit := sigbit;
+       mp_SigTask := FindTask(nil);
+   end;
+   if assigned(name) then AddPort(port)
+   else NewList(addr(port^.mp_MsgList));
+   CreatePort := port;
+end;
+
+procedure DeletePort (port: pMsgPort);
+begin
+    if port <> NIL then
+    begin
+        if port^.mp_Node.ln_Name <> NIL then
+            RemPort(port);
+
+        port^.mp_Node.ln_Type     := $FF;
+        port^.mp_MsgList.lh_Head  := pNode(-1);
+        FreeSignal(port^.mp_SigBit);
+        execFreeMem(port, sizeof(tMsgPort));
+    end;
+end;
+
+
+function Create_Timer(theUnit : longint) : pTimeRequest;
+var
+    Error : longint;
+    TimerPort : pMsgPort;
+    TimeReq : pTimeRequest;
+begin
+    TimerPort := CreatePort(Nil, 0);
+    if TimerPort = Nil then
+  Create_Timer := Nil;
+    TimeReq := pTimeRequest(CreateExtIO(TimerPort,sizeof(tTimeRequest)));
+    if TimeReq = Nil then begin
+  DeletePort(TimerPort);
+  Create_Timer := Nil;
+    end;
+    Error := OpenDevice(TIMERNAME, theUnit, pIORequest(TimeReq), 0);
+    if Error <> 0 then begin
+  DeleteExtIO(pIORequest(TimeReq));
+  DeletePort(TimerPort);
+  Create_Timer := Nil;
+    end;
+    TimerBase := pointer(TimeReq^.tr_Node.io_Device);
+    Create_Timer := pTimeRequest(TimeReq);
+end;
+
+Procedure Delete_Timer(WhichTimer : pTimeRequest);
+var
+    WhichPort : pMsgPort;
+begin
+
+    WhichPort := WhichTimer^.tr_Node.io_Message.mn_ReplyPort;
+    if assigned(WhichTimer) then begin
+        CloseDevice(pIORequest(WhichTimer));
+        DeleteExtIO(pIORequest(WhichTimer));
+    end;
+    if assigned(WhichPort) then
+        DeletePort(WhichPort);
+end;
+
+function set_new_time(secs, micro : longint): longint;
+var
+    tr : ptimerequest;
+begin
+    tr := create_timer(UNIT_MICROHZ);
+
+    { non zero return says error }
+    if tr = nil then set_new_time := -1;
+
+    tr^.tr_time.tv_secs := secs;
+    tr^.tr_time.tv_micro := micro;
+    tr^.tr_node.io_Command := TR_SETSYSTIME;
+    DoIO(pIORequest(tr));
+
+    delete_timer(tr);
+    set_new_time := 0;
+end;
+
+function get_sys_time(tv : ptimeval): longint;
+var
+    tr : ptimerequest;
+begin
+    tr := create_timer( UNIT_MICROHZ );
+
+    { non zero return says error }
+    if tr = nil then get_sys_time := -1;
+
+    tr^.tr_node.io_Command := TR_GETSYSTIME;
+    DoIO(pIORequest(tr));
+
+   { structure assignment }
+   tv^ := tr^.tr_time;
+
+   delete_timer(tr);
+   get_sys_time := 0;
+end;
+
+procedure GetDate(Var Year, Month, MDay, WDay: Word);
+var
+  cd    : pClockData;
+  oldtime : ttimeval;
+begin
+  new(cd);
+  get_sys_time(@oldtime);
+  Amiga2Date(oldtime.tv_secs,cd);
+  Year  := cd^.year;
+  Month := cd^.month;
+  MDay  := cd^.mday;
+  WDay  := cd^.wday;
+  dispose(cd);
+end;
+
+procedure SetDate(Year, Month, Day: Word);
+var
+  cd : pClockData;
+  oldtime : ttimeval;
+begin
+  new(cd);
+  get_sys_time(@oldtime);
+  Amiga2Date(oldtime.tv_secs,cd);
+  cd^.year := Year;
+  cd^.month := Month;
+  cd^.mday := Day;
+  set_new_time(Date2Amiga(cd),0);
+  dispose(cd);
+end;
+
+procedure GetTime(Var Hour, Minute, Second, Sec100: Word);
+var
+  cd      : pClockData;
+  oldtime : ttimeval;
+begin
+  new(cd);
+  get_sys_time(@oldtime);
+  Amiga2Date(oldtime.tv_secs,cd);
+  Hour   := cd^.hour;
+  Minute := cd^.min;
+  Second := cd^.sec;
+  Sec100 := oldtime.tv_micro div 10000;
+  dispose(cd);
+end;
+
+
+Procedure SetTime(Hour, Minute, Second, Sec100: Word);
+var
+  cd : pClockData;
+  oldtime : ttimeval;
+begin
+  new(cd);
+  get_sys_time(@oldtime);
+  Amiga2Date(oldtime.tv_secs,cd);
+  cd^.hour := Hour;
+  cd^.min := Minute;
+  cd^.sec := Second;
+  set_new_time(Date2Amiga(cd), Sec100 * 10000);
+  dispose(cd);
+end;
+
+
+function GetMsCount: int64;
+var
+  TV: TTimeVal;
+begin
+  Get_Sys_Time (@TV);
+  GetMsCount := int64 (TV.TV_Secs) * 1000 + TV.TV_Micro div 1000;
+end;
+
+{******************************************************************************
+                               --- Exec ---
+******************************************************************************}
+
+
+procedure Exec(const Path: PathStr; const ComLine: ComStr);
+var
+  tmpPath: array[0..515] of char;
+  result : longint;
+  tmpLock: longint;
+begin
+  DosError:= 0;
+  LastDosExitCode:=0;
+  tmpPath:=PathConv(Path)+#0+ComLine+#0; // hacky... :)
+
+  { Here we must first check if the command we wish to execute }
+  { actually exists, because this is NOT handled by the        }
+  { _SystemTagList call (program will abort!!)                 }
+
+  { Try to open with shared lock                               }
+  tmpLock:=Lock(tmpPath,SHARED_LOCK);
+  if tmpLock<>0 then
+    begin
+      { File exists - therefore unlock it }
+      Unlock(tmpLock);
+      tmpPath[length(Path)]:=' '; // hacky... replaces first #0 from above, to get the whole string. :)
+      result:=SystemTagList(tmpPath,nil);
+      { on return of -1 the shell could not be executed }
+      { probably because there was not enough memory    }
+      if result = -1 then
+        DosError:=8
+      else
+        LastDosExitCode:=word(result);
+    end
+  else
+    DosError:=3;
+end;
+
+
+procedure GetCBreak(Var BreakValue: Boolean);
+begin
+  breakvalue := system.BreakOn;
+end;
+
+procedure SetCBreak(BreakValue: Boolean);
+begin
+  system.Breakon := BreakValue;
+end;
+
+
+{******************************************************************************
+                               --- Disk ---
+******************************************************************************}
+
+{ How to solve the problem with this:       }
+{  We could walk through the device list    }
+{  at startup to determine possible devices }
+
+const
+
+  not_to_use_devs : array[0..12] of string =(
+                   'DF0:',
+                   'DF1:',
+                   'DF2:',
+                   'DF3:',
+                   'PED:',
+                   'PRJ:',
+                   'PIPE:',
+                   'RAM:',
+                   'CON:',
+                   'RAW:',
+                   'SER:',
+                   'PAR:',
+                   'PRT:');
+
+var
+   deviceids : array[1..20] of byte;
+   devicenames : array[1..20] of string[20];
+   numberofdevices : Byte;
+
+Function DiskFree(Drive: Byte): int64;
+Var
+  MyLock      : LongInt;
+  Inf         : pInfoData;
+  Free        : Longint;
+  myproc      : pProcess;
+  OldWinPtr   : Pointer;
+Begin
+  Free := -1;
+  { Here we stop systemrequesters to appear }
+  myproc := pProcess(FindTask(nil));
+  OldWinPtr := myproc^.pr_WindowPtr;
+  myproc^.pr_WindowPtr := Pointer(-1);
+  { End of systemrequesterstop }
+  New(Inf);
+  MyLock := dosLock(devicenames[deviceids[Drive]],SHARED_LOCK);
+  If MyLock <> 0 then begin
+     if Info(MyLock,Inf) <> 0 then begin
+        Free := (Inf^.id_NumBlocks * Inf^.id_BytesPerBlock) -
+                (Inf^.id_NumBlocksUsed * Inf^.id_BytesPerBlock);
+     end;
+     Unlock(MyLock);
+  end;
+  Dispose(Inf);
+  { Restore systemrequesters }
+  myproc^.pr_WindowPtr := OldWinPtr;
+  diskfree := Free;
+end;
+
+
+
+Function DiskSize(Drive: Byte): int64;
+Var
+  MyLock      : LongInt;
+  Inf         : pInfoData;
+  Size        : Longint;
+  myproc      : pProcess;
+  OldWinPtr   : Pointer;
+Begin
+  Size := -1;
+  { Here we stop systemrequesters to appear }
+  myproc := pProcess(FindTask(nil));
+  OldWinPtr := myproc^.pr_WindowPtr;
+  myproc^.pr_WindowPtr := Pointer(-1);
+  { End of systemrequesterstop }
+  New(Inf);
+  MyLock := dosLock(devicenames[deviceids[Drive]],SHARED_LOCK);
+  If MyLock <> 0 then begin
+     if Info(MyLock,Inf) <> 0 then begin
+        Size := (Inf^.id_NumBlocks * Inf^.id_BytesPerBlock);
+     end;
+     Unlock(MyLock);
+  end;
+  Dispose(Inf);
+  { Restore systemrequesters }
+  myproc^.pr_WindowPtr := OldWinPtr;
+  disksize := Size;
+end;
+
+
+procedure FindFirst(const Path: PathStr; Attr: Word; Var f: SearchRec);
+var
+ tmpStr: array[0..255] of Char;
+ Anchor: PAnchorPath;
+ Result: LongInt;
+begin
+  tmpStr:=PathConv(path)+#0;
+  DosError:=0;
+
+  new(Anchor);
+  FillChar(Anchor^,sizeof(TAnchorPath),#0);
+
+  Result:=MatchFirst(@tmpStr,Anchor);
+  f.AnchorPtr:=Anchor;
+  if Result = ERROR_NO_MORE_ENTRIES then
+    DosError:=18
+  else
+    if Result<>0 then DosError:=3;
+
+  if DosError=0 then begin
+    {-------------------------------------------------------------------}
+    { Here we fill up the SearchRec attribute, but we also do check     }
+    { something else, if the it does not match the mask we are looking  }
+    { for we should go to the next file or directory.                   }
+    {-------------------------------------------------------------------}
+    with Anchor^.ap_Info do begin
+      f.Time := fib_Date.ds_Days * (24 * 60 * 60) +
+                fib_Date.ds_Minute * 60 +
+                fib_Date.ds_Tick div 50;
+      f.attr := 0;
+      {*------------------------------------*}
+      {* Determine if is a file or a folder *}
+      {*------------------------------------*}
+      if fib_DirEntryType>0 then f.attr:=f.attr OR DIRECTORY;
+
+      {*------------------------------------*}
+      {* Determine if Read only             *}
+      {*  Readonly if R flag on and W flag  *}
+      {*   off.                             *}
+      {* Should we check also that EXEC     *}
+      {* is zero? for read only?            *}
+      {*------------------------------------*}
+      if ((fib_Protection and FIBF_READ) <> 0) and
+         ((fib_Protection and FIBF_WRITE) = 0) then f.attr:=f.attr or READONLY;
+      f.Name := strpas(fib_FileName);
+      f.Size := fib_Size;
+    end; { end with }
+  end;
+end;
+
+
+procedure FindNext(Var f: SearchRec);
+var
+ Result: longint;
+ Anchor: PAnchorPath;
+begin
+  DosError:=0;
+  Result:=MatchNext(f.AnchorPtr);
+  if Result = ERROR_NO_MORE_ENTRIES then
+    DosError:=18
+  else
+    if Result <> 0 then DosError:=3;
+
+  if DosError=0 then begin
+    { Fill up the Searchrec information     }
+    { and also check if the files are with  }
+    { the correct attributes                }
+    Anchor:=pAnchorPath(f.AnchorPtr);
+    with Anchor^.ap_Info do begin
+      f.Time := fib_Date.ds_Days * (24 * 60 * 60) +
+                fib_Date.ds_Minute * 60 +
+                fib_Date.ds_Tick div 50;
+      f.attr := 0;
+      {*------------------------------------*}
+      {* Determine if is a file or a folder *}
+      {*------------------------------------*}
+      if fib_DirEntryType > 0 then f.attr:=f.attr OR DIRECTORY;
+
+      {*------------------------------------*}
+      {* Determine if Read only             *}
+      {*  Readonly if R flag on and W flag  *}
+      {*   off.                             *}
+      {* Should we check also that EXEC     *}
+      {* is zero? for read only?            *}
+      {*------------------------------------*}
+      if ((fib_Protection and FIBF_READ) <> 0) and
+         ((fib_Protection and FIBF_WRITE) = 0) then f.attr:=f.attr or READONLY;
+      f.Name := strpas(fib_FileName);
+      f.Size := fib_Size;
+    end; { end with }
+  end;
+end;
+
+procedure FindClose(Var f: SearchRec);
+begin
+  MatchEnd(f.AnchorPtr);
+  if assigned(f.AnchorPtr) then
+    Dispose(PAnchorPath(f.AnchorPtr));
+end;
+
+
+{******************************************************************************
+                               --- File ---
+******************************************************************************}
+
+function FSearch(path: PathStr; dirlist: String) : PathStr;
+var
+  p1     : LongInt;
+  tmpSR  : SearchRec;
+  newdir : PathStr;
+begin
+  { No wildcards allowed in these things }
+  if (pos('?',path)<>0) or (pos('*',path)<>0) or (path='') then
+    FSearch:=''
+  else begin
+    repeat
+      p1:=pos(';',dirlist);
+      if p1<>0 then begin
+        newdir:=Copy(dirlist,1,p1-1);
+        Delete(dirlist,1,p1);
+      end else begin
+        newdir:=dirlist;
+        dirlist:='';
+      end;
+      if (newdir<>'') and (not (newdir[length(newdir)] in ['/',':'])) then
+        newdir:=newdir+'/';
+      FindFirst(newdir+path,anyfile,tmpSR);
+      if doserror=0 then
+        newdir:=newdir+path
+      else
+        newdir:='';
+    until (dirlist='') or (newdir<>'');
+    FSearch:=newdir;
+  end;
+end;
+
+
+Procedure getftime (var f; var time : longint);
+{
+    This function returns a file's date and time as the number of
+    seconds after January 1, 1978 that the file was created.
+}
+var
+    FInfo : pFileInfoBlock;
+    FTime : Longint;
+    FLock : Longint;
+    Str   : String;
+    i     : integer;
+begin
+    DosError:=0;
+    FTime := 0;
+{$ifdef FPC_ANSI_TEXTFILEREC}
+    Str := strpas(filerec(f).Name);
+{$else}
+    Str := ToSingleByteFileSystemEncodedFileName(filerec(f).Name);
+{$endif}
+    DoDirSeparators(Str);
+    FLock := dosLock(Str, SHARED_LOCK);
+    IF FLock <> 0 then begin
+        New(FInfo);
+        if Examine(FLock, FInfo) <> 0 then begin
+             with FInfo^.fib_Date do
+             FTime := ds_Days * (24 * 60 * 60) +
+             ds_Minute * 60 +
+             ds_Tick div 50;
+        end else begin
+             FTime := 0;
+        end;
+        Unlock(FLock);
+        Dispose(FInfo);
+    end
+    else
+     DosError:=6;
+    time := FTime;
+end;
+
+
+  Procedure setftime(var f; time : longint);
+   var
+    DateStamp: pDateStamp;
+    Str: String;
+    i: Integer;
+    Days, Minutes,Ticks: longint;
+    FLock: longint;
+  Begin
+    new(DateStamp);
+{$ifdef FPC_ANSI_TEXTFILEREC}
+    Str := strpas(filerec(f).Name);
+{$else}
+    Str := ToSingleByteFileSystemEncodedFileName(filerec(f).Name);
+{$endif}
+    DoDirSeparators(str);
+    { Check first of all, if file exists }
+    FLock := dosLock(Str, SHARED_LOCK);
+    IF FLock <> 0 then
+      begin
+        Unlock(FLock);
+        Amiga2DateStamp(time,Days,Minutes,ticks);
+        DateStamp^.ds_Days:=Days;
+        DateStamp^.ds_Minute:=Minutes;
+        DateStamp^.ds_Tick:=Ticks;
+        if dosSetFileDate(Str,DateStamp) then
+            DosError:=0
+        else
+            DosError:=6;
+      end
+    else
+      DosError:=2;
+    if assigned(DateStamp) then Dispose(DateStamp);
+  End;
+
+procedure getfattr(var f; var attr : word);
+var
+    info : pFileInfoBlock;
+    MyLock : Longint;
+    flags: word;
+    Str: String;
+    i: integer;
+begin
+    DosError:=0;
+    flags:=0;
+    New(info);
+{$ifdef FPC_ANSI_TEXTFILEREC}
+    Str := strpas(filerec(f).Name);
+{$else}
+    Str := ToSingleByteFileSystemEncodedFileName(filerec(f).Name);
+{$endif}
+    DoDirSeparators(str);
+    { open with shared lock to check if file exists }
+    MyLock:=dosLock(Str,SHARED_LOCK);
+    if MyLock <> 0 then
+      Begin
+        Examine(MyLock,info);
+        {*------------------------------------*}
+        {* Determine if is a file or a folder *}
+        {*------------------------------------*}
+        if info^.fib_DirEntryType > 0 then
+             flags:=flags OR DIRECTORY;
+
+        {*------------------------------------*}
+        {* Determine if Read only             *}
+        {*  Readonly if R flag on and W flag  *}
+        {*   off.                             *}
+        {* Should we check also that EXEC     *}
+        {* is zero? for read only?            *}
+        {*------------------------------------*}
+        if   ((info^.fib_Protection and FIBF_READ) <> 0)
+         AND ((info^.fib_Protection and FIBF_WRITE) = 0)
+         then
+          flags:=flags OR ReadOnly;
+        Unlock(mylock);
+      end
+    else
+      DosError:=3;
+    attr:=flags;
+    Dispose(info);
+  End;
+
+
+procedure setfattr(var f; attr : word);
+var
+  flags: longint;
+  tmpLock : longint;
+{$ifndef FPC_ANSI_TEXTFILEREC}
+  r : rawbytestring;
+{$endif not FPC_ANSI_TEXTFILEREC}
+  p : pchar;
+begin
+{$ifdef FPC_ANSI_TEXTFILEREC}
+  p := @filerec(f).Name;
+{$else}
+  r := ToSingleByteFileSystemEncodedFileName(filerec(f).Name);
+  p := pchar(r);
+{$endif}
+  DosError:=0;
+  flags:=FIBF_WRITE;
+
+  { By default files are read-write }
+  if attr and ReadOnly <> 0 then flags:=FIBF_READ; { Clear the Fibf_write flags }
+
+  { no need for path conversion here, because file opening already }
+  { converts the path (KB) }
+
+  { create a shared lock on the file }
+  tmpLock:=Lock(p,SHARED_LOCK);
+  if tmpLock <> 0 then begin
+    Unlock(tmpLock);
+    if SetProtection(p,flags) = 0 then DosError:=5;
+  end else
+    DosError:=3;
+end;
+
+
+
+{******************************************************************************
+                             --- Environment ---
+******************************************************************************}
+
+var
+  strofpaths : string;
+
+function getpathstring: string;
+var
+   f : text;
+   s : string;
+   found : boolean;
+   temp : string[255];
+   tmpBat: string[31];
+   tmpList: string[31];
+begin
+   found := true;
+   temp := '';
+
+   tmpBat:='T:'+HexStr(FindTask(nil));
+   tmpList:=tmpBat+'_path.tmp';
+   tmpBat:=tmpBat+'_path.sh';
+
+   assign(f,tmpBat);
+   rewrite(f);
+   writeln(f,'path >'+tmpList);
+   close(f);
+   exec('C:Execute',tmpBat);
+   erase(f);
+
+   assign(f,tmpList);
+   reset(f);
+   { skip the first line, garbage }
+   if not eof(f) then readln(f,s);
+   while not eof(f) do begin
+      readln(f,s);
+      if found then begin
+         temp := s;
+         found := false;
+      end else begin;
+         if (length(s) + length(temp)) < 255 then
+            temp := temp + ';' + s;
+      end;
+   end;
+   close(f);
+   erase(f);
+
+   getpathstring := temp;
+end;
+
+
+function EnvCount: Longint;
+{ HOW TO GET THIS VALUE:                                }
+{   Each time this function is called, we look at the   }
+{   local variables in the Process structure (2.0+)     }
+{   And we also read all files in the ENV: directory    }
+begin
+  EnvCount := 0;
+end;
+
+
+function EnvStr(Index: LongInt): String;
+begin
+  EnvStr:='';
+end;
+
+
+function GetEnv(envvar : String): String;
+var
+   bufarr : array[0..255] of char;
+   strbuffer : array[0..255] of char;
+   temp : Longint;
+begin
+   GetEnv := '';
+   if UpCase(envvar) = 'PATH' then begin
+       if StrOfpaths = '' then StrOfPaths := GetPathString;
+       GetEnv := StrOfPaths;
+   end else begin
+      if (Pos(DriveSeparator,envvar) <> 0) or
+         (Pos(DirectorySeparator,envvar) <> 0) then exit;
+      move(envvar[1],strbuffer,length(envvar));
+      strbuffer[length(envvar)] := #0;
+      temp := GetVar(strbuffer,bufarr,255,$100);
+      if temp <> -1 then
+         GetEnv := StrPas(bufarr);
+   end;
+end;
+
+
+procedure AddDevice(str : String);
+begin
+    inc(numberofdevices);
+    deviceids[numberofdevices] := numberofdevices;
+    devicenames[numberofdevices] := str;
+end;
+
+function MakeDeviceName(str : pchar): string;
+var
+   temp : string[20];
+begin
+   temp := strpas(str);
+   temp := temp + ':';
+   MakeDeviceName := temp;
+end;
+
+function IsInDeviceList(str : string): boolean;
+var
+   i : byte;
+   theresult : boolean;
+begin
+   theresult := false;
+   for i := low(not_to_use_devs) to high(not_to_use_devs) do
+   begin
+       if str = not_to_use_devs[i] then begin
+          theresult := true;
+          break;
+       end;
+   end;
+   IsInDeviceList := theresult;
+end;
+
+procedure ReadInDevices;
+var
+   dl : pDosList;
+   temp : pchar;
+   str  : string[20];
+begin
+   dl := LockDosList(LDF_DEVICES or LDF_READ );
+   repeat
+      dl := NextDosEntry(dl,LDF_DEVICES );
+      if dl <> nil then begin
+         temp := BSTR2STRING(dl^.dol_Name);
+         str := MakeDeviceName(temp);
+         if not IsInDeviceList(str) then
+              AddDevice(str);
+      end;
+   until dl = nil;
+   UnLockDosList(LDF_DEVICES or LDF_READ );
+end;
+
+begin
+  DosError:=0;
+  numberofdevices := 0;
+  StrOfPaths := '';
+  ReadInDevices;
+end.

+ 1371 - 0
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       : TList;
+    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;
+
+
+
+

+ 418 - 0
rtl/aros/i386/doslibf.inc

@@ -0,0 +1,418 @@
+{
+    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;
+type
+  TOpen = function(name: PChar; accessMode: longint; Base: Pointer): Cardinal; cdecl;
+var
+  Call: TOpen;
+begin
+  Call := TOpen(GetLibAdress(AOS_DOSBase, 5));
+  Open := Call(name, accessMode, AOS_DOSBase);
+end;
+
+function dosClose(_file: Cardinal): LongBool;
+type
+  TdosClose = function(_file: Cardinal; Base: Pointer): LongBool; cdecl;
+var
+  Call: TdosClose;
+begin
+  Call := TdosClose(GetLibAdress(AOS_DOSBase, 6));
+  dosClose := Call(_file, AOS_DOSBase);
+end;
+
+function dosRead(_file: Cardinal; buffer: Pointer; length: longint): longint;
+type
+  TdosRead = function(_file: Cardinal; buffer: Pointer; length: longint; Base: Pointer): longint; cdecl;
+var
+  Call: TdosRead;
+begin
+  Call := TdosRead(GetLibAdress(AOS_DOSBase, 7));
+  dosRead := Call(_file, buffer, length, AOS_DOSBase);
+end;
+
+function dosWrite(_file: Cardinal; buffer: Pointer; length: longint): longint;
+type
+  TdosWrite = function(_file: Cardinal; buffer: Pointer; length: longint; Base: Pointer): longint; cdecl;
+var
+  Call: TdosWrite;
+begin
+  Call := TdosWrite(GetLibAdress(AOS_DOSBase, 8));
+  dosWrite := Call(_file, buffer, length, AOS_DOSBase);
+end;
+
+function dosInput: Cardinal;
+type
+  TdosInput = function(Base: Pointer): Cardinal; cdecl;
+var
+  Call: TdosInput;
+begin
+  Call := TdosInput(GetLibAdress(AOS_DOSBase, 9));
+  dosInput := Call(AOS_DOSBase);
+end;
+
+function dosOutput: Cardinal;
+type
+  TdosOutput = function(Base: Pointer): Cardinal; cdecl;
+var
+  Call: TdosOutput;
+begin
+  Call := TdosOutput(GetLibAdress(AOS_DOSBase, 10));
+  dosOutput := Call(AOS_DOSBase);
+end;
+
+function DosError1: Cardinal;
+type
+  TDosError = function(Base: Pointer): Cardinal; cdecl;
+var
+  Call: TDosError;
+begin
+  Call := TDosError(GetLibAdress(AOS_DOSBase, 142));
+  DosError1 := Call(AOS_DOSBase);
+end;
+
+function dosSeek(_file: longint;position: longint;offset: longint): longint;
+type
+  TdosSeek = function(_file: longint;position: longint;offset: longint; Base: Pointer): longint; cdecl;
+var
+  Call: TdosSeek;
+begin
+  Call := TdosSeek(GetLibAdress(AOS_DOSBase, 11));
+  dosSeek := Call(_file, position, offset, AOS_DOSBase);
+end;
+
+function dosDeleteFile(const name: PChar): LongBool;
+type
+  TdosDeleteFile = function(const name: PChar; Base: Pointer): LongBool; cdecl;
+var
+  Call: TdosDeleteFile;
+begin
+  Call := TdosDeleteFile(GetLibAdress(AOS_DOSBase, 12));
+  dosDeleteFile := Call(name, AOS_DOSBase);
+end;
+
+function dosRename(const oldName: PChar;newName: PChar): LongInt;
+type
+  TdosRename = function(const oldName: PChar;newName: PChar; Base: Pointer): LongInt; cdecl;
+var
+  Call: TdosRename;
+begin
+  Call := TdosRename(GetLibAdress(AOS_DOSBase, 13));
+  dosRename := Call(oldname, newname, AOS_DOSBase);
+end;
+
+function Lock(const name: PChar;_type: longint): longint;
+type
+  TLock = function(const name: PChar;_type: longint; Base: Pointer): longint; cdecl;
+var
+  Call: TLock;
+begin
+  Call := TLock(GetLibAdress(AOS_DOSBase, 14));
+  Lock := Call(name, _type, AOS_DOSBase);
+end;
+
+function UnLock(lock: longint): longint;
+type
+  TUnLock = function(lock: longint; Base: Pointer): longint; cdecl;
+var
+  Call: TUnLock;
+begin
+  Call := TUnLock(GetLibAdress(AOS_DOSBase, 15));
+  UnLock := Call(lock, AOS_DOSBase);
+end;
+
+function DupLock(Lock: longint): longint;
+type
+  TDupLock = function(Lock: longint; Base: Pointer): longint; cdecl;
+var
+  Call: TDupLock;
+begin
+  Call := TDupLock(GetLibAdress(AOS_DOSBase, 16));
+  DupLock := Call(Lock, AOS_DOSBase);
+end;
+
+function Examine(lock: longint; fileInfoBlock: PFileInfoBlock): LongInt;
+type
+  TExamine = function(lock: longint; fileInfoBlock: PFileInfoBlock; Base: Pointer): LongInt; cdecl;
+var
+  Call: TExamine;
+begin
+  Call := TExamine(GetLibAdress(AOS_DOSBase, 17));
+  Examine := Call(lock, fileInfoBlock, AOS_DOSBase);
+end;
+
+function Info(lock: longint; parameterBlock: PInfoData): LongInt;
+type
+  TInfo = function(lock: longint; parameterBlock: PInfoData; Base: Pointer): LongInt; cdecl;
+var
+  Call: TInfo;
+begin
+  Call := TInfo(GetLibAdress(AOS_DOSBase, 19));
+  Info := Call(lock, parameterBlock, AOS_DOSBase);
+end;
+
+function dosCreateDir(const name: PChar): longint;
+type
+  TdosCreateDir = function(const name: PChar; Base: Pointer): longint; cdecl;
+var
+  Call: TdosCreateDir;
+begin
+  Call := TdosCreateDir(GetLibAdress(AOS_DOSBase, 20));
+  dosCreateDir := Call(name, AOS_DOSBase);
+end;
+
+function CurrentDir(lock: longint): longint;
+type
+  TCurrentDir = function(lock: longint; Base: Pointer): longint; cdecl;
+var
+  Call: TCurrentDir;
+begin
+  Call := TCurrentDir(GetLibAdress(AOS_DOSBase, 21));
+  CurrentDir := Call(lock, AOS_DOSBase);
+end;
+
+function IoErr: longint;
+type
+  TIoErr = function(Base: Pointer): longint; cdecl;
+var
+  Call: TIoErr;
+begin
+  Call := TIoErr(GetLibAdress(AOS_DOSBase, 22));
+  IoErr := Call(AOS_DOSBase);
+end;
+
+procedure dosExit(ErrCode: longint);
+type
+  TExit = procedure(ErrCode: longint; Base: Pointer); cdecl;
+var
+  Call: TExit;
+begin
+  Call := TExit(GetLibAdress(AOS_DOSBase, 24));
+  Call(ErrCode, AOS_DOSBase);
+end;
+
+function SetProtection(const name: PChar; protect: longword): LongInt;
+type
+  TSetProtection = function(const name: PChar; protect: longword; Base: Pointer): LongInt; cdecl;
+var
+  Call: TSetProtection;
+begin
+  Call := TSetProtection(GetLibAdress(AOS_DOSBase, 31));
+  SetProtection := Call(name, protect, AOS_DOSBase);
+end;
+
+function DateStamp(date: PDateStamp): PDateStamp;
+type
+  TDateStamp = function(date: PDateStamp; Base: Pointer): PDateStamp; cdecl;
+var
+  Call: TDateStamp;
+begin
+  Call := TDateStamp(GetLibAdress(AOS_DOSBase, 32));
+  DateStamp := Call(date, AOS_DOSBase);
+end;
+
+procedure Delay(ticks: LongWord);
+type
+  TDelay = procedure(ticks: LongWord; Base: Pointer); cdecl;
+var
+  Call: TDelay;
+begin
+  Call := TDelay(GetLibAdress(AOS_DOSBase, 33));
+  Call(ticks, AOS_DOSBase);
+end;
+
+function SetFileDate(name: PChar; date: PDateStamp): LongBool;
+type
+  TSetFileDate = function(name: PChar; date: PDateStamp; Base: Pointer): LongBool; cdecl;
+var
+  Call: TSetFileDate;
+begin
+  Call := TSetFileDate(GetLibAdress(AOS_DOSBase, 66));
+  SetFileDate := Call(name, date, AOS_DOSBase);
+end;
+
+function NameFromLock(lock: longint; buffer: PChar; len: longint): LongBool;
+type
+  TNameFromLock = function(lock: longint; buffer: PChar; len: longint; Base: Pointer): LongBool; cdecl;
+var
+  Call: TNameFromLock;
+begin
+  Call := TNameFromLock(GetLibAdress(AOS_DOSBase, 67));
+  NameFromLock := Call(lock, buffer, len, AOS_DOSBase);
+end;
+
+function SetFileSize(fh: longint; pos: longint; mode: longint): longint;
+type
+  TSetFileSize = function(fh: longint; pos: longint; mode: longint; Base: Pointer): longint; cdecl;
+var
+  Call: TSetFileSize;
+begin
+  Call := TSetFileSize(GetLibAdress(AOS_DOSBase, 76));
+  SetFileSize := Call(fh, pos, mode, AOS_DOSBase);
+end;
+
+function Cli : pCommandLineInterface;
+type
+  TLocalCall = function(LibBase: Pointer): pCommandLineInterface; cdecl;
+var
+  Call: TLocalCall;
+begin
+  Call := TLocalCall(GetLibAdress(AOS_DOSBase, 82));
+  Cli := Call(AOS_DOSBase);
+end;
+
+function GetArgStr: PChar;
+type
+  TGetArgStr = function(Base: Pointer): PChar; cdecl;
+var
+  Call: TGetArgStr;
+begin
+  Call := TGetArgStr(GetLibAdress(AOS_DOSBase, 89));
+  GetArgStr := Call(AOS_DOSBase);
+end;
+
+function GetCurrentDirName(buf: PChar; len: longint): LongBool;
+type
+  TGetCurrentDirName = function(buf: PChar; len: longint; Base: Pointer): LongBool; cdecl;
+var
+  Call: TGetCurrentDirName;
+begin
+  Call := TGetCurrentDirName(GetLibAdress(AOS_DOSBase, 94));
+  GetCurrentDirName := Call(buf, len, AOS_DOSBase);
+end;
+
+function GetProgramName(buf: PChar; len: longint): LongBool;
+type
+  TGetProgramName = function(buf: PChar; len: longint; Base: Pointer): LongBool; cdecl;
+var
+  Call: TGetProgramName;
+begin
+  Call := TGetProgramName(GetLibAdress(AOS_DOSBase, 96));
+  GetProgramName := Call(buf, len, AOS_DOSBase);
+end;
+
+function GetProgramDir: longint;
+type
+  TGetProgramDir = function(Base: Pointer): longint; cdecl;
+var
+  Call: TGetProgramDir;
+begin
+  Call := TGetProgramDir(GetLibAdress(AOS_DOSBase, 100));
+  GetProgramDir := Call(AOS_DOSBase);
+end;
+
+function SystemTagList(command: PChar; tags: PTagItem): longint;
+type
+  TSystemTagList = function(command: PChar; tags: PTagItem; Base: Pointer): longint; cdecl;
+var
+  Call: TSystemTagList;
+begin
+  Call := TSystemTagList(GetLibAdress(AOS_DOSBase, 101));
+  SystemTagList := Call(command, tags, AOS_DOSBase);
+end;
+
+function LockDosList(flags: longword): PDosList;
+type
+  TLockDosList = function(flags: longword; Base: Pointer): PDosList; cdecl;
+var
+  Call: TLockDosList;
+begin
+  Call := TLockDosList(GetLibAdress(AOS_DOSBase, 109));
+  LockDosList := Call(flags, AOS_DOSBase);
+end;
+
+procedure UnLockDosList(flags: longword);
+type
+  TUnLockDosList = procedure(flags: longword; Base: Pointer); cdecl;
+var
+  Call: TUnLockDosList;
+begin
+  Call := TUnLockDosList(GetLibAdress(AOS_DOSBase, 110));
+  Call(flags, AOS_DOSBase);
+end;
+
+function NextDosEntry(dlist: PDosList; flags: longword): PDosList;
+type
+  TNextDosEntry = function(dlist: PDosList; flags: longword; Base: Pointer): PDosList; cdecl;
+var
+  Call: TNextDosEntry;
+begin
+  Call := TNextDosEntry(GetLibAdress(AOS_DOSBase, 115));
+  NextDosEntry := Call(dlist, flags, AOS_DOSBase);
+end;
+
+function MatchFirst(pat: PChar; anchor: PAnchorPath): longint;
+type
+  TMatchFirst = function(pat: PChar; anchor: PAnchorPath; Base: Pointer): longint; cdecl;
+var
+  Call: TMatchFirst;
+begin
+  Call := TMatchFirst(GetLibAdress(AOS_DOSBase, 137));
+  MatchFirst := Call(pat, anchor, AOS_DOSBase);
+end;
+
+function MatchNext(anchor: PAnchorPath): longint;
+type
+  TMatchNext = function(anchor: PAnchorPath; Base: Pointer): longint; cdecl;
+var
+  Call: TMatchNext;
+begin
+  Call := TMatchNext(GetLibAdress(AOS_DOSBase, 138));
+  MatchNext := Call(anchor, AOS_DOSBase);
+end;
+
+
+procedure MatchEnd(anchor: PAnchorPath);
+type
+  TMatchEnd = procedure(anchor: PAnchorPath; Base: Pointer); cdecl;
+var
+  Call: TMatchEnd;
+begin
+  Call := TMatchEnd(GetLibAdress(AOS_DOSBase, 139));
+  Call(anchor, AOS_DOSBase);
+end;
+
+
+function GetVar(name: PChar; buffer: PChar; size: longint; flags: longword): longint;
+type
+  TGetVar = function(name: PChar; buffer: PChar; size: longint; flags: longword; Base: Pointer): longint; cdecl;
+var
+  Call: TGetVar;
+begin
+  Call := TGetVar(GetLibAdress(AOS_DOSBase, 151));
+  GetVar := Call(name, buffer, size, flags, AOS_DOSBase);
+end;
+
+
+function ExamineFH(Fh: BPTR; Fib: PFileInfoBlock): LongBool;
+type
+  TLocalCall = function(Fh: BPTR; Fib: PFileInfoBlock; LibBase: Pointer): LongBool; cdecl;
+Var
+  Call: TLocalCall;
+Begin
+  Call := TLocalCall(GetLibAdress(AOS_DOSBase, 65));
+  ExamineFH:= Call(Fh, Fib, AOS_DOSBase);
+end;
+
+
+function NameFromFH(Fh: BPTR; Buffer: PChar; Length: LongInt): LongBool;
+type
+  TLocalCall = function(Fh: BPTR; Buffer: PChar; Length: LongInt; LibBase: Pointer): LongBool; cdecl;
+Var
+  Call: TLocalCall;
+Begin
+  Call := TLocalCall(GetLibAdress(AOS_DOSBase, 68));
+  NameFromFH := Call(Fh, Buffer, Length, AOS_DOSBase);
+end;

+ 1792 - 0
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 = ^TList;
+  TList = 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: TList;
+  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  : TList;
+    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: TList;
+    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     : TList;
+    ResourceList: TList;
+    DeviceList  : TList;
+    IntrList    : TList;
+    LibList     : TList;
+    PortList    : TList;
+    TaskReady   : TList;
+    TaskWait    : TList;
+    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       : TList;
+    
+    // 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}
+
+
+

+ 270 - 0
rtl/aros/i386/execf.inc

@@ -0,0 +1,270 @@
+{
+    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';
+
+function RawDoFmt(const formatString : pCHAR;const dataStream : POINTER; putChProc : POINTER; putChData : POINTER): pointer; forward;
+
+
+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;
+
+function execAllocMem(byteSize: Cardinal; requirements: Cardinal): Pointer;
+type
+  TAllocMem = function(byteSize: Cardinal; requirements: Cardinal; Base: Pointer): Pointer; cdecl;
+var
+  Call: TAllocMem;
+begin
+  Call := TAllocMem(GetLibAdress(LocalExecBase, 33));
+  execAllocMem := Call(byteSize, requirements, LocalExecBase);
+end;
+
+procedure execFreeMem(memoryBlock: Pointer; byteSize: Cardinal);
+type
+  TFreeMem = function(memoryBlock: Pointer; byteSize: Cardinal; Base: Pointer): Pointer; cdecl;
+var
+  Call: TFreeMem;
+begin
+  Call := TFreeMem(GetLibAdress(LocalExecBase, 35));
+  Call(memoryBlock, byteSize, LocalExecBase);
+end;
+
+function FindTask(name: PChar): PTask;
+type
+  TFindTask = function(name: PChar; Base: Pointer): PTask; cdecl;
+var
+  Call: TFindTask;
+begin
+  Call := TFindTask(GetLibAdress(LocalExecBase, 49));
+  FindTask := Call(name, LocalExecBase);
+end;
+
+function SetSignal(newSignals: Cardinal; signalSet : Cardinal): Cardinal;
+type
+  TSetSignal = function(newSignals: Cardinal; signalSet : Cardinal; Base: Pointer): Cardinal; cdecl;
+var
+  Call: TSetSignal;
+begin
+  Call := TSetSignal(GetLibAdress(LocalExecBase, 51));
+  SetSignal := Call(newSignals, signalSet, LocalExecBase);
+end;
+
+function AllocSignal(signalNum: LongInt): ShortInt;
+type
+  TAllocSignal = function(signalNum: LongInt; Base: Pointer): ShortInt; cdecl;
+var
+  Call: TAllocSignal;
+begin
+  Call := TAllocSignal(GetLibAdress(LocalExecBase, 55));
+  AllocSignal := Call(signalNum, LocalExecBase);
+end;
+
+procedure FreeSignal(signalNum: LongInt);
+type
+  TFreeSignal = procedure(signalNum: LongInt; Base: Pointer); cdecl;
+var
+  Call: TFreeSignal;
+begin
+  Call := TFreeSignal(GetLibAdress(LocalExecBase, 56)); 
+  Call(signalNum, LocalExecBase);
+end;
+
+procedure AddPort(port: PMsgPort);
+type
+  TAddPort = procedure(port: PMsgPort; Base: Pointer); cdecl;
+var
+  Call: TAddPort;
+begin
+  Call := TAddPort(GetLibAdress(LocalExecBase, 59)); 
+  Call(port, LocalExecBase);
+end;
+
+procedure RemPort(port: PMsgPort);
+type
+  TRemPort = procedure(port: PMsgPort; Base: Pointer); cdecl;
+var
+  Call: TRemPort;
+begin
+  Call := TRemPort(GetLibAdress(LocalExecBase, 60)); 
+  Call(port, LocalExecBase);
+end;
+
+function GetMsg(port: PMsgPort): PMessage;
+type
+  TGetMsg = function(port: PMsgPort; Base: Pointer): PMessage; cdecl;
+var
+  Call: TGetMsg;
+begin
+  Call := TGetMsg(GetLibAdress(LocalExecBase, 62));
+  GetMsg := Call(port, LocalExecBase);
+end;
+
+procedure ReplyMsg(message : pMessage);
+type
+  TLocalCall = procedure(message : pMessage; LibBase: Pointer); cdecl;
+var
+  Call: TLocalCall;
+begin
+  Call := TLocalCall(GetLibAdress(AOS_ExecBase, 63));
+  Call(message, AOS_ExecBase);
+end;
+
+function WaitPort(port: PMsgPort): PMessage;
+type
+  TWaitPort = function(port: PMsgPort; Base: Pointer): PMessage; cdecl;
+var
+  Call: TWaitPort;
+begin
+  Call := TWaitPort(GetLibAdress(LocalExecBase, 64));
+  WaitPort := Call(port, LocalExecBase);
+end;
+
+procedure CloseLibrary(libHandle: PLibrary);
+type
+  TCloseLibrary = procedure(libHandle: PLibrary; Base: Pointer); cdecl;
+var
+  Call: TCloseLibrary;
+begin
+  Call := TCloseLibrary(GetLibAdress(LocalExecBase, 69)); 
+  Call(libHandle, LocalExecBase);
+end;
+
+function OpenDevice(devName: PChar; numunit: Cardinal; ioRequest: pIORequest; flags: Cardinal): ShortInt;
+type
+  TOpenDevice = function(devName: PChar; numunit: Cardinal; ioRequest: pIORequest; flags: Cardinal; Base: Pointer): ShortInt; cdecl;
+var
+  Call: TOpenDevice;
+begin
+  Call := TOpenDevice(GetLibAdress(LocalExecBase, 74));
+  OpenDevice := Call(devName, numunit, ioRequest, flags, LocalExecBase);
+end;
+
+procedure CloseDevice(ioRequest: PIORequest);
+type
+  TCloseDevice = procedure(ioRequest: PIORequest; Base: Pointer); cdecl;
+var
+  Call: TCloseDevice;
+begin
+  Call := TCloseDevice(GetLibAdress(LocalExecBase, 75)); 
+  Call(ioRequest, LocalExecBase);
+end;
+
+function DoIO(ioRequest: PIORequest): ShortInt;
+type
+  TDoIO = function(ioRequest: PIORequest; Base: Pointer): ShortInt; cdecl;
+var
+  Call: TDoIO;
+begin
+  Call := TDoIO(GetLibAdress(LocalExecBase, 76));
+  DoIO := Call(ioRequest, LocalExecBase);
+end;
+
+function OpenLibrary(libname: PChar; libver : Cardinal): Pointer;
+type
+  TOpenLibrary = function(libname: PChar; libver : Cardinal; Base: Pointer): Pointer; cdecl;
+var
+  Call: TOpenLibrary;
+begin
+  Call := TOpenLibrary(GetLibAdress(LocalExecBase, 92));
+  OpenLibrary := Call(libname, libver, LocalExecBase);
+end;
+
+function CreatePool(requirements: Cardinal; puddleSize: Cardinal; threshSize: Cardinal): Pointer;
+type
+  TCreatePool = function(requirements: Cardinal; puddleSize: Cardinal; threshSize: Cardinal; Base: Pointer): Pointer; cdecl;
+var
+  Call: TCreatePool;
+begin
+  Call := TCreatePool(GetLibAdress(LocalExecBase, 116));
+  CreatePool := Call(requirements, puddleSize, threshSize, LocalExecBase);
+end;
+
+procedure DeletePool(poolHeader: Pointer);
+type
+  TDeletePool = procedure(poolHeader: Pointer; Base: Pointer); cdecl;
+var
+  Call: TDeletePool;
+begin
+  Call := TDeletePool(GetLibAdress(LocalExecBase, 117));
+  Call(poolHeader, LocalExecBase);
+end;
+
+function AllocPooled(poolHeader: Pointer; memSize: Cardinal): Pointer;
+type
+  TAllocPooled = function (poolHeader: Pointer; memSize: Cardinal; Base: Pointer): Pointer; cdecl;
+var
+  Call: TAllocPooled;
+begin
+  Call := TAllocPooled(GetLibAdress(LocalExecBase, 118));
+  AllocPooled := Call(poolHeader, memSize, LocalExecBase);
+end;
+
+function FreePooled(poolHeader: Pointer; memory: Pointer; memSize: Cardinal): Pointer;
+type
+  TFreePooled = function (poolHeader: Pointer; memory: Pointer; memSize: Cardinal; Base: Pointer): Pointer; cdecl;
+var
+  Call: TFreePooled;
+begin
+  Call := TFreePooled(GetLibAdress(LocalExecBase, 119));
+  FreePooled := Call(poolHeader, memory, memSize, LocalExecBase);
+end;
+
+//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;
+type
+  TLocalCall = function(const formatString : pCHAR;const dataStream : POINTER; putChProc : Pointer; putChData : POINTER; LibBase: Pointer): pointer; cdecl;
+var
+  Call: TLocalCall;
+begin
+  Call := TLocalCall(GetLibAdress(LocalExecBase, 87));
+  RawDoFmt := Call(formatString, dataStream, putChProc, putChData, AOS_ExecBase);
+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;
+

+ 88 - 0
rtl/aros/i386/prt0.as

@@ -0,0 +1,88 @@
+#
+#  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), %ecx
+  movl     %ecx, _ExecBase
+
+  /* Save the command line pointer length to CommandLineLen */
+  movl     8(%esp),%ecx
+  movl     %ecx,CommandLineLen
+
+  /* Save the command line pointer to CommandLine */
+  movl     4(%esp),%eax
+  movl     %eax,CommandLine
+
+  /* save all register */
+  pushal
+
+  /* Save stack pointer for exit() routine */
+  movl	   %esp,STKPTR
+
+  call   PASCALMAIN
+  /* if returns from here set an empty returncode */
+  xorl   %eax, %eax
+  pushl  %eax
+  pushl  %eax
+
+
+  /* entry for stop the program*/
+_haltproc:
+haltproc:
+
+    /* get retun code from stack */
+    movl   4(%esp),%eax
+
+    /* save for later use */
+    movl   %eax,_returncode
+
+    /* get back my stack */
+    movl   STKPTR,%esp
+
+    /* get back all registers */
+    popal
+
+    /* reset returncode */
+    movl  _returncode, %eax
+
+    /* bye bye */
+    ret
+
+  /*----------------------------------------------------*/
+
+    .data
+    .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
+
+_returncode:    .long   0
+CommandLine:    .long   0
+CommandLineLen: .long   0
+STKPTR:         .long   0
+_ExecBase:      .long   0
+

+ 153 - 0
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))
+}
+
+

+ 53 - 0
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;
+
+

+ 36 - 0
rtl/aros/i386/utilf.inc

@@ -0,0 +1,36 @@
+{
+    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);
+type
+  TAmiga2Date = procedure(date_amiga: longword; cd: PClockData; Base: Pointer); cdecl;
+var
+  Call: TAmiga2Date;
+begin
+  Call := TAmiga2Date(GetLibAdress(AOS_UtilityBase, 20));
+  Call(date_amiga, cd, AOS_UtilityBase);
+end;
+
+function Date2Amiga(date: PClockData): longword;
+type
+  TDate2Amiga = function(date: PClockData; Base: Pointer): longword; cdecl;
+var
+  Call: TDate2Amiga;
+begin
+  Call := TDate2Amiga(GetLibAdress(AOS_UtilityBase, 21));
+  Date2Amiga := Call(date, AOS_UtilityBase);
+end;
+
+

+ 24 - 0
rtl/aros/rtldefs.inc

@@ -0,0 +1,24 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2012 by Free Pascal development team
+
+    This file contains platform-specific defines that are used in
+    multiple RTL units.
+
+    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.
+
+ **********************************************************************}
+
+{ the single byte OS APIs always use UTF-8 }
+{ define FPCRTL_FILESYSTEM_UTF8}
+
+{ The OS supports a single byte file system operations API that we use }
+{$define FPCRTL_FILESYSTEM_SINGLE_BYTE_API}
+
+{ The OS supports a two byte file system operations API that we use }
+{ define FPCRTL_FILESYSTEM_TWO_BYTE_API}

+ 99 - 0
rtl/aros/sysdir.inc

@@ -0,0 +1,99 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2014 by Free Pascal development team
+
+    Low level directory functions
+
+    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.
+
+ **********************************************************************}
+
+
+{*****************************************************************************
+                           Directory Handling
+*****************************************************************************}
+procedure do_mkdir(const s : rawbytestring);
+var
+  tmpStr : rawbytestring;
+  tmpLock: LongInt;
+begin
+  checkCTRLC;
+  tmpStr:=PathConv(s);
+  tmpLock:=dosCreateDir(pchar(tmpStr));
+  if tmpLock=0 then begin
+    dosError2InOut(IoErr);
+    exit;
+  end;
+  UnLock(tmpLock);
+end;
+
+procedure do_rmdir(const s : rawbytestring);
+var
+  tmpStr : rawbytestring;
+begin
+  checkCTRLC;
+  if (s='.') then
+    begin
+      InOutRes:=16;
+      exit;
+    end;
+  tmpStr:=PathConv(s);
+  if not dosDeleteFile(pchar(tmpStr)) then
+    dosError2InOut(IoErr);
+end;
+
+procedure do_ChDir(const s: rawbytestring);
+var
+  tmpStr : rawbytestring;
+  tmpLock: LongInt;
+  FIB    : PFileInfoBlock;
+begin
+  checkCTRLC;
+  tmpStr:=PathConv(s);
+  tmpLock:=0;
+
+  { Changing the directory is a pretty complicated affair }
+  {   1) Obtain a lock on the directory                   }
+  {   2) CurrentDir the lock                              }
+  tmpLock:=Lock(pchar(tmpStr),SHARED_LOCK);
+  if tmpLock=0 then begin
+    dosError2InOut(IoErr);
+    exit;
+  end;
+
+  FIB:=nil;
+  new(FIB);
+
+  if (Examine(tmpLock,FIB)>0) and (FIB^.fib_DirEntryType>0) then begin
+    tmpLock:=CurrentDir(tmpLock);
+    if AOS_OrigDir=0 then begin
+      AOS_OrigDir:=tmpLock;
+      tmpLock:=0;
+    end;
+  end else begin
+    dosError2InOut(ERROR_DIR_NOT_FOUND);
+  end;
+
+  if tmpLock<>0 then Unlock(tmpLock);
+  if assigned(FIB) then dispose(FIB);
+end;
+
+procedure do_GetDir (DriveNr: byte; var Dir: RawByteString);
+var tmpbuf: array[0..255] of char;
+begin
+  checkCTRLC;
+  Dir:='';
+
+  if not GetCurrentDirName(tmpbuf,256) then
+    dosError2InOut(IoErr)
+  else
+    begin
+      Dir:=tmpbuf;
+      SetCodePage(Dir,DefaultFileSystemCodePage,false);
+    end;
+end;

+ 389 - 0
rtl/aros/sysfile.inc

@@ -0,0 +1,389 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2005 by Free Pascal development team
+
+    Low level file functions
+
+    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.
+
+ **********************************************************************}
+
+{ Enable this for file handling debug }
+{DEFINE MOSFPC_FILEDEBUG}
+
+{*****************************************************************************
+                  MorphOS File-handling Support Functions
+*****************************************************************************}
+type
+  { AmigaOS does not automatically close opened files on exit back to  }
+  { the operating system, therefore as a precuation we close all files }
+  { manually on exit.                                                  }
+  PFileList = ^TFileList;
+  TFileList = record { no packed, must be correctly aligned }
+    handle   : LongInt;      { Handle to file     }
+    next     : PFileList;    { Next file in list  }
+    buffered : boolean;      { used buffered I/O? }
+  end;
+
+var
+  AOS_fileList: PFileList; public name 'AOS_FILELIST'; { List pointer to opened files }
+
+{ Function to be called at program shutdown, to close all opened files }
+procedure CloseList(l: PFileList);
+var
+  tmpNext   : PFileList;
+  tmpHandle : LongInt;
+begin
+  if l=nil then exit;
+
+  { First, close all tracked files }
+  tmpNext:=l^.next;
+  while tmpNext<>nil do begin
+    tmpHandle:=tmpNext^.handle;
+    if (tmpHandle<>StdInputHandle) and (tmpHandle<>StdOutputHandle)
+       and (tmpHandle<>StdErrorHandle) then begin
+      dosClose(tmpHandle);
+    end;
+    tmpNext:=tmpNext^.next;
+  end;
+
+  { Next, erase the linked list }
+  while l<>nil do begin
+    tmpNext:=l;
+    l:=l^.next;
+    dispose(tmpNext);
+  end;
+end;
+
+{ Function to be called to add a file to the opened file list }
+procedure AddToList(var l: PFileList; h: LongInt); alias: 'ADDTOLIST'; [public];
+var
+  p     : PFileList;
+  inList: Boolean;
+begin
+  inList:=False;
+  if l<>nil then begin
+    { if there is a valid filelist, search for the value }
+    { in the list to avoid double additions }
+    p:=l;
+    while (p^.next<>nil) and (not inList) do
+      if p^.next^.handle=h then inList:=True
+                           else p:=p^.next;
+    p:=nil;
+  end else begin
+    { if the list is not yet allocated, allocate it. }
+    New(l);
+    l^.next:=nil;
+  end;
+
+  if not inList then begin
+    New(p);
+    p^.handle:=h;
+    p^.buffered:=False;
+    p^.next:=l^.next;
+    l^.next:=p;
+  end
+{$IFDEF MOSFPC_FILEDEBUG}
+  else 
+    RawDoFmt('FPC_FILE_DEBUG: Error! Trying add filehandle a filehandle twice: $%lx !'+#10,@h,pointer(1),nil);
+{$ENDIF}
+  ;
+end;
+
+{ Function to be called to remove a file from the list }
+function RemoveFromList(var l: PFileList; h: LongInt): boolean; alias: 'REMOVEFROMLIST'; [public];
+var
+  p      : PFileList;
+  inList : Boolean;
+  tmpList: PFileList;
+begin
+  inList:=False;
+  if l=nil then begin
+    RemoveFromList:=inList;
+    exit;
+  end;
+
+  p:=l;
+  while (p^.next<>nil) and (not inList) do
+    if p^.next^.handle=h then inList:=True
+                         else p:=p^.next;
+  
+  if inList then begin
+    tmpList:=p^.next^.next;
+    dispose(p^.next);
+    p^.next:=tmpList;
+  end
+{$IFDEF MOSFPC_FILEDEBUG}
+  else 
+    RawDoFmt('FPC_FILE_DEBUG: Error! Trying to remove not existing filehandle: $%lx !'+#10,@h,pointer(1),nil);
+{$ENDIF}
+  ;
+
+  RemoveFromList:=inList;
+end;
+
+{ Function to check if file is in the list }
+function CheckInList(var l: PFileList; h: LongInt): pointer; alias: 'CHECKINLIST'; [public];
+var
+  p      : PFileList;
+  inList : Pointer;
+  
+begin
+  inList:=nil;
+  if l=nil then begin
+    CheckInList:=inList;
+    exit;
+  end;
+
+  p:=l;
+  while (p^.next<>nil) and (inList=nil) do
+    if p^.next^.handle=h then inList:=p^.next
+                         else p:=p^.next;
+
+{$IFDEF MOSFPC_FILEDEBUG}
+  if inList=nil then
+    RawDoFmt('FPC_FILE_DEBUG: Warning! Check for not existing filehandle: $%lx !'+#10,@h,pointer(1),nil);
+{$ENDIF}
+
+  CheckInList:=inList;
+end;
+
+
+{****************************************************************************
+                        Low level File Routines
+               All these functions can set InOutRes on errors
+****************************************************************************}
+
+{ close a file from the handle value }
+procedure do_close(handle : longint);
+begin
+  if RemoveFromList(AOS_fileList,handle) then begin
+    { Do _NOT_ check CTRL_C on Close, because it will conflict
+      with System_Exit! }
+    if not dosClose(handle) then
+      dosError2InOut(IoErr);
+  end;
+end;
+
+procedure do_erase(p : pchar; pchangeable: boolean);
+var
+  tmpStr: array[0..255] of Char;
+begin
+  tmpStr:=PathConv(strpas(p))+#0;
+  checkCTRLC;
+  if not dosDeleteFile(@tmpStr) then
+    dosError2InOut(IoErr);
+end;
+
+procedure do_rename(p1,p2 : pchar; p1changeable, p2changeable: boolean);
+{ quite stack-effective code, huh? :) damn path conversions... (KB) }
+var
+  tmpStr1: array[0..255] of Char;
+  tmpStr2: array[0..255] of Char;
+begin
+  tmpStr1:=PathConv(strpas(p1))+#0;
+  tmpStr2:=PathConv(strpas(p2))+#0;
+  checkCTRLC;
+  if not (dosRename(@tmpStr1,@tmpStr2) <> 0) then
+    dosError2InOut(IoErr);
+end;
+
+function do_write(h: longint; addr: pointer; len: longint) : longint;
+var dosResult: LongInt;
+begin
+  checkCTRLC;
+  do_write:=0;
+  if (len<=0) or (h<=0) then exit;
+
+{$IFDEF MOSFPC_FILEDEBUG}
+  if not ((h=StdOutputHandle) or (h=StdInputHandle) or
+     (h=StdErrorHandle)) then CheckInList(AOS_fileList,h);
+{$ENDIF}
+
+  dosResult:=dosWrite(h,addr,len);
+  if dosResult<0 then begin
+    dosError2InOut(IoErr);
+  end else begin
+    do_write:=dosResult;
+  end;
+end;
+
+function do_read(h: longint; addr: pointer; len: longint) : longint;
+var dosResult: LongInt;
+begin
+  checkCTRLC;
+  do_read:=0;
+  if (len<=0) or (h<=0) then exit;
+
+{$IFDEF MOSFPC_FILEDEBUG}
+  if not ((h=StdOutputHandle) or (h=StdInputHandle) or
+     (h=StdErrorHandle)) then CheckInList(AOS_fileList,h);
+{$ENDIF}
+
+  dosResult:=dosRead(h,addr,len);
+  if dosResult<0 then begin
+    dosError2InOut(IoErr);
+  end else begin
+    do_read:=dosResult;
+  end
+end;
+
+function do_filepos(handle: longint) : longint;
+var dosResult: LongInt;
+begin
+  checkCTRLC;
+  do_filepos:=-1;
+  if CheckInList(AOS_fileList,handle)<>nil then begin
+
+    { Seeking zero from OFFSET_CURRENT to find out where we are }    
+    dosResult:=dosSeek(handle,0,OFFSET_CURRENT);
+    if dosResult<0 then begin
+      dosError2InOut(IoErr);
+    end else begin
+      do_filepos:=dosResult;
+    end;
+  end;
+end;
+
+procedure do_seek(handle, pos: longint);
+begin
+  checkCTRLC;
+  if CheckInList(AOS_fileList,handle)<>nil then begin
+
+    { Seeking from OFFSET_BEGINNING }  
+    if dosSeek(handle,pos,OFFSET_BEGINNING)<0 then
+      dosError2InOut(IoErr);
+  end;
+end;
+
+function do_seekend(handle: longint):longint;
+var dosResult: LongInt;
+begin
+  checkCTRLC;
+  do_seekend:=-1;
+  if CheckInList(AOS_fileList,handle)<>nil then begin
+
+    { Seeking to OFFSET_END }
+    dosResult:=dosSeek(handle,0,OFFSET_END);
+    if dosResult<0 then begin
+      dosError2InOut(IoErr);
+    end else begin
+      do_seekend:=dosResult;
+    end;
+  end;
+end;
+
+function do_filesize(handle : longint) : longint;
+var currfilepos: longint;
+begin
+  checkCTRLC;
+  do_filesize:=-1;
+  if CheckInList(AOS_fileList,handle)<>nil then begin
+
+    currfilepos:=do_filepos(handle);
+    { We have to do this twice, because seek returns the OLD position }
+    do_filesize:=do_seekend(handle);
+    do_filesize:=do_seekend(handle);
+    do_seek(handle,currfilepos);
+
+  end;
+end;
+
+{ truncate at a given position }
+procedure do_truncate(handle, pos: longint);
+begin
+  checkCTRLC;
+  if CheckInList(AOS_fileList,handle)<>nil then begin
+
+    { Seeking from OFFSET_BEGINNING }
+    if SetFileSize(handle,pos,OFFSET_BEGINNING)<0 then
+      dosError2InOut(IoErr);
+  end;
+end;
+
+procedure do_open(var f;p:pchar;flags:longint; pchangeable: boolean);
+{
+  filerec and textrec have both handle and mode as the first items so
+  they could use the same routine for opening/creating.
+  when (flags and $10)   the file will be append
+  when (flags and $100)  the file will be truncate/rewritten
+  when (flags and $1000) there is no check for close (needed for textfiles)
+}
+var
+  handle   : LongInt;
+  openflags: LongInt;
+  tmpStr   : array[0..255] of Char;
+begin
+  tmpStr:=PathConv(strpas(p))+#0;
+
+  { close first if opened }
+  if ((flags and $10000)=0) then begin
+    case filerec(f).mode of
+      fminput,fmoutput,fminout : Do_Close(filerec(f).handle);
+      fmclosed : ;
+      else begin
+        inoutres:=102; {not assigned}
+        exit;
+      end;
+    end;
+  end;
+
+  { reset file handle }
+  filerec(f).handle:=UnusedHandle;
+
+  { convert filemode to filerec modes }
+  { READ/WRITE on existing file }
+  { RESET/APPEND                }
+  openflags:=MODE_OLDFILE;
+  case (flags and 3) of
+    0 : filerec(f).mode:=fminput;
+    1 : filerec(f).mode:=fmoutput;
+    2 : filerec(f).mode:=fminout;
+  end;
+
+  { rewrite (create a new file) }
+  if (flags and $1000)<>0 then openflags:=MODE_NEWFILE;
+
+  { empty name is special }
+  if p[0]=#0 then begin
+    case filerec(f).mode of
+      fminput :
+        filerec(f).handle:=StdInputHandle;
+      fmappend,
+      fmoutput : begin
+        filerec(f).handle:=StdOutputHandle;
+        filerec(f).mode:=fmoutput; {fool fmappend}
+      end;
+    end;
+    exit;
+  end;
+
+  handle:=Open(@tmpStr,openflags);
+  if handle=0 then begin
+    dosError2InOut(IoErr);
+  end else begin
+    AddToList(AOS_fileList,handle);
+    filerec(f).handle:=handle;
+  end;
+
+  { append mode }
+  if ((Flags and $100)<>0) and
+      (FileRec(F).Handle<>UnusedHandle) then begin
+    do_seekend(filerec(f).handle);
+    filerec(f).mode:=fmoutput; {fool fmappend}
+  end;
+end;
+
+function do_isdevice(handle: longint): boolean;
+begin
+  if (handle=StdOutputHandle) or (handle=StdInputHandle) or
+     (handle=StdErrorHandle) then
+    do_isdevice:=True
+  else
+    do_isdevice:=False;
+end;

+ 51 - 0
rtl/aros/sysheap.inc

@@ -0,0 +1,51 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2005 by Free Pascal development team
+
+    Low level memory functions
+
+    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.
+
+ **********************************************************************}
+
+{ Enable this for memory allocation debugging }
+{DEFINE MOSFPC_MEMDEBUG}
+
+{*****************************************************************************
+      OS Memory allocation / deallocation
+ ****************************************************************************}
+
+function SysOSAlloc(size: ptruint): pointer;
+{$IFDEF MOSFPC_MEMDEBUG}
+var values: array[0..2] of dword;
+{$ENDIF}
+begin
+  result:=AllocPooled(AOS_heapPool,size);
+{$IFDEF MOSFPC_MEMDEBUG}
+  values[0]:=dword(result);
+  values[1]:=dword(size);
+  values[2]:=DWord(Sptr-StackBottom);
+  RawDoFmt('FPC_MEM_DEBUG: $%lx:=SysOSAlloc(%ld), free stack: %ld bytes'+#10,@values,pointer(1),nil);
+{$ENDIF}
+end;
+
+{$define HAS_SYSOSFREE}
+
+procedure SysOSFree(p: pointer; size: ptruint);
+{$IFDEF MOSFPC_MEMDEBUG}
+var values: array[0..2] of dword;
+{$ENDIF}
+begin
+  FreePooled(AOS_heapPool,p,size);
+{$IFDEF MOSFPC_MEMDEBUG}
+  values[0]:=dword(p);
+  values[1]:=dword(size);
+  values[2]:=DWord(Sptr-StackBottom);
+  RawDoFmt('FPC_MEM_DEBUG: SysOSFree($%lx,%ld), free stack: %ld bytes'+#10,@values,pointer(1),nil);
+{$ENDIF}
+end;

+ 178 - 0
rtl/aros/sysos.inc

@@ -0,0 +1,178 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2001 by Free Pascal development team
+
+    This file implements all the base types and limits required
+    for a minimal POSIX compliant subset required to port the compiler
+    to a new OS.
+
+    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.
+
+ **********************************************************************}
+
+{*****************************************************************************
+                           AmigaOS structures
+*****************************************************************************}
+
+{$include execd.inc}
+{$include timerd.inc}
+{$include doslibd.inc}
+
+
+{*****************************************************************************
+                           AmigaOS functions
+*****************************************************************************}
+
+{ exec.library functions }
+
+{$include execf.inc}
+{$include doslibf.inc}
+{$IFDEF AMIGAOS4}
+  // Required to allow opening of utility library interface...
+  {$include utilf.inc}
+{$ENDIF}
+
+
+{*****************************************************************************
+                    System Dependent Structures/Consts
+*****************************************************************************}
+
+
+const
+  CTRL_C           = 20;      { Error code on CTRL-C press }
+
+{ Used for CTRL_C checking in I/O calls }
+procedure checkCTRLC;
+begin
+  if BreakOn then begin
+    if (SetSignal(0,0) And SIGBREAKF_CTRL_C)<>0 then begin
+      { Clear CTRL-C signal }
+      SetSignal(0,SIGBREAKF_CTRL_C);
+      Halt(CTRL_C);
+    end;
+  end;
+end;
+
+
+{ Converts a AmigaOS dos.library error code to a TP compatible error code }
+{ Based on 1.0.x Amiga RTL }
+procedure dosError2InOut(errno: LongInt);
+begin
+  case errno of
+    ERROR_BAD_NUMBER,
+    ERROR_ACTION_NOT_KNOWN,
+    ERROR_NOT_IMPLEMENTED : InOutRes := 1;
+
+    ERROR_OBJECT_NOT_FOUND : InOutRes := 2;
+    ERROR_DIR_NOT_FOUND :  InOutRes := 3;
+    ERROR_DISK_WRITE_PROTECTED : InOutRes := 150;
+    ERROR_OBJECT_WRONG_TYPE : InOutRes := 151;
+
+    ERROR_OBJECT_EXISTS,
+    ERROR_DELETE_PROTECTED,
+    ERROR_WRITE_PROTECTED,
+    ERROR_READ_PROTECTED,
+    ERROR_OBJECT_IN_USE,
+    ERROR_DIRECTORY_NOT_EMPTY : InOutRes := 5;
+
+    ERROR_NO_MORE_ENTRIES : InOutRes := 18;
+    ERROR_RENAME_ACROSS_DEVICES : InOutRes := 17;
+    ERROR_DISK_FULL : InOutRes := 101;
+    ERROR_INVALID_RESIDENT_LIBRARY : InoutRes := 153;
+    ERROR_BAD_HUNK : InOutRes := 153;
+    ERROR_NOT_A_DOS_DISK : InOutRes := 157;
+
+    ERROR_NO_DISK,
+    ERROR_DISK_NOT_VALIDATED,
+    ERROR_DEVICE_NOT_MOUNTED : InOutRes := 152;
+
+    ERROR_SEEK_ERROR : InOutRes := 156;
+
+    ERROR_LOCK_COLLISION,
+    ERROR_LOCK_TIMEOUT,
+    ERROR_UNLOCK_ERROR,
+    ERROR_INVALID_LOCK,
+    ERROR_INVALID_COMPONENT_NAME,
+    ERROR_BAD_STREAM_NAME,
+    ERROR_FILE_NOT_OBJECT : InOutRes := 6;
+   else
+    InOutRes := errno;
+  end;
+end;
+
+
+{ Converts an Unix-like path to Amiga-like path }
+function PathConv(path: string): string; alias: 'PATHCONV'; [public];
+var tmppos: longint;
+begin
+  { check for short paths }
+  if length(path)<=2 then begin
+    if (path='.') or (path='./') then path:='' else
+    if path='..' then path:='/' else
+    if path='*' then path:='#?';
+  end else begin
+    { convert parent directories }
+    tmppos:=pos('../',path);
+    while tmppos<>0 do begin
+      { delete .. to have / as parent dir sign }
+      delete(path,tmppos,2);
+      tmppos:=pos('../',path);
+    end;
+    { convert current directories }
+    tmppos:=pos('./',path);
+    while tmppos<>0 do begin
+      { delete ./ since we doesn't need to sign current directory }
+      delete(path,tmppos,2);
+      tmppos:=pos('./',path);
+    end;
+    { convert wildstar to #? }
+    tmppos:=pos('*',path);
+    while tmppos<>0 do begin
+      delete(path,tmppos,1);
+      insert('#?',path,tmppos);
+      tmppos:=pos('*',path);
+    end;
+  end;
+  PathConv:=path;
+end;
+
+{ Converts an Unix-like path to Amiga-like path }
+function PathConv(const path: rawbytestring): rawbytestring; alias: 'PATHCONVRBS'; [public];
+var tmppos: longint;
+begin
+  { check for short paths }
+  if length(path)<=2 then begin
+    if (path='.') or (path='./') then PathConv:='' else
+    if path='..' then PathConv:='/' else
+    if path='*' then PathConv:='#?'
+    else PathConv:=path;
+  end else begin
+    { convert parent directories }
+    PathConv:=path;
+    tmppos:=pos('../',PathConv);
+    while tmppos<>0 do begin
+      { delete .. to have / as parent dir sign }
+      delete(PathConv,tmppos,2);
+      tmppos:=pos('../',PathConv);
+    end;
+    { convert current directories }
+    tmppos:=pos('./',PathConv);
+    while tmppos<>0 do begin
+      { delete ./ since we doesn't need to sign current directory }
+      delete(PathConv,tmppos,2);
+      tmppos:=pos('./',PathConv);
+    end;
+    { convert wildstar to #? }
+    tmppos:=pos('*',PathConv);
+    while tmppos<>0 do begin
+      delete(PathConv,tmppos,1);
+      insert('#?',PathConv,tmppos);
+      tmppos:=pos('*',PathConv);
+    end;
+  end;
+end;

+ 31 - 0
rtl/aros/sysosh.inc

@@ -0,0 +1,31 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2001 by Free Pascal development team
+
+    This file implements all the base types and limits required
+    for a minimal POSIX compliant subset required to port the compiler
+    to a new OS.
+
+    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.
+
+ **********************************************************************}
+
+{Platform specific information}
+type
+{$ifdef CPU64}
+  THandle = Int64;
+{$else CPU64}
+  THandle = LongInt;
+{$endif CPU64}
+  TThreadID = THandle;
+  
+  PRTLCriticalSection = ^TRTLCriticalSection;
+  TRTLCriticalSection = Pointer;
+
+
+

+ 469 - 0
rtl/aros/system.pp

@@ -0,0 +1,469 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2004-2006 by Karoly Balogh
+    
+    AROS conversation
+    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}
+
+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;
+  
+
+  AOS_heapPool : Pointer; { pointer for the OS pool for growing the heap }
+  AOS_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;
+
+  AOS_ThreadBase: Pointer;
+
+  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}
+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
+  a: LongInt;
+begin
+  if Killed then
+    Exit;
+  Killed := True;
+  { Closing opened files }
+  CloseList(AOS_fileList);
+  //
+  if AOS_wbMsg <> nil then
+    ReplyMsg(AOS_wbMsg);
+  { Changing back to original directory if changed }
+  if AOS_OrigDir <> 0 then begin
+    CurrentDir(AOS_origDir);
+  end;
+  if AOS_UtilityBase <> nil then
+    CloseLibrary(AOS_UtilityBase);
+  if AOS_heapPool <> nil then
+    DeletePool(AOS_heapPool);
+  AOS_UtilityBase := nil;
+  AOS_HeapPool := nil;
+  //
+  if AOS_DOSBase<>nil then
+    CloseLibrary(AOS_DOSBase);
+  AOS_DOSBase := nil;
+  if AOS_ThreadBase <> nil then
+    CloseLibrary(AOS_ThreadBase);
+  AOS_ThreadBase := 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:='';
+  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);
+      s1[0]:=Char(counter-1);
+      GetProgDir:=s1;
+    end;
+  end;
+end;
+
+function GetProgramName: String;
+{ Returns ONLY the program name }
+var
+  s1     : String;
+  counter: Byte;
+begin
+  GetProgramName:='';
+  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);
+    s1[0]:=Char(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);
+  if AOS_ThreadBase = nil then
+    AOS_ThreadBase := OpenLibrary('thread.library', 0);
+    
+  { Creating the memory pool for growing heap }
+  AOS_heapPool := CreatePool(MEMF_ANY or MEMF_SEM_PROTECTED, growheapsize2, growheapsize1);
+  if AOS_heapPool = nil then
+    Halt(1);
+  
+  if AOS_wbMsg = nil then begin
+    StdInputHandle := THandle(dosInput);
+    StdOutputHandle := THandle(dosOutput);
+  end else begin
+    AOS_ConHandle := Open(AOS_ConName, MODE_OLDFILE);
+    if AOS_ConHandle <> 0 then begin
+      StdInputHandle := AOS_ConHandle;
+      StdOutputHandle := AOS_ConHandle;
+    end else
+      Halt(1);
+  end;
+end;
+
+
+procedure SysInitStdIO;
+begin
+  OpenStdIO(Input,fmInput,StdInputHandle);
+  OpenStdIO(Output,fmOutput,StdOutputHandle);
+  OpenStdIO(StdOut,fmOutput,StdOutputHandle);
+
+  { * AmigaOS doesn't have a separate stderr * }
+
+  StdErrorHandle:=StdOutputHandle;
+  //OpenStdIO(StdErr,fmOutput,StdErrorHandle);
+  //OpenStdIO(ErrOutput,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;
+  AOS_origDir := 0;
+  AOS_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;
+  initvariantmanager;
+end.

+ 759 - 0
rtl/aros/sysutils.pp

@@ -0,0 +1,759 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2004-2013 by Karoly Balogh
+
+    Sysutils unit for AmigaOS & clones
+
+    Based on Amiga 1.x version by Carl Eric Codere, and other
+    parts of the 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.
+
+ **********************************************************************}
+
+unit sysutils;
+
+interface
+
+{$MODE objfpc}
+{$MODESWITCH OUT}
+{ force ansistrings }
+{$H+}
+
+{$DEFINE OS_FILESETDATEBYNAME}
+{$DEFINE HAS_SLEEP}
+{$DEFINE HAS_OSERROR}
+
+{ used OS file system APIs use ansistring }
+{$define SYSUTILS_HAS_ANSISTR_FILEUTIL_IMPL}
+{ OS has an ansistring/single byte environment variable API }
+{$define SYSUTILS_HAS_ANSISTR_ENVVAR_IMPL}
+
+{ Include platform independent interface part }
+{$i sysutilh.inc}
+
+{ Platform dependent calls }
+
+Procedure AddDisk(const path:string);
+
+
+implementation
+
+uses dos,sysconst;
+
+{$DEFINE FPC_FEXPAND_VOLUMES} (* Full paths begin with drive specification *)
+{$DEFINE FPC_FEXPAND_DRIVESEP_IS_ROOT}
+{$DEFINE FPC_FEXPAND_NO_DEFAULT_PATHS}
+
+{ Include platform independent implementation part }
+{$i sysutils.inc}
+
+
+{ * Include MorphOS specific includes * }
+{$include execd.inc}
+{$include execf.inc}
+{$include timerd.inc}
+{$include doslibd.inc}
+{$include doslibf.inc}
+{$include utilf.inc}
+
+{ * Followings are implemented in the system unit! * }
+function PathConv(path: shortstring): shortstring; external name 'PATHCONV';
+function PathConv(path: RawByteString): RawByteString; external name 'PATHCONVRBS';
+procedure AddToList(var l: Pointer; h: LongInt); external name 'ADDTOLIST';
+function RemoveFromList(var l: Pointer; h: LongInt): boolean; external name 'REMOVEFROMLIST';
+function CheckInList(var l: Pointer; h: LongInt): pointer; external name 'CHECKINLIST';
+
+var
+  MOS_fileList: Pointer; external name 'AOS_FILELIST';
+
+
+function AmigaFileDateToDateTime(aDate: TDateStamp; out success: boolean): TDateTime;
+var
+  tmpSecs: DWord;
+  tmpDate: TDateTime;
+  tmpTime: TDateTime; 
+  clockData: TClockData;
+begin
+  with aDate do
+    tmpSecs:=(ds_Days * (24 * 60 * 60)) + (ds_Minute * 60) + (ds_Tick div TICKS_PER_SECOND);
+
+  Amiga2Date(tmpSecs,@clockData);
+{$HINT TODO: implement msec values, if possible}
+  with clockData do begin
+     success:=TryEncodeDate(year,month,mday,tmpDate) and
+              TryEncodeTime(hour,min,sec,0,tmpTime);
+  end;
+
+  result:=ComposeDateTime(tmpDate,tmpTime);
+end;
+
+function DateTimeToAmigaDateStamp(dateTime: TDateTime): TDateStamp;
+var
+  tmpSecs: DWord;
+  clockData: TClockData;
+  tmpMSec: Word;
+begin
+{$HINT TODO: implement msec values, if possible}
+  with clockData do begin
+     DecodeDate(dateTime,year,month,mday);
+     DecodeTime(dateTime,hour,min,sec,tmpMSec);
+  end;
+
+  tmpSecs:=Date2Amiga(@clockData);
+
+  with result do begin
+     ds_Days:= tmpSecs div (24 * 60 * 60);
+     ds_Minute:= (tmpSecs div 60) mod ds_Days;
+     ds_Tick:= (((tmpSecs mod 60) mod ds_Minute) mod ds_Days) * TICKS_PER_SECOND;
+  end;
+end;
+
+
+{****************************************************************************
+                              File Functions
+****************************************************************************}
+{$I-}{ Required for correct usage of these routines }
+
+
+(****** non portable routines ******)
+
+function FileOpen(const FileName: rawbytestring; Mode: Integer): LongInt;
+var
+  SystemFileName: RawByteString;
+  dosResult: LongInt;
+begin
+  SystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(FileName));
+  {$WARNING FIX ME! To do: FileOpen Access Modes}
+  dosResult:=Open(PChar(SystemFileName),MODE_OLDFILE);
+  if dosResult=0 then
+    dosResult:=-1
+  else
+    AddToList(MOS_fileList,dosResult);
+
+  FileOpen:=dosResult;
+end;
+
+
+function FileGetDate(Handle: LongInt) : LongInt;
+var
+  tmpFIB : PFileInfoBlock;
+  tmpDateTime: TDateTime;
+  validFile: boolean;
+begin
+  validFile:=false;
+
+  if (Handle <> 0) then begin
+    new(tmpFIB);
+    if ExamineFH(Pointer(Handle),tmpFIB) then begin
+      tmpDateTime:=AmigaFileDateToDateTime(tmpFIB^.fib_Date,validFile);
+    end;
+    dispose(tmpFIB);
+  end;
+
+  if validFile then
+    result:=DateTimeToFileDate(tmpDateTime)
+  else
+    result:=-1;
+end;
+
+
+function FileSetDate(Handle, Age: LongInt) : LongInt;
+var
+  tmpDateStamp: TDateStamp;
+  tmpName: array[0..255] of char;
+begin
+  result:=0;
+  if (Handle <> 0) then begin
+    if NameFromFH(Pointer(Handle), @tmpName, 256) then begin
+      tmpDateStamp:=DateTimeToAmigaDateStamp(FileDateToDateTime(Age));
+      if not SetFileDate(@tmpName,@tmpDateStamp) then begin
+        IoErr(); // dump the error code for now (TODO)
+        result:=-1;
+      end;
+    end;
+  end;
+end;
+
+
+function FileSetDate(const FileName: RawByteString; Age: LongInt) : LongInt;
+var
+  tmpDateStamp: TDateStamp;
+  SystemFileName: RawByteString;
+begin
+  result:=0;
+  SystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(FileName));
+  tmpDateStamp:=DateTimeToAmigaDateStamp(FileDateToDateTime(Age));
+  if not SetFileDate(PChar(SystemFileName),@tmpDateStamp) then begin
+    IoErr(); // dump the error code for now (TODO)
+    result:=-1;
+  end;
+end;
+
+
+function FileCreate(const FileName: RawByteString) : LongInt;
+var
+  SystemFileName: RawByteString;
+  dosResult: LongInt;
+begin
+  dosResult:=-1;
+
+  { Open file in MODDE_READWRITE, then truncate it by hand rather than
+    opening it in MODE_NEWFILE, because that returns an exclusive lock 
+    so some operations might fail with it (KB) }
+  SystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(FileName));
+  dosResult:=Open(PChar(SystemFileName),MODE_READWRITE);
+  if dosResult = 0 then exit;
+
+  if SetFileSize(dosResult, 0, OFFSET_BEGINNING) = 0 then 
+    AddToList(MOS_fileList,dosResult)
+  else begin
+    dosClose(dosResult);
+    dosResult:=-1;
+  end;
+
+  FileCreate:=dosResult;
+end;
+
+function FileCreate(const FileName: RawByteString; Rights: integer): LongInt;
+begin
+  {$WARNING FIX ME! To do: FileCreate Access Modes}
+  FileCreate:=FileCreate(FileName);
+end;
+
+function FileCreate(const FileName: RawByteString; ShareMode: integer; Rights : integer): LongInt;
+begin
+  {$WARNING FIX ME! To do: FileCreate Access Modes}
+  FileCreate:=FileCreate(FileName);
+end;
+
+
+function FileRead(Handle: LongInt; out Buffer; Count: LongInt): LongInt;
+begin
+  FileRead:=-1;
+  if (Count<=0) or (Handle<=0) then exit;
+
+  FileRead:=dosRead(Handle,@Buffer,Count);
+end;
+
+
+function FileWrite(Handle: LongInt; const Buffer; Count: LongInt): LongInt;
+begin
+  FileWrite:=-1;
+  if (Count<=0) or (Handle<=0) then exit;
+
+  FileWrite:=dosWrite(Handle,@Buffer,Count);
+end;
+
+
+function FileSeek(Handle, FOffset, Origin: LongInt) : LongInt;
+var
+  seekMode: LongInt;
+begin
+  FileSeek:=-1;
+  if (Handle<=0) then exit;
+
+  case Origin of
+    fsFromBeginning: seekMode:=OFFSET_BEGINNING;
+    fsFromCurrent  : seekMode:=OFFSET_CURRENT;
+    fsFromEnd      : seekMode:=OFFSET_END;
+  end;
+
+  FileSeek:=dosSeek(Handle, FOffset, seekMode);
+end;
+
+function FileSeek(Handle: LongInt; FOffset: Int64; Origin: Longint): Int64;
+begin
+  {$WARNING Need to add 64bit call }
+  FileSeek:=FileSeek(Handle,LongInt(FOffset),LongInt(Origin));
+end;
+
+
+procedure FileClose(Handle: LongInt);
+begin
+  if (Handle<=0) then exit;
+
+  dosClose(Handle);
+  RemoveFromList(MOS_fileList,Handle);
+end;
+
+
+function FileTruncate(Handle: THandle; Size: Int64): Boolean;
+var
+  dosResult: LongInt;
+begin
+  FileTruncate:=False;
+  
+  if Size > high (longint) then exit;
+{$WARNING Possible support for 64-bit FS to be checked!}
+
+  if (Handle<=0) then exit;
+
+  dosResult:=SetFileSize(Handle, Size, OFFSET_BEGINNING);
+  if (dosResult<0) then exit;
+
+  FileTruncate:=True;
+end;
+
+
+function DeleteFile(const FileName: RawByteString) : Boolean;
+var
+  SystemFileName: RawByteString;
+begin
+  SystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(FileName));
+  DeleteFile:=dosDeleteFile(PChar(SystemFileName));
+end;
+
+
+function RenameFile(const OldName, NewName: RawByteString): Boolean;
+var
+  OldSystemFileName, NewSystemFileName: RawByteString;
+begin
+  OldSystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(OldName));
+  NewSystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(NewName));
+  RenameFile:=dosRename(PChar(OldSystemFileName), PChar(NewSystemFileName)) <> 0;
+end;
+
+
+(****** end of non portable routines ******)
+
+
+function FileAge (const FileName : RawByteString): Longint;
+var
+  tmpLock: Longint;
+  tmpFIB : PFileInfoBlock;
+  tmpDateTime: TDateTime;
+  validFile: boolean;
+  SystemFileName: RawByteString;
+begin
+  validFile:=false;
+  SystemFileName := PathConv(ToSingleByteFileSystemEncodedFileName(FileName));
+  tmpLock := Lock(PChar(SystemFileName), SHARED_LOCK);
+
+  if (tmpLock <> 0) then begin
+    new(tmpFIB);
+    if Examine(tmpLock,tmpFIB) <> 0 then begin
+      tmpDateTime:=AmigaFileDateToDateTime(tmpFIB^.fib_Date,validFile);
+    end;
+    Unlock(tmpLock);
+    dispose(tmpFIB);
+  end;
+
+  if validFile then
+    result:=DateTimeToFileDate(tmpDateTime)
+  else
+    result:=-1;
+end;
+
+
+function FileExists (const FileName : RawByteString) : Boolean;
+var
+  tmpLock: LongInt;
+  tmpFIB : PFileInfoBlock;
+  SystemFileName: RawByteString;
+begin
+  result:=false;
+  SystemFileName := PathConv(ToSingleByteFileSystemEncodedFileName(FileName));
+  tmpLock := Lock(PChar(SystemFileName), SHARED_LOCK);
+
+  if (tmpLock <> 0) then begin
+    new(tmpFIB);
+    if (Examine(tmpLock,tmpFIB) <> 0) and (tmpFIB^.fib_DirEntryType <= 0) then
+      result:=true;
+    Unlock(tmpLock);
+    dispose(tmpFIB);
+  end;
+end;
+
+
+Function InternalFindFirst (Const Path : RawByteString; Attr : Longint; out Rslt : TAbstractSearchRec; var Name: RawByteString) : Longint;
+var
+  tmpStr: RawByteString;
+  Anchor: PAnchorPath;
+  tmpDateTime: TDateTime;
+  validDate: boolean;
+begin
+  result:=-1; { We emulate Linux/Unix behaviour, and return -1 on errors. }
+
+  tmpStr:=PathConv(ToSingleByteFileSystemEncodedFileName(Path));
+
+  { $1e = faHidden or faSysFile or faVolumeID or faDirectory }
+  Rslt.ExcludeAttr := (not Attr) and ($1e);
+  Rslt.FindHandle  := 0;
+
+  new(Anchor);
+  FillChar(Anchor^,sizeof(TAnchorPath),#0);
+
+  if MatchFirst(pchar(tmpStr),Anchor)<>0 then exit;
+  Rslt.FindHandle := longint(Anchor);
+
+  with Anchor^.ap_Info do begin
+    Name := fib_FileName;
+    SetCodePage(Name,DefaultFileSystemCodePage,false);
+
+    Rslt.Size := fib_Size;
+    Rslt.Time := DateTimeToFileDate(AmigaFileDateToDateTime(fib_Date,validDate));
+    if not validDate then exit;
+
+    { "128" is Windows "NORMALFILE" attribute. Some buggy code depend on this... :( (KB) }
+    Rslt.Attr := 128;
+
+    if fib_DirEntryType > 0 then Rslt.Attr:=Rslt.Attr or faDirectory;
+    if ((fib_Protection and FIBF_READ) <> 0) and
+       ((fib_Protection and FIBF_WRITE) = 0) then Rslt.Attr:=Rslt.Attr or faReadOnly;
+
+    result:=0; { Return zero if everything went OK }
+  end;
+end;
+
+
+Function InternalFindNext (var Rslt : TAbstractSearchRec; var Name : RawByteString) : Longint;
+var
+  Anchor: PAnchorPath;
+  validDate: boolean;
+begin
+  result:=-1;
+
+  Anchor:=PAnchorPath(Rslt.FindHandle);
+  if not assigned(Anchor) then exit;
+  if MatchNext(Anchor) <> 0 then exit;
+
+  with Anchor^.ap_Info do begin
+    Name := fib_FileName;
+    SetCodePage(Name,DefaultFileSystemCodePage,false);
+    Rslt.Size := fib_Size;
+    Rslt.Time := DateTimeToFileDate(AmigaFileDateToDateTime(fib_Date,validDate));
+    if not validDate then exit;
+
+    { "128" is Windows "NORMALFILE" attribute. Some buggy code depend on this... :( (KB) }
+    Rslt.Attr := 128;
+    if fib_DirEntryType > 0 then Rslt.Attr:=Rslt.Attr or faDirectory;
+    if ((fib_Protection and FIBF_READ) <> 0) and
+       ((fib_Protection and FIBF_WRITE) = 0) then Rslt.Attr:=Rslt.Attr or faReadOnly;
+
+    result:=0; { Return zero if everything went OK }
+  end;
+end;
+
+
+Procedure InternalFindClose(var Handle: THandle);
+var
+  Anchor: PAnchorPath;
+begin
+  Anchor:=PAnchorPath(Handle);
+  if not assigned(Anchor) then exit;
+  MatchEnd(Anchor);
+  Dispose(Anchor);
+  Handle:=THandle(nil);
+end;
+
+
+(****** end of non portable routines ******)
+
+Function FileGetAttr (Const FileName : RawByteString) : Longint;
+var
+ F: file;
+ attr: word;
+begin
+ Assign(F,FileName);
+ dos.GetFAttr(F,attr);
+ if DosError <> 0 then
+    FileGetAttr := -1
+ else
+    FileGetAttr := Attr;
+end;
+
+
+Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint;
+var
+ F: file;
+begin
+ Assign(F, FileName);
+ Dos.SetFAttr(F, Attr and $ffff);
+ FileSetAttr := DosError;
+end;
+
+
+
+{****************************************************************************
+                              Disk Functions
+****************************************************************************}
+
+{
+  The Diskfree and Disksize functions need a file on the specified drive, since this
+  is required for the statfs system call.
+  These filenames are set in drivestr[0..26], and have been preset to :
+   0 - '.'      (default drive - hence current dir is ok.)
+   1 - '/fd0/.'  (floppy drive 1 - should be adapted to local system )
+   2 - '/fd1/.'  (floppy drive 2 - should be adapted to local system )
+   3 - '/'       (C: equivalent of dos is the root partition)
+   4..26          (can be set by you're own applications)
+  ! Use AddDisk() to Add new drives !
+  They both return -1 when a failure occurs.
+}
+Const
+  FixDriveStr : array[0..3] of pchar=(
+    '.',
+    '/fd0/.',
+    '/fd1/.',
+    '/.'
+    );
+var
+  Drives   : byte;
+  DriveStr : array[4..26] of pchar;
+
+Procedure AddDisk(const path:string);
+begin
+  if not (DriveStr[Drives]=nil) then
+   FreeMem(DriveStr[Drives],StrLen(DriveStr[Drives])+1);
+  GetMem(DriveStr[Drives],length(Path)+1);
+  StrPCopy(DriveStr[Drives],path);
+  inc(Drives);
+  if Drives>26 then
+   Drives:=4;
+end;
+
+
+
+Function DiskFree(Drive: Byte): int64;
+Begin
+  DiskFree := dos.diskFree(Drive);
+End;
+
+
+Function DiskSize(Drive: Byte): int64;
+Begin
+  DiskSize := dos.DiskSize(Drive);
+End;
+
+function DirectoryExists(const Directory: RawByteString): Boolean;
+var
+  tmpLock: LongInt;
+  FIB    : PFileInfoBlock;
+  SystemDirName: RawByteString;
+begin
+  result:=false;
+  if (Directory='') or (InOutRes<>0) then exit;
+
+  SystemDirName:=PathConv(ToSingleByteFileSystemEncodedFileName(Directory));
+  tmpLock:=Lock(PChar(SystemDirName),SHARED_LOCK);
+  if tmpLock=0 then exit;
+
+  FIB:=nil; new(FIB);
+
+  if (Examine(tmpLock,FIB) <> 0) and (FIB^.fib_DirEntryType>0) then
+    result:=True;
+
+  if tmpLock<>0 then Unlock(tmpLock);
+  if assigned(FIB) then dispose(FIB);
+end;
+
+
+
+{****************************************************************************
+                              Locale Functions
+****************************************************************************}
+
+Procedure GetLocalTime(var SystemTime: TSystemTime);
+var
+ dayOfWeek: word;
+begin
+  dos.GetTime(SystemTime.Hour, SystemTime.Minute, SystemTime.Second,SystemTime.Millisecond);
+  dos.GetDate(SystemTime.Year, SystemTime.Month, SystemTime.Day, DayOfWeek);
+end;
+
+
+Procedure InitAnsi;
+Var
+  i : longint;
+begin
+  {  Fill table entries 0 to 127  }
+  for i := 0 to 96 do
+    UpperCaseTable[i] := chr(i);
+  for i := 97 to 122 do
+    UpperCaseTable[i] := chr(i - 32);
+  for i := 123 to 191 do
+    UpperCaseTable[i] := chr(i);
+  Move (CPISO88591UCT,UpperCaseTable[192],SizeOf(CPISO88591UCT));
+
+  for i := 0 to 64 do
+    LowerCaseTable[i] := chr(i);
+  for i := 65 to 90 do
+    LowerCaseTable[i] := chr(i + 32);
+  for i := 91 to 191 do
+    LowerCaseTable[i] := chr(i);
+  Move (CPISO88591LCT,UpperCaseTable[192],SizeOf(CPISO88591UCT));
+end;
+
+
+Procedure InitInternational;
+begin
+  InitInternationalGeneric; 
+  InitAnsi;
+end;
+
+function SysErrorMessage(ErrorCode: Integer): String;
+
+begin
+{  Result:=StrError(ErrorCode);}
+end;
+
+function GetLastOSError: Integer;
+begin
+    result:=-1;
+end;
+
+{****************************************************************************
+                              OS utility functions
+****************************************************************************}
+
+var
+  StrOfPaths: String;
+
+function GetPathString: String;
+var
+   f : text;
+   s : string;
+   tmpBat: string;
+   tmpList: string;
+begin
+   s := '';
+   result := '';
+
+   tmpBat:='T:'+HexStr(FindTask(nil));
+   tmpList:=tmpBat+'_path.tmp';
+   tmpBat:=tmpBat+'_path.sh';
+
+   assign(f,tmpBat);
+   rewrite(f);
+   writeln(f,'path >'+tmpList);
+   close(f);
+   exec('C:Execute',tmpBat);
+   erase(f);
+
+   assign(f,tmpList);
+   reset(f);
+   { skip the first line, garbage }
+   if not eof(f) then readln(f,s);
+   while not eof(f) do begin
+      readln(f,s);
+      if result = '' then
+        result := s
+      else 
+        result := result + ';' + s;
+   end;
+   close(f);
+   erase(f);
+end;
+
+Function GetEnvironmentVariable(Const EnvVar : String) : String;
+begin
+  if UpCase(envvar) = 'PATH' then begin
+    if StrOfpaths = '' then StrOfPaths := GetPathString;
+    Result:=StrOfPaths;
+  end else
+    Result:=Dos.Getenv(shortstring(EnvVar));
+end;
+
+Function GetEnvironmentVariableCount : Integer;
+
+begin
+  // Result:=FPCCountEnvVar(EnvP);
+  Result:=Dos.envCount;
+end;
+
+Function GetEnvironmentString(Index : Integer) : {$ifdef FPC_RTL_UNICODE}UnicodeString{$else}AnsiString{$endif};
+
+begin
+  // Result:=FPCGetEnvStrFromP(Envp,Index);
+  Result:=Dos.EnvStr(Index);
+end;
+
+function ExecuteProcess (const Path: AnsiString; const ComLine: AnsiString;Flags:TExecuteFlags=[]):
+                                                                       integer;
+var
+  tmpPath: AnsiString;
+  convPath: AnsiString;
+  CommandLine: AnsiString;
+  tmpLock: longint;
+
+  E: EOSError;
+begin
+  DosError:= 0;
+  
+  convPath:=PathConv(Path);
+  tmpPath:=convPath+' '+ComLine;
+  
+  { Here we must first check if the command we wish to execute }
+  { actually exists, because this is NOT handled by the        }
+  { _SystemTagList call (program will abort!!)                 }
+
+  { Try to open with shared lock }
+  tmpLock:=Lock(PChar(convPath),SHARED_LOCK);
+  if tmpLock<>0 then
+    begin
+      { File exists - therefore unlock it }
+      Unlock(tmpLock);
+      result:=SystemTagList(PChar(tmpPath),nil);
+      { on return of -1 the shell could not be executed }
+      { probably because there was not enough memory    }
+      if result = -1 then
+        DosError:=8;
+    end
+  else
+    DosError:=3;
+  
+  if DosError <> 0 then begin
+    if ComLine = '' then
+      CommandLine := Path
+    else
+      CommandLine := Path + ' ' + ComLine;
+    
+    E := EOSError.CreateFmt (SExecuteProcessFailed, [CommandLine, DosError]);
+    E.ErrorCode := DosError;
+    raise E;
+  end;
+end;
+
+function ExecuteProcess (const Path: AnsiString;
+                                  const ComLine: array of AnsiString;Flags:TExecuteFlags=[]): integer;
+var
+  CommandLine: AnsiString;
+  I: integer;
+
+begin
+  Commandline := '';
+  for I := 0 to High (ComLine) do
+   if Pos (' ', ComLine [I]) <> 0 then
+    CommandLine := CommandLine + ' ' + '"' + ComLine [I] + '"'
+   else
+    CommandLine := CommandLine + ' ' + Comline [I];
+  ExecuteProcess := ExecuteProcess (Path, CommandLine);
+end;
+
+procedure Sleep(Milliseconds: cardinal);
+begin
+  // Amiga dos.library Delay() has precision of 1/50 seconds
+  Delay(Milliseconds div 20);
+end;
+
+
+{****************************************************************************
+                              Initialization code
+****************************************************************************}
+
+Initialization
+  InitExceptions;
+  InitInternational;    { Initialize internationalization settings }
+  OnBeep:=Nil;          { No SysBeep() on Amiga, for now. Figure out if we want 
+                          to use intuition.library/DisplayBeep() for this (KB) }
+  StrOfPaths:='';
+
+Finalization
+  DoneExceptions;
+end.

+ 67 - 0
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);
+
+
+

+ 157 - 0
rtl/aros/tthread.inc

@@ -0,0 +1,157 @@
+{
+    This file is part of the Free Component Library (FCL)
+    Copyright (c) 1999-2002 by the Free Pascal development team
+
+    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.
+
+ **********************************************************************}
+
+{****************************************************************************}
+{*                             TThread                                      *}
+{****************************************************************************}
+
+{$WARNING This file is only a stub, and will not work!}
+
+const
+ ThreadCount: longint = 0;
+
+(* Implementation of exported functions *)
+
+procedure AddThread (T: TThread);
+begin
+ Inc (ThreadCount);
+end;
+
+
+procedure RemoveThread (T: TThread);
+begin
+ Dec (ThreadCount);
+end;
+
+
+procedure TThread.CallOnTerminate;
+begin
+ FOnTerminate (Self);
+end;
+
+
+function TThread.GetPriority: TThreadPriority;
+var
+{ PTIB: PThreadInfoBlock;
+ PPIB: PProcessInfoBlock;}
+ I: TThreadPriority;
+begin
+{
+ DosGetInfoBlocks (@PTIB, @PPIB);
+ with PTIB^.TIB2^ do
+  if Priority >= $300 then GetPriority := tpTimeCritical else
+      if Priority < $200 then GetPriority := tpIdle else
+  begin
+   I := Succ (Low (TThreadPriority));
+   while (I < High (TThreadPriority)) and
+    (Priority - Priorities [I] <= Priorities [Succ (I)] - Priority) do Inc (I);
+   GetPriority := I;
+  end;
+}
+end;
+
+
+procedure TThread.SetPriority(Value: TThreadPriority);
+{var
+ PTIB: PThreadInfoBlock;
+ PPIB: PProcessInfoBlock;}
+begin
+{ DosGetInfoBlocks (@PTIB, @PPIB);}
+(*
+ PTIB^.TIB2^.Priority := Priorities [Value];
+*)
+{
+ DosSetPriority (2, High (Priorities [Value]),
+                     Low (Priorities [Value]) - PTIB^.TIB2^.Priority, FHandle);}
+end;
+
+
+procedure TThread.SetSuspended(Value: Boolean);
+begin
+ if Value <> FSuspended then
+ begin
+  if Value then Suspend else Resume;
+ end;
+end;
+
+
+procedure TThread.DoTerminate;
+begin
+ if Assigned (FOnTerminate) then Synchronize (@CallOnTerminate);
+end;
+
+
+procedure TThread.SysCreate(CreateSuspended: Boolean;
+                            const StackSize: SizeUInt);
+var
+  Flags: cardinal;
+begin
+  AddThread (Self);
+{
+  FSuspended := CreateSuspended;
+  Flags := dtStack_Commited;
+  if FSuspended then Flags := Flags or dtSuspended;
+  if DosCreateThread (cardinal (FThreadID), @ThreadProc, pointer (Self),
+                                                        Flags, 16384) <> 0 then
+  begin
+   FFinished := true;
+   Destroy;
+  end else FHandle := FThreadID;
+  IsMultiThread := true;
+  FFatalException := nil;
+}
+end;
+
+
+procedure TThread.SysDestroy;
+begin
+ if not FFinished and not Suspended then
+ begin
+  Terminate;
+  WaitFor;
+ end;
+{
+ if FHandle <> -1 then DosKillThread (cardinal (FHandle));
+ FFatalException.Free;
+ FFatalException := nil;
+ inherited Destroy;
+ RemoveThread (Self);
+}
+end;
+
+procedure TThread.Resume;
+begin
+{ FSuspended := not (DosResumeThread (cardinal (FHandle)) = 0);}
+end;
+
+
+procedure TThread.Suspend;
+begin
+{ FSuspended := DosSuspendThread (cardinal (FHandle)) = 0;}
+end;
+
+
+procedure TThread.Terminate;
+begin
+ FTerminated := true;
+end;
+
+
+function TThread.WaitFor: Integer;
+var
+ FH: cardinal;
+begin
+{ WaitFor := DosWaitThread (FH, dtWait);}
+end;
+
+