From 61c2c33ac63bf86754f078faec747627670d0112 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Fri, 25 Mar 2005 22:18:01 +0000 Subject: [PATCH] Update of the Amiga port. * builds/amiga/makefile, builds/amiga/smakefile: Handle new modules. * builds/amiga/makefile.os4: Makefile for AmigaOS4 SDK. * builds/amiga/README: Updated. * builds/amiga/include/freetype/config/ftconfig.h: Handle gcc for AmigaOS4. * builds/amiga/include/freetype/config/ftmodule.h: Handle new modules. * builds/amiga/src/base/ftdebug.c: Updated to current version of default ftdebug.c. Add various include files and macros to have proper support for both AmigaOS4 and older AmigaOS versions. Don't declare KVPrintF explicitly. Replace getenv with GetVar. Actually enable debugging code. * builds/amiga/src/base/ftsystem.c: Major rewrite. --- ChangeLog | 26 ++ builds/amiga/README | 7 +- .../amiga/include/freetype/config/ftconfig.h | 4 + .../amiga/include/freetype/config/ftmodule.h | 79 ++--- builds/amiga/makefile | 75 +++-- builds/amiga/makefile.os4 | 238 ++++++++++++++ builds/amiga/smakefile | 84 ++--- builds/amiga/src/base/ftdebug.c | 143 +++++++-- builds/amiga/src/base/ftsystem.c | 301 +++++++++++------- 9 files changed, 707 insertions(+), 250 deletions(-) create mode 100644 builds/amiga/makefile.os4 diff --git a/ChangeLog b/ChangeLog index ea8ffd20b..6626cf1c1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,29 @@ +2005-03-25 Detlef Würkner + + Update of the Amiga port. + + * builds/amiga/makefile, builds/amiga/smakefile: Handle new modules. + + * builds/amiga/makefile.os4: Makefile for AmigaOS4 SDK. + + * builds/amiga/README: Updated. + + * builds/amiga/include/freetype/config/ftconfig.h: Handle gcc for + AmigaOS4. + + * builds/amiga/include/freetype/config/ftmodule.h: Handle new + modules. + + * builds/amiga/src/base/ftdebug.c: Updated to current version of + default ftdebug.c. + Add various include files and macros to have proper support for + both AmigaOS4 and older AmigaOS versions. + Don't declare KVPrintF explicitly. + Replace getenv with GetVar. + Actually enable debugging code. + + * builds/amiga/src/base/ftsystem.c: Major rewrite. + 2005-03-23 Werner Lemberg * tests/*: Removed. diff --git a/builds/amiga/README b/builds/amiga/README index 161166676..772705176 100644 --- a/builds/amiga/README +++ b/builds/amiga/README @@ -1,3 +1,6 @@ +The makefile.os4 is for the AmigaOS4 SDK. To use it, type +"make -f makefile.os4", it produces a link library libft2_ppc.a. + The makefile is for ppc-morphos-gcc-2.95.3-bin.tgz (gcc 2.95.3 hosted on 68k-Amiga producing MorphOS-PPC-binaries from http://www.morphos.de). To use it, type "make assign", then "make"; @@ -43,7 +46,7 @@ directory. The results are: exit(). For debugging of Amiga run-time shared system libraries. Source code is in src/base/ftdebug.c. -- NO ftinit.o. Since linking with a link library should result in +- NO ftinit.o. Because linking with a link library should result in linking only the needed object modules in it, but standard ftsystem.o would force ALL FreeType2 modules to be linked to your program, I decided to use a different scheme: You must #include @@ -59,7 +62,7 @@ To use in your own programs: the #define statements for the FreeType2 modules you need. - You can use either PARAMETERS=REGISTER or PARAMETERS=STACK for - calling the FreeType2 functions, since the link library and the + calling the FreeType2 functions, because the link library and the object files are compiled with PARAMETERS=BOTH. - "smake assign" (assign "FT:" to the FreeType2 main directory). diff --git a/builds/amiga/include/freetype/config/ftconfig.h b/builds/amiga/include/freetype/config/ftconfig.h index 9c6ff45f5..73749fa89 100644 --- a/builds/amiga/include/freetype/config/ftconfig.h +++ b/builds/amiga/include/freetype/config/ftconfig.h @@ -9,8 +9,12 @@ // TetiSoft: now include original file #ifndef __MORPHOS__ +#ifdef __SASC #include "FT:include/freetype/config/ftconfig.h" #else +#include "/FT/include/freetype/config/ftconfig.h" +#endif +#else // We must define that, it seems that // lib/gcc-lib/ppc-morphos/2.95.3/include/syslimits.h is missing in // ppc-morphos-gcc-2.95.3-bin.tgz (gcc for 68k producing MorphOS PPC elf diff --git a/builds/amiga/include/freetype/config/ftmodule.h b/builds/amiga/include/freetype/config/ftmodule.h index d7bc9cbd4..29f682c73 100644 --- a/builds/amiga/include/freetype/config/ftmodule.h +++ b/builds/amiga/include/freetype/config/ftmodule.h @@ -1,23 +1,24 @@ -// TetiSoft: To specify which modules you need, +// To specify which modules you need, // insert the following in your source file and uncomment as needed: /* -//#define FT_USE_AUTOHINT // autohinter -//#define FT_USE_RASTER // monochrome rasterizer -//#define FT_USE_SMOOTH // anti-aliasing rasterizer -//#define FT_USE_TT // truetype font driver -//#define FT_USE_T1 // type1 font driver -//#define FT_USE_T42 // type42 font driver -//#define FT_USE_T1CID // cid-keyed type1 font driver // no cmap support -//#define FT_USE_CFF // opentype font driver -//#define FT_USE_BDF // bdf bitmap font driver -//#define FT_USE_PCF // pcf bitmap font driver -//#define FT_USE_PFR // pfr font driver -//#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver +//#define FT_USE_AUTOFIT // autofitter +//#define FT_USE_RASTER // monochrome rasterizer +//#define FT_USE_SMOOTH // anti-aliasing rasterizer +//#define FT_USE_TT // truetype font driver +//#define FT_USE_T1 // type1 font driver +//#define FT_USE_T42 // type42 font driver +//#define FT_USE_T1CID // cid-keyed type1 font driver // no cmap support +//#define FT_USE_CFF // opentype font driver +//#define FT_USE_BDF // bdf bitmap font driver +//#define FT_USE_PCF // pcf bitmap font driver +//#define FT_USE_PFR // pfr font driver +//#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver +//#define FT_USE_OTV // opentype validator #include "FT:src/base/ftinit.c" */ -// TetiSoft: make sure that needed support modules are built in. +// Make sure that needed support modules are built in. // Dependencies can be found by searching for FT_Get_Module. #ifdef FT_USE_T42 @@ -54,14 +55,18 @@ #define FT_USE_PSNAMES #endif -// TetiSoft: Now include the modules +// Now include the modules -#ifdef FT_USE_AUTOHINT -FT_USE_MODULE(autohint_module_class) +#ifdef FT_USE_AUTOFIT +FT_USE_MODULE(autofit_module_class) #endif -#ifdef FT_USE_PSHINT -FT_USE_MODULE(pshinter_module_class) +#ifdef FT_USE_TT +FT_USE_MODULE(tt_driver_class) +#endif + +#ifdef FT_USE_T1 +FT_USE_MODULE(t1_driver_class) #endif #ifdef FT_USE_CFF @@ -72,18 +77,22 @@ FT_USE_MODULE(cff_driver_class) FT_USE_MODULE(t1cid_driver_class) #endif -#ifdef FT_USE_BDF -FT_USE_MODULE(bdf_driver_class) +#ifdef FT_USE_PFR +FT_USE_MODULE(pfr_driver_class) +#endif + +#ifdef FT_USE_T42 +FT_USE_MODULE(t42_driver_class) +#endif + +#ifdef FT_USE_WINFNT +FT_USE_MODULE(winfnt_driver_class) #endif #ifdef FT_USE_PCF FT_USE_MODULE(pcf_driver_class) #endif -#ifdef FT_USE_PFR -FT_USE_MODULE(pfr_driver_class) -#endif - #ifdef FT_USE_PSAUX FT_USE_MODULE(psaux_module_class) #endif @@ -92,6 +101,10 @@ FT_USE_MODULE(psaux_module_class) FT_USE_MODULE(psnames_module_class) #endif +#ifdef FT_USE_PSHINT +FT_USE_MODULE(pshinter_module_class) +#endif + #ifdef FT_USE_RASTER FT_USE_MODULE(ft_raster1_renderer_class) #endif @@ -106,18 +119,10 @@ FT_USE_MODULE(ft_smooth_lcd_renderer_class) FT_USE_MODULE(ft_smooth_lcdv_renderer_class) #endif -#ifdef FT_USE_TT -FT_USE_MODULE(tt_driver_class) +#ifdef FT_USE_OTV +FT_USE_MODULE(otv_module_class) #endif -#ifdef FT_USE_T1 -FT_USE_MODULE(t1_driver_class) -#endif - -#ifdef FT_USE_T42 -FT_USE_MODULE(t42_driver_class) -#endif - -#ifdef FT_USE_WINFNT -FT_USE_MODULE(winfnt_driver_class) +#ifdef FT_USE_BDF +FT_USE_MODULE(bdf_driver_class) #endif diff --git a/builds/amiga/makefile b/builds/amiga/makefile index db773302c..f2e2b1beb 100644 --- a/builds/amiga/makefile +++ b/builds/amiga/makefile @@ -11,18 +11,19 @@ # Your programs source code should start with this # (uncomment the parts you do not need to keep the program small): # ---8<--- -#define FT_USE_AUTOHINT // autohinter -#define FT_USE_RASTER // monochrome rasterizer -#define FT_USE_SMOOTH // anti-aliasing rasterizer -#define FT_USE_TT // truetype font driver -#define FT_USE_T1 // type1 font driver -#define FT_USE_T42 // type42 font driver -#define FT_USE_T1CID // cid-keyed type1 font driver -#define FT_USE_CFF // opentype font driver -#define FT_USE_BDF // bdf bitmap font driver -#define FT_USE_PCF // pcf bitmap font driver -#define FT_USE_PFR // pfr font driver -#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver +#define FT_USE_AUTOFIT // autofitter +#define FT_USE_RASTER // monochrome rasterizer +#define FT_USE_SMOOTH // anti-aliasing rasterizer +#define FT_USE_TT // truetype font driver +#define FT_USE_T1 // type1 font driver +#define FT_USE_T42 // type42 font driver +#define FT_USE_T1CID // cid-keyed type1 font driver +#define FT_USE_CFF // opentype font driver +#define FT_USE_BDF // bdf bitmap font driver +#define FT_USE_PCF // pcf bitmap font driver +#define FT_USE_PFR // pfr font driver +#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver +#define FT_USE_OTV // opentype validator #include "FT:src/base/ftinit.c" # ---8<--- # @@ -69,10 +70,13 @@ ftdebugpure.ppc.o: src/base/ftdebug.c # # FreeType2 library base extensions # -ftglyph.ppc.o: $(FTSRC)/base/ftglyph.c +ftbbox.ppc.o: $(FTSRC)/base/ftbbox.c $(CC) -c $(CFLAGS) -o $@ $< -ftbbox.ppc.o: $(FTSRC)/base/ftbbox.c +ftbdf.ppc.o: $(FTSRC)/base/ftbdf.c + $(CC) -c $(CFLAGS) -o $@ $< + +ftglyph.ppc.o: $(FTSRC)/base/ftglyph.c $(CC) -c $(CFLAGS) -o $@ $< ftmm.ppc.o: $(FTSRC)/base/ftmm.c @@ -81,16 +85,16 @@ ftmm.ppc.o: $(FTSRC)/base/ftmm.c ftsynth.ppc.o: $(FTSRC)/base/ftsynth.c $(CC) -c $(CFLAGS) -o $@ $< -# -# FreeType2 library autohinting module -# -autohint.ppc.o: $(FTSRC)/autohint/autohint.c +fttype1.ppc.o: $(FTSRC)/base/fttype1.c + $(CC) -c $(CFLAGS) -o $@ $< + +ftwinfnt.ppc.o: $(FTSRC)/base/ftwinfnt.c $(CC) -c $(CFLAGS) -o $@ $< # -# FreeType2 library autohinting module extensions +# FreeType2 library autofitting module # -ahoptim.ppc.o: $(FTSRC)/autohint/ahoptim.c +autofit.ppc.o: $(FTSRC)/autofit/autofit.c $(CC) -c $(CFLAGS) -o $@ $< # @@ -130,7 +134,7 @@ sfnt.ppc.o: $(FTSRC)/sfnt/sfnt.c $(CC) -c $(CFLAGS) -o $@ $< # -# FreeType2 library glyph and image caching system (still experimental) +# FreeType2 library glyph and image caching system # ftcache.ppc.o: $(FTSRC)/cache/ftcache.c $(CC) -c $(CFLAGS) -o $@ $< @@ -177,6 +181,18 @@ bdf.ppc.o: $(FTSRC)/bdf/bdf.c pcf.ppc.o: $(FTSRC)/pcf/pcf.c $(CC) -c $(CFLAGS) -o $@ $< +# +# FreeType2 library gzip support for compressed PCF bitmap fonts +# +gzip.ppc.o: $(FTSRC)/gzip/ftgzip.c + $(CC) -c $(CFLAGS) -o $@ $< + +# +# FreeType2 library compress support for compressed PCF bitmap fonts +# +lzw.ppc.o: $(FTSRC)/lzw/ftlzw.c + $(CC) -c $(CFLAGS) -o $@ $< + # # FreeType2 library PFR font driver # @@ -189,11 +205,20 @@ pfr.ppc.o: $(FTSRC)/pfr/pfr.c winfnt.ppc.o: $(FTSRC)/winfonts/winfnt.c $(CC) -c $(CFLAGS) -o $@ $< -BASEPPC = ftbase.ppc.o ftglyph.ppc.o ftbbox.ppc.o ftmm.ppc.o ftsynth.ppc.o +# +# FreeType2 library OpenType validator +# +otvalid.ppc.o: $(FTSRC)/otvalid/otvalid.c + $(CC) -c $(CFLAGS) -o $@ $< + +BASEPPC = ftbase.ppc.o ftbdf.ppc.o ftglyph.ppc.o ftbbox.ppc.o ftmm.ppc.o\ + ftsynth.ppc.o fttype1.ppc.o ftwinfnt.ppc.o DEBUGPPC = ftdebug.ppc.o ftdebugpure.ppc.o -AHINTPPC = autohint.ppc.o ahoptim.ppc.o +AFITPPC = autofit.ppc.o + +OTVPPC = otvalid.ppc.o PSPPC = psaux.ppc.o psnames.ppc.o pshinter.ppc.o @@ -202,6 +227,6 @@ RASTERPPC = raster.ppc.o smooth.ppc.o FONTDPPC = cff.ppc.o type1.ppc.o type42.ppc.o type1cid.ppc.o truetype.ppc.o\ bdf.ppc.o pcf.ppc.o pfr.ppc.o winfnt.ppc.o -libft2_ppc.a: $(BASEPPC) $(AHINTPPC) $(PSPPC) $(RASTERPPC) sfnt.ppc.o ftcache.ppc.o $(FONTDPPC) - $(AR) $@ $(BASEPPC) $(AHINTPPC) $(PSPPC) $(RASTERPPC) sfnt.ppc.o ftcache.ppc.o $(FONTDPPC) +libft2_ppc.a: $(BASEPPC) $(AFITPPC) $(OTVPPC) $(PSPPC) $(RASTERPPC) sfnt.ppc.o ftcache.ppc.o $(FONTDPPC) gzip.ppc.o lzw.ppc.o + $(AR) $@ $(BASEPPC) $(AFITPPC) $(OTVPPC) $(PSPPC) $(RASTERPPC) sfnt.ppc.o ftcache.ppc.o $(FONTDPPC) gzip.ppc.o lzw.ppc.o -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 diff --git a/builds/amiga/makefile.os4 b/builds/amiga/makefile.os4 new file mode 100644 index 000000000..99f226831 --- /dev/null +++ b/builds/amiga/makefile.os4 @@ -0,0 +1,238 @@ +# +# Makefile for FreeType2 link library using gcc 3.4.3 from the +# AmigaOS4 SDK +# +# to build from the builds/amiga directory call +# +# make +# +# Your programs source code should start with this +# (uncomment the parts you do not need to keep the program small): +# ---8<--- +#define FT_USE_AUTOFIT // autofitter +#define FT_USE_RASTER // monochrome rasterizer +#define FT_USE_SMOOTH // anti-aliasing rasterizer +#define FT_USE_TT // truetype font driver +#define FT_USE_T1 // type1 font driver +#define FT_USE_T42 // type42 font driver +#define FT_USE_T1CID // cid-keyed type1 font driver +#define FT_USE_CFF // opentype font driver +#define FT_USE_BDF // bdf bitmap font driver +#define FT_USE_PCF // pcf bitmap font driver +#define FT_USE_PFR // pfr font driver +#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver +#define FT_USE_OTV // opentype validator +#include "FT:src/base/ftinit.c" +# ---8<--- +# +# link your programs with libft2_ppc.a and either ftsystem.ppc.o or ftsystempure.ppc.o +# (and either ftdebug.ppc.o or ftdebugpure.ppc.o if you enabled FT_DEBUG_LEVEL_ERROR or +# FT_DEBUG_LEVEL_TRACE in include/freetype/config/ftoption.h). + +all: assign libft2_ppc.a ftsystem.ppc.o ftsystempure.ppc.o + +assign: + assign FT: // + +CC = ppc-amigaos-gcc +AR = ppc-amigaos-ar +RANLIB = ppc-amigaos-ranlib + +DIRFLAGS = -Iinclude -I/FT/src -I/FT/include -I/SDK/include + +WARNINGS = -Wall -W -Wundef -Wpointer-arith -Wbad-function-cast \ + -Waggregate-return -Wshadow -fno-strict-aliasing + +CPU = -mcpu=604e + +OPTIONS = -DNDEBUG -fno-builtin +OPTIMIZE = -O2 -fomit-frame-pointer -fstrength-reduce -finline-functions + +CFLAGS = $(DIRFLAGS) $(WARNINGS) $(FT2FLAGS) $(CPU) $(OPTIONS) $(OPTIMIZE) + +# +# FreeType2 library base +# +ftbase.ppc.o: FT:src/base/ftbase.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftbase.c + +ftinit.ppc.o: FT:src/base/ftinit.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftinit.c + +ftsystem.ppc.o: FT:src/base/ftsystem.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftsystem.c + +# pure version for use in run-time library etc +ftsystempure.ppc.o: src/base/ftsystem.c + $(CC) -c $(CFLAGS) -o $@ src/base/ftsystem.c + +# +# FreeType2 library base extensions +# +ftbbox.ppc.o: FT:src/base/ftbbox.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftbbox.c + +ftbdf.ppc.o: FT:src/base/ftbdf.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftbdf.c + +ftdebug.ppc.o: FT:src/base/ftdebug.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftdebug.c + +# pure version for use in run-time library etc +ftdebugpure.ppc.o: src/base/ftdebug.c + $(CC) -c $(CFLAGS) -o $@ src/base/ftdebug.c + +ftglyph.ppc.o: FT:src/base/ftglyph.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftglyph.c + +ftmm.ppc.o: FT:src/base/ftmm.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftmm.c + +ftsynth.ppc.o: FT:src/base/ftsynth.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftsynth.c + +fttype1.ppc.o: FT:src/base/fttype1.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/base/fttype1.c + +ftwinfnt.ppc.o: FT:src/base/ftwinfnt.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftwinfnt.c + +# +# FreeType2 library autofitting module +# +autofit.ppc.o: FT:src/autofit/autofit.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/autofit/autofit.c + +# +# FreeType2 library postscript hinting module +# +pshinter.ppc.o: FT:src/pshinter/pshinter.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/pshinter/pshinter.c + +# +# FreeType2 library PS support module +# +psaux.ppc.o: FT:src/psaux/psaux.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/psaux/psaux.c + +# +# FreeType2 library PS glyph names module +# +psnames.ppc.o: FT:src/psnames/psnames.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/psnames/psnames.c + +# +# FreeType2 library monochrome raster module +# +raster.ppc.o: FT:src/raster/raster.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/raster/raster.c + +# +# FreeType2 library anti-aliasing raster module +# +smooth.ppc.o: FT:src/smooth/smooth.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/smooth/smooth.c + +# +# FreeType2 library 'sfnt' module +# +sfnt.ppc.o: FT:src/sfnt/sfnt.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/sfnt/sfnt.c + +# +# FreeType2 library glyph and image caching system +# +ftcache.ppc.o: FT:src/cache/ftcache.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/cache/ftcache.c + +# +# FreeType2 library OpenType font driver +# +cff.ppc.o: FT:src/cff/cff.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/cff/cff.c + +# +# FreeType2 library TrueType font driver +# +truetype.ppc.o: FT:src/truetype/truetype.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/truetype/truetype.c + +# +# FreeType2 library Type1 font driver +# +type1.ppc.o: FT:src/type1/type1.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/type1/type1.c + +# +# FreeType2 library Type42 font driver +# +type42.ppc.o: FT:src/type42/type42.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/type42/type42.c + +# +# FreeType2 library CID-keyed Type1 font driver +# +type1cid.ppc.o: FT:src/cid/type1cid.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/cid/type1cid.c + +# +# FreeType2 library BDF bitmap font driver +# +bdf.ppc.o: FT:src/bdf/bdf.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/bdf/bdf.c + +# +# FreeType2 library PCF bitmap font driver +# +pcf.ppc.o: FT:src/pcf/pcf.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/pcf/pcf.c + +# +# FreeType2 library gzip support for compressed PCF bitmap fonts +# +gzip.ppc.o: FT:src/gzip/ftgzip.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/gzip/ftgzip.c + +# +# FreeType2 library compress support for compressed PCF bitmap fonts +# +lzw.ppc.o: FT:src/lzw/ftlzw.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/lzw/ftlzw.c + +# +# FreeType2 library PFR font driver +# +pfr.ppc.o: FT:src/pfr/pfr.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/pfr/pfr.c + +# +# FreeType2 library Windows FNT/FON bitmap font driver +# +winfnt.ppc.o: FT:src/winfonts/winfnt.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/winfonts/winfnt.c + +# +# FreeType2 library OpenType validator +# +otvalid.ppc.o: FT:src/otvalid/otvalid.c + $(CC) -c $(CFLAGS) -o $@ /FT/src/otvalid/otvalid.c + +BASE = ftbase.ppc.o ftbdf.ppc.o ftglyph.ppc.o ftbbox.ppc.o ftmm.ppc.o\ + ftsynth.ppc.o fttype1.ppc.o ftwinfnt.ppc.o + +DEBUG = ftdebug.ppc.o ftdebugpure.ppc.o + +AFIT = autofit.ppc.o + +OTV = otvalid.ppc.o + +PS = psaux.ppc.o psnames.ppc.o pshinter.ppc.o + +RASTER = raster.ppc.o smooth.ppc.o + +FONTD = cff.ppc.o type1.ppc.o type42.ppc.o type1cid.ppc.o truetype.ppc.o\ + bdf.ppc.o pcf.ppc.o pfr.ppc.o winfnt.ppc.o + +libft2_ppc.a: $(BASE) $(AFIT) $(OTV) $(PS) $(RASTER) sfnt.ppc.o ftcache.ppc.o $(FONTD) gzip.ppc.o lzw.ppc.o + $(AR) r $@ $(BASE) $(AFIT) $(OTV) $(PS) $(RASTER) sfnt.ppc.o ftcache.ppc.o $(FONTD) gzip.ppc.o lzw.ppc.o + $(RANLIB) $@ diff --git a/builds/amiga/smakefile b/builds/amiga/smakefile index c8b3e6cd5..5b39bb048 100644 --- a/builds/amiga/smakefile +++ b/builds/amiga/smakefile @@ -9,18 +9,19 @@ # Your programs source code should start with this # (uncomment the parts you do not need to keep the program small): # ---8<--- -#define FT_USE_AUTOHINT // autohinter -#define FT_USE_RASTER // monochrome rasterizer -#define FT_USE_SMOOTH // anti-aliasing rasterizer -#define FT_USE_TT // truetype font driver -#define FT_USE_T1 // type1 font driver -#define FT_USE_T42 // type42 font driver -#define FT_USE_T1CID // cid-keyed type1 font driver -#define FT_USE_CFF // opentype font driver -#define FT_USE_BDF // bdf bitmap font driver -#define FT_USE_PCF // pcf bitmap font driver -#define FT_USE_PFR // pfr font driver -#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver +#define FT_USE_AUTOFIT // autofitter +#define FT_USE_RASTER // monochrome rasterizer +#define FT_USE_SMOOTH // anti-aliasing rasterizer +#define FT_USE_TT // truetype font driver +#define FT_USE_T1 // type1 font driver +#define FT_USE_T42 // type42 font driver +#define FT_USE_T1CID // cid-keyed type1 font driver +#define FT_USE_CFF // opentype font driver +#define FT_USE_BDF // bdf bitmap font driver +#define FT_USE_PCF // pcf bitmap font driver +#define FT_USE_PFR // pfr font driver +#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver +#define FT_USE_OTV // opentype validator #include "FT:src/base/ftinit.c" # ---8<--- # @@ -28,32 +29,24 @@ # (and either ftdebug.o or ftdebugpure.o if you enabled FT_DEBUG_LEVEL_ERROR or # FT_DEBUG_LEVEL_TRACE in include/freetype/config/ftoption.h). -OBJBASE = ftbase.o ftglyph.o ftbbox.o ftmm.o ftsynth.o +OBJBASE = ftbase.o ftbdf.o ftglyph.o ftbbox.o ftmm.o ftsynth.o fttype1.o ftwinfnt.o OBJSYSTEM = ftsystem.o ftsystempure.o OBJDEBUG = ftdebug.o ftdebugpure.o -OBJAHINT = autohint.o ahoptim.o +OBJAFIT = autofit.o -OBJPSHINT = pshinter.o +OBJOTV = otvalid.o -OBJPSAUX = psaux.o +OBJPS = psaux.o psnames.o pshinter.o -OBJPSNAM = psnames.o - -OBJRAST = raster.o - -OBJSMOOTH = smooth.o +OBJRASTER = raster.o smooth.o OBJSFNT = sfnt.o OBJCACHE = ftcache.o -OBJPS = $(OBJPSAUX) $(OBJPSNAM) $(OBJPSHINT) - -OBJRASTER = $(OBJRAST) $(OBJSMOOTH) - OBJFONTD = cff.o type1.o type42.o type1cid.o\ truetype.o winfnt.o bdf.o pcf.o pfr.o @@ -88,8 +81,8 @@ assign: # uses separate object modules in lib to make for easier debugging # also, can make smaller programs if entire engine is not used -ft2_$(CPU).lib: $(OBJBASE) $(OBJAHINT) $(OBJPS) $(OBJRASTER) $(OBJSFNT) $(OBJCACHE) $(OBJFONTD) - oml $@ r $(OBJBASE) $(OBJAHINT) $(OBJPS) $(OBJRASTER) $(OBJSFNT) $(OBJCACHE) $(OBJFONTD) +ft2_$(CPU).lib: $(OBJBASE) $(OBJAFIT) $(OBJOTV) $(OBJPS) $(OBJRASTER) $(OBJSFNT) $(OBJCACHE) $(OBJFONTD) lzw.o # gzip.o + oml $@ r $(OBJBASE) $(OBJAFIT) $(OBJOTV) $(OBJPS) $(OBJRASTER) $(OBJSFNT) $(OBJCACHE) $(OBJFONTD) lzw.o clean: -delete \#?.o @@ -115,24 +108,25 @@ ftdebugpure.o: src/base/ftdebug.c ## pure version for use in run-time library et # # freetype library base extensions # -ftglyph.o: $(CORE)base/ftglyph.c - sc $(SCFLAGS) objname=$@ $< ftbbox.o: $(CORE)base/ftbbox.c sc $(SCFLAGS) objname=$@ $< +ftbdf.o: $(CORE)base/ftbdf.c + sc $(SCFLAGS) objname=$@ $< +ftglyph.o: $(CORE)base/ftglyph.c + sc $(SCFLAGS) objname=$@ $< ftmm.o: $(CORE)base/ftmm.c sc $(SCFLAGS) objname=$@ $< ftsynth.o: $(CORE)base/ftsynth.c sc $(SCFLAGS) objname=$@ $< +fttype1.o: $(CORE)base/fttype1.c + sc $(SCFLAGS) objname=$@ $< +ftwinfnt.o: $(CORE)base/ftwinfnt.c + sc $(SCFLAGS) objname=$@ $< # -# freetype library autohinting module +# freetype library autofitter module # -autohint.o: $(CORE)autohint/autohint.c - sc $(SCFLAGS) objname=$@ $< -# -# freetype library autohinting module extensions -# -ahoptim.o: $(CORE)autohint/ahoptim.c +autofit.o: $(CORE)autofit/autofit.c sc $(SCFLAGS) objname=$@ $< # @@ -223,6 +217,18 @@ bdf.o: $(CORE)bdf/bdf.c pcf.o: $(CORE)pcf/pcf.c sc $(SCFLAGS) objname=$@ $< +# +# freetype library gzip support for compressed PCF bitmap fonts +# +gzip.o: $(CORE)gzip/ftgzip.c + sc $(SCFLAGS) objname=$@ $< + +# +# freetype library compress support for compressed PCF bitmap fonts +# +lzw.o: $(CORE)lzw/ftlzw.c + sc $(SCFLAGS) objname=$@ $< + # # freetype library PFR font driver # @@ -234,3 +240,9 @@ pfr.o: $(CORE)pfr/pfr.c # winfnt.o: $(CORE)winfonts/winfnt.c sc $(SCFLAGS) objname=$@ $< + +# +# freetype library OpenType validator +# +otvalid.o: $(CORE)otvalid/otvalid.c + sc $(SCFLAGS) objname=$@ $< diff --git a/builds/amiga/src/base/ftdebug.c b/builds/amiga/src/base/ftdebug.c index a61868746..0f4b81a16 100644 --- a/builds/amiga/src/base/ftdebug.c +++ b/builds/amiga/src/base/ftdebug.c @@ -1,5 +1,23 @@ -// TetiSoft: replaced vprintf() with KVPrintF() and commented out exit() -extern void __stdargs KVPrintF( const char *formatString, const void *values ); +/* + * TetiSoft: replaced vprintf() with KVPrintF(), commented out exit(), + * and replaced getenv() with GetVar() + */ + +#include +#include +#include +#include +#define __NOLIBBASE__ +#define __NOLOBALIFACE__ +#define __USE_INLINE__ +#include +#include + +#ifndef __amigaos4__ +extern struct Library *DOSBase; +#else +extern struct DOSIFace *IDOS; +#endif /***************************************************************************/ /* */ @@ -7,7 +25,7 @@ extern void __stdargs KVPrintF( const char *formatString, const void *values ); /* */ /* Debugging and logging component (body). */ /* */ -/* Copyright 1996-2001 by */ +/* Copyright 1996-2001, 2002, 2004 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -45,20 +63,13 @@ extern void __stdargs KVPrintF( const char *formatString, const void *values ); #include +#include FT_FREETYPE_H #include FT_INTERNAL_DEBUG_H -#ifdef FT_DEBUG_LEVEL_TRACE - char ft_trace_levels[trace_max]; -#endif - - -#if defined( FT_DEBUG_LEVEL_ERROR ) || defined( FT_DEBUG_LEVEL_TRACE ) - - -#include -#include +#if defined( FT_DEBUG_LEVEL_ERROR ) + /* documentation is in ftdebug.h */ FT_EXPORT_DEF( void ) FT_Message( const char* fmt, ... ) @@ -67,12 +78,14 @@ extern void __stdargs KVPrintF( const char *formatString, const void *values ); va_start( ap, fmt ); -// vprintf( fmt, ap ); +/* vprintf( fmt, ap ); */ KVPrintF( fmt, ap ); va_end( ap ); } + /* documentation is in ftdebug.h */ + FT_EXPORT_DEF( void ) FT_Panic( const char* fmt, ... ) { @@ -80,29 +93,87 @@ extern void __stdargs KVPrintF( const char *formatString, const void *values ); va_start( ap, fmt ); -// vprintf( fmt, ap ); +/* vprintf( fmt, ap ); */ KVPrintF( fmt, ap ); va_end( ap ); -// exit( EXIT_FAILURE ); +/* exit( EXIT_FAILURE ); */ + } + +#endif /* FT_DEBUG_LEVEL_ERROR */ + + + +#ifdef FT_DEBUG_LEVEL_TRACE + + /* array of trace levels, initialized to 0 */ + int ft_trace_levels[trace_count]; + + + /* define array of trace toggle names */ +#define FT_TRACE_DEF( x ) #x , + + static const char* ft_trace_toggles[trace_count + 1] = + { +#include FT_INTERNAL_TRACE_H + NULL + }; + +#undef FT_TRACE_DEF + + + /* documentation is in ftdebug.h */ + + FT_EXPORT_DEF( FT_Int ) + FT_Trace_Get_Count( void ) + { + return trace_count; } + /* documentation is in ftdebug.h */ - /* since I don't know wether "getenv" is available on the Amiga */ - /* I prefer to simply disable this code for now in all builds */ - /* */ + FT_EXPORT_DEF( const char * ) + FT_Trace_Get_Name( FT_Int idx ) + { + int max = FT_Trace_Get_Count(); -/* #ifdef FT_DEBUG_LEVEL_TRACE */ -#if 0 + if ( idx < max ) + return ft_trace_toggles[idx]; + else + return NULL; + } + + + /*************************************************************************/ + /* */ + /* Initialize the tracing sub-system. This is done by retrieving the */ + /* value of the `FT2_DEBUG' environment variable. It must be a list of */ + /* toggles, separated by spaces, `;', or `,'. Example: */ + /* */ + /* export FT2_DEBUG="any:3 memory:7 stream:5" */ + /* */ + /* This requests that all levels be set to 3, except the trace level for */ + /* the memory and stream components which are set to 7 and 5, */ + /* respectively. */ + /* */ + /* See the file for details of the */ + /* available toggle names. */ + /* */ + /* The level must be between 0 and 7; 0 means quiet (except for serious */ + /* runtime errors), and 7 means _very_ verbose. */ + /* */ FT_BASE_DEF( void ) ft_debug_init( void ) { - const char* ft2_debug = getenv( "FT2_DEBUG" ); +/* const char* ft2_debug = getenv( "FT2_DEBUG" ); */ + char buf[256]; + const char* ft2_debug = &buf[0]; - if ( ft2_debug ) +/* if ( ft2_debug ) */ + if ( GetVar( "FT2_DEBUG", (STRPTR)ft2_debug, 256, LV_VAR ) > 0 ) { const char* p = ft2_debug; const char* q; @@ -114,15 +185,15 @@ extern void __stdargs KVPrintF( const char *formatString, const void *values ); if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' ) continue; - /* read toggle name, followed by '=' */ + /* read toggle name, followed by ':' */ q = p; while ( *p && *p != ':' ) p++; if ( *p == ':' && p > q ) { - int n, i, len = p - q; - int level = -1, found = -1; + FT_Int n, i, len = (FT_Int)( p - q ); + FT_Int level = -1, found = -1; for ( n = 0; n < trace_count; n++ ) @@ -148,7 +219,7 @@ extern void __stdargs KVPrintF( const char *formatString, const void *values ); if ( *p ) { level = *p++ - '0'; - if ( level < 0 || level > 6 ) + if ( level < 0 || level > 7 ) level = -1; } @@ -156,7 +227,7 @@ extern void __stdargs KVPrintF( const char *formatString, const void *values ); { if ( found == trace_any ) { - /* special case for "any" */ + /* special case for `any' */ for ( n = 0; n < trace_count; n++ ) ft_trace_levels[n] = level; } @@ -179,6 +250,22 @@ extern void __stdargs KVPrintF( const char *formatString, const void *values ); } + FT_EXPORT_DEF( FT_Int ) + FT_Trace_Get_Count( void ) + { + return 0; + } + + + FT_EXPORT_DEF( const char * ) + FT_Trace_Get_Name( FT_Int idx ) + { + FT_UNUSED( idx ); + + return NULL; + } + + #endif /* !FT_DEBUG_LEVEL_TRACE */ diff --git a/builds/amiga/src/base/ftsystem.c b/builds/amiga/src/base/ftsystem.c index e76d4161e..2fb778c58 100644 --- a/builds/amiga/src/base/ftsystem.c +++ b/builds/amiga/src/base/ftsystem.c @@ -24,66 +24,48 @@ /*************************************************************************/ -// Maintained by Detlef Würkner +/* Maintained by Detlef Würkner */ -// TetiSoft: Modified to avoid fopen() fclose() fread() fseek() ftell() -// malloc() realloc() and free() which can't be used in an amiga -// shared run-time library linked with libinit.o - -#include - -#ifdef __GNUC__ -// Avoid warnings "struct X declared inside parameter list" -#include -#include -#include -#include -#endif - -// Necessary with OS3.9 includes -#define __USE_SYSBASE - -#include -#include - -#ifndef __GNUC__ -/* TetiSoft: Missing in alib_protos.h, see amiga.lib autodoc - * (These amiga.lib functions work under AmigaOS V33 and up) +/* TetiSoft: Modified to avoid fopen() fclose() fread() fseek() ftell() + * malloc() realloc() and free(). + * We need exec V39+ because we use AllocPooled() etc. */ -extern APTR __asm -AsmCreatePool( register __d0 ULONG memFlags, - register __d1 ULONG puddleSize, - register __d2 ULONG threshSize, - register __a6 struct ExecBase* SysBase ); -extern VOID __asm -AsmDeletePool( register __a0 APTR poolHeader, - register __a6 struct ExecBase* SysBase ); - -extern APTR __asm -AsmAllocPooled( register __a0 APTR poolHeader, - register __d0 ULONG memSize, - register __a6 struct ExecBase* SysBase ); - -extern VOID __asm -AsmFreePooled( register __a0 APTR poolHeader, - register __a1 APTR memory, - register __d0 ULONG memSize, - register __a6 struct ExecBase* SysBase); +#define __NOLIBBASE__ +#define __NOGLOBALIFACE__ +#define __USE_INLINE__ +#include +#include +#include +#ifdef __amigaos4__ +extern struct ExecIFace *IExec; +extern struct DOSIFace *IDOS; +#else +extern struct Library *SysBase; +extern struct Library *DOSBase; #endif +#define IOBUF_SIZE 512 -// TetiSoft: C implementation of AllocVecPooled (see autodoc exec/AllocPooled) +/* structure that helps us to avoid + * useless calls of Seek() and Read() + */ +struct SysFile +{ + BPTR file; + ULONG iobuf_start; + ULONG iobuf_end; + UBYTE iobuf[IOBUF_SIZE]; +}; + +#ifndef __amigaos4__ +/* C implementation of AllocVecPooled (see autodoc exec/AllocPooled) */ APTR -AllocVecPooled( APTR poolHeader, - ULONG memSize ) +Alloc_VecPooled( APTR poolHeader, + ULONG memSize ) { ULONG newSize = memSize + sizeof ( ULONG ); -#ifdef __GNUC__ ULONG *mem = AllocPooled( poolHeader, newSize ); -#else - ULONG *mem = AsmAllocPooled( poolHeader, newSize, SysBase ); -#endif if ( !mem ) return NULL; @@ -91,21 +73,16 @@ AllocVecPooled( APTR poolHeader, return mem + 1; } - -// TetiSoft: C implementation of FreeVecPooled (see autodoc exec/AllocPooled) +/* C implementation of FreeVecPooled (see autodoc exec/AllocPooled) */ void -FreeVecPooled( APTR poolHeader, - APTR memory ) +Free_VecPooled( APTR poolHeader, + APTR memory ) { ULONG *realmem = (ULONG *)memory - 1; -#ifdef __GNUC__ FreePooled( poolHeader, realmem, *realmem ); -#else - AsmFreePooled( poolHeader, realmem, *realmem, SysBase ); -#endif } - +#endif #include #include FT_CONFIG_CONFIG_H @@ -154,10 +131,11 @@ FreeVecPooled( APTR poolHeader, ft_alloc( FT_Memory memory, long size ) { -// FT_UNUSED( memory ); - -// return malloc( size ); +#ifdef __amigaos4__ return AllocVecPooled( memory->user, size ); +#else + return Alloc_VecPooled( memory->user, size ); +#endif } @@ -187,19 +165,22 @@ FreeVecPooled( APTR poolHeader, long new_size, void* block ) { -// FT_UNUSED( memory ); -// FT_UNUSED( cur_size ); - -// return realloc( block, new_size ); - void* new_block; +#ifdef __amigaos4__ new_block = AllocVecPooled ( memory->user, new_size ); +#else + new_block = Alloc_VecPooled ( memory->user, new_size ); +#endif if ( new_block != NULL ) { CopyMem ( block, new_block, ( new_size > cur_size ) ? cur_size : new_size ); +#ifdef __amigaos4__ FreeVecPooled ( memory->user, block ); +#else + Free_VecPooled ( memory->user, block ); +#endif } return new_block; } @@ -214,19 +195,19 @@ FreeVecPooled( APTR poolHeader, /* The memory release function. */ /* */ /* */ - /* memory :: A pointer to the memory object. */ + /* memory :: A pointer to the memory object. */ /* */ - /* block :: The address of block in memory to be freed. */ + /* block :: The address of block in memory to be freed. */ /* */ FT_CALLBACK_DEF( void ) ft_free( FT_Memory memory, void* block ) { -// FT_UNUSED( memory ); - -// free( block ); - +#ifdef __amigaos4__ FreeVecPooled( memory->user, block ); +#else + Free_VecPooled( memory->user, block ); +#endif } @@ -248,14 +229,13 @@ FreeVecPooled( APTR poolHeader, /* We use the macro STREAM_FILE for convenience to extract the */ /* system-specific stream handle from a given FreeType stream object */ -// #define STREAM_FILE( stream ) ( (FILE*)stream->descriptor.pointer ) -#define STREAM_FILE( stream ) ( (BPTR)stream->descriptor.pointer ) // TetiSoft +#define STREAM_FILE( stream ) ( (struct SysFile *)stream->descriptor.pointer ) /*************************************************************************/ /* */ /* */ - /* ft_close_stream */ + /* ft_amiga_stream_close */ /* */ /* */ /* The function to close a stream. */ @@ -264,10 +244,13 @@ FreeVecPooled( APTR poolHeader, /* stream :: A pointer to the stream object. */ /* */ FT_CALLBACK_DEF( void ) - ft_close_stream( FT_Stream stream ) + ft_amiga_stream_close( FT_Stream stream ) { -// fclose( STREAM_FILE( stream ) ); - Close( STREAM_FILE( stream ) ); // TetiSoft + struct SysFile* sysfile; + + sysfile = STREAM_FILE( stream ); + Close ( sysfile->file ); + FreeMem ( sysfile, sizeof ( struct SysFile )); stream->descriptor.pointer = NULL; stream->size = 0; @@ -278,7 +261,7 @@ FreeVecPooled( APTR poolHeader, /*************************************************************************/ /* */ /* */ - /* ft_io_stream */ + /* ft_amiga_stream_io */ /* */ /* */ /* The function to open a stream. */ @@ -296,22 +279,89 @@ FreeVecPooled( APTR poolHeader, /* The number of bytes actually read. */ /* */ FT_CALLBACK_DEF( unsigned long ) - ft_io_stream( FT_Stream stream, - unsigned long offset, - unsigned char* buffer, - unsigned long count ) + ft_amiga_stream_io( FT_Stream stream, + unsigned long offset, + unsigned char* buffer, + unsigned long count ) { -// FILE* file; - BPTR file; // TetiSoft + struct SysFile* sysfile; + unsigned long read_bytes; + if ( count != 0 ) + { + sysfile = STREAM_FILE( stream ); - file = STREAM_FILE( stream ); + /* handle the seek */ + if ( (offset < sysfile->iobuf_start) || (offset + count > sysfile->iobuf_end) ) + { + /* requested offset implies we need a buffer refill */ + if ( !sysfile->iobuf_end || offset != (sysfile->iobuf_end + 1) ) + { + /* a physical seek is necessary */ + Seek( sysfile->file, offset, OFFSET_BEGINNING ); + } + sysfile->iobuf_start = offset; + sysfile->iobuf_end = 0; /* trigger a buffer refill */ + } -// fseek( file, offset, SEEK_SET ); - Seek( file, offset, OFFSET_BEGINNING ); // TetiSoft + /* handle the read */ + if ( offset + count <= sysfile->iobuf_end ) + { + /* we have buffer and requested bytes are all inside our buffer */ + CopyMem( &sysfile->iobuf[offset - sysfile->iobuf_start], buffer, count ); + read_bytes = count; + } + else + { + /* (re)fill buffer */ + if ( count <= IOBUF_SIZE ) + { + /* requested bytes is a subset of the buffer */ + read_bytes = Read( sysfile->file, sysfile->iobuf, IOBUF_SIZE ); + if ( read_bytes == -1UL ) + { + /* error */ + read_bytes = 0; + } + else + { + sysfile->iobuf_end = offset + read_bytes; + CopyMem( sysfile->iobuf, buffer, count ); + if ( read_bytes > count ) + { + read_bytes = count; + } + } + } + else + { + /* we actually need more than our buffer can hold, so we decide + ** to do a single big read, and then copy the last IOBUF_SIZE + ** bytes of that to our internal buffer for later use */ + read_bytes = Read( sysfile->file, buffer, count ); + if ( read_bytes == -1UL ) + { + /* error */ + read_bytes = 0; + } + else + { + ULONG bufsize; -// return (unsigned long)fread( buffer, 1, count, file ); - return (unsigned long)FRead( file, buffer, 1, count); + bufsize = ( read_bytes > IOBUF_SIZE ) ? IOBUF_SIZE : read_bytes; + sysfile->iobuf_end = offset + read_bytes - bufsize; + sysfile->iobuf_start = sysfile->iobuf_end - bufsize; + CopyMem( &buffer[read_bytes - bufsize] , sysfile->iobuf, bufsize ); + } + } + } + } + else + { + read_bytes = 0; + } + + return read_bytes; } @@ -321,40 +371,50 @@ FreeVecPooled( APTR poolHeader, FT_Stream_Open( FT_Stream stream, const char* filepathname ) { -// FILE* file; - BPTR file; // TetiSoft - struct FileInfoBlock* fib; // TetiSoft + struct FileInfoBlock* fib; + struct SysFile* sysfile; if ( !stream ) return FT_Err_Invalid_Stream_Handle; -// file = fopen( filepathname, "rb" ); - file = Open( filepathname, MODE_OLDFILE ); // TetiSoft - if ( !file ) +#ifdef __amigaos4__ + sysfile = AllocMem ( sizeof (struct SysFile ), MEMF_SHARED ); +#else + sysfile = AllocMem ( sizeof (struct SysFile ), MEMF_PUBLIC ); +#endif + if ( !sysfile ) { FT_ERROR(( "FT_Stream_Open:" )); FT_ERROR(( " could not open `%s'\n", filepathname )); return FT_Err_Cannot_Open_Resource; } + sysfile->file = Open( (STRPTR)filepathname, MODE_OLDFILE ); + if ( !sysfile->file ) + { + FreeMem ( sysfile, sizeof ( struct SysFile )); + FT_ERROR(( "FT_Stream_Open:" )); + FT_ERROR(( " could not open `%s'\n", filepathname )); + + return FT_Err_Cannot_Open_Resource; + } -// fseek( file, 0, SEEK_END ); -// astream->size = ftell( file ); -// fseek( file, 0, SEEK_SET ); fib = AllocDosObject( DOS_FIB, NULL ); if ( !fib ) { - Close ( file ); + Close ( sysfile->file ); + FreeMem ( sysfile, sizeof ( struct SysFile )); FT_ERROR(( "FT_Stream_Open:" )); FT_ERROR(( " could not open `%s'\n", filepathname )); return FT_Err_Cannot_Open_Resource; } - if ( !( ExamineFH( file, fib ) ) ) + if ( !( ExamineFH( sysfile->file, fib ) ) ) { FreeDosObject( DOS_FIB, fib ); - Close ( file ); + Close ( sysfile->file ); + FreeMem ( sysfile, sizeof ( struct SysFile )); FT_ERROR(( "FT_Stream_Open:" )); FT_ERROR(( " could not open `%s'\n", filepathname )); @@ -363,17 +423,17 @@ FreeVecPooled( APTR poolHeader, stream->size = fib->fib_Size; FreeDosObject( DOS_FIB, fib ); -// stream->descriptor.pointer = file; - stream->descriptor.pointer = (void *)file; - + stream->descriptor.pointer = (void *)sysfile; stream->pathname.pointer = (char*)filepathname; + sysfile->iobuf_start = 0; + sysfile->iobuf_end = 0; stream->pos = 0; - stream->read = ft_io_stream; - stream->close = ft_close_stream; + stream->read = ft_amiga_stream_io; + stream->close = ft_amiga_stream_close; FT_TRACE1(( "FT_Stream_Open:" )); - FT_TRACE1(( " opened `%s' (%d bytes) successfully\n", + FT_TRACE1(( " opened `%s' (%ld bytes) successfully\n", filepathname, stream->size )); return FT_Err_Ok; @@ -387,7 +447,7 @@ FreeVecPooled( APTR poolHeader, extern void ft_mem_debug_done( FT_Memory memory ); - + #endif @@ -399,15 +459,17 @@ FreeVecPooled( APTR poolHeader, FT_Memory memory; -// memory = (FT_Memory)malloc( sizeof ( *memory ) ); +#ifdef __amigaos4__ + memory = (FT_Memory)AllocVec( sizeof ( *memory ), MEMF_SHARED ); +#else memory = (FT_Memory)AllocVec( sizeof ( *memory ), MEMF_PUBLIC ); +#endif if ( memory ) { -// memory->user = 0; -#ifdef __GNUC__ - memory->user = CreatePool( MEMF_PUBLIC, 2048, 2048 ); +#ifdef __amigaos4__ + memory->user = CreatePool( MEMF_SHARED, 16384, 16384 ); #else - memory->user = AsmCreatePool( MEMF_PUBLIC, 2048, 2048, SysBase ); + memory->user = CreatePool( MEMF_PUBLIC, 16384, 16384 ); #endif if ( memory->user == NULL ) { @@ -421,7 +483,7 @@ FreeVecPooled( APTR poolHeader, memory->free = ft_free; #ifdef FT_DEBUG_MEMORY ft_mem_debug_init( memory ); -#endif +#endif } } @@ -436,15 +498,10 @@ FreeVecPooled( APTR poolHeader, { #ifdef FT_DEBUG_MEMORY ft_mem_debug_done( memory ); -#endif +#endif -#ifdef __GNUC__ DeletePool( memory->user ); -#else - AsmDeletePool( memory->user, SysBase ); -#endif FreeVec( memory ); } - /* END */