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 */