ref: 61c2c33ac63bf86754f078faec747627670d0112
parent: c740c19112373983c5ef56d653f9d19515b61f09
author: Werner Lemberg <[email protected]>
date: Fri Mar 25 17:18:01 EST 2005
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.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,29 @@
+2005-03-25 Detlef W�rkner <[email protected]>
+
+ 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 <[email protected]>
* tests/*: Removed.
--- 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 @@
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 @@
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).
--- a/builds/amiga/include/freetype/config/ftconfig.h
+++ b/builds/amiga/include/freetype/config/ftconfig.h
@@ -9,7 +9,11 @@
// 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
--- 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,16 +55,20 @@
#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
FT_USE_MODULE(cff_driver_class)
#endif
@@ -72,18 +77,22 @@
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_PCF
-FT_USE_MODULE(pcf_driver_class)
+#ifdef FT_USE_T42
+FT_USE_MODULE(t42_driver_class)
#endif
-#ifdef FT_USE_PFR
-FT_USE_MODULE(pfr_driver_class)
+#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_PSAUX
FT_USE_MODULE(psaux_module_class)
#endif
@@ -92,6 +101,10 @@
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_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
--- 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,12 +70,15 @@
#
# 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
$(CC) -c $(CFLAGS) -o $@ $<
@@ -81,16 +85,16 @@
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 @@
$(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 $@ $<
@@ -178,6 +182,18 @@
$(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
#
pfr.ppc.o: $(FTSRC)/pfr/pfr.c
@@ -189,12 +205,21 @@
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
RASTERPPC = raster.ppc.o smooth.ppc.o
@@ -202,6 +227,6 @@
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
--- /dev/null
+++ b/builds/amiga/makefile.os4
@@ -1,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) $@
--- 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
+OBJRASTER = raster.o smooth.o
-OBJRAST = raster.o
-
-OBJSMOOTH = 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 @@
# 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,25 +108,26 @@
#
# 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
+autofit.o: $(CORE)autofit/autofit.c
sc $(SCFLAGS) objname=$@ $<
-#
-# freetype library autohinting module extensions
-#
-ahoptim.o: $(CORE)autohint/ahoptim.c
- sc $(SCFLAGS) objname=$@ $<
#
# freetype library PS hinting module
@@ -224,6 +218,18 @@
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
#
pfr.o: $(CORE)pfr/pfr.c
@@ -233,4 +239,10 @@
# freetype library Windows FNT/FON bitmap font driver
#
winfnt.o: $(CORE)winfonts/winfnt.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library OpenType validator
+#
+otvalid.o: $(CORE)otvalid/otvalid.c
sc $(SCFLAGS) objname=$@ $<
--- a/builds/amiga/src/base/ftdebug.c
+++ b/builds/amiga/src/base/ftdebug.c
@@ -1,6 +1,24 @@
-// 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 <exec/types.h>
+#include <utility/tagitem.h>
+#include <dos/exall.h>
+#include <dos/var.h>
+#define __NOLIBBASE__
+#define __NOLOBALIFACE__
+#define __USE_INLINE__
+#include <proto/dos.h>
+#include <clib/debug_protos.h>
+
+#ifndef __amigaos4__
+extern struct Library *DOSBase;
+#else
+extern struct DOSIFace *IDOS;
+#endif
+
/***************************************************************************/
/* */
/* ftdebug.c */
@@ -7,7 +25,7 @@
/* */
/* 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,21 +63,14 @@
#include <ft2build.h>
+#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 )
+ /* documentation is in ftdebug.h */
-#if defined( FT_DEBUG_LEVEL_ERROR ) || defined( FT_DEBUG_LEVEL_TRACE )
-
-
-#include <stdarg.h>
-#include <stdlib.h>
-
-
FT_EXPORT_DEF( void )
FT_Message( const char* fmt, ... )
{
@@ -67,12 +78,14 @@
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 @@
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 */
- /* since I don't know wether "getenv" is available on the Amiga */
- /* I prefer to simply disable this code for now in all builds */
- /* */
-/* #ifdef FT_DEBUG_LEVEL_TRACE */
-#if 0
+#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 */
+
+ FT_EXPORT_DEF( const char * )
+ FT_Trace_Get_Name( FT_Int idx )
+ {
+ int max = FT_Trace_Get_Count();
+
+
+ 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 <include/freetype/internal/fttrace.h> 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,7 +185,7 @@
if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' )
continue;
- /* read toggle name, followed by '=' */
+ /* read toggle name, followed by ':' */
q = p;
while ( *p && *p != ':' )
p++;
@@ -121,8 +192,8 @@
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 @@
if ( *p )
{
level = *p++ - '0';
- if ( level < 0 || level > 6 )
+ if ( level < 0 || level > 7 )
level = -1;
}
@@ -156,7 +227,7 @@
{
if ( found == trace_any )
{
- /* special case for "any" */
+ /* special case for `any' */
for ( n = 0; n < trace_count; n++ )
ft_trace_levels[n] = level;
}
@@ -176,6 +247,22 @@
ft_debug_init( void )
{
/* nothing */
+ }
+
+
+ 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;
}
--- a/builds/amiga/src/base/ftsystem.c
+++ b/builds/amiga/src/base/ftsystem.c
@@ -24,66 +24,48 @@
/*************************************************************************/
-// Maintained by Detlef W�rkner <[email protected]>
+/* Maintained by Detlef W�rkner <[email protected]> */
-// 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
+/* TetiSoft: Modified to avoid fopen() fclose() fread() fseek() ftell()
+ * malloc() realloc() and free().
+ * We need exec V39+ because we use AllocPooled() etc.
+ */
-#include <exec/memory.h>
-
-#ifdef __GNUC__
-// Avoid warnings "struct X declared inside parameter list"
-#include <exec/devices.h>
-#include <exec/io.h>
-#include <exec/semaphores.h>
-#include <dos/exall.h>
-#endif
-
-// Necessary with OS3.9 includes
-#define __USE_SYSBASE
-
+#define __NOLIBBASE__
+#define __NOGLOBALIFACE__
+#define __USE_INLINE__
#include <proto/exec.h>
+#include <dos/stdio.h>
#include <proto/dos.h>
-
-#ifndef __GNUC__
-/* TetiSoft: Missing in alib_protos.h, see amiga.lib autodoc
- * (These amiga.lib functions work under AmigaOS V33 and up)
- */
-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);
+#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,22 +73,17 @@
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 <ft2build.h>
#include FT_CONFIG_CONFIG_H
#include FT_INTERNAL_DEBUG_H
@@ -154,10 +131,11 @@
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 @@
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 @@
/* The memory release function. */
/* */
/* <Input> */
- /* 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 @@
/* 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 )
/*************************************************************************/
/* */
/* <Function> */
- /* ft_close_stream */
+ /* ft_amiga_stream_close */
/* */
/* <Description> */
/* The function to close a stream. */
@@ -264,11 +244,14 @@
/* 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;
stream->base = 0;
@@ -278,7 +261,7 @@
/*************************************************************************/
/* */
/* <Function> */
- /* ft_io_stream */
+ /* ft_amiga_stream_io */
/* */
/* <Description> */
/* The function to open a stream. */
@@ -296,22 +279,89 @@
/* 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,17 +371,19 @@
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 ));
@@ -338,23 +390,31 @@
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 ));
-// fseek( file, 0, SEEK_END );
-// astream->size = ftell( file );
-// fseek( file, 0, SEEK_SET );
+ return FT_Err_Cannot_Open_Resource;
+ }
+
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 @@
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 @@
extern void
ft_mem_debug_done( FT_Memory memory );
-
+
#endif
@@ -399,15 +459,17 @@
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 @@
memory->free = ft_free;
#ifdef FT_DEBUG_MEMORY
ft_mem_debug_init( memory );
-#endif
+#endif
}
}
@@ -436,15 +498,10 @@
{
#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 */