From 26d53cfa5565e8a64af6436a42216d538f1fc733 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A1roly=20Balogh?= Date: Thu, 21 Aug 2014 23:49:21 +0000 Subject: [PATCH] amicommon: Amiga/m68k RTL now uses the common code git-svn-id: trunk@28509 - --- .gitattributes | 9 - rtl/amicommon/sysutils.pp | 4 +- rtl/amiga/Makefile | 333 ++++++------ rtl/amiga/Makefile.fpc | 10 +- rtl/amiga/classes.pp | 50 -- rtl/amiga/dos.pp | 1016 ------------------------------------ rtl/amiga/m68k/doslibf.inc | 21 +- rtl/amiga/rtldefs.inc | 24 - rtl/amiga/sysdir.inc | 99 ---- rtl/amiga/sysfile.inc | 389 -------------- rtl/amiga/sysheap.inc | 51 -- rtl/amiga/sysos.inc | 178 ------- rtl/amiga/sysosh.inc | 33 -- rtl/amiga/system.pp | 13 +- rtl/amiga/sysutils.pp | 759 --------------------------- 15 files changed, 203 insertions(+), 2786 deletions(-) delete mode 100644 rtl/amiga/classes.pp delete mode 100644 rtl/amiga/dos.pp delete mode 100644 rtl/amiga/rtldefs.inc delete mode 100644 rtl/amiga/sysdir.inc delete mode 100644 rtl/amiga/sysfile.inc delete mode 100644 rtl/amiga/sysheap.inc delete mode 100644 rtl/amiga/sysos.inc delete mode 100644 rtl/amiga/sysosh.inc delete mode 100644 rtl/amiga/sysutils.pp diff --git a/.gitattributes b/.gitattributes index a5fdb8566e..d7a8c64ae1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7822,9 +7822,7 @@ rtl/amicommon/sysosh.inc svneol=native#text/plain rtl/amicommon/sysutils.pp svneol=native#text/plain rtl/amiga/Makefile svneol=native#text/plain rtl/amiga/Makefile.fpc svneol=native#text/plain -rtl/amiga/classes.pp svneol=native#text/plain rtl/amiga/crt.pp svneol=native#text/plain -rtl/amiga/dos.pp svneol=native#text/plain rtl/amiga/doslibd.inc svneol=native#text/plain rtl/amiga/m68k/doslibf.inc svneol=native#text/plain rtl/amiga/m68k/execd.inc svneol=native#text/plain @@ -7840,14 +7838,7 @@ rtl/amiga/powerpc/prt0.as svneol=native#text/plain rtl/amiga/powerpc/utild1.inc svneol=native#text/plain rtl/amiga/powerpc/utild2.inc svneol=native#text/plain rtl/amiga/powerpc/utilf.inc svneol=native#text/plain -rtl/amiga/rtldefs.inc svneol=native#text/plain -rtl/amiga/sysdir.inc svneol=native#text/plain -rtl/amiga/sysfile.inc svneol=native#text/plain -rtl/amiga/sysheap.inc svneol=native#text/plain -rtl/amiga/sysos.inc svneol=native#text/plain -rtl/amiga/sysosh.inc svneol=native#text/plain rtl/amiga/system.pp svneol=native#text/plain -rtl/amiga/sysutils.pp svneol=native#text/plain rtl/amiga/timerd.inc svneol=native#text/plain rtl/amiga/tthread.inc svneol=native#text/plain rtl/android/Makefile svneol=native#text/plain diff --git a/rtl/amicommon/sysutils.pp b/rtl/amicommon/sysutils.pp index ddf2470acc..7c3081ac98 100644 --- a/rtl/amicommon/sysutils.pp +++ b/rtl/amicommon/sysutils.pp @@ -153,7 +153,7 @@ begin if (Handle <> 0) then begin new(tmpFIB); - if ExamineFH(Pointer(Handle),tmpFIB) then begin + if ExamineFH(BPTR(Handle),tmpFIB) then begin tmpDateTime:=AmigaFileDateToDateTime(tmpFIB^.fib_Date,validFile); end; dispose(tmpFIB); @@ -173,7 +173,7 @@ var begin result:=0; if (Handle <> 0) then begin - if NameFromFH(Pointer(Handle), @tmpName, 256) then begin + if NameFromFH(BPTR(Handle), @tmpName, 256) then begin tmpDateStamp:=DateTimeToAmigaDateStamp(FileDateToDateTime(Age)); if not SetFileDate(@tmpName,@tmpDateStamp) then begin IoErr(); // dump the error code for now (TODO) diff --git a/rtl/amiga/Makefile b/rtl/amiga/Makefile index 92f323a4b9..aaa3a29701 100644 --- a/rtl/amiga/Makefile +++ b/rtl/amiga/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,13 +333,13 @@ RTL=.. INC=$(RTL)/inc COMMON=$(RTL)/common PROCINC=$(RTL)/$(CPU_TARGET) +AMIINC=$(RTL)/amicommon UNITPREFIX=rtl SYSTEMUNIT=system ifdef RELEASE override FPCOPT+=-Ur endif OBJPASDIR=$(RTL)/objpas -GRAPHDIR=$(INC)/graph ifeq ($(FULL_TARGET),i386-linux) override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst endif @@ -409,6 +409,9 @@ endif ifeq ($(FULL_TARGET),i386-android) override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst endif +ifeq ($(FULL_TARGET),i386-aros) +override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst +endif ifeq ($(FULL_TARGET),m68k-linux) override TARGET_UNITS+=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings dos heaptrc lineinfo ctypes sysutils fgl classes math typinfo charset cpall getopts types rtlconsts sysconst endif @@ -634,6 +637,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 +865,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 +1093,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 +1254,460 @@ override TARGET_RSTS+=math rtlconsts typinfo classes sysconst endif override INSTALL_FPCPACKAGE=y ifeq ($(FULL_TARGET),i386-linux) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-go32v2) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-win32) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-os2) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-freebsd) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-beos) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-haiku) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-netbsd) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-solaris) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-qnx) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-netware) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-openbsd) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-wdosx) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-darwin) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-emx) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-watcom) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-netwlibc) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-wince) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-embedded) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-symbian) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-nativent) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-iphonesim) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-android) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +endif +ifeq ($(FULL_TARGET),i386-aros) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),m68k-linux) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),m68k-freebsd) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),m68k-netbsd) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),m68k-amiga) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),m68k-atari) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),m68k-openbsd) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),m68k-palmos) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),m68k-embedded) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),powerpc-linux) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),powerpc-netbsd) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),powerpc-amiga) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),powerpc-macos) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),powerpc-darwin) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),powerpc-morphos) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),powerpc-embedded) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),powerpc-wii) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),powerpc-aix) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),sparc-linux) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),sparc-netbsd) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),sparc-solaris) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),sparc-embedded) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),x86_64-linux) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),x86_64-freebsd) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),x86_64-netbsd) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),x86_64-solaris) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),x86_64-openbsd) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),x86_64-darwin) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),x86_64-win64) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),x86_64-embedded) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),arm-linux) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),arm-palmos) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),arm-darwin) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),arm-wince) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),arm-gba) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),arm-nds) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),arm-embedded) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),arm-symbian) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),arm-android) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),powerpc64-linux) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),powerpc64-darwin) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),powerpc64-embedded) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),powerpc64-aix) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),avr-embedded) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),armeb-linux) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),armeb-embedded) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),mips-linux) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),mipsel-linux) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),mipsel-embedded) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),mipsel-android) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),jvm-java) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),jvm-android) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i8086-msdos) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) +override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) endif ifeq ($(FULL_TARGET),i386-linux) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-go32v2) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-win32) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-os2) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-freebsd) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-beos) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-haiku) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-netbsd) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-solaris) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-qnx) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-netware) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-openbsd) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-wdosx) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-darwin) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-emx) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-watcom) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-netwlibc) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-wince) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-embedded) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-symbian) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-nativent) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-iphonesim) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i386-android) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) +endif +ifeq ($(FULL_TARGET),i386-aros) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),m68k-linux) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),m68k-freebsd) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),m68k-netbsd) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),m68k-amiga) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),m68k-atari) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),m68k-openbsd) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),m68k-palmos) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),m68k-embedded) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),powerpc-linux) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),powerpc-netbsd) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),powerpc-amiga) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),powerpc-macos) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),powerpc-darwin) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),powerpc-morphos) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),powerpc-embedded) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),powerpc-wii) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),powerpc-aix) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),sparc-linux) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),sparc-netbsd) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),sparc-solaris) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),sparc-embedded) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),x86_64-linux) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),x86_64-freebsd) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),x86_64-netbsd) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),x86_64-solaris) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),x86_64-openbsd) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),x86_64-darwin) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),x86_64-win64) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),x86_64-embedded) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),arm-linux) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),arm-palmos) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),arm-darwin) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),arm-wince) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),arm-gba) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),arm-nds) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),arm-embedded) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),arm-symbian) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),arm-android) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),powerpc64-linux) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),powerpc64-darwin) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),powerpc64-embedded) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),powerpc64-aix) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),avr-embedded) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),armeb-linux) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),armeb-embedded) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),mips-linux) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),mipsel-linux) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),mipsel-embedded) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),mipsel-android) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),jvm-java) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),jvm-android) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifeq ($(FULL_TARGET),i8086-msdos) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) endif ifdef REQUIRE_UNITSDIR override UNITSDIR+=$(REQUIRE_UNITSDIR) @@ -1978,6 +1996,11 @@ EXEEXT= SHAREDLIBEXT=.library SHORTSUFFIX=amg endif +ifeq ($(OS_TARGET),aros) +EXEEXT= +SHAREDLIBEXT=.library +SHORTSUFFIX=aros +endif ifeq ($(OS_TARGET),morphos) EXEEXT= SHAREDLIBEXT=.library @@ -2898,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) typinfo$(PPUEXT) rtlconsts$(PPUEXT) types$(PPUEXT) fgl$(PPUEXT) - $(COMPILER) -Fi$(OBJPASDIR)/classes classes.pp + $(COMPILER) -Fi$(OBJPASDIR)/classes $(AMIINC)/classes.pp typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT) $(COMPILER) -Sg $(OBJPASDIR)/typinfo.pp $(REDIR) math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT) diff --git a/rtl/amiga/Makefile.fpc b/rtl/amiga/Makefile.fpc index ed58ad977a..01ffb737cc 100644 --- a/rtl/amiga/Makefile.fpc +++ b/rtl/amiga/Makefile.fpc @@ -34,8 +34,8 @@ target=amiga cpu=powerpc [compiler] -includedir=$(INC) $(PROCINC) $(CPU_TARGET) -sourcedir=$(INC) $(PROCINC) $(CPU_TARGET) $(COMMON) +includedir=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) +sourcedir=$(INC) $(PROCINC) $(CPU_TARGET) $(AMIINC) $(COMMON) [prerules] @@ -43,6 +43,7 @@ RTL=.. INC=$(RTL)/inc COMMON=$(RTL)/common PROCINC=$(RTL)/$(CPU_TARGET) +AMIINC=$(RTL)/amicommon UNITPREFIX=rtl SYSTEMUNIT=system @@ -55,7 +56,6 @@ endif # Paths OBJPASDIR=$(RTL)/objpas -GRAPHDIR=$(INC)/graph [rules] .NOTPARALLEL: @@ -126,11 +126,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) typinfo$(PPUEXT) rtlconsts$(PPUEXT) types$(PPUEXT) fgl$(PPUEXT) - $(COMPILER) -Fi$(OBJPASDIR)/classes classes.pp + $(COMPILER) -Fi$(OBJPASDIR)/classes $(AMIINC)/classes.pp typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT) $(COMPILER) -Sg $(OBJPASDIR)/typinfo.pp $(REDIR) diff --git a/rtl/amiga/classes.pp b/rtl/amiga/classes.pp deleted file mode 100644 index 507b765740..0000000000 --- a/rtl/amiga/classes.pp +++ /dev/null @@ -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 AmigaOS - - 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. diff --git a/rtl/amiga/dos.pp b/rtl/amiga/dos.pp deleted file mode 100644 index 932a15417e..0000000000 --- a/rtl/amiga/dos.pp +++ /dev/null @@ -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. - - 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(AOS_DOSBase); - DosVersion:= p^.lib_Version or (p^.lib_Revision shl 8); -end; - -{ Here are a lot of stuff just for setdate and settime } - -var - TimerBase : Pointer; - - -procedure NewList (list: pList); -begin - with list^ do begin - lh_Head := pNode(@lh_Tail); - lh_Tail := NIL; - lh_TailPred := pNode(@lh_Head) - end; -end; - -function CreateExtIO (port: pMsgPort; size: Longint): pIORequest; -var - IOReq: pIORequest; -begin - IOReq := NIL; - if port <> NIL then - begin - IOReq := execAllocMem(size, MEMF_CLEAR); - if IOReq <> NIL then - begin - IOReq^.io_Message.mn_Node.ln_Type := 7; - IOReq^.io_Message.mn_Length := size; - IOReq^.io_Message.mn_ReplyPort := port; - end; - end; - CreateExtIO := IOReq; -end; - -procedure DeleteExtIO (ioReq: pIORequest); -begin - if ioReq <> NIL then - begin - ioReq^.io_Message.mn_Node.ln_Type := $FF; - ioReq^.io_Message.mn_ReplyPort := pMsgPort(-1); - ioReq^.io_Device := pDevice(-1); - execFreeMem(ioReq, ioReq^.io_Message.mn_Length); - end -end; - -function Createport(name : PChar; pri : longint): pMsgPort; -var - sigbit : ShortInt; - port : pMsgPort; -begin - sigbit := AllocSignal(-1); - if sigbit = -1 then CreatePort := nil; - port := execAllocMem(sizeof(tMsgPort),MEMF_CLEAR); - if port = nil then begin - FreeSignal(sigbit); - CreatePort := nil; - end; - with port^ do begin - if assigned(name) then - mp_Node.ln_Name := name - else mp_Node.ln_Name := nil; - mp_Node.ln_Pri := pri; - mp_Node.ln_Type := 4; - mp_Flags := 0; - mp_SigBit := sigbit; - mp_SigTask := FindTask(nil); - end; - if assigned(name) then AddPort(port) - else NewList(addr(port^.mp_MsgList)); - CreatePort := port; -end; - -procedure DeletePort (port: pMsgPort); -begin - if port <> NIL then - begin - if port^.mp_Node.ln_Name <> NIL then - RemPort(port); - - port^.mp_Node.ln_Type := $FF; - port^.mp_MsgList.lh_Head := pNode(-1); - FreeSignal(port^.mp_SigBit); - execFreeMem(port, sizeof(tMsgPort)); - end; -end; - - -function Create_Timer(theUnit : longint) : pTimeRequest; -var - Error : longint; - TimerPort : pMsgPort; - TimeReq : pTimeRequest; -begin - TimerPort := CreatePort(Nil, 0); - if TimerPort = Nil then - Create_Timer := Nil; - TimeReq := pTimeRequest(CreateExtIO(TimerPort,sizeof(tTimeRequest))); - if TimeReq = Nil then begin - DeletePort(TimerPort); - Create_Timer := Nil; - end; - Error := OpenDevice(TIMERNAME, theUnit, pIORequest(TimeReq), 0); - if Error <> 0 then begin - DeleteExtIO(pIORequest(TimeReq)); - DeletePort(TimerPort); - Create_Timer := Nil; - end; - TimerBase := pointer(TimeReq^.tr_Node.io_Device); - Create_Timer := pTimeRequest(TimeReq); -end; - -Procedure Delete_Timer(WhichTimer : pTimeRequest); -var - WhichPort : pMsgPort; -begin - - WhichPort := WhichTimer^.tr_Node.io_Message.mn_ReplyPort; - if assigned(WhichTimer) then begin - CloseDevice(pIORequest(WhichTimer)); - DeleteExtIO(pIORequest(WhichTimer)); - end; - if assigned(WhichPort) then - DeletePort(WhichPort); -end; - -function set_new_time(secs, micro : longint): longint; -var - tr : ptimerequest; -begin - tr := create_timer(UNIT_MICROHZ); - - { non zero return says error } - if tr = nil then set_new_time := -1; - - tr^.tr_time.tv_secs := secs; - tr^.tr_time.tv_micro := micro; - tr^.tr_node.io_Command := TR_SETSYSTIME; - DoIO(pIORequest(tr)); - - delete_timer(tr); - set_new_time := 0; -end; - -function get_sys_time(tv : ptimeval): longint; -var - tr : ptimerequest; -begin - tr := create_timer( UNIT_MICROHZ ); - - { non zero return says error } - if tr = nil then get_sys_time := -1; - - tr^.tr_node.io_Command := TR_GETSYSTIME; - DoIO(pIORequest(tr)); - - { structure assignment } - tv^ := tr^.tr_time; - - delete_timer(tr); - get_sys_time := 0; -end; - -procedure GetDate(Var Year, Month, MDay, WDay: Word); -var - cd : pClockData; - oldtime : ttimeval; -begin - new(cd); - get_sys_time(@oldtime); - Amiga2Date(oldtime.tv_secs,cd); - Year := cd^.year; - Month := cd^.month; - MDay := cd^.mday; - WDay := cd^.wday; - dispose(cd); -end; - -procedure SetDate(Year, Month, Day: Word); -var - cd : pClockData; - oldtime : ttimeval; -begin - new(cd); - get_sys_time(@oldtime); - Amiga2Date(oldtime.tv_secs,cd); - cd^.year := Year; - cd^.month := Month; - cd^.mday := Day; - set_new_time(Date2Amiga(cd),0); - dispose(cd); -end; - -procedure GetTime(Var Hour, Minute, Second, Sec100: Word); -var - cd : pClockData; - oldtime : ttimeval; -begin - new(cd); - get_sys_time(@oldtime); - Amiga2Date(oldtime.tv_secs,cd); - Hour := cd^.hour; - Minute := cd^.min; - Second := cd^.sec; - Sec100 := oldtime.tv_micro div 10000; - dispose(cd); -end; - - -Procedure SetTime(Hour, Minute, Second, Sec100: Word); -var - cd : pClockData; - oldtime : ttimeval; -begin - new(cd); - get_sys_time(@oldtime); - Amiga2Date(oldtime.tv_secs,cd); - cd^.hour := Hour; - cd^.min := Minute; - cd^.sec := Second; - set_new_time(Date2Amiga(cd), Sec100 * 10000); - dispose(cd); -end; - - -function GetMsCount: int64; -var - TV: TTimeVal; -begin - Get_Sys_Time (@TV); - GetMsCount := int64 (TV.TV_Secs) * 1000 + TV.TV_Micro div 1000; -end; - -{****************************************************************************** - --- Exec --- -******************************************************************************} - - -procedure Exec(const Path: PathStr; const ComLine: ComStr); -var - tmpPath: array[0..515] of char; - result : longint; - tmpLock: longint; -begin - DosError:= 0; - LastDosExitCode:=0; - tmpPath:=PathConv(Path)+#0+ComLine+#0; // hacky... :) - - { Here we must first check if the command we wish to execute } - { actually exists, because this is NOT handled by the } - { _SystemTagList call (program will abort!!) } - - { Try to open with shared lock } - tmpLock:=Lock(tmpPath,SHARED_LOCK); - if tmpLock<>0 then - begin - { File exists - therefore unlock it } - Unlock(tmpLock); - tmpPath[length(Path)]:=' '; // hacky... replaces first #0 from above, to get the whole string. :) - result:=SystemTagList(tmpPath,nil); - { on return of -1 the shell could not be executed } - { probably because there was not enough memory } - if result = -1 then - DosError:=8 - else - LastDosExitCode:=word(result); - end - else - DosError:=3; -end; - - -procedure GetCBreak(Var BreakValue: Boolean); -begin - breakvalue := system.BreakOn; -end; - -procedure SetCBreak(BreakValue: Boolean); -begin - system.Breakon := BreakValue; -end; - - -{****************************************************************************** - --- Disk --- -******************************************************************************} - -{ How to solve the problem with this: } -{ We could walk through the device list } -{ at startup to determine possible devices } - -const - - not_to_use_devs : array[0..12] of string =( - 'DF0:', - 'DF1:', - 'DF2:', - 'DF3:', - 'PED:', - 'PRJ:', - 'PIPE:', - 'RAM:', - 'CON:', - 'RAW:', - 'SER:', - 'PAR:', - 'PRT:'); - -var - deviceids : array[1..20] of byte; - devicenames : array[1..20] of string[20]; - numberofdevices : Byte; - -Function DiskFree(Drive: Byte): int64; -Var - MyLock : LongInt; - Inf : pInfoData; - Free : Longint; - myproc : pProcess; - OldWinPtr : Pointer; -Begin - Free := -1; - { Here we stop systemrequesters to appear } - myproc := pProcess(FindTask(nil)); - OldWinPtr := myproc^.pr_WindowPtr; - myproc^.pr_WindowPtr := Pointer(-1); - { End of systemrequesterstop } - New(Inf); - MyLock := dosLock(devicenames[deviceids[Drive]],SHARED_LOCK); - If MyLock <> 0 then begin - if Info(MyLock,Inf) 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. diff --git a/rtl/amiga/m68k/doslibf.inc b/rtl/amiga/m68k/doslibf.inc index 4500edad20..13cf8282c1 100644 --- a/rtl/amiga/m68k/doslibf.inc +++ b/rtl/amiga/m68k/doslibf.inc @@ -1,11 +1,8 @@ { This file is part of the Free Pascal run time library. + Copyright (c) 2014 Free Pascal development team - dos functions (V50) for MorphOS/PowerPC - Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved. - - Free Pascal conversion - Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. + dos functions (V40) for Amiga/68k See the file COPYING.FPC, included in this distribution, for details about the copyright. @@ -51,7 +48,7 @@ function dosDeleteFile(fname: PChar location 'd1'): Boolean; SysCall AOS_DOSBase 72; function dosRename(oldName: PChar location 'd1'; - newName: PChar location 'd2'): Boolean; + newName: PChar location 'd2'): LongInt; SysCall AOS_DOSBase 78; function Lock(lname : PChar location 'd1'; @@ -65,7 +62,7 @@ function DupLock(lock: LongInt location 'd1'): LongInt; SysCall AOS_DOSBase 096; function Examine(lock : LongInt location 'd1'; - fileInfoBlock: PFileInfoBlock location 'd2'): Boolean; + fileInfoBlock: PFileInfoBlock location 'd2'): LongInt; SysCall AOS_DOSBase 102; function ExNext(lock : LongInt location 'd1'; @@ -73,7 +70,7 @@ function ExNext(lock : LongInt location 'd1'; SysCall AOS_DOSBase 108; function Info(lock : LongInt location 'd1'; - parameterBlock: PInfoData location 'd2'): Boolean; + parameterBlock: PInfoData location 'd2'): LongInt; SysCall AOS_DOSBase 114; function dosCreateDir(dname: PChar location 'd1'): LongInt; @@ -108,7 +105,7 @@ function SetComment(name : PChar location 'd1'; SysCall AOS_DOSBase 180; function SetProtection(name: PChar location 'd1'; - mask: LongInt location 'd2'): Boolean; + mask: LongInt location 'd2'): LongInt; SysCall AOS_DOSBase 186; function DateStamp(date: PDateStamp location 'd1'): PDateStamp; @@ -285,7 +282,7 @@ SysCall AOS_DOSBase 378; function ParentOfFH(fh: LongInt location 'd1'): LongInt; SysCall AOS_DOSBase 384; -function ExamineFH(fh : LongInt location 'd1'; +function ExamineFH(fh : BPTR location 'd1'; fib: PFileInfoBlock location 'd2'): Boolean; SysCall AOS_DOSBase 390; @@ -298,9 +295,9 @@ function NameFromLock(lock : LongInt location 'd1'; len : LongInt location 'd3'): Boolean; SysCall AOS_DOSBase 402; -function NameFromFH(fh : LongInt location 'd1'; +function NameFromFH(fh : BPTR location 'd1'; buffer: PChar location 'd2'; - len : LongInt location 'd3'): LongInt; + len : LongInt location 'd3'): Boolean; SysCall AOS_DOSBase 408; function SplitName(name : PChar location 'd1'; diff --git a/rtl/amiga/rtldefs.inc b/rtl/amiga/rtldefs.inc deleted file mode 100644 index 3376428f5e..0000000000 --- a/rtl/amiga/rtldefs.inc +++ /dev/null @@ -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} diff --git a/rtl/amiga/sysdir.inc b/rtl/amiga/sysdir.inc deleted file mode 100644 index c0bb7a90c2..0000000000 --- a/rtl/amiga/sysdir.inc +++ /dev/null @@ -1,99 +0,0 @@ -{ - This file is part of the Free Pascal run time library. - Copyright (c) 2014 by Free Pascal development team - - Low level directory functions - - See the file COPYING.FPC, included in this distribution, - for details about the copyright. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - **********************************************************************} - - -{***************************************************************************** - Directory Handling -*****************************************************************************} -procedure do_mkdir(const s : rawbytestring); -var - tmpStr : rawbytestring; - tmpLock: LongInt; -begin - checkCTRLC; - tmpStr:=PathConv(s); - tmpLock:=dosCreateDir(pchar(tmpStr)); - if tmpLock=0 then begin - dosError2InOut(IoErr); - exit; - end; - UnLock(tmpLock); -end; - -procedure do_rmdir(const s : rawbytestring); -var - tmpStr : rawbytestring; -begin - checkCTRLC; - if (s='.') then - begin - InOutRes:=16; - exit; - end; - tmpStr:=PathConv(s); - if not dosDeleteFile(pchar(tmpStr)) then - dosError2InOut(IoErr); -end; - -procedure do_ChDir(const s: rawbytestring); -var - tmpStr : rawbytestring; - tmpLock: LongInt; - FIB : PFileInfoBlock; -begin - checkCTRLC; - tmpStr:=PathConv(s); - tmpLock:=0; - - { Changing the directory is a pretty complicated affair } - { 1) Obtain a lock on the directory } - { 2) CurrentDir the lock } - tmpLock:=Lock(pchar(tmpStr),SHARED_LOCK); - if tmpLock=0 then begin - dosError2InOut(IoErr); - exit; - end; - - FIB:=nil; - new(FIB); - - if (Examine(tmpLock,FIB)=True) and (FIB^.fib_DirEntryType>0) then begin - tmpLock:=CurrentDir(tmpLock); - if AOS_OrigDir=0 then begin - AOS_OrigDir:=tmpLock; - tmpLock:=0; - end; - end else begin - dosError2InOut(ERROR_DIR_NOT_FOUND); - end; - - if tmpLock<>0 then Unlock(tmpLock); - if assigned(FIB) then dispose(FIB); -end; - -procedure do_GetDir (DriveNr: byte; var Dir: RawByteString); -var tmpbuf: array[0..255] of char; -begin - checkCTRLC; - Dir:=''; - - if not GetCurrentDirName(tmpbuf,256) then - dosError2InOut(IoErr) - else - begin - Dir:=tmpbuf; - SetCodePage(Dir,DefaultFileSystemCodePage,false); - end; -end; diff --git a/rtl/amiga/sysfile.inc b/rtl/amiga/sysfile.inc deleted file mode 100644 index ca600eb56c..0000000000 --- a/rtl/amiga/sysfile.inc +++ /dev/null @@ -1,389 +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 - AOS_fileList: PFileList; public name 'AOS_FILELIST'; { List pointer to opened files } - -{ Function to be called at program shutdown, to close all opened files } -procedure CloseList(l: PFileList); -var - tmpNext : PFileList; - tmpHandle : LongInt; -begin - if l=nil then exit; - - { First, close all tracked files } - tmpNext:=l^.next; - while tmpNext<>nil do begin - tmpHandle:=tmpNext^.handle; - if (tmpHandle<>StdInputHandle) and (tmpHandle<>StdOutputHandle) - and (tmpHandle<>StdErrorHandle) then begin - dosClose(tmpHandle); - end; - tmpNext:=tmpNext^.next; - end; - - { Next, erase the linked list } - while l<>nil do begin - tmpNext:=l; - l:=l^.next; - dispose(tmpNext); - end; -end; - -{ Function to be called to add a file to the opened file list } -procedure AddToList(var l: PFileList; h: LongInt); alias: 'ADDTOLIST'; [public]; -var - p : PFileList; - inList: Boolean; -begin - inList:=False; - if l<>nil then begin - { if there is a valid filelist, search for the value } - { in the list to avoid double additions } - p:=l; - while (p^.next<>nil) and (not inList) do - if p^.next^.handle=h then inList:=True - else p:=p^.next; - p:=nil; - end else begin - { if the list is not yet allocated, allocate it. } - New(l); - l^.next:=nil; - end; - - if not inList then begin - New(p); - p^.handle:=h; - p^.buffered:=False; - p^.next:=l^.next; - l^.next:=p; - end -{$IFDEF MOSFPC_FILEDEBUG} - else - RawDoFmt('FPC_FILE_DEBUG: Error! Trying add filehandle a filehandle twice: $%lx !'+#10,@h,pointer(1),nil); -{$ENDIF} - ; -end; - -{ Function to be called to remove a file from the list } -function RemoveFromList(var l: PFileList; h: LongInt): boolean; alias: 'REMOVEFROMLIST'; [public]; -var - p : PFileList; - inList : Boolean; - tmpList: PFileList; -begin - inList:=False; - if l=nil then begin - RemoveFromList:=inList; - exit; - end; - - p:=l; - while (p^.next<>nil) and (not inList) do - if p^.next^.handle=h then inList:=True - else p:=p^.next; - - if inList then begin - tmpList:=p^.next^.next; - dispose(p^.next); - p^.next:=tmpList; - end -{$IFDEF MOSFPC_FILEDEBUG} - else - RawDoFmt('FPC_FILE_DEBUG: Error! Trying to remove not existing filehandle: $%lx !'+#10,@h,pointer(1),nil); -{$ENDIF} - ; - - RemoveFromList:=inList; -end; - -{ Function to check if file is in the list } -function CheckInList(var l: PFileList; h: LongInt): pointer; alias: 'CHECKINLIST'; [public]; -var - p : PFileList; - inList : Pointer; - -begin - inList:=nil; - if l=nil then begin - CheckInList:=inList; - exit; - end; - - p:=l; - while (p^.next<>nil) and (inList=nil) do - if p^.next^.handle=h then inList:=p^.next - else p:=p^.next; - -{$IFDEF MOSFPC_FILEDEBUG} - if inList=nil then - RawDoFmt('FPC_FILE_DEBUG: Warning! Check for not existing filehandle: $%lx !'+#10,@h,pointer(1),nil); -{$ENDIF} - - CheckInList:=inList; -end; - - -{**************************************************************************** - Low level File Routines - All these functions can set InOutRes on errors -****************************************************************************} - -{ close a file from the handle value } -procedure do_close(handle : longint); -begin - if RemoveFromList(AOS_fileList,handle) then begin - { Do _NOT_ check CTRL_C on Close, because it will conflict - with System_Exit! } - if not dosClose(handle) then - dosError2InOut(IoErr); - end; -end; - -procedure do_erase(p : pchar; pchangeable: boolean); -var - tmpStr: array[0..255] of Char; -begin - tmpStr:=PathConv(strpas(p))+#0; - checkCTRLC; - if not dosDeleteFile(@tmpStr) then - dosError2InOut(IoErr); -end; - -procedure do_rename(p1,p2 : pchar; p1changeable, p2changeable: boolean); -{ quite stack-effective code, huh? :) damn path conversions... (KB) } -var - tmpStr1: array[0..255] of Char; - tmpStr2: array[0..255] of Char; -begin - tmpStr1:=PathConv(strpas(p1))+#0; - tmpStr2:=PathConv(strpas(p2))+#0; - checkCTRLC; - if not dosRename(@tmpStr1,@tmpStr2) then - dosError2InOut(IoErr); -end; - -function do_write(h: longint; addr: pointer; len: longint) : longint; -var dosResult: LongInt; -begin - checkCTRLC; - do_write:=0; - if (len<=0) or (h<=0) then exit; - -{$IFDEF MOSFPC_FILEDEBUG} - if not ((h=StdOutputHandle) or (h=StdInputHandle) or - (h=StdErrorHandle)) then CheckInList(AOS_fileList,h); -{$ENDIF} - - dosResult:=dosWrite(h,addr,len); - if dosResult<0 then begin - dosError2InOut(IoErr); - end else begin - do_write:=dosResult; - end; -end; - -function do_read(h: longint; addr: pointer; len: longint) : longint; -var dosResult: LongInt; -begin - checkCTRLC; - do_read:=0; - if (len<=0) or (h<=0) then exit; - -{$IFDEF MOSFPC_FILEDEBUG} - if not ((h=StdOutputHandle) or (h=StdInputHandle) or - (h=StdErrorHandle)) then CheckInList(AOS_fileList,h); -{$ENDIF} - - dosResult:=dosRead(h,addr,len); - if dosResult<0 then begin - dosError2InOut(IoErr); - end else begin - do_read:=dosResult; - end -end; - -function do_filepos(handle: longint) : longint; -var dosResult: LongInt; -begin - checkCTRLC; - do_filepos:=-1; - if CheckInList(AOS_fileList,handle)<>nil then begin - - { Seeking zero from OFFSET_CURRENT to find out where we are } - dosResult:=dosSeek(handle,0,OFFSET_CURRENT); - if dosResult<0 then begin - dosError2InOut(IoErr); - end else begin - do_filepos:=dosResult; - end; - end; -end; - -procedure do_seek(handle, pos: longint); -begin - checkCTRLC; - if CheckInList(AOS_fileList,handle)<>nil then begin - - { Seeking from OFFSET_BEGINNING } - if dosSeek(handle,pos,OFFSET_BEGINNING)<0 then - dosError2InOut(IoErr); - end; -end; - -function do_seekend(handle: longint):longint; -var dosResult: LongInt; -begin - checkCTRLC; - do_seekend:=-1; - if CheckInList(AOS_fileList,handle)<>nil then begin - - { Seeking to OFFSET_END } - dosResult:=dosSeek(handle,0,OFFSET_END); - if dosResult<0 then begin - dosError2InOut(IoErr); - end else begin - do_seekend:=dosResult; - end; - end; -end; - -function do_filesize(handle : longint) : longint; -var currfilepos: longint; -begin - checkCTRLC; - do_filesize:=-1; - if CheckInList(AOS_fileList,handle)<>nil then begin - - currfilepos:=do_filepos(handle); - { We have to do this twice, because seek returns the OLD position } - do_filesize:=do_seekend(handle); - do_filesize:=do_seekend(handle); - do_seek(handle,currfilepos); - - end; -end; - -{ truncate at a given position } -procedure do_truncate(handle, pos: longint); -begin - checkCTRLC; - if CheckInList(AOS_fileList,handle)<>nil then begin - - { Seeking from OFFSET_BEGINNING } - if SetFileSize(handle,pos,OFFSET_BEGINNING)<0 then - dosError2InOut(IoErr); - end; -end; - -procedure do_open(var f;p:pchar;flags:longint; pchangeable: boolean); -{ - filerec and textrec have both handle and mode as the first items so - they could use the same routine for opening/creating. - when (flags and $10) the file will be append - when (flags and $100) the file will be truncate/rewritten - when (flags and $1000) there is no check for close (needed for textfiles) -} -var - handle : LongInt; - openflags: LongInt; - tmpStr : array[0..255] of Char; -begin - tmpStr:=PathConv(strpas(p))+#0; - - { close first if opened } - if ((flags and $10000)=0) then begin - case filerec(f).mode of - fminput,fmoutput,fminout : Do_Close(filerec(f).handle); - fmclosed : ; - else begin - inoutres:=102; {not assigned} - exit; - end; - end; - end; - - { reset file handle } - filerec(f).handle:=UnusedHandle; - - { convert filemode to filerec modes } - { READ/WRITE on existing file } - { RESET/APPEND } - openflags:=MODE_OLDFILE; - case (flags and 3) of - 0 : filerec(f).mode:=fminput; - 1 : filerec(f).mode:=fmoutput; - 2 : filerec(f).mode:=fminout; - end; - - { rewrite (create a new file) } - if (flags and $1000)<>0 then openflags:=MODE_NEWFILE; - - { empty name is special } - if p[0]=#0 then begin - case filerec(f).mode of - fminput : - filerec(f).handle:=StdInputHandle; - fmappend, - fmoutput : begin - filerec(f).handle:=StdOutputHandle; - filerec(f).mode:=fmoutput; {fool fmappend} - end; - end; - exit; - end; - - handle:=Open(@tmpStr,openflags); - if handle=0 then begin - dosError2InOut(IoErr); - end else begin - AddToList(AOS_fileList,handle); - filerec(f).handle:=handle; - end; - - { append mode } - if ((Flags and $100)<>0) and - (FileRec(F).Handle<>UnusedHandle) then begin - do_seekend(filerec(f).handle); - filerec(f).mode:=fmoutput; {fool fmappend} - end; -end; - -function do_isdevice(handle: longint): boolean; -begin - if (handle=StdOutputHandle) or (handle=StdInputHandle) or - (handle=StdErrorHandle) then - do_isdevice:=True - else - do_isdevice:=False; -end; diff --git a/rtl/amiga/sysheap.inc b/rtl/amiga/sysheap.inc deleted file mode 100644 index 777bf8cc5a..0000000000 --- a/rtl/amiga/sysheap.inc +++ /dev/null @@ -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(AOS_heapPool,size); -{$IFDEF MOSFPC_MEMDEBUG} - values[0]:=dword(result); - values[1]:=dword(size); - values[2]:=DWord(Sptr-StackBottom); - RawDoFmt('FPC_MEM_DEBUG: $%lx:=SysOSAlloc(%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(AOS_heapPool,p,size); -{$IFDEF MOSFPC_MEMDEBUG} - values[0]:=dword(p); - values[1]:=dword(size); - values[2]:=DWord(Sptr-StackBottom); - RawDoFmt('FPC_MEM_DEBUG: SysOSFree($%lx,%lu), free stack: %ld bytes'+#10,@values,pointer(1),nil); -{$ENDIF} -end; diff --git a/rtl/amiga/sysos.inc b/rtl/amiga/sysos.inc deleted file mode 100644 index 5f57e2f002..0000000000 --- a/rtl/amiga/sysos.inc +++ /dev/null @@ -1,178 +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. - - **********************************************************************} - -{***************************************************************************** - AmigaOS structures -*****************************************************************************} - -{$include execd.inc} -{$include timerd.inc} -{$include doslibd.inc} - - -{***************************************************************************** - AmigaOS functions -*****************************************************************************} - -{ exec.library functions } - -{$include execf.inc} -{$include doslibf.inc} -{$IFDEF AMIGAOS4} - // Required to allow opening of utility library interface... - {$include utilf.inc} -{$ENDIF} - - -{***************************************************************************** - System Dependent Structures/Consts -*****************************************************************************} - - -const - CTRL_C = 20; { Error code on CTRL-C press } - -{ Used for CTRL_C checking in I/O calls } -procedure checkCTRLC; -begin - if BreakOn then begin - if (SetSignal(0,0) And SIGBREAKF_CTRL_C)<>0 then begin - { Clear CTRL-C signal } - SetSignal(0,SIGBREAKF_CTRL_C); - Halt(CTRL_C); - end; - end; -end; - - -{ Converts a AmigaOS dos.library error code to a TP compatible error code } -{ Based on 1.0.x Amiga RTL } -procedure dosError2InOut(errno: LongInt); -begin - case errno of - ERROR_BAD_NUMBER, - ERROR_ACTION_NOT_KNOWN, - ERROR_NOT_IMPLEMENTED : InOutRes := 1; - - ERROR_OBJECT_NOT_FOUND : InOutRes := 2; - ERROR_DIR_NOT_FOUND : InOutRes := 3; - ERROR_DISK_WRITE_PROTECTED : InOutRes := 150; - ERROR_OBJECT_WRONG_TYPE : InOutRes := 151; - - ERROR_OBJECT_EXISTS, - ERROR_DELETE_PROTECTED, - ERROR_WRITE_PROTECTED, - ERROR_READ_PROTECTED, - ERROR_OBJECT_IN_USE, - ERROR_DIRECTORY_NOT_EMPTY : InOutRes := 5; - - ERROR_NO_MORE_ENTRIES : InOutRes := 18; - ERROR_RENAME_ACROSS_DEVICES : InOutRes := 17; - ERROR_DISK_FULL : InOutRes := 101; - ERROR_INVALID_RESIDENT_LIBRARY : InoutRes := 153; - ERROR_BAD_HUNK : InOutRes := 153; - ERROR_NOT_A_DOS_DISK : InOutRes := 157; - - ERROR_NO_DISK, - ERROR_DISK_NOT_VALIDATED, - ERROR_DEVICE_NOT_MOUNTED : InOutRes := 152; - - ERROR_SEEK_ERROR : InOutRes := 156; - - ERROR_LOCK_COLLISION, - ERROR_LOCK_TIMEOUT, - ERROR_UNLOCK_ERROR, - ERROR_INVALID_LOCK, - ERROR_INVALID_COMPONENT_NAME, - ERROR_BAD_STREAM_NAME, - ERROR_FILE_NOT_OBJECT : InOutRes := 6; - else - InOutRes := errno; - end; -end; - - -{ Converts an Unix-like path to Amiga-like path } -function PathConv(path: string): string; alias: 'PATHCONV'; [public]; -var tmppos: longint; -begin - { check for short paths } - if length(path)<=2 then begin - if (path='.') or (path='./') then path:='' else - if path='..' then path:='/' else - if path='*' then path:='#?'; - end else begin - { convert parent directories } - tmppos:=pos('../',path); - while tmppos<>0 do begin - { delete .. to have / as parent dir sign } - delete(path,tmppos,2); - tmppos:=pos('../',path); - end; - { convert current directories } - tmppos:=pos('./',path); - while tmppos<>0 do begin - { delete ./ since we doesn't need to sign current directory } - delete(path,tmppos,2); - tmppos:=pos('./',path); - end; - { convert wildstar to #? } - tmppos:=pos('*',path); - while tmppos<>0 do begin - delete(path,tmppos,1); - insert('#?',path,tmppos); - tmppos:=pos('*',path); - end; - end; - PathConv:=path; -end; - -{ Converts an Unix-like path to Amiga-like path } -function PathConv(const path: rawbytestring): rawbytestring; alias: 'PATHCONVRBS'; [public]; -var tmppos: longint; -begin - { check for short paths } - if length(path)<=2 then begin - if (path='.') or (path='./') then PathConv:='' else - if path='..' then PathConv:='/' else - if path='*' then PathConv:='#?' - else PathConv:=path; - end else begin - { convert parent directories } - PathConv:=path; - tmppos:=pos('../',PathConv); - while tmppos<>0 do begin - { delete .. to have / as parent dir sign } - delete(PathConv,tmppos,2); - tmppos:=pos('../',PathConv); - end; - { convert current directories } - tmppos:=pos('./',PathConv); - while tmppos<>0 do begin - { delete ./ since we doesn't need to sign current directory } - delete(PathConv,tmppos,2); - tmppos:=pos('./',PathConv); - end; - { convert wildstar to #? } - tmppos:=pos('*',PathConv); - while tmppos<>0 do begin - delete(PathConv,tmppos,1); - insert('#?',PathConv,tmppos); - tmppos:=pos('*',PathConv); - end; - end; -end; diff --git a/rtl/amiga/sysosh.inc b/rtl/amiga/sysosh.inc deleted file mode 100644 index dbb22bdc87..0000000000 --- a/rtl/amiga/sysosh.inc +++ /dev/null @@ -1,33 +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. - - **********************************************************************} - -{Platform specific information} -type -{$ifdef CPU64} - THandle = Int64; -{$else CPU64} - THandle = Longint; -{$endif CPU64} - TThreadID = THandle; - - PRTLCriticalSection = ^TRTLCriticalSection; - TRTLCriticalSection = record - Locked: boolean - end; - - - diff --git a/rtl/amiga/system.pp b/rtl/amiga/system.pp index c01ab861a9..2d5da4b170 100644 --- a/rtl/amiga/system.pp +++ b/rtl/amiga/system.pp @@ -110,12 +110,17 @@ implementation {$endif cpum68k} {$I system.inc} +{$IFDEF AMIGAOS4} + // Required to allow opening of utility library interface... + {$include utilf.inc} +{$ENDIF} -{$IFDEF MOSFPC_FILEDEBUG} + +{$IFDEF ASYS_FPC_FILEDEBUG} {$WARNING Compiling with file debug enabled!} {$ENDIF} -{$IFDEF MOSFPC_MEMDEBUG} +{$IFDEF ASYS_FPC_MEMDEBUG} {$WARNING Compiling with memory debug enabled!} {$ENDIF} @@ -137,7 +142,7 @@ begin end; { Closing opened files } - CloseList(AOS_fileList); + CloseList(ASYS_fileList); { Changing back to original directory if changed } if AOS_origDir<>0 then begin @@ -389,7 +394,7 @@ begin { OS specific startup } AOS_wbMsg:=nil; AOS_origDir:=0; - AOS_fileList:=nil; + ASYS_fileList:=nil; envp:=nil; SysInitAmigaOS; { Set up signals handlers } diff --git a/rtl/amiga/sysutils.pp b/rtl/amiga/sysutils.pp deleted file mode 100644 index fdde4b67f2..0000000000 --- a/rtl/amiga/sysutils.pp +++ /dev/null @@ -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 AmigaOS & clones - - Based on Amiga 1.x version by Carl Eric Codere, and other - parts of the RTL - - See the file COPYING.FPC, included in this distribution, - for details about the copyright. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - **********************************************************************} - -unit sysutils; - -interface - -{$MODE objfpc} -{$MODESWITCH OUT} -{ force ansistrings } -{$H+} - -{$DEFINE OS_FILESETDATEBYNAME} -{$DEFINE HAS_SLEEP} -{$DEFINE HAS_OSERROR} - -{ used OS file system APIs use ansistring } -{$define SYSUTILS_HAS_ANSISTR_FILEUTIL_IMPL} -{ OS has an ansistring/single byte environment variable API } -{$define SYSUTILS_HAS_ANSISTR_ENVVAR_IMPL} - -{ Include platform independent interface part } -{$i sysutilh.inc} - -{ Platform dependent calls } - -Procedure AddDisk(const path:string); - - -implementation - -uses dos,sysconst; - -{$DEFINE FPC_FEXPAND_VOLUMES} (* Full paths begin with drive specification *) -{$DEFINE FPC_FEXPAND_DRIVESEP_IS_ROOT} -{$DEFINE FPC_FEXPAND_NO_DEFAULT_PATHS} - -{ Include platform independent implementation part } -{$i sysutils.inc} - - -{ * Include MorphOS specific includes * } -{$include execd.inc} -{$include execf.inc} -{$include timerd.inc} -{$include doslibd.inc} -{$include doslibf.inc} -{$include utilf.inc} - -{ * Followings are implemented in the system unit! * } -function PathConv(path: shortstring): shortstring; external name 'PATHCONV'; -function PathConv(path: RawByteString): RawByteString; external name 'PATHCONVRBS'; -procedure AddToList(var l: Pointer; h: LongInt); external name 'ADDTOLIST'; -function RemoveFromList(var l: Pointer; h: LongInt): boolean; external name 'REMOVEFROMLIST'; -function CheckInList(var l: Pointer; h: LongInt): pointer; external name 'CHECKINLIST'; - -var - MOS_fileList: Pointer; external name 'AOS_FILELIST'; - - -function AmigaFileDateToDateTime(aDate: TDateStamp; out success: boolean): TDateTime; -var - tmpSecs: DWord; - tmpDate: TDateTime; - tmpTime: TDateTime; - clockData: TClockData; -begin - with aDate do - tmpSecs:=(ds_Days * (24 * 60 * 60)) + (ds_Minute * 60) + (ds_Tick div TICKS_PER_SECOND); - - Amiga2Date(tmpSecs,@clockData); -{$HINT TODO: implement msec values, if possible} - with clockData do begin - success:=TryEncodeDate(year,month,mday,tmpDate) and - TryEncodeTime(hour,min,sec,0,tmpTime); - end; - - result:=ComposeDateTime(tmpDate,tmpTime); -end; - -function DateTimeToAmigaDateStamp(dateTime: TDateTime): TDateStamp; -var - tmpSecs: DWord; - clockData: TClockData; - tmpMSec: Word; -begin -{$HINT TODO: implement msec values, if possible} - with clockData do begin - DecodeDate(dateTime,year,month,mday); - DecodeTime(dateTime,hour,min,sec,tmpMSec); - end; - - tmpSecs:=Date2Amiga(@clockData); - - with result do begin - ds_Days:= tmpSecs div (24 * 60 * 60); - ds_Minute:= (tmpSecs div 60) mod ds_Days; - ds_Tick:= (((tmpSecs mod 60) mod ds_Minute) mod ds_Days) * TICKS_PER_SECOND; - end; -end; - - -{**************************************************************************** - File Functions -****************************************************************************} -{$I-}{ Required for correct usage of these routines } - - -(****** non portable routines ******) - -function FileOpen(const FileName: rawbytestring; Mode: Integer): LongInt; -var - SystemFileName: RawByteString; - dosResult: LongInt; -begin - SystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(FileName)); - {$WARNING FIX ME! To do: FileOpen Access Modes} - dosResult:=Open(PChar(SystemFileName),MODE_OLDFILE); - if dosResult=0 then - dosResult:=-1 - else - AddToList(MOS_fileList,dosResult); - - FileOpen:=dosResult; -end; - - -function FileGetDate(Handle: LongInt) : LongInt; -var - tmpFIB : PFileInfoBlock; - tmpDateTime: TDateTime; - validFile: boolean; -begin - validFile:=false; - - if (Handle <> 0) then begin - new(tmpFIB); - if ExamineFH(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 dos.library Delay() has precision of 1/50 seconds - Delay(Milliseconds div 20); -end; - - -{**************************************************************************** - Initialization code -****************************************************************************} - -Initialization - InitExceptions; - InitInternational; { Initialize internationalization settings } - OnBeep:=Nil; { No SysBeep() on Amiga, for now. Figure out if we want - to use intuition.library/DisplayBeep() for this (KB) } - StrOfPaths:=''; - -Finalization - DoneExceptions; -end.