Browse Source

MorphOS: migrated the RTL to use the common Amiga code. still needs cleanup, but works as a first

git-svn-id: trunk@28511 -
Károly Balogh 11 years ago
parent
commit
2bbf991365

+ 0 - 8
.gitattributes

@@ -8570,10 +8570,8 @@ rtl/morphos/Makefile.fpc svneol=native#text/plain
 rtl/morphos/aboxlib.pas -text svneol=unset#text/plain
 rtl/morphos/ahi.pas svneol=native#text/plain
 rtl/morphos/asl.pas svneol=native#text/plain
-rtl/morphos/classes.pp svneol=native#text/plain
 rtl/morphos/clipboard.pas svneol=native#text/plain
 rtl/morphos/datatypes.pas -text svneol=unset#text/plain
-rtl/morphos/dos.pp svneol=native#text/plain
 rtl/morphos/doslib.pp svneol=native#text/plain
 rtl/morphos/doslibd.inc svneol=native#text/plain
 rtl/morphos/doslibf.inc svneol=native#text/plain
@@ -8592,14 +8590,8 @@ rtl/morphos/layers.pas svneol=native#text/plain
 rtl/morphos/mui.pas -text svneol=unset#text/plain
 rtl/morphos/muihelper.pas -text svneol=unset#text/plain
 rtl/morphos/prt0.as svneol=native#text/plain
-rtl/morphos/rtldefs.inc svneol=native#text/plain
-rtl/morphos/sysdir.inc svneol=native#text/plain
-rtl/morphos/sysfile.inc svneol=native#text/plain
-rtl/morphos/sysheap.inc svneol=native#text/plain
-rtl/morphos/sysos.inc svneol=native#text/plain
 rtl/morphos/sysosh.inc svneol=native#text/plain
 rtl/morphos/system.pp svneol=native#text/plain
-rtl/morphos/sysutils.pp svneol=native#text/plain
 rtl/morphos/timer.pp svneol=native#text/plain
 rtl/morphos/timerd.inc svneol=native#text/plain
 rtl/morphos/timerf.inc svneol=native#text/plain

+ 178 - 154
rtl/morphos/Makefile

@@ -1,8 +1,8 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-04-01 rev 27428]
+# 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 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
+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
@@ -333,6 +333,7 @@ RTL=..
 INC=$(RTL)/inc
 COMMON=$(RTL)/common
 PROCINC=$(RTL)/$(CPU_TARGET)
+AMIINC=$(RTL)/amicommon
 UNITPREFIX=rtl
 SYSTEMUNIT=system
 ifdef RELEASE
@@ -409,6 +410,9 @@ endif
 ifeq ($(FULL_TARGET),i386-android)
 override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings dos heaptrc ctypes sysutils classes fgl math typinfo charset cpall getopts types rtlconsts sysconst exec timer doslib utility hardware inputevent keymap graphics layers intuition aboxlib mui kvm clipboard datatypes asl ahi tinygl get9 muihelper
 endif
+ifeq ($(FULL_TARGET),i386-aros)
+override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings dos heaptrc ctypes sysutils classes fgl math typinfo charset cpall getopts types rtlconsts sysconst exec timer doslib utility hardware inputevent keymap graphics layers intuition aboxlib mui kvm clipboard datatypes asl ahi tinygl get9 muihelper
+endif
 ifeq ($(FULL_TARGET),m68k-linux)
 override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings dos heaptrc ctypes sysutils classes fgl math typinfo charset cpall getopts types rtlconsts sysconst exec timer doslib utility hardware inputevent keymap graphics layers intuition aboxlib mui kvm clipboard datatypes asl ahi tinygl get9 muihelper
 endif
@@ -634,6 +638,9 @@ 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
@@ -859,6 +866,9 @@ 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
@@ -1084,6 +1094,9 @@ 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
@@ -1242,454 +1255,460 @@ override TARGET_RSTS+=math rtlconsts typinfo classes sysconst
 endif
 override INSTALL_FPCPACKAGE=y
 ifeq ($(FULL_TARGET),i386-linux)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-iphonesim)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-android)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
+endif
+ifeq ($(FULL_TARGET),i386-aros)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),powerpc-wii)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),powerpc-aix)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),x86_64-netbsd)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),x86_64-openbsd)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),arm-gba)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),arm-android)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),powerpc64-aix)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),mips-linux)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),mipsel-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),mipsel-android)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),jvm-java)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),jvm-android)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i8086-msdos)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
+override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(AMIINC)
 endif
 ifeq ($(FULL_TARGET),i386-linux)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-iphonesim)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i386-android)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
+endif
+ifeq ($(FULL_TARGET),i386-aros)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),powerpc-wii)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),powerpc-aix)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),x86_64-netbsd)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),x86_64-openbsd)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),arm-gba)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),arm-android)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),powerpc64-aix)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),mips-linux)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),mipsel-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),mipsel-android)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),jvm-java)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),jvm-android)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifeq ($(FULL_TARGET),i8086-msdos)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
+override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 endif
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -1978,6 +1997,11 @@ EXEEXT=
 SHAREDLIBEXT=.library
 SHORTSUFFIX=amg
 endif
+ifeq ($(OS_TARGET),aros)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=aros
+endif
 ifeq ($(OS_TARGET),morphos)
 EXEEXT=
 SHAREDLIBEXT=.library
@@ -2897,10 +2921,10 @@ 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
+	$(COMPILER) -Fi$(OBJPASDIR)/sysutils $(AMIINC)/sysutils.pp
 classes$(PPUEXT) : classes.pp $(wildcard $(OBJPASDIR)/classes/*.inc) \
 		   sysutils$(PPUEXT) rtlconsts$(PPUEXT) typinfo$(PPUEXT) types$(PPUEXT) fgl$(PPUEXT)
-	$(COMPILER) -Fi$(OBJPASDIR)/classes classes.pp
+	$(COMPILER) -Fi$(OBJPASDIR)/classes $(AMIINC)/classes.pp
 fgl$(PPUEXT) : $(OBJPASDIR)/fgl.pp objpas$(PPUEXT) types$(PPUEXT) system$(PPUEXT) sysutils$(PPUEXT)
 	$(COMPILER) $(OBJPASDIR)/fgl.pp
 typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT)

+ 5 - 4
rtl/morphos/Makefile.fpc

@@ -38,8 +38,8 @@ target=morphos
 cpu=powerpc
 
 [compiler]
-includedir=$(INC) $(PROCINC)
-sourcedir=$(INC) $(PROCINC) $(COMMON)
+includedir=$(INC) $(PROCINC) $(AMIINC)
+sourcedir=$(INC) $(PROCINC) $(AMIINC) $(COMMON)
 
 
 [prerules]
@@ -47,6 +47,7 @@ RTL=..
 INC=$(RTL)/inc
 COMMON=$(RTL)/common
 PROCINC=$(RTL)/$(CPU_TARGET)
+AMIINC=$(RTL)/amicommon
 UNITPREFIX=rtl
 SYSTEMUNIT=system
 
@@ -121,11 +122,11 @@ dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
 
 sysutils$(PPUEXT) : sysutils.pp $(wildcard $(OBJPASDIR)/sysutils/*.inc) \
                     objpas$(PPUEXT) dos$(PPUEXT) sysconst$(PPUEXT)
-        $(COMPILER) -Fi$(OBJPASDIR)/sysutils sysutils.pp
+        $(COMPILER) -Fi$(OBJPASDIR)/sysutils $(AMIINC)/sysutils.pp
 
 classes$(PPUEXT) : classes.pp $(wildcard $(OBJPASDIR)/classes/*.inc) \
                    sysutils$(PPUEXT) rtlconsts$(PPUEXT) typinfo$(PPUEXT) types$(PPUEXT) fgl$(PPUEXT)
-        $(COMPILER) -Fi$(OBJPASDIR)/classes classes.pp
+        $(COMPILER) -Fi$(OBJPASDIR)/classes $(AMIINC)/classes.pp
 
 fgl$(PPUEXT) : $(OBJPASDIR)/fgl.pp objpas$(PPUEXT) types$(PPUEXT) system$(PPUEXT) sysutils$(PPUEXT)
         $(COMPILER) $(OBJPASDIR)/fgl.pp

+ 0 - 50
rtl/morphos/classes.pp

@@ -1,50 +0,0 @@
-{
-    This file is part of the Free Component Library (FCL)
-    Copyright (c) 1999-2002 by the Free Pascal development team
-
-    Classes unit for MorphOS
-
-    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.

+ 0 - 1016
rtl/morphos/dos.pp

@@ -1,1016 +0,0 @@
-{
-    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 : 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);
-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(MOS_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) 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) 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) 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 not SetProtection(p,flags) 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.

+ 5 - 5
rtl/morphos/doslibf.inc

@@ -51,7 +51,7 @@ function dosDeleteFile(fname: PChar location 'd1'): Boolean;
 SysCall MOS_DOSBase 72;
 
 function dosRename(oldName: PChar location 'd1';
-                   newName: PChar location 'd2'): Boolean;
+                   newName: PChar location 'd2'): LongInt;
 SysCall MOS_DOSBase 78;
 
 function Lock(lname     : PChar   location 'd1';
@@ -65,7 +65,7 @@ function DupLock(lock: LongInt location 'd1'): LongInt;
 SysCall MOS_DOSBase 096;
 
 function Examine(lock         : LongInt        location 'd1';
-                 fileInfoBlock: PFileInfoBlock location 'd2'): Boolean;
+                 fileInfoBlock: PFileInfoBlock location 'd2'): LongInt;
 SysCall MOS_DOSBase 102;
 
 function ExNext(lock         : LongInt        location 'd1';
@@ -73,7 +73,7 @@ function ExNext(lock         : LongInt        location 'd1';
 SysCall MOS_DOSBase 108;
 
 function Info(lock          : LongInt   location 'd1';
-              parameterBlock: PInfoData location 'd2'): Boolean;
+              parameterBlock: PInfoData location 'd2'): LongInt;
 SysCall MOS_DOSBase 114;
 
 function dosCreateDir(dname: PChar location 'd1'): LongInt;
@@ -108,7 +108,7 @@ function SetComment(name   : PChar location 'd1';
 SysCall MOS_DOSBase 180;
 
 function SetProtection(name: PChar   location 'd1';
-                       mask: LongInt location 'd2'): Boolean;
+                       mask: LongInt location 'd2'): LongInt;
 SysCall MOS_DOSBase 186;
 
 function DateStamp(date: PDateStamp location 'd1'): PDateStamp;
@@ -300,7 +300,7 @@ SysCall MOS_DOSBase 402;
 
 function NameFromFH(fh    : LongInt location 'd1';
                     buffer: PChar   location 'd2';
-                    len   : LongInt location 'd3'): LongInt;
+                    len   : LongInt location 'd3'): Boolean;
 SysCall MOS_DOSBase 408;
 
 function SplitName(name     : PChar    location 'd1';

+ 0 - 24
rtl/morphos/rtldefs.inc

@@ -1,24 +0,0 @@
-{
-    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}

+ 0 - 98
rtl/morphos/sysdir.inc

@@ -1,98 +0,0 @@
-{
-    This file is part of the Free Pascal run time library.
-    Copyright (c) 2006 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)=True) and (FIB^.fib_DirEntryType>0) then begin
-    tmpLock:=CurrentDir(tmpLock);
-    if MOS_OrigDir=0 then begin
-      MOS_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;

+ 0 - 395
rtl/morphos/sysfile.inc

@@ -1,395 +0,0 @@
-{
-    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
-  MOS_fileList: PFileList; public name 'MOS_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;
-  tmpList: PFileList;
-  
-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(MOS_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) 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(MOS_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(MOS_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(MOS_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(MOS_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(MOS_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(MOS_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(MOS_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(MOS_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;
-

+ 0 - 51
rtl/morphos/sysheap.inc

@@ -1,51 +0,0 @@
-{
-    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(MOS_heapPool,size);
-{$IFDEF MOSFPC_MEMDEBUG}
-  values[0]:=dword(result);
-  values[1]:=dword(size);
-  values[2]:=DWord(Sptr-StackBottom);
-  RawDoFmt('FPC_MEM_DEBUG: $%lx:=SysOSAlloc(%lu), 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(MOS_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,%lu), free stack: %ld bytes'+#10,@values,pointer(1),nil);
-{$ENDIF}
-end;

+ 0 - 176
rtl/morphos/sysos.inc

@@ -1,176 +0,0 @@
-{
-    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.
-
- **********************************************************************}
-
-{*****************************************************************************
-                           MorphOS structures
-*****************************************************************************}
-
-{$include execd.inc}
-{$include timerd.inc}
-{$include doslibd.inc}
-
-
-{*****************************************************************************
-                           MorphOS functions
-*****************************************************************************}
-
-{ exec.library functions }
-
-{$include execf.inc}
-{$include doslibf.inc}
-
-
-{*****************************************************************************
-                    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 MorphOS 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;
-
-

+ 12 - 11
rtl/morphos/system.pp

@@ -58,11 +58,12 @@ const
 
 var
   MOS_ExecBase   : Pointer; external name '_ExecBase';
-  MOS_DOSBase    : Pointer;
+  MOS_DOSBase    : Pointer; public name 'AOS_DOSBASE';
+  AOS_DOSBase    : Pointer; external name 'AOS_DOSBASE'; { common Amiga code compatibility kludge }
   MOS_UtilityBase: Pointer;
 
-  MOS_heapPool : Pointer; { pointer for the OS pool for growing the heap }
-  MOS_origDir  : LongInt; { original directory on startup }
+  AOS_heapPool : Pointer; { pointer for the OS pool for growing the heap }
+  AOS_origDir  : LongInt; { original directory on startup }
   MOS_ambMsg   : Pointer;
   MOS_ConName  : PChar ='CON:10/30/620/100/FPC Console Output/AUTO/CLOSE/WAIT';
   MOS_ConHandle: LongInt;
@@ -102,11 +103,11 @@ begin
   end;
 
   { Closing opened files }
-  CloseList(MOS_fileList);
+  CloseList(ASYS_fileList);
 
   { Changing back to original directory if changed }
-  if MOS_origDir<>0 then begin
-    CurrentDir(MOS_origDir);
+  if AOS_origDir<>0 then begin
+    CurrentDir(AOS_origDir);
   end;
 
   { Closing CON: when in Ambient mode }
@@ -114,7 +115,7 @@ begin
 
   if MOS_UtilityBase<>nil then CloseLibrary(MOS_UtilityBase);
   if MOS_DOSBase<>nil then CloseLibrary(MOS_DOSBase);
-  if MOS_heapPool<>nil then DeletePool(MOS_heapPool);
+  if AOS_heapPool<>nil then DeletePool(AOS_heapPool);
 
   { If in Ambient mode, replying WBMsg }
   if MOS_ambMsg<>nil then begin
@@ -357,8 +358,8 @@ begin
  if MOS_UtilityBase=nil then Halt(1);
 
  { Creating the memory pool for growing heap }
- MOS_heapPool:=CreatePool(MEMF_FAST,growheapsize2,growheapsize1);
- if MOS_heapPool=nil then Halt(1);
+ AOS_heapPool:=CreatePool(MEMF_FAST,growheapsize2,growheapsize1);
+ if AOS_heapPool=nil then Halt(1);
 
  if MOS_ambMsg=nil then begin
    MOS_ConHandle:=0;
@@ -404,8 +405,8 @@ begin
   StackBottom := Sptr - StackLength;
 { OS specific startup }
   MOS_ambMsg:=nil;
-  MOS_origDir:=0;
-  MOS_fileList:=nil;
+  AOS_origDir:=0;
+  ASYS_fileList:=nil;
   envp:=nil;
   SysInitMorphOS;
 { Set up signals handlers }

+ 0 - 759
rtl/morphos/sysutils.pp

@@ -1,759 +0,0 @@
-{
-    This file is part of the Free Pascal run time library.
-    Copyright (c) 2004-2013 by Karoly Balogh
-
-    Sysutils unit for MorphOS
-
-    Based on Amiga 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 'MOS_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(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(Handle, @tmpName, 256) = dosTrue) 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));
-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) 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) 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)=True) 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/MorphOS 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 MorphOS, for now. Figure out if we want 
-                          to use intuition.library/DisplayBeep() for this (KB) }
-  StrOfPaths:='';
-
-Finalization
-  DoneExceptions;
-end.