- All "common" ANSI files were moved to "freetype2/config" - The modules list is in "config" now (instead of config/<system>") - All system-specific configuration Makefiles have been renamed. E.g. "config/win32/Makefile.gcc" is now "config/win32/w32-gcc.mk" - Updated "config/freetype.mk" and "config/modules.mk"VER-2-0-4-PATCH
parent
587bc78f86
commit
7bda46d094
50 changed files with 1670 additions and 7269 deletions
@ -1,199 +0,0 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for a `normal' ANSI compiler
|
||||
#*
|
||||
#* Copyright 1996-1999 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#*
|
||||
#* The purpose of this sub-Makefile is to define various build and
|
||||
#* platform specific variables before including the sub-Makefile
|
||||
#* containing the FreeType library rules, found in
|
||||
#*
|
||||
#* $(TOP)/config/freetype.mk
|
||||
#*
|
||||
#* The following variables must be defined before including this
|
||||
#* file :
|
||||
#*
|
||||
#* TOP Pathname to the top of the FreeType sources
|
||||
#* hierarchy
|
||||
#*
|
||||
#* This file should define the following variables before including
|
||||
#* the FreeType library rules file :
|
||||
#*
|
||||
#* BUILD Pathname to the platform-specific files used
|
||||
#* for the build. Usually `$(TOP)/config/<system>'
|
||||
#*
|
||||
#* SEP Directory separator used during compilation.
|
||||
#* (usually "/" or "\"). Note that on Win32, both gcc
|
||||
#* and Visual C++ use "/" as a directory separator !!
|
||||
#*
|
||||
#* HOSTSEP Directory separator for $(COPY) and $(DELETE)
|
||||
#*
|
||||
#* DELETE The forced remove/delete command to erase one or more
|
||||
#* files
|
||||
#*
|
||||
#* INCLUDE The location of all public header files. e.g.
|
||||
#* `$(TOP)/include'include' *
|
||||
#*
|
||||
#* SRC The directory containing all sources. e.g.
|
||||
#* '$(TOP)/src'
|
||||
#*
|
||||
#* OBJ_DIR The location where compiled object files will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIB_DIR The location where the resulting library file will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIBRARY The filename of the resulting library file, without
|
||||
#* its extension.. e.g. 'libfreetype' or 'freetype'
|
||||
#*
|
||||
#* O The object file suffix. Can be '.o', '.obj,' '.lo,'
|
||||
#* ';coff,' etc.
|
||||
#*
|
||||
#* A The library file suffix. Can be '.a' '.so,' '.lib'
|
||||
#* '.dll,' etc.
|
||||
#*
|
||||
#* I The path inclusion flag. Some compilers use a
|
||||
#* different flag than '-I' to specify an additional
|
||||
#* include path. Examples are '/i=' or '-J ', etc.
|
||||
#*
|
||||
#* D The macro definition flag. I haven't met compilers
|
||||
#* which don't use the '-D' switch to define a macro, but
|
||||
#* who knows...
|
||||
#*
|
||||
#* T The compilation flag used to identify the target. Some
|
||||
#* compilers use a different flag than '-o ' to specify
|
||||
#* the name of the target object file.
|
||||
#*
|
||||
#* CFLAGS The set of flags used to compile object files.
|
||||
#* (usually contains the flag '-c').
|
||||
#*
|
||||
#*
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := rm -f
|
||||
SEP := /
|
||||
HOSTSEP := $(SEP)
|
||||
BUILD := $(TOP)/config/ansi
|
||||
PLATFORM := ansi
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS :=
|
||||
|
||||
# Now include the main sub-makefile. It contains all the rules used
|
||||
# to build the library with the previous variables defined
|
||||
#
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_std |
||||
distclean_freetype: clean_freetype_library_std |
||||
|
||||
# Librarian to use to build the static library
|
||||
#
|
||||
FT_LIBRARIAN := $(AR) -r
|
||||
|
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@
|
||||
$(FT_LIBRARIAN) $@ $(OBJECTS_LIST)
|
||||
|
@ -0,0 +1,134 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for a `normal' ANSI compiler
|
||||
#*
|
||||
#* Copyright 1996-2000 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#* Please read the file "freetype/docs/config.txt" to understand
|
||||
#* what this file does..
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := rm -f
|
||||
SEP := /
|
||||
HOSTSEP := $(SEP)
|
||||
BUILD := $(TOP)/config/ansi
|
||||
PLATFORM := ansi
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern : debug output, optimization & warnings
|
||||
#
|
||||
# Use the ANSIFLAGS variable to define the compiler flags used
|
||||
# to enfore ANSI compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS :=
|
||||
|
||||
# Now include the main sub-makefile. It contains all the rules used
|
||||
# to build the library with the previous variables defined
|
||||
#
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_std |
||||
distclean_freetype: clean_freetype_library_std |
||||
|
||||
# Librarian to use to build the static library
|
||||
#
|
||||
FT_LIBRARIAN := $(AR) -r
|
||||
|
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@
|
||||
$(FT_LIBRARIAN) $@ $(OBJECTS_LIST)
|
||||
|
@ -1,4 +0,0 @@ |
||||
FT_DRIVER(sfnt_driver_interface) |
||||
FT_DRIVER(tt_driver_interface) |
||||
FT_DRIVER(t1_driver_interface) |
||||
FT_DRIVER(psnames_driver_interface) |
@ -1,204 +0,0 @@ |
||||
#ifndef FTOPTION_H |
||||
#define FTOPTION_H |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* USER-SELECTABLE CONFIGURATION MACROS */ |
||||
/* */ |
||||
/* These macros can be toggled by developers to enable or disable */ |
||||
/* certain aspects of FreeType. This file contains macros that apply to */ |
||||
/* all of FreeType. Driver-specific configurations are placed in each */ |
||||
/* driver directory (e.g. `freetype/drivers/ttlib/ttconfig.h'). */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Alternate Glyph Image Format support */ |
||||
/* */ |
||||
/* By default, the glyph images returned by the FreeType glyph loader */ |
||||
/* can either be a pixmap or a vectorial outline defined through */ |
||||
/* bezier control points. When defining the following configuration */ |
||||
/* macro, some font drivers will be able to register alternate */ |
||||
/* glyph image formats. */ |
||||
/* */ |
||||
/* Unset this macro if you're sure that you'll never use a font driver */ |
||||
/* with an alternate glyph format, this will reduce the size of the */ |
||||
/* base layer code. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_ALTERNATE_GLYPH_FORMATS |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Glyph Postscript Names handling */ |
||||
/* */ |
||||
/* By default, FreeType 2 is built with the "psnames" module compiled */ |
||||
/* in. This module is in charge of converting a glyph name string into */ |
||||
/* a Unicode value, or return a Macintosh standard glyph name for the */ |
||||
/* use with the TrueType "post" table. */ |
||||
/* */ |
||||
/* Undefine this macro if you do not want the "psnames" compiled in */ |
||||
/* your build of FreeType. This has the following effects : */ |
||||
/* */ |
||||
/* - the TrueType driver will provide its own set of glyph names, */ |
||||
/* if you build it to support postscript names in the TrueType */ |
||||
/* "post" table. */ |
||||
/* */ |
||||
/* - the Type 1 driver will not be able to synthetize a */ |
||||
/* Unicode charmap out of the glyphs found in the fonts. */ |
||||
/* */ |
||||
/* You would normally undefine this configuration macro when */ |
||||
/* building a version of FreeType that doesn't contain a Type 1 */ |
||||
/* or CFF driver. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Postscript Names to Unicode Values support */ |
||||
/* */ |
||||
/* By default, FreeType 2 is built with the "psnames" module compiled */ |
||||
/* in. Among other things, the module is used to convert a glyph */ |
||||
/* name into a unicode value. This is especially useful in order to */ |
||||
/* synthetize on the fly a Unicode charmap from the CFF/Type 1 driver */ |
||||
/* through a big table named the "Adobe Glyph List". */ |
||||
/* */ |
||||
/* Undefine this macro if you do not want the Adobe Glyph List */ |
||||
/* compiled in your "psnames" module. The Type 1 driver will not */ |
||||
/* be able to synthetize a Unicode charmap out of the glyphs found */ |
||||
/* in the fonts.. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* GCC provides the non-ANSI `long long' 64-bit type. You can activate */ |
||||
/* it by defining the FTCALC_USE_LONG_LONG macro here. Note however */ |
||||
/* that we did not experience any improvement in speed with gcc, and */ |
||||
/* that the final code seems bigger when linked. */ |
||||
/* */ |
||||
#undef FTCALC_USE_LONG_LONG |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* When compiling FreeType as a DLL, some systems/compilers need a */ |
||||
/* special keyword in front of each function definition instead of */ |
||||
/* `extern'. */ |
||||
/* */ |
||||
/* The macros EXPORT_DEF and EXPORT_FUNC are thus used to define */ |
||||
/* exported library function interfaces and exported library functions */ |
||||
/* implementations respectively. */ |
||||
/* */ |
||||
/* If not defined here, they automatically default to `extern' and void */ |
||||
/* later in this header file. */ |
||||
/* */ |
||||
#undef EXPORT_DEF |
||||
#undef EXPORT_FUNC |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Debug level */ |
||||
/* */ |
||||
/* FreeType can be compiled in debug or trace mode. In debug mode, */ |
||||
/* errors are reported through the `ftdebug' component. In trace */ |
||||
/* mode, additional messages are sent to the standard output during */ |
||||
/* execution. */ |
||||
/* */ |
||||
/* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */ |
||||
/* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */ |
||||
/* */ |
||||
/* Don't define any of these macros to compile in `release' mode. */ |
||||
/* */ |
||||
#undef FT_DEBUG_LEVEL_ERROR |
||||
#undef FT_DEBUG_LEVEL_TRACE |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Anti-aliasing support */ |
||||
/* */ |
||||
/* Undefine this macro only if you want to disable the anti-aliasing */ |
||||
/* support in FreeType. This will save you about 5 Kb of code. It */ |
||||
/* may be important for some embedded systems. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_ANTI_ALIAS |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Endianess performance improvement */ |
||||
/* */ |
||||
/* FreeType is completely endian-independent, and can thus be compiled */ |
||||
/* directly on _any_ machine. However, some components of the library */ |
||||
/* provide improved routines for the cases where endianess is known. */ |
||||
/* */ |
||||
/* It usually results in speed-ups and reduced code size. Note that */ |
||||
/* you should not define both of these macros. */ |
||||
/* */ |
||||
/* */ |
||||
/* NOTE: For now, only the scan-line converter (base/ftraster.c) uses */ |
||||
/* these macros to speed-up some anti-alias rendering routines. */ |
||||
/* */ |
||||
#undef FT_CONFIG_OPTION_LITTLE_ENDIAN |
||||
#undef FT_CONFIG_OPTION_BIG_ENDIAN |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Define this configuration macro whenever you want to build a version */ |
||||
/* of FreeType that does not include a default `system' component. */ |
||||
/* */ |
||||
/* Note that this will prevent the compilation of `ftinit', hence the */ |
||||
/* function FT_Init_FreeType */ |
||||
/* */ |
||||
#undef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* The size in bytes of the render pool used by the scan-line */ |
||||
/* converter to do all of its work. */ |
||||
/* */ |
||||
/* This must be greater than 4 Kb */ |
||||
/* */ |
||||
#define FT_RENDER_POOL_SIZE 32768 |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* FT_MAX_DRIVERS */ |
||||
/* */ |
||||
/* The maximum number of font drivers that can be registered in a */ |
||||
/* single FreeType library object. 8 seems to be a good choice due */ |
||||
/* to the relative low actual number of drivers ;-) */ |
||||
/* */ |
||||
#define FT_MAX_DRIVERS 8 |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* FT_MAX_EXTENSIONS */ |
||||
/* */ |
||||
/* The maximum number of extensions that can be registered in a */ |
||||
/* single font driver. 8 seems to be a good choice for now.. */ |
||||
/* */ |
||||
#define FT_MAX_EXTENSIONS 8 |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* FT_MAX_GLYPH_FORMATS */ |
||||
/* */ |
||||
/* The maximum number of glyph image formats that might be registered */ |
||||
/* in a given library instance. 8 seems to be a good choice due to */ |
||||
/* the relatively low number of current formats ;-) */ |
||||
/* */ |
||||
|
||||
#define FT_MAX_GLYPH_FORMATS 8 |
||||
|
||||
|
||||
|
||||
#endif /* FTOPTION_H */ |
@ -1,971 +0,0 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* ftsys.c */ |
||||
/* */ |
||||
/* ANSI-specific system operations (body). */ |
||||
/* */ |
||||
/* Copyright 1996-1999 by */ |
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used */ |
||||
/* modified and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* This implementation of the `ftsys' component uses the standard ANSI C */ |
||||
/* library. */ |
||||
/* */ |
||||
/* IMPORTANT NOTE: */ |
||||
/* */ |
||||
/* Porters, read carefully the comments in ftsys.h before trying to */ |
||||
/* port this file to your system. It contains many essential */ |
||||
/* remarks, and will ease your work greatly. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
#include "ftsys.h" |
||||
#include "ftstream.h" |
||||
#include "ftdebug.h" |
||||
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_DEBUG_MEMORY |
||||
#include "memdebug.c" |
||||
#endif |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */ |
||||
/* parameter of the PTRACE() and PERROR() macros, used to print/log */ |
||||
/* messages during execution. */ |
||||
/* */ |
||||
#undef FT_COMPONENT |
||||
#define FT_COMPONENT trace_io |
||||
|
||||
|
||||
#undef CUR_SYSTEM /* just in case */ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* To ease porting, we use the macro SYS_STREAM to name the */ |
||||
/* system-specific stream type. For example, it is a `FILE*' with the */ |
||||
/* ANSI libc, it will be a file descriptor, i.e. an integer, when using */ |
||||
/* the Unix system API, etc. */ |
||||
/* */ |
||||
#define SYS_STREAM FILE* |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* This implementation of ftsys uses the ANSI C library. Memory */ |
||||
/* management is performed through malloc/free, i/o access through */ |
||||
/* fopen/fread/fseek, and no synchronisation primitive is implemented */ |
||||
/* (they contain dummy code) */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* I/O ACCESS AND MANAGEMENT */ |
||||
/* */ |
||||
/* We only define the `ANSI' resource class in this class. It is */ |
||||
/* disk-based and provides a MRU cache in order to only keep the file */ |
||||
/* descriptors of the 10 most recently used resource files. */ |
||||
/* */ |
||||
/* It simply contains two lists. One contains the `cached' resources */ |
||||
/* with a valid FILE* pointer, the second contains all other `flushed' */ |
||||
/* resource objects. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Struct> */ |
||||
/* FT_AnsiFileRec */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* The FT_AnsiFile class derives from FT_ResourceRec. */ |
||||
/* */ |
||||
/* <Fields> */ |
||||
/* root :: The root resource class fields. */ |
||||
/* */ |
||||
/* pathname :: This is a copy of the ANSI file pathname used to open */ |
||||
/* streams for the resource. A different implementation */ |
||||
/* is free to use Unicode chars, or file i-node numbers, */ |
||||
/* etc. */ |
||||
/* */ |
||||
/* file_size :: The size in bytes of the resource. This field should */ |
||||
/* be set to -1 until the resource is first opened. */ |
||||
/* */ |
||||
typedef struct FT_AnsiFileRec_ |
||||
{ |
||||
FT_ResourceRec root; |
||||
char* pathname; /* the font file's pathname */ |
||||
FT_Long file_size; /* file size in bytes */ |
||||
|
||||
} FT_AnsiFileRec, *FT_AnsiFile; |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* We use the macro STREAM_Name() as a convenience to return a given */ |
||||
/* ANSI resource's pathname. Its `stream' argument is a FT_Resource */ |
||||
/* which is typecasted to the FT_AnsiFile class. */ |
||||
/* */ |
||||
#define STREAM_Name( stream ) ((FT_AnsiFile)stream->resource)->pathname |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* We use the macro STREAM_File() as a convenience to extract the */ |
||||
/* system-specific stream handle from a given FreeType stream object. */ |
||||
/* */ |
||||
#define STREAM_File( stream ) ((FILE*)stream->stream_id.pointer) |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* AnsiFile_Open */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* This function is used to open a system-stream for a given */ |
||||
/* resource. */ |
||||
/* */ |
||||
/* Note that it must update the target FreeType stream object with */ |
||||
/* the system-stream handle and the resource's size. */ |
||||
/* */ |
||||
/* Also, the `stream->base' field must be set to NULL for disk-based */ |
||||
/* resources, and to the address in memory of the resource's first */ |
||||
/* byte for memory-based ones. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* resource :: The source resource. */ |
||||
/* stream :: The target stream object. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function simply calls fopen() in the resource's file */ |
||||
/* pathname. */ |
||||
/* */ |
||||
/* The stream object IS NOT CREATED by this function, but by its */ |
||||
/* caller. */ |
||||
/* */ |
||||
static |
||||
FT_Error AnsiFile_Open( FT_AnsiFile resource, |
||||
FT_Stream stream ) |
||||
{ |
||||
FILE* file; |
||||
|
||||
/* open the file */ |
||||
file = fopen( resource->pathname, "rb" ); |
||||
if ( !file ) |
||||
{ |
||||
PERROR(( "AnsiFile_Open: Could not open file `%s'\n", |
||||
resource->pathname )); |
||||
return FT_Err_Cannot_Open_Stream; |
||||
} |
||||
|
||||
/* compute file size if necessary */ |
||||
if ( resource->file_size < 0 ) |
||||
{ |
||||
fseek( file, 0, SEEK_END ); |
||||
resource->file_size = ftell( file ); |
||||
fseek( file, 0, SEEK_SET ); |
||||
} |
||||
|
||||
stream->resource = (FT_Resource)resource; |
||||
stream->stream_id.pointer = file; |
||||
stream->size = resource->file_size; |
||||
|
||||
/* it's a disk-based resource, we don't need to use the `base' and */ |
||||
/* `cursor' fields of the stream objects */ |
||||
stream->base = NULL; |
||||
stream->cursor = NULL; |
||||
|
||||
PTRACE1(( "AnsiFile_Open: Opened `%s' (%d bytes) successfully\n", |
||||
resource->pathname, resource->file_size )); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* AnsiFile_Close */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Closes a given stream. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: The target stream object. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function simply calls fclose() on the stream's ANSI FILE */ |
||||
/* object. */ |
||||
/* */ |
||||
static |
||||
FT_Error AnsiFile_Close( FT_Stream stream ) |
||||
{ |
||||
PTRACE1(( "AnsiFile_Close: Closing file `%s'\n", STREAM_Name( stream ) )); |
||||
|
||||
fclose( STREAM_File( stream ) ); |
||||
|
||||
stream->resource = NULL; |
||||
stream->stream_id.pointer = NULL; |
||||
stream->size = 0; |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* AnsiFile_Seek */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Seeks a stream to a given position. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: The target stream object. */ |
||||
/* position :: The offset in bytes from the start of the */ |
||||
/* resource/stream. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function simply calls fseek() on the stream. */ |
||||
/* */ |
||||
/* The `seek' method is never called by the stream manager in case */ |
||||
/* of a memory-based resource (i.e., when `stream->base' isn't NULL). */ |
||||
/* */ |
||||
static |
||||
FT_Error AnsiFile_Seek( FT_Stream stream, |
||||
FT_Long position ) |
||||
{ |
||||
if ( fseek( STREAM_File( stream ), position, SEEK_SET ) ) |
||||
{ |
||||
PERROR(( "AnsiFile_Seek: FAILED! Pos. %ld of `%s'\n", |
||||
position, STREAM_Name( stream ) )); |
||||
|
||||
return FT_Err_Invalid_Stream_Seek; |
||||
} |
||||
|
||||
PTRACE2(( "AnsiFile_Seek: Pos. %ld of `%s'\n", |
||||
position, STREAM_Name( stream ) )); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* AnsiFile_Skip */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Skips a given number of bytes in an ANSI stream. Useful to skip */ |
||||
/* pad bytes, for example. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: The target stream object. */ |
||||
/* count :: The number of bytes to skip in the stream. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function simply calls fseek() on the stream. */ |
||||
/* */ |
||||
/* The `skip' method is never called by the stream manager in case */ |
||||
/* of a memory-based resource (i.e., when `stream->base' isn't NULL). */ |
||||
/* */ |
||||
static |
||||
FT_Error AnsiFile_Skip( FT_Stream stream, |
||||
FT_Long count ) |
||||
{ |
||||
if ( fseek( STREAM_File( stream ), count, SEEK_CUR ) ) |
||||
{ |
||||
PERROR(( "AnsiFile_Skip: FAILED! %ld bytes in `%s'\n", |
||||
count, STREAM_Name( stream ) )); |
||||
|
||||
return FT_Err_Invalid_Stream_Seek; |
||||
} |
||||
|
||||
PTRACE2(( "AnsiFile_Skip: %ld bytes in `%s'\n", |
||||
count, STREAM_Name( stream ) )); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* AnsiFile_Pos */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Returns the current offset within an ANSI stream's resource. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: The target stream object. */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* position :: The current offset. -1 in case of error. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function simply calls ftell() on the stream. */ |
||||
/* */ |
||||
/* The `pos' method is never called by the stream manager in case */ |
||||
/* of a memory-based resource (i.e., when `stream->base' isn't NULL). */ |
||||
/* */ |
||||
static |
||||
FT_Error AnsiFile_Pos( FT_Stream stream, |
||||
FT_Long* position ) |
||||
{ |
||||
*position = ftell( STREAM_File( stream ) ); |
||||
if ( *position == -1 ) |
||||
{ |
||||
PTRACE2(( "AnsiFile_Pos: FAILED! In `%s'\n", STREAM_Name( stream ) )); |
||||
return FT_Err_Invalid_Stream_Seek; |
||||
} |
||||
|
||||
PTRACE2(( "AnsiFile_Pos: For `%s'\n", STREAM_Name( stream ) )); |
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* AnsiFile_Read */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Reads a given number of bytes from an ANSI stream into memory. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: The target stream object. */ |
||||
/* buffer :: The target read buffer where data is copied. */ |
||||
/* size :: The number of bytes to read from the stream. */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* read_bytes :: The number of bytes effectively read from the */ |
||||
/* stream. Used in case of error */ |
||||
/* (i.e. FT_Err_Invalid_Stream_Read) by some parts of */ |
||||
/* the library. */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function simply calls fread() on the stream. */ |
||||
/* */ |
||||
/* It MUST return the error FT_Err_Invalid_Stream_Read in case of */ |
||||
/* an over-read (i.e., reading more bytes from the stream that what */ |
||||
/* is left), as the stream component checks for this specific value. */ |
||||
/* */ |
||||
/* The `read' method is never called by the stream manager in case */ |
||||
/* of a memory-based resource (i.e., when `stream->base' isn't NULL). */ |
||||
/* */ |
||||
static |
||||
FT_Error AnsiFile_Read( FT_Stream stream, |
||||
FT_Char* buffer, |
||||
FT_Long size, |
||||
FT_Long* read_bytes ) |
||||
{ |
||||
*read_bytes = fread( buffer, 1, size, STREAM_File( stream ) ); |
||||
if ( *read_bytes != size ) |
||||
{ |
||||
/* Note : we can have an over-read here when called by the */ |
||||
/* function FT_Access_Compressed_Frame. This means */ |
||||
/* that the following message should be a trace, */ |
||||
/* rather than an error for disk-based resources.. */ |
||||
/* */ |
||||
/* the function must set the value of 'read_bytes' */ |
||||
/* even if it returns an error code.. */ |
||||
PTRACE2(( "AnsiFile_Read: FAILED! Read %ld bytes from '%s'\n", |
||||
size, STREAM_Name( stream ) )); |
||||
|
||||
return FT_Err_Invalid_Stream_Read; |
||||
} |
||||
|
||||
PTRACE2(( "AnsiFile_Read: Read %ld bytes to buffer 0x%08lx from `%s'\n", |
||||
size, (long)buffer, STREAM_Name( stream ) )); |
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* The following table is the `virtual method table' for the `ANSI */ |
||||
/* resource class', which methods are defined above. Its address is set */ |
||||
/* in the `interface' field of all resource objects created by the */ |
||||
/* function FT_Create_AnsiFile() (see below). */ |
||||
/* */ |
||||
static |
||||
FTRes_InterfaceRec FT_AnsiFile_Interface = |
||||
{ |
||||
(FTRes_Open_Func) AnsiFile_Open, |
||||
(FTRes_Close_Func)AnsiFile_Close, |
||||
(FTRes_Seek_Func) AnsiFile_Seek, |
||||
(FTRes_Skip_Func) AnsiFile_Skip, |
||||
(FTRes_Pos_Func) AnsiFile_Pos, |
||||
(FTRes_Read_Func) AnsiFile_Read, |
||||
}; |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_Create_Resource */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Creates a new resource object. This function is called by the */ |
||||
/* FT_New_Resource() function of the base layer. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* library :: The input library object. */ |
||||
/* pathname :: The file's pathname as an ASCII string. */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* aresource :: A handle to new resource object. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* Error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This functions does not open a stream. It simply copies the */ |
||||
/* pathname within a fresh new resource object. */ |
||||
/* */ |
||||
EXPORT_FUNC |
||||
FT_Error FT_Create_Resource( FT_Library library, |
||||
const char* pathname, |
||||
FT_Resource* aresource ) |
||||
{ |
||||
FT_Int len; |
||||
FT_AnsiFile resource; |
||||
FT_Error error; |
||||
FT_System system; |
||||
|
||||
|
||||
if ( !library ) |
||||
return FT_Err_Invalid_Library_Handle; |
||||
|
||||
system = library->system; |
||||
|
||||
if ( !pathname ) |
||||
goto Fail_Null; |
||||
|
||||
len = strlen( pathname ); |
||||
if ( len == 0 ) |
||||
goto Fail_Null; |
||||
|
||||
resource = NULL; |
||||
|
||||
if ( ALLOC( resource, sizeof ( *resource ) ) || |
||||
ALLOC( resource->pathname, len + 1 ) ) |
||||
goto Fail_Memory; |
||||
|
||||
resource->root.library = library; |
||||
resource->root.interface = &FT_AnsiFile_Interface; |
||||
resource->root.flags = FT_RESOURCE_TYPE_DISK_BASED; |
||||
resource->file_size = -1; |
||||
strcpy( resource->pathname, pathname ); |
||||
|
||||
PTRACE1(( "Create_AnsiFile: Ansi resource created for `%s'\n", |
||||
pathname )); |
||||
|
||||
*aresource = (FT_Resource)resource; |
||||
return FT_Err_Ok; |
||||
|
||||
Fail_Null: |
||||
PERROR(( "Create_AnsiFile: Null pathname!\n" )); |
||||
return FT_Err_Invalid_Argument; |
||||
|
||||
Fail_Memory: |
||||
if ( resource ) |
||||
FREE( resource->pathname ); |
||||
FREE( resource ); |
||||
PERROR(( "Create_AnsiFile: Not enough memory to create resource!\n" )); |
||||
return error; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_Destroy_Resource */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Discards a given resource object explicitly. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* resource :: The ANSI resource object. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function does not check whether runs or streams are opened */ |
||||
/* for the resource (for now, we assume developer intelligence. */ |
||||
/* We'll most probably lower our standard later to ease debugging :-) */ |
||||
/* */ |
||||
EXPORT_FUNC |
||||
FT_Error FT_Destroy_Resource( FT_Resource resource ) |
||||
{ |
||||
FT_System system = resource->library->system; |
||||
FT_AnsiFile ansi = (FT_AnsiFile)resource; |
||||
|
||||
if ( !ansi || ansi->root.interface != &FT_AnsiFile_Interface ) |
||||
{ |
||||
PERROR(( |
||||
"Destroy_AnsiFile: Trying to destroy an invalid resource!\n" )); |
||||
return FT_Err_Invalid_Resource_Handle; |
||||
} |
||||
|
||||
PTRACE1(( "Destroy_AnsiFile: Destroying resource for `%s'\n", |
||||
ansi->pathname )); |
||||
|
||||
FREE( ansi->pathname ); |
||||
FREE( ansi ); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* MEMORY MANAGEMENT */ |
||||
/* */ |
||||
/* */ |
||||
/* This part copies the old FreeType 1.0 and 1.1 memory management */ |
||||
/* scheme that was defined in the file `ttmemory.h'. One can see that */ |
||||
/* */ |
||||
/* - a set of macros is defined for the memory operations used by the */ |
||||
/* engine (MEM_Copy(), MEM_Move(), MEM_Set()). This comes from the */ |
||||
/* fact that many compilers are able to inline these operations */ |
||||
/* directly within the compiled code, rather than generating a call */ |
||||
/* to the C library. However, this obliges us to include the */ |
||||
/* `<string.h>' header file. */ |
||||
/* */ |
||||
/* If you provide your own memory operations, you can get rid of the */ |
||||
/* `#include <string.h>' below. */ |
||||
/* */ |
||||
/* */ |
||||
/* - the FT_Alloc() function has several essential properties that MUST */ |
||||
/* be retained by each port: */ |
||||
/* */ |
||||
/* - It returns an error code, NOT the allocated block's base */ |
||||
/* address. */ |
||||
/* */ |
||||
/* - It takes the address of a target pointer, where the block's base */ |
||||
/* address will be set. If the size is zero, its value will be */ |
||||
/* NULL, and the function returns successfully. */ |
||||
/* */ |
||||
/* - In case of error, the pointer's value is set to NULL and an */ |
||||
/* error code is returned. */ |
||||
/* */ |
||||
/* - The new allocated block MUST be zero-filled. This is a strong */ |
||||
/* convention the rest of the engine relies on. */ |
||||
/* */ |
||||
/* */ |
||||
/* - the FT_Free() function has also its essentials: */ |
||||
/* */ |
||||
/* - It takes the address of a pointer which value is the block's */ |
||||
/* base address. This is UNLIKE a standard `free()' which takes */ |
||||
/* the block's base directly. */ |
||||
/* */ |
||||
/* - It accepts successfully the address of a pointer which value is */ |
||||
/* NULL, in which case it simply returns. */ |
||||
/* */ |
||||
/* - The pointer is always set to NULL by the function. */ |
||||
/* */ |
||||
/* */ |
||||
/* - The MEM_Alloc(), ALLOC(), and ALLOC_ARRAY() macros are used by the */ |
||||
/* library and should NOT be modified by porters! */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */ |
||||
/* parameter of the PTRACE() and PERROR() macros, used to print/log */ |
||||
/* messages during execution. */ |
||||
/* */ |
||||
#undef FT_COMPONENT |
||||
#define FT_COMPONENT trace_memory |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_Alloc */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Allocates a new block of memory. The returned area is always */ |
||||
/* zero-filled, this is a strong convention in many FreeType parts. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* system :: A handle to a given `system object' where allocation */ |
||||
/* occurs. */ |
||||
/* */ |
||||
/* size :: The size in bytes of the block to allocate. */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* P :: A pointer to the fresh new block. It should be set to */ |
||||
/* NULL if `size' is 0, or in case of error. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
BASE_FUNC |
||||
FT_Error FT_Alloc( FT_System system, |
||||
FT_Long size, |
||||
void** P ) |
||||
{ |
||||
if ( !P ) |
||||
{ |
||||
PERROR(( "FT_Alloc: Invalid pointer address!\n" )); |
||||
return FT_Err_Invalid_Argument; |
||||
} |
||||
|
||||
if ( size > 0 ) |
||||
{ |
||||
*P = malloc( size ); |
||||
if ( !*P ) |
||||
{ |
||||
PERROR(( "FT_Alloc: Out of memory (%ld bytes requested)!\n", |
||||
size )); |
||||
|
||||
return FT_Err_Out_Of_Memory; |
||||
} |
||||
|
||||
#ifdef FT_CONFIG_OPTION_DEBUG_MEMORY |
||||
DM_Record( (char*)*P, size ); |
||||
#endif |
||||
|
||||
system->total_alloc += size; |
||||
|
||||
/* ALWAYS ZERO-FILL THE BLOCK! */ |
||||
MEM_Set( *P, 0, size ); |
||||
} |
||||
else |
||||
*P = NULL; |
||||
|
||||
PTRACE2(( "FT_Alloc: Size = %ld, pointer = 0x%08lx, block = 0x%08lx\n", |
||||
size, (long)P, (long)*P )); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_Realloc */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Reallocates a block of memory pointed to by `*P' to `Size' bytes */ |
||||
/* from the heap, possibly changing `*P'. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* system :: A handle to a given `system object' where allocation */ |
||||
/* occurs. */ |
||||
/* */ |
||||
/* size :: The size in bytes of the block to allocate. */ |
||||
/* */ |
||||
/* <InOut> */ |
||||
/* P :: A pointer to the fresh new block. It should be set to */ |
||||
/* NULL if `size' is 0, or in case of error. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
BASE_FUNC |
||||
FT_Error FT_Realloc( FT_System system, |
||||
FT_Long size, |
||||
void* *P ) |
||||
{ |
||||
void* Q; |
||||
|
||||
|
||||
if ( !P ) |
||||
{ |
||||
PERROR(( "FT_Realloc: Invalid pointer address!\n" )); |
||||
return FT_Err_Invalid_Argument; |
||||
} |
||||
|
||||
/* if the original pointer is NULL, call FT_Alloc() */ |
||||
if ( !*P ) |
||||
return FT_Alloc( system, size, P ); |
||||
|
||||
/* if the new block if zero-sized, clear the current one */ |
||||
if ( size <= 0 ) |
||||
return FT_Free( system, P ); |
||||
|
||||
#ifdef FT_CONFIG_OPTION_DEBUG_MEMORY |
||||
DM_Forget( (char*)*P ); |
||||
#endif |
||||
|
||||
Q = (void*)realloc( *P, size ); |
||||
if ( !Q ) |
||||
{ |
||||
PERROR(( "FT_Realloc: Reallocation failed!\n" )); |
||||
return FT_Err_Out_Of_Memory; |
||||
} |
||||
|
||||
#ifdef FT_CONFIG_OPTION_DEBUG_MEMORY |
||||
DM_Record( (char*)Q, size ); |
||||
#endif |
||||
|
||||
*P = Q; |
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_Free */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Releases a given block of memory allocated through FT_Alloc(). */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* system :: A handle to a given `system object' where allocation */ |
||||
/* occured. */ |
||||
/* */ |
||||
/* P :: This is the _address_ of a _pointer_ which points to the */ |
||||
/* allocated block. It is always set to NULL on exit. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* If P or *P are NULL, this function should return successfully. */ |
||||
/* This is a strong convention within all of FreeType and its */ |
||||
/* drivers. */ |
||||
/* */ |
||||
BASE_FUNC |
||||
FT_Error FT_Free( FT_System system, |
||||
void* *P ) |
||||
{ |
||||
UNUSED( system ); |
||||
|
||||
PTRACE2(( "FT_Free: Freeing pointer 0x%08lx (block 0x%08lx)\n", |
||||
(long)P, (P ? (long)*P : -1) )); |
||||
|
||||
if ( !P || !*P ) |
||||
return FT_Err_Ok; |
||||
|
||||
free( *P ); |
||||
|
||||
#ifdef FT_CONFIG_OPTION_DEBUG_MEMORY |
||||
DM_Forget( (char*)*P ); |
||||
#endif |
||||
|
||||
*P = NULL; |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* SYNCHRONIZATION MANAGEMENT */ |
||||
/* */ |
||||
/* */ |
||||
/* This section deals with mutexes. The library can be compiled to */ |
||||
/* two distinct thread support levels (namely single threaded and */ |
||||
/* re-entrant modes). */ |
||||
/* */ |
||||
/* It protects its variables through the MUTEX_Lock() and */ |
||||
/* MUTEX_Release() macros which are void in single threaded mode. */ |
||||
/* */ |
||||
/* It defines a typeless mutex reference type, `FT_Mutex', that you're */ |
||||
/* free to redefine for your system's needs. */ |
||||
/* */ |
||||
/* The default implementation of ftsys.c contains only dummy functions */ |
||||
/* which always return successfully. You NEED to specialize them in */ |
||||
/* order to port ftsys.c to any multi-threaded environment. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */ |
||||
/* parameter of the PTRACE() and PERROR() macros, used to print/log */ |
||||
/* messages during execution. */ |
||||
/* */ |
||||
#undef FT_COMPONENT |
||||
#define FT_COMPONENT trace_sync |
||||
|
||||
|
||||
#ifdef FT_CONFIG_THREADS |
||||
|
||||
BASE_FUNC |
||||
FT_Error FT_Mutex_Create( FT_System system, |
||||
TMutex* mutex ) |
||||
{ |
||||
UNUSED( system ); |
||||
|
||||
mutex = (void*)-1; |
||||
system->num_mutexes++; |
||||
|
||||
/* Insert your own mutex creation code here */ |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
BASE_FUNC |
||||
void FT_Mutex_Delete( FT_System system, |
||||
TMutex* mutex ) |
||||
{ |
||||
UNUSED( system ); |
||||
|
||||
mutex = (void*)0; |
||||
system->num_mutexes--; |
||||
|
||||
/* Insert your own mutex destruction code here */ |
||||
} |
||||
|
||||
|
||||
BASE_FUNC |
||||
void FT_Mutex_Lock( FT_System system, |
||||
TMutex* mutex ) |
||||
{ |
||||
/* NOTE: It is legal to call this function with a NULL argument */ |
||||
/* in which case an immediate return is appropriate. */ |
||||
|
||||
UNUSED( system ); |
||||
|
||||
if ( !mutex ) |
||||
return; |
||||
|
||||
/* Insert your own mutex locking code here */ |
||||
} |
||||
|
||||
|
||||
BASE_FUNC |
||||
void FT_Mutex_Release( FT_System system, |
||||
TMutex* mutex ) |
||||
{ |
||||
/* NOTE: It is legal to call this function with a NULL argument */ |
||||
/* in which case an immediate return is appropriate */ |
||||
|
||||
UNUSED( system ); |
||||
|
||||
if ( !mutex ) |
||||
return; |
||||
|
||||
/* Insert your own mutex release code here */ |
||||
} |
||||
|
||||
#endif /* FT_CONFIG_THREADS */ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_New_System */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* This function is used to create and initialize new system objects. */ |
||||
/* These are mainly used to let client applications and font servers */ |
||||
/* specify their own memory allocators and synchronization */ |
||||
/* procedures. */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* system :: A handle to a given `system object'. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
EXPORT_FUNC |
||||
FT_Error FT_New_System( FT_System* system ) |
||||
{ |
||||
*system = (FT_System)malloc( sizeof ( **system ) ); |
||||
|
||||
if ( !*system ) |
||||
return FT_Err_Out_Of_Memory; |
||||
|
||||
/* the ANSI function `free()' is unable to return the number */ |
||||
/* of released bytes. Hence, the `current_alloc' field of the */ |
||||
/* system object cannot be used. */ |
||||
|
||||
(*system)->system_flags = FT_SYSTEM_FLAG_TOTAL_ALLOC | |
||||
FT_SYSTEM_FLAG_MUTEXES; |
||||
(*system)->total_alloc = 0; |
||||
(*system)->num_mutexes = 0; |
||||
|
||||
#ifdef FT_CONFIG_OPTION_DEBUG_MEMORY |
||||
DM_Init_Mem(); |
||||
#endif |
||||
|
||||
/* initialize i/o management (nothing) */ |
||||
|
||||
/* initialize synchronisation (nothing) */ |
||||
|
||||
/* initialize streams (nothing) */ |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_Done_System */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Destroys a given FreeType system object. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* system :: A handle to a given `system object'. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
EXPORT_FUNC |
||||
FT_Error FT_Done_System( FT_System system ) |
||||
{ |
||||
/* finalize synchronization (nothing) */ |
||||
|
||||
/* finalize i/o management (nothing) */ |
||||
|
||||
/* finalize memory management */ |
||||
|
||||
#ifdef FT_CONFIG_OPTION_DEBUG_MEMORY |
||||
DM_Done_Mem(); |
||||
#endif |
||||
|
||||
free( system ); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/* END */ |
@ -1,214 +0,0 @@ |
||||
/**************************************************************************
|
||||
* |
||||
* ftsystem.h 1.0 |
||||
* |
||||
* ANSI-specific FreeType low-level system interface |
||||
* |
||||
* This file contains the definition of interface used by FreeType |
||||
* to access low-level, i.e. memory management, i/o access as well |
||||
* as thread synchronisation.
|
||||
* |
||||
* |
||||
* Copyright 1996-1999 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used
|
||||
* modified and distributed under the terms of the FreeType project
|
||||
* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
* this file you indicate that you have read the license and
|
||||
* understand and accept it fully.
|
||||
*
|
||||
**************************************************************************/ |
||||
|
||||
#include <ftsystem.h> |
||||
#include <fterrors.h> |
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <string.h> |
||||
|
||||
/*********************************************************************/ |
||||
/* */ |
||||
/* MEMORY MANAGEMENT INTERFACE */ |
||||
/* */ |
||||
|
||||
/************************************************************************
|
||||
* |
||||
* <FuncType> |
||||
* FT_Alloc_Func |
||||
* |
||||
* <Description> |
||||
* The memory allocator function type |
||||
* |
||||
* <Input> |
||||
* system :: pointer to the system object |
||||
* size :: requested size in bytes |
||||
* |
||||
* <Output> |
||||
* block :: address of newly allocated block |
||||
* |
||||
* <Return>
|
||||
* Error code. 0 means success. |
||||
* |
||||
* <Note> |
||||
* If your allocation routine ALWAYS zeroes the new block, you |
||||
* should set the flag FT_SYSTEM_FLAG_ALLOC_ZEROES in your system |
||||
* object 'flags' field. |
||||
* |
||||
* If you have set the flag FT_SYSTEM_FLAG_REPORT_CURRENT_ALLOC in |
||||
* your system's "system_flags" field, this function should update |
||||
* the "current_alloc" field of the system object. |
||||
* |
||||
************************************************************************/ |
||||
|
||||
static |
||||
void* ft_alloc( FT_Memory memory, |
||||
long size ) |
||||
{ |
||||
(void)memory; |
||||
return malloc(size); |
||||
} |
||||
|
||||
|
||||
/************************************************************************
|
||||
* |
||||
* <FuncType> |
||||
* FT_Realloc_Func |
||||
* |
||||
* <Description> |
||||
* The memory reallocator function type |
||||
* |
||||
* <Input> |
||||
* system :: pointer to the system object |
||||
* new_size :: new requested size in bytes |
||||
* |
||||
* <InOut> |
||||
* block :: address of block in memory |
||||
* |
||||
* <Return> |
||||
* Error code. 0 means success. |
||||
* |
||||
* <Note> |
||||
* This function is _never_ called when the system flag
|
||||
* FT_SYSTEM_FLAG_NO_REALLOC is set. Instead, the engine will emulate |
||||
* realloc through "alloc" and "free". |
||||
* |
||||
* Note that this is possible due to the fact that FreeType's |
||||
* "FT_Realloc" always requests the _current_ size of the reallocated |
||||
* block as a parameter, thus avoiding memory leaks. |
||||
* |
||||
* If you have set the flag FT_SYSTEM_FLAG_REPORT_CURRENT_ALLOC in |
||||
* your system's "system_flags" field, this function should update |
||||
* the "current_alloc" field of the system object. |
||||
* |
||||
************************************************************************/ |
||||
|
||||
static |
||||
void* ft_realloc( FT_Memory memory, |
||||
long cur_size, |
||||
long new_size, |
||||
void* block ) |
||||
{ |
||||
(void)memory; |
||||
(void)cur_size; |
||||
|
||||
return realloc( block, new_size ); |
||||
} |
||||
|
||||
|
||||
/************************************************************************
|
||||
* |
||||
* <FuncType> |
||||
* FT_Free_Func |
||||
* |
||||
* <Description> |
||||
* The memory release function type |
||||
* |
||||
* <Input> |
||||
* system :: pointer to the system object |
||||
* block :: address of block in memory |
||||
* |
||||
* <Note> |
||||
* If you have set the flag FT_SYSTEM_FLAG_REPORT_CURRENT_ALLOC in |
||||
* your system's "system_flags" field, this function should update |
||||
* the "current_alloc" field of the system object. |
||||
* |
||||
************************************************************************/ |
||||
|
||||
static |
||||
void ft_free( FT_Memory memory, |
||||
void* block ) |
||||
{ |
||||
(void)memory; |
||||
free( block ); |
||||
} |
||||
|
||||
/*********************************************************************/ |
||||
/* */ |
||||
/* RESOURCE MANAGEMENT INTERFACE */ |
||||
/* */ |
||||
|
||||
|
||||
#define STREAM_FILE(stream) ((FILE*)stream->descriptor.pointer) |
||||
|
||||
static |
||||
void ft_close_stream( FT_Stream stream ) |
||||
{ |
||||
fclose( STREAM_FILE(stream) ); |
||||
} |
||||
|
||||
static |
||||
unsigned long ft_io_stream( FT_Stream stream, |
||||
unsigned long offset, |
||||
char* buffer, |
||||
unsigned long count ) |
||||
{ |
||||
FILE* file; |
||||
|
||||
file = STREAM_FILE(stream); |
||||
|
||||
fseek( file, offset, SEEK_SET );
|
||||
return (unsigned long)fread( buffer, 1, count, file ); |
||||
} |
||||
|
||||
|
||||
extern |
||||
int FT_New_Stream( const char* filepathname, |
||||
FT_Stream stream ) |
||||
{ |
||||
FILE* file; |
||||
|
||||
file = fopen( filepathname, "rb" ); |
||||
if (!file) |
||||
return FT_Err_Cannot_Open_Resource; |
||||
|
||||
fseek( file, 0, SEEK_END ); |
||||
stream->size = ftell(file); |
||||
fseek( file, 0, SEEK_SET ); |
||||
|
||||
stream->descriptor.pointer = file; |
||||
stream->pos = 0; |
||||
|
||||
stream->read = ft_io_stream; |
||||
stream->close = ft_close_stream; |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
|
||||
extern |
||||
FT_Memory FT_New_Memory( void ) |
||||
{ |
||||
FT_Memory memory; |
||||
|
||||
memory = (FT_Memory)malloc( sizeof(*memory) ); |
||||
if (memory) |
||||
{ |
||||
memory->user = 0; |
||||
memory->alloc = ft_alloc; |
||||
memory->realloc = ft_realloc; |
||||
memory->free = ft_free; |
||||
} |
||||
return memory; |
||||
} |
||||
|
@ -1,182 +0,0 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* ftconfig.h */ |
||||
/* */ |
||||
/* ANSI-specific configuration file (specification only). */ |
||||
/* */ |
||||
/* Copyright 1996-1999 by */ |
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used */ |
||||
/* modified and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* This header file contains a number of macro definitions that are used */ |
||||
/* by the rest of the engine. Porters are free to copy this file and */ |
||||
/* adapt it to suit their own system. */ |
||||
/* */ |
||||
/* IMPORTANT NOTE: */ |
||||
/* */ |
||||
/* Porters, read carefully the comments in `ftsys.h' before trying to */ |
||||
/* port this file to your system. It contains many essential */ |
||||
/* remarks, and will ease your work greatly. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
#ifndef FTCONFIG_H |
||||
#define FTCONFIG_H |
||||
|
||||
/* Include the header file containing all developer build options */ |
||||
#include <ftoption.h> |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* PLATFORM-SPECIFIC CONFIGURATION MACROS */ |
||||
/* */ |
||||
/* These macros can be toggled to suit a specific system. The current */ |
||||
/* ones are defaults used to compile FreeType in an ANSI C environment */ |
||||
/* (16bit compilers are also supported). Copy this file to your own */ |
||||
/* `freetype/arch/<system>' directory, and edit it to port the engine. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/* Define to empty if the keyword does not work. */ |
||||
/* #undef const */ |
||||
|
||||
/* Define if you have the ANSI C header files. */ |
||||
#define STDC_HEADERS 1 |
||||
|
||||
/* We use <limits.h> values to know the sizes of the types. */ |
||||
#include <limits.h> |
||||
|
||||
/* The number of bytes in an `int' type. */ |
||||
#if UINT_MAX == 0xFFFFFFFF |
||||
#define SIZEOF_INT 4 |
||||
#elif UINT_MAX == 0xFFFF |
||||
#define SIZEOF_INT 2 |
||||
#elif UINT_MAX > 0xFFFFFFFF && UINT_MAX == 0xFFFFFFFFFFFFFFFF |
||||
#define SIZEOF_INT 8 |
||||
#else |
||||
#error "Unsupported number of bytes in `int' type!" |
||||
#endif |
||||
|
||||
/* The number of bytes in a `long' type. */ |
||||
#if ULONG_MAX == 0xFFFFFFFF |
||||
#define SIZEOF_LONG 4 |
||||
#elif ULONG_MAX > 0xFFFFFFFF && ULONG_MAX == 0xFFFFFFFFFFFFFFFF |
||||
#define SIZEOF_LONG 8 |
||||
#else |
||||
#error "Unsupported number of bytes in `long' type!" |
||||
#endif |
||||
|
||||
/* Define if you have the memcpy function. */ |
||||
#define HAVE_MEMCPY 1 |
||||
|
||||
/* Define if you have the <fcntl.h> header file. */ |
||||
#define HAVE_FCNTL_H 0 |
||||
|
||||
/* Define if you have the <unistd.h> header file. */ |
||||
#define HAVE_UNISTD_H 0 |
||||
|
||||
|
||||
/* Preferred alignment of data */ |
||||
#define FT_ALIGNMENT 8 |
||||
|
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* AUTOMATIC CONFIGURATION MACROS */ |
||||
/* */ |
||||
/* These macros are computed from the ones defined above. Don't touch */ |
||||
/* their definition, unless you know precisely what you're doing. No */ |
||||
/* porter should need to mess with them. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* IntN types */ |
||||
/* */ |
||||
/* Used to guarantee the size of some specific integers. */ |
||||
/* */ |
||||
typedef signed short FT_Int16; |
||||
typedef unsigned short FT_Word16; |
||||
|
||||
#if SIZEOF_INT == 4 |
||||
|
||||
typedef signed int FT_Int32; |
||||
typedef unsigned int FT_Word32; |
||||
|
||||
#elif SIZEOF_LONG == 4 |
||||
|
||||
typedef signed long FT_Int32; |
||||
typedef unsigned long FT_Word32; |
||||
|
||||
#else |
||||
#error "no 32bit type found - please check your configuration files" |
||||
#endif |
||||
|
||||
#if SIZEOF_LONG == 8 |
||||
|
||||
/* LONG64 must be defined when a 64-bit type is available */ |
||||
#define LONG64 |
||||
#define INT64 long |
||||
|
||||
#else |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* GCC provides the non-ANSI 'long long' 64-bit type. You can activate */ |
||||
/* it by defining the FTCALC_USE_LONG_LONG macro in `ftconfig.h'. Note */ |
||||
/* that this will produce many -ansi warnings during library */ |
||||
/* compilation. */ |
||||
/* */ |
||||
#ifdef FTCALC_USE_LONG_LONG |
||||
|
||||
#define LONG64 |
||||
#define INT64 long long |
||||
|
||||
#endif /* FTCALC_USE_LONG_LONG */ |
||||
#endif |
||||
|
||||
|
||||
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT |
||||
#define LOCAL_DEF static |
||||
#define LOCAL_FUNC static |
||||
#else |
||||
#define LOCAL_DEF extern |
||||
#define LOCAL_FUNC /* nothing */ |
||||
#endif |
||||
|
||||
#ifdef FT_MAKE_OPTION_SINGLE_LIBRARY_OBJECT |
||||
#define BASE_DEF LOCAL_DEF |
||||
#define BASE_FUNC LOCAL_FUNC |
||||
#else |
||||
#define BASE_DEF extern |
||||
#define BASE_FUNC /* nothing */ |
||||
#endif |
||||
|
||||
#ifndef EXPORT_DEF |
||||
#define EXPORT_DEF extern |
||||
#endif |
||||
|
||||
#ifndef EXPORT_FUNC |
||||
#define EXPORT_FUNC /* nothing */ |
||||
#endif |
||||
|
||||
#endif /* FTCONFIG_H */ |
||||
|
||||
|
||||
/* END */ |
@ -1,214 +0,0 @@ |
||||
/**************************************************************************
|
||||
* |
||||
* ftsystem.h 1.0 |
||||
* |
||||
* ANSI-specific FreeType low-level system interface |
||||
* |
||||
* This file contains the definition of interface used by FreeType |
||||
* to access low-level, i.e. memory management, i/o access as well |
||||
* as thread synchronisation.
|
||||
* |
||||
* |
||||
* Copyright 1996-1999 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used
|
||||
* modified and distributed under the terms of the FreeType project
|
||||
* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
* this file you indicate that you have read the license and
|
||||
* understand and accept it fully.
|
||||
*
|
||||
**************************************************************************/ |
||||
|
||||
#include <ftsystem.h> |
||||
#include <fterrors.h> |
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <string.h> |
||||
|
||||
/*********************************************************************/ |
||||
/* */ |
||||
/* MEMORY MANAGEMENT INTERFACE */ |
||||
/* */ |
||||
|
||||
/************************************************************************
|
||||
* |
||||
* <FuncType> |
||||
* FT_Alloc_Func |
||||
* |
||||
* <Description> |
||||
* The memory allocator function type |
||||
* |
||||
* <Input> |
||||
* system :: pointer to the system object |
||||
* size :: requested size in bytes |
||||
* |
||||
* <Output> |
||||
* block :: address of newly allocated block |
||||
* |
||||
* <Return>
|
||||
* Error code. 0 means success. |
||||
* |
||||
* <Note> |
||||
* If your allocation routine ALWAYS zeroes the new block, you |
||||
* should set the flag FT_SYSTEM_FLAG_ALLOC_ZEROES in your system |
||||
* object 'flags' field. |
||||
* |
||||
* If you have set the flag FT_SYSTEM_FLAG_REPORT_CURRENT_ALLOC in |
||||
* your system's "system_flags" field, this function should update |
||||
* the "current_alloc" field of the system object. |
||||
* |
||||
************************************************************************/ |
||||
|
||||
static |
||||
void* ft_alloc( FT_Memory memory, |
||||
long size ) |
||||
{ |
||||
(void)memory; |
||||
return malloc(size); |
||||
} |
||||
|
||||
|
||||
/************************************************************************
|
||||
* |
||||
* <FuncType> |
||||
* FT_Realloc_Func |
||||
* |
||||
* <Description> |
||||
* The memory reallocator function type |
||||
* |
||||
* <Input> |
||||
* system :: pointer to the system object |
||||
* new_size :: new requested size in bytes |
||||
* |
||||
* <InOut> |
||||
* block :: address of block in memory |
||||
* |
||||
* <Return> |
||||
* Error code. 0 means success. |
||||
* |
||||
* <Note> |
||||
* This function is _never_ called when the system flag
|
||||
* FT_SYSTEM_FLAG_NO_REALLOC is set. Instead, the engine will emulate |
||||
* realloc through "alloc" and "free". |
||||
* |
||||
* Note that this is possible due to the fact that FreeType's |
||||
* "FT_Realloc" always requests the _current_ size of the reallocated |
||||
* block as a parameter, thus avoiding memory leaks. |
||||
* |
||||
* If you have set the flag FT_SYSTEM_FLAG_REPORT_CURRENT_ALLOC in |
||||
* your system's "system_flags" field, this function should update |
||||
* the "current_alloc" field of the system object. |
||||
* |
||||
************************************************************************/ |
||||
|
||||
static |
||||
void* ft_realloc( FT_Memory memory, |
||||
long cur_size, |
||||
long new_size, |
||||
void* block ) |
||||
{ |
||||
(void)memory; |
||||
(void)cur_size; |
||||
|
||||
return realloc( block, new_size ); |
||||
} |
||||
|
||||
|
||||
/************************************************************************
|
||||
* |
||||
* <FuncType> |
||||
* FT_Free_Func |
||||
* |
||||
* <Description> |
||||
* The memory release function type |
||||
* |
||||
* <Input> |
||||
* system :: pointer to the system object |
||||
* block :: address of block in memory |
||||
* |
||||
* <Note> |
||||
* If you have set the flag FT_SYSTEM_FLAG_REPORT_CURRENT_ALLOC in |
||||
* your system's "system_flags" field, this function should update |
||||
* the "current_alloc" field of the system object. |
||||
* |
||||
************************************************************************/ |
||||
|
||||
static |
||||
void ft_free( FT_Memory memory, |
||||
void* block ) |
||||
{ |
||||
(void)memory; |
||||
free( block ); |
||||
} |
||||
|
||||
/*********************************************************************/ |
||||
/* */ |
||||
/* RESOURCE MANAGEMENT INTERFACE */ |
||||
/* */ |
||||
|
||||
|
||||
#define STREAM_FILE(stream) ((FILE*)stream->descriptor.pointer) |
||||
|
||||
static |
||||
void ft_close_stream( FT_Stream stream ) |
||||
{ |
||||
fclose( STREAM_FILE(stream) ); |
||||
} |
||||
|
||||
static |
||||
unsigned long ft_io_stream( FT_Stream stream, |
||||
unsigned long offset, |
||||
char* buffer, |
||||
unsigned long count ) |
||||
{ |
||||
FILE* file; |
||||
|
||||
file = STREAM_FILE(stream); |
||||
|
||||
fseek( file, offset, SEEK_SET );
|
||||
return (unsigned long)fread( buffer, 1, count, file ); |
||||
} |
||||
|
||||
|
||||
extern |
||||
int FT_New_Stream( const char* filepathname, |
||||
FT_Stream stream ) |
||||
{ |
||||
FILE* file; |
||||
|
||||
file = fopen( filepathname, "rb" ); |
||||
if (!file) |
||||
return FT_Err_Cannot_Open_Resource; |
||||
|
||||
fseek( file, 0, SEEK_END ); |
||||
stream->size = ftell(file); |
||||
fseek( file, 0, SEEK_SET ); |
||||
|
||||
stream->descriptor.pointer = file; |
||||
stream->pos = 0; |
||||
|
||||
stream->read = ft_io_stream; |
||||
stream->close = ft_close_stream; |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
|
||||
extern |
||||
FT_Memory FT_New_Memory( void ) |
||||
{ |
||||
FT_Memory memory; |
||||
|
||||
memory = (FT_Memory)malloc( sizeof(*memory) ); |
||||
if (memory) |
||||
{ |
||||
memory->user = 0; |
||||
memory->alloc = ft_alloc; |
||||
memory->realloc = ft_realloc; |
||||
memory->free = ft_free; |
||||
} |
||||
return memory; |
||||
} |
||||
|
@ -1,194 +0,0 @@ |
||||
#******************************************************************* |
||||
#* |
||||
#* FreeType 2 Configuration rules for Unix + gcc |
||||
#* |
||||
#* Copyright 1996-1999 by |
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg. |
||||
#* |
||||
#* This file is part of the FreeType project, and may only be used |
||||
#* modified and distributed under the terms of the FreeType project |
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute |
||||
#* this file you indicate that you have read the license and |
||||
#* understand and accept it fully. |
||||
#* |
||||
#* |
||||
#* The purpose of this sub-Makefile is to define various build and |
||||
#* platform specific variables before including the sub-Makefile |
||||
#* containing the FreeType library rules, found in |
||||
#* |
||||
#* $(TOP)/config/freetype.mk |
||||
#* |
||||
#* The following variables must be defined before including this |
||||
#* file : |
||||
#* |
||||
#* TOP Pathname to the top of the FreeType sources |
||||
#* hierarchy |
||||
#* |
||||
#* This file should define the following variables before including |
||||
#* the FreeType library rules file : |
||||
#* |
||||
#* BUILD Pathname to the platform-specific files used |
||||
#* for the build. Usually `$(TOP)/config/<system>' |
||||
#* |
||||
#* SEP Directory separator used during compilation. |
||||
#* (usually "/" or "\"). Note that on Win32, both gcc |
||||
#* and Visual C++ use "/" as a directory separator !! |
||||
#* |
||||
#* HOSTSEP Directory separator for $(COPY) and $(DELETE) |
||||
#* |
||||
#* DELETE The forced remove/delete command to erase one or more |
||||
#* files |
||||
#* |
||||
#* INCLUDE The location of all public header files. e.g. |
||||
#* `$(TOP)/include'include' * |
||||
#* |
||||
#* SRC The directory containing all sources. e.g. |
||||
#* '$(TOP)/src' |
||||
#* |
||||
#* OBJ_DIR The location where compiled object files will be |
||||
#* placed, e.g. '$(TOP)/obj' |
||||
#* |
||||
#* LIB_DIR The location where the resulting library file will be |
||||
#* placed, e.g. '$(TOP)/obj' |
||||
#* |
||||
#* LIBRARY The filename of the resulting library file, without |
||||
#* its extension.. e.g. 'libfreetype' or 'freetype' |
||||
#* |
||||
#* O The object file suffix. Can be '.o', '.obj,' '.lo,' |
||||
#* ';coff,' etc. |
||||
#* |
||||
#* A The library file suffix. Can be '.a' '.so,' '.lib' |
||||
#* '.dll,' etc. |
||||
#* |
||||
#* I The path inclusion flag. Some compilers use a |
||||
#* different flag than '-I' to specify an additional |
||||
#* include path. Examples are '/i=' or '-J ', etc. |
||||
#* |
||||
#* D The macro definition flag. I haven't met compilers |
||||
#* which don't use the '-D' switch to define a macro, but |
||||
#* who knows... |
||||
#* |
||||
#* T The compilation flag used to identify the target. Some |
||||
#* compilers use a different flag than '-o ' to specify |
||||
#* the name of the target object file. |
||||
#* |
||||
#* CFLAGS The set of flags used to compile object files. |
||||
#* (usually contains the flag '-c'). |
||||
#* |
||||
#* |
||||
#* |
||||
#******************************************************************* |
||||
|
||||
ifndef TOP |
||||
TOP := . |
||||
endif |
||||
|
||||
DELETE := rm -f |
||||
SEP := / |
||||
HOSTSEP := $(strip \ ) |
||||
BUILD := $(TOP)/config/dos |
||||
PLATFORM := dos |
||||
|
||||
# the directory where all object files are placed |
||||
# |
||||
# Note that this is not $(TOP)/obj !! |
||||
# This lets you build the library in your own directory |
||||
# with something like : |
||||
# |
||||
# set TOP=....../path/to/freetype2/top/dir... |
||||
# mkdir obj |
||||
# make -f %TOP%/Makefile setup [options] |
||||
# make -f %TOP%/Makefile |
||||
# |
||||
# |
||||
OBJ_DIR := obj |
||||
|
||||
|
||||
# the directory where all library files are placed |
||||
# |
||||
# by default, this is the same as OBJ_DIR, however, this can be |
||||
# changed to suit particular needs.. |
||||
# |
||||
LIB_DIR := $(OBJ_DIR) |
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc.. |
||||
# depending on the platform |
||||
# |
||||
O := o |
||||
|
||||
# the library file extension, this can be .a, .lib, etc.. |
||||
# depending on the platform |
||||
# |
||||
A := a |
||||
|
||||
|
||||
# The name of the final library file. |
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name |
||||
# |
||||
LIBRARY := libfreetype |
||||
|
||||
|
||||
# path inclusion flag. |
||||
# |
||||
# Some compilers use a different flag than '-I' to specify an |
||||
# additional include path. Examples are "/i=" or "-J", etc... |
||||
# |
||||
I := -I |
||||
|
||||
|
||||
# The link flag used to specify a given library file on link. |
||||
# Note that this is only used to compile the demo programs, not |
||||
# the library itself. |
||||
# |
||||
L := -l |
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given |
||||
# source object. Usually is '-D' like in "-DDEBUG" |
||||
# |
||||
D := -D |
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !! |
||||
# |
||||
# |
||||
T := -o |
||||
|
||||
# C flags |
||||
# |
||||
# These should concern : |
||||
# |
||||
# - debug output |
||||
# - optimization |
||||
# - warnings |
||||
# - ansi compliance.. |
||||
# |
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O6 -Wall |
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant |
||||
# nothing (if it already is by default like LCC). |
||||
# |
||||
ANSIFLAGS := -ansi -pedantic |
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
|
||||
# This final rule is used to link all object files into a single |
||||
# library. It is part of the system-specific sub-Makefile because not |
||||
# all librarians accept a simple syntax like : |
||||
# |
||||
# librarian library_file {list of object files} |
||||
# |
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@ |
||||
$(AR) -r $@ $(OBJECTS_LIST) |
||||
|
||||
endif |
@ -0,0 +1,131 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for Dos + GCC
|
||||
#*
|
||||
#* Copyright 1996-2000 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#* Please read the file "freetype/docs/config.txt" to understand
|
||||
#* what this file does..
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := rm -f
|
||||
SEP := /
|
||||
HOSTSEP := $(strip \ )
|
||||
BUILD := $(TOP)/config/dos
|
||||
PLATFORM := dos
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O6 -Wall
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS := -ansi -pedantic
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@
|
||||
$(AR) -r $@ $(OBJECTS_LIST)
|
||||
|
||||
endif |
@ -1,4 +1,5 @@ |
||||
FT_DRIVER(psnames_driver_interface) |
||||
FT_DRIVER(sfnt_driver_interface) |
||||
FT_DRIVER(tt_driver_interface) |
||||
FT_DRIVER(t1_driver_interface) |
||||
FT_DRIVER(psnames_driver_interface) |
||||
FT_DRIVER(t1z_driver_interface) |
@ -1,217 +0,0 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for Unix + gcc
|
||||
#*
|
||||
#* Copyright 1996-1999 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#*
|
||||
#* The purpose of this sub-Makefile is to define various build and
|
||||
#* platform specific variables before including the sub-Makefile
|
||||
#* containing the FreeType library rules, found in
|
||||
#*
|
||||
#* $(TOP)/config/freetype.mk
|
||||
#*
|
||||
#* The following variables must be defined before including this
|
||||
#* file :
|
||||
#*
|
||||
#* TOP Pathname to the top of the FreeType sources
|
||||
#* hierarchy
|
||||
#*
|
||||
#* This file should define the following variables before including
|
||||
#* the FreeType library rules file :
|
||||
#*
|
||||
#* BUILD Pathname to the platform-specific files used
|
||||
#* for the build. Usually `$(TOP)/config/<system>'
|
||||
#*
|
||||
#* SEP Directory separator used during compilation.
|
||||
#* (usually "/" or "\"). Note that on Win32, both gcc
|
||||
#* and Visual C++ use "/" as a directory separator !!
|
||||
#*
|
||||
#* HOSTSEP Directory separator for $(COPY) and $(DELETE)
|
||||
#*
|
||||
#* DELETE The forced remove/delete command to erase one or more
|
||||
#* files
|
||||
#*
|
||||
#* INCLUDE The location of all public header files. e.g.
|
||||
#* `$(TOP)/include'include' *
|
||||
#*
|
||||
#* SRC The directory containing all sources. e.g.
|
||||
#* '$(TOP)/src'
|
||||
#*
|
||||
#* OBJ_DIR The location where compiled object files will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIB_DIR The location where the resulting library file will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIBRARY The filename of the resulting library file, without
|
||||
#* its extension.. e.g. 'libfreetype' or 'freetype'
|
||||
#*
|
||||
#* O The object file suffix. Can be '.o', '.obj,' '.lo,'
|
||||
#* ';coff,' etc.
|
||||
#*
|
||||
#* A The library file suffix. Can be '.a' '.so,' '.lib'
|
||||
#* '.dll,' etc.
|
||||
#*
|
||||
#* I The path inclusion flag. Some compilers use a
|
||||
#* different flag than '-I' to specify an additional
|
||||
#* include path. Examples are '/i=' or '-J ', etc.
|
||||
#*
|
||||
#* D The macro definition flag. I haven't met compilers
|
||||
#* which don't use the '-D' switch to define a macro, but
|
||||
#* who knows...
|
||||
#*
|
||||
#* T The compilation flag used to identify the target. Some
|
||||
#* compilers use a different flag than '-o ' to specify
|
||||
#* the name of the target object file.
|
||||
#*
|
||||
#* CFLAGS The set of flags used to compile object files.
|
||||
#* (usually contains the flag '-c').
|
||||
#*
|
||||
#*
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := del
|
||||
SEP := /
|
||||
HOSTSEP := $(strip \ )
|
||||
BUILD := $(TOP)/config/os2
|
||||
PLATFORM := os2
|
||||
CC := gcc
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O6 -Wall
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS := -ansi -pedantic
|
||||
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
# Librarian to use to build the static library
|
||||
#
|
||||
FT_LIBRARIAN := $(AR) -r
|
||||
|
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@
|
||||
$(FT_LIBRARIAN) $@ $(OBJECTS_LIST)
|
||||
|
||||
|
||||
# Cleaning rules
|
||||
#
|
||||
DIR_OBJ := $(subst $(SEP),\,$(OBJ_DIR))
|
||||
|
||||
clean_freetype_objects: |
||||
-del $(DIR_OBJ)\*.$O
|
||||
|
||||
clean_freetype_lib: |
||||
-del $(subst $(SEP),\,$(FT_LIBRARY))
|
||||
|
||||
clean: clean_freetype_objects |
||||
|
||||
|
||||
|
||||
endif |
||||
|
||||
|
@ -1,182 +0,0 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* ftconfig.h */ |
||||
/* */ |
||||
/* ANSI-specific configuration file (specification only). */ |
||||
/* */ |
||||
/* Copyright 1996-1999 by */ |
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used */ |
||||
/* modified and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* This header file contains a number of macro definitions that are used */ |
||||
/* by the rest of the engine. Porters are free to copy this file and */ |
||||
/* adapt it to suit their own system. */ |
||||
/* */ |
||||
/* IMPORTANT NOTE: */ |
||||
/* */ |
||||
/* Porters, read carefully the comments in `ftsys.h' before trying to */ |
||||
/* port this file to your system. It contains many essential */ |
||||
/* remarks, and will ease your work greatly. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
#ifndef FTCONFIG_H |
||||
#define FTCONFIG_H |
||||
|
||||
/* Include the header file containing all developer build options */ |
||||
#include <ftoption.h> |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* PLATFORM-SPECIFIC CONFIGURATION MACROS */ |
||||
/* */ |
||||
/* These macros can be toggled to suit a specific system. The current */ |
||||
/* ones are defaults used to compile FreeType in an ANSI C environment */ |
||||
/* (16bit compilers are also supported). Copy this file to your own */ |
||||
/* `freetype/arch/<system>' directory, and edit it to port the engine. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/* Define to empty if the keyword does not work. */ |
||||
/* #undef const */ |
||||
|
||||
/* Define if you have the ANSI C header files. */ |
||||
#define STDC_HEADERS 1 |
||||
|
||||
/* We use <limits.h> values to know the sizes of the types. */ |
||||
#include <limits.h> |
||||
|
||||
/* The number of bytes in an `int' type. */ |
||||
#if UINT_MAX == 0xFFFFFFFF |
||||
#define SIZEOF_INT 4 |
||||
#elif UINT_MAX == 0xFFFF |
||||
#define SIZEOF_INT 2 |
||||
#elif UINT_MAX > 0xFFFFFFFF && UINT_MAX == 0xFFFFFFFFFFFFFFFF |
||||
#define SIZEOF_INT 8 |
||||
#else |
||||
#error "Unsupported number of bytes in `int' type!" |
||||
#endif |
||||
|
||||
/* The number of bytes in a `long' type. */ |
||||
#if ULONG_MAX == 0xFFFFFFFF |
||||
#define SIZEOF_LONG 4 |
||||
#elif ULONG_MAX > 0xFFFFFFFF && ULONG_MAX == 0xFFFFFFFFFFFFFFFF |
||||
#define SIZEOF_LONG 8 |
||||
#else |
||||
#error "Unsupported number of bytes in `long' type!" |
||||
#endif |
||||
|
||||
/* Define if you have the memcpy function. */ |
||||
#define HAVE_MEMCPY 1 |
||||
|
||||
/* Define if you have the <fcntl.h> header file. */ |
||||
#define HAVE_FCNTL_H 0 |
||||
|
||||
/* Define if you have the <unistd.h> header file. */ |
||||
#define HAVE_UNISTD_H 0 |
||||
|
||||
|
||||
/* Preferred alignment of data */ |
||||
#define FT_ALIGNMENT 8 |
||||
|
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* AUTOMATIC CONFIGURATION MACROS */ |
||||
/* */ |
||||
/* These macros are computed from the ones defined above. Don't touch */ |
||||
/* their definition, unless you know precisely what you're doing. No */ |
||||
/* porter should need to mess with them. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* IntN types */ |
||||
/* */ |
||||
/* Used to guarantee the size of some specific integers. */ |
||||
/* */ |
||||
typedef signed short FT_Int16; |
||||
typedef unsigned short FT_Word16; |
||||
|
||||
#if SIZEOF_INT == 4 |
||||
|
||||
typedef signed int FT_Int32; |
||||
typedef unsigned int FT_Word32; |
||||
|
||||
#elif SIZEOF_LONG == 4 |
||||
|
||||
typedef signed long FT_Int32; |
||||
typedef unsigned long FT_Word32; |
||||
|
||||
#else |
||||
#error "no 32bit type found - please check your configuration files" |
||||
#endif |
||||
|
||||
#if SIZEOF_LONG == 8 |
||||
|
||||
/* LONG64 must be defined when a 64-bit type is available */ |
||||
#define LONG64 |
||||
#define INT64 long |
||||
|
||||
#else |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* GCC provides the non-ANSI 'long long' 64-bit type. You can activate */ |
||||
/* it by defining the FTCALC_USE_LONG_LONG macro in `ftconfig.h'. Note */ |
||||
/* that this will produce many -ansi warnings during library */ |
||||
/* compilation. */ |
||||
/* */ |
||||
#ifdef FTCALC_USE_LONG_LONG |
||||
|
||||
#define LONG64 |
||||
#define INT64 long long |
||||
|
||||
#endif /* FTCALC_USE_LONG_LONG */ |
||||
#endif |
||||
|
||||
|
||||
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT |
||||
#define LOCAL_DEF static |
||||
#define LOCAL_FUNC static |
||||
#else |
||||
#define LOCAL_DEF extern |
||||
#define LOCAL_FUNC /* nothing */ |
||||
#endif |
||||
|
||||
#ifdef FT_MAKE_OPTION_SINGLE_LIBRARY_OBJECT |
||||
#define BASE_DEF LOCAL_DEF |
||||
#define BASE_FUNC LOCAL_FUNC |
||||
#else |
||||
#define BASE_DEF extern |
||||
#define BASE_FUNC /* nothing */ |
||||
#endif |
||||
|
||||
#ifndef EXPORT_DEF |
||||
#define EXPORT_DEF extern |
||||
#endif |
||||
|
||||
#ifndef EXPORT_FUNC |
||||
#define EXPORT_FUNC /* nothing */ |
||||
#endif |
||||
|
||||
#endif /* FTCONFIG_H */ |
||||
|
||||
|
||||
/* END */ |
@ -1,4 +0,0 @@ |
||||
FT_DRIVER(psnames_driver_interface) |
||||
FT_DRIVER(sfnt_driver_interface) |
||||
FT_DRIVER(tt_driver_interface) |
||||
FT_DRIVER(t1_driver_interface) |
@ -1,204 +0,0 @@ |
||||
#ifndef FTOPTION_H |
||||
#define FTOPTION_H |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* USER-SELECTABLE CONFIGURATION MACROS */ |
||||
/* */ |
||||
/* These macros can be toggled by developers to enable or disable */ |
||||
/* certain aspects of FreeType. This file contains macros that apply to */ |
||||
/* all of FreeType. Driver-specific configurations are placed in each */ |
||||
/* driver directory (e.g. `freetype/drivers/ttlib/ttconfig.h'). */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Alternate Glyph Image Format support */ |
||||
/* */ |
||||
/* By default, the glyph images returned by the FreeType glyph loader */ |
||||
/* can either be a pixmap or a vectorial outline defined through */ |
||||
/* bezier control points. When defining the following configuration */ |
||||
/* macro, some font drivers will be able to register alternate */ |
||||
/* glyph image formats. */ |
||||
/* */ |
||||
/* Unset this macro if you're sure that you'll never use a font driver */ |
||||
/* with an alternate glyph format, this will reduce the size of the */ |
||||
/* base layer code. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_ALTERNATE_GLYPH_FORMATS |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Glyph Postscript Names handling */ |
||||
/* */ |
||||
/* By default, FreeType 2 is built with the "psnames" module compiled */ |
||||
/* in. This module is in charge of converting a glyph name string into */ |
||||
/* a Unicode value, or return a Macintosh standard glyph name for the */ |
||||
/* use with the TrueType "post" table. */ |
||||
/* */ |
||||
/* Undefine this macro if you do not want the "psnames" compiled in */ |
||||
/* your build of FreeType. This has the following effects : */ |
||||
/* */ |
||||
/* - the TrueType driver will provide its own set of glyph names, */ |
||||
/* if you build it to support postscript names in the TrueType */ |
||||
/* "post" table. */ |
||||
/* */ |
||||
/* - the Type 1 driver will not be able to synthetize a */ |
||||
/* Unicode charmap out of the glyphs found in the fonts. */ |
||||
/* */ |
||||
/* You would normally undefine this configuration macro when */ |
||||
/* building a version of FreeType that doesn't contain a Type 1 */ |
||||
/* or CFF driver. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Postscript Names to Unicode Values support */ |
||||
/* */ |
||||
/* By default, FreeType 2 is built with the "psnames" module compiled */ |
||||
/* in. Among other things, the module is used to convert a glyph */ |
||||
/* name into a unicode value. This is especially useful in order to */ |
||||
/* synthetize on the fly a Unicode charmap from the CFF/Type 1 driver */ |
||||
/* through a big table named the "Adobe Glyph List". */ |
||||
/* */ |
||||
/* Undefine this macro if you do not want the Adobe Glyph List */ |
||||
/* compiled in your "psnames" module. The Type 1 driver will not */ |
||||
/* be able to synthetize a Unicode charmap out of the glyphs found */ |
||||
/* in the fonts.. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* GCC provides the non-ANSI `long long' 64-bit type. You can activate */ |
||||
/* it by defining the FTCALC_USE_LONG_LONG macro here. Note however */ |
||||
/* that we did not experience any improvement in speed with gcc, and */ |
||||
/* that the final code seems bigger when linked. */ |
||||
/* */ |
||||
#undef FTCALC_USE_LONG_LONG |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* When compiling FreeType as a DLL, some systems/compilers need a */ |
||||
/* special keyword in front of each function definition instead of */ |
||||
/* `extern'. */ |
||||
/* */ |
||||
/* The macros EXPORT_DEF and EXPORT_FUNC are thus used to define */ |
||||
/* exported library function interfaces and exported library functions */ |
||||
/* implementations respectively. */ |
||||
/* */ |
||||
/* If not defined here, they automatically default to `extern' and void */ |
||||
/* later in this header file. */ |
||||
/* */ |
||||
#undef EXPORT_DEF |
||||
#undef EXPORT_FUNC |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Debug level */ |
||||
/* */ |
||||
/* FreeType can be compiled in debug or trace mode. In debug mode, */ |
||||
/* errors are reported through the `ftdebug' component. In trace */ |
||||
/* mode, additional messages are sent to the standard output during */ |
||||
/* execution. */ |
||||
/* */ |
||||
/* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */ |
||||
/* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */ |
||||
/* */ |
||||
/* Don't define any of these macros to compile in `release' mode. */ |
||||
/* */ |
||||
#undef FT_DEBUG_LEVEL_ERROR |
||||
#undef FT_DEBUG_LEVEL_TRACE |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Anti-aliasing support */ |
||||
/* */ |
||||
/* Undefine this macro only if you want to disable the anti-aliasing */ |
||||
/* support in FreeType. This will save you about 5 Kb of code. It */ |
||||
/* may be important for some embedded systems. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_ANTI_ALIAS |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Endianess performance improvement */ |
||||
/* */ |
||||
/* FreeType is completely endian-independent, and can thus be compiled */ |
||||
/* directly on _any_ machine. However, some components of the library */ |
||||
/* provide improved routines for the cases where endianess is known. */ |
||||
/* */ |
||||
/* It usually results in speed-ups and reduced code size. Note that */ |
||||
/* you should not define both of these macros. */ |
||||
/* */ |
||||
/* */ |
||||
/* NOTE: For now, only the scan-line converter (base/ftraster.c) uses */ |
||||
/* these macros to speed-up some anti-alias rendering routines. */ |
||||
/* */ |
||||
#undef FT_CONFIG_OPTION_LITTLE_ENDIAN |
||||
#undef FT_CONFIG_OPTION_BIG_ENDIAN |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Define this configuration macro whenever you want to build a version */ |
||||
/* of FreeType that does not include a default `system' component. */ |
||||
/* */ |
||||
/* Note that this will prevent the compilation of `ftinit', hence the */ |
||||
/* function FT_Init_FreeType */ |
||||
/* */ |
||||
#undef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* The size in bytes of the render pool used by the scan-line */ |
||||
/* converter to do all of its work. */ |
||||
/* */ |
||||
/* This must be greater than 4 Kb */ |
||||
/* */ |
||||
#define FT_RENDER_POOL_SIZE 32768 |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* FT_MAX_DRIVERS */ |
||||
/* */ |
||||
/* The maximum number of font drivers that can be registered in a */ |
||||
/* single FreeType library object. 8 seems to be a good choice due */ |
||||
/* to the relative low actual number of drivers ;-) */ |
||||
/* */ |
||||
#define FT_MAX_DRIVERS 8 |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* FT_MAX_EXTENSIONS */ |
||||
/* */ |
||||
/* The maximum number of extensions that can be registered in a */ |
||||
/* single font driver. 8 seems to be a good choice for now.. */ |
||||
/* */ |
||||
#define FT_MAX_EXTENSIONS 8 |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* FT_MAX_GLYPH_FORMATS */ |
||||
/* */ |
||||
/* The maximum number of glyph image formats that might be registered */ |
||||
/* in a given library instance. 8 seems to be a good choice due to */ |
||||
/* the relatively low number of current formats ;-) */ |
||||
/* */ |
||||
|
||||
#define FT_MAX_GLYPH_FORMATS 8 |
||||
|
||||
|
||||
|
||||
#endif /* FTOPTION_H */ |
@ -1,940 +0,0 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* ftsys.c */ |
||||
/* */ |
||||
/* OS/2-specific system operations (body). */ |
||||
/* */ |
||||
/* Copyright 1996-1999 by */ |
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used */ |
||||
/* modified and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* This implementation of the `ftsys' component uses malloc()/free() for */ |
||||
/* memory management, and the OS/2 DosXXXXX() API functionss for file */ |
||||
/* access. */ |
||||
/* */ |
||||
/* IMPORTANT NOTE: */ |
||||
/* */ |
||||
/* Porters, read carefully the comments in ftsys.h before trying to */ |
||||
/* port this file to your system. It contains many essential */ |
||||
/* remarks, and will ease your work greatly. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
#include "ftsys.h" |
||||
#include "ftstream.h" |
||||
#include "ftdebug.h" |
||||
|
||||
#include <os2.h> |
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <string.h> |
||||
|
||||
#ifdef HAVE_UNISTD_H |
||||
#include <unistd.h> |
||||
#endif |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */ |
||||
/* parameter of the PTRACE() and PERROR() macros, used to print/log */ |
||||
/* messages during execution. */ |
||||
/* */ |
||||
#undef FT_COMPONENT |
||||
#define FT_COMPONENT trace_io |
||||
|
||||
|
||||
#undef CUR_SYSTEM /* just in case */ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* To ease porting, we use the macro SYS_STREAM to name the */ |
||||
/* system-specific stream type. For example, it is a `FILE*' with the */ |
||||
/* ANSI libc, it will be a file descriptor, i.e. an integer, when using */ |
||||
/* the Unix system API, etc. */ |
||||
/* */ |
||||
#define SYS_STREAM HFILE |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* I/O ACCESS AND MANAGEMENT */ |
||||
/* */ |
||||
/* We only define the `ANSI' resource class in this class. It is */ |
||||
/* disk-based and provides a MRU cache in order to only keep the file */ |
||||
/* descriptors of the 10 most recently used resource files. */ |
||||
/* */ |
||||
/* It simply contains two lists. One contains the `cached' resources */ |
||||
/* with a valid FILE* pointer, the second contains all other `flushed' */ |
||||
/* resource objects. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Struct> */ |
||||
/* FT_Os2FileRec */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* The FT_Os2File class derives from FT_ResourceRec. */ |
||||
/* */ |
||||
/* <Fields> */ |
||||
/* root :: The root resource class fields. */ |
||||
/* */ |
||||
/* pathname :: This is a copy of the ANSI file pathname used to open */ |
||||
/* streams for the resource. A different implementation */ |
||||
/* is free to use Unicode chars, or file i-node numbers, */ |
||||
/* etc. */ |
||||
/* */ |
||||
/* file_size :: The size in bytes of the resource. This field should */ |
||||
/* be set to -1 until the resource is first opened. */ |
||||
/* */ |
||||
typedef struct FT_Os2FileRec_ |
||||
{ |
||||
FT_ResourceRec root; |
||||
char* pathname; /* the font file's pathname */ |
||||
FT_Long file_size; /* file size in bytes */ |
||||
|
||||
} FT_Os2FileRec, *FT_Os2File; |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* We use the macro STREAM_Name() as a convenience to return a given */ |
||||
/* ANSI resource's pathname. Its `stream' argument is a FT_Resource */ |
||||
/* which is typecasted to the FT_Os2File class. */ |
||||
/* */ |
||||
#define STREAM_Name( stream ) ((FT_Os2File)stream->resource)->pathname |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* We use the macro STREAM_File() as a convenience to extract the */ |
||||
/* system-specific stream handle from a given FreeType stream object. */ |
||||
/* */ |
||||
#define STREAM_File(stream) ((HFILE)stream->stream_id.pointer) |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* Os2File_Open */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* This function is used to open a system-stream for a given */ |
||||
/* resource. */ |
||||
/* */ |
||||
/* Note that it must update the target FreeType stream object with */ |
||||
/* the system-stream handle and the resource's size. */ |
||||
/* */ |
||||
/* Also, the `stream->base' field must be set to NULL for disk-based */ |
||||
/* resources, and to the address in memory of the resource's first */ |
||||
/* byte for memory-based ones. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* resource :: The source resource. */ |
||||
/* stream :: The target stream object. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* The stream object IS NOT CREATED by this function, but by its */ |
||||
/* caller. */ |
||||
/* */ |
||||
static |
||||
FT_Error Os2File_Open( FT_Os2File resource, |
||||
FT_Stream stream ) |
||||
{ |
||||
HFILE file; |
||||
ULONG ulAction; |
||||
|
||||
|
||||
/* open the file */ |
||||
#ifdef __EMX__ |
||||
if ( DosOpen( (FT_Byte*)resource->pathname, |
||||
&file, |
||||
&ulAction, 0, 0, OPEN_ACTION_OPEN_IF_EXISTS, |
||||
OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, |
||||
NULL ) ) |
||||
#else |
||||
if ( DosOpen( resource->pathname, |
||||
&file, |
||||
&ulAction, 0, 0, OPEN_ACTION_OPEN_IF_EXISTS, |
||||
OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, |
||||
NULL ) ) |
||||
#endif /* __EMX__ */ |
||||
{ |
||||
PERROR(( "Os2File_Open: Could not open file `%s'\n", |
||||
resource->pathname )); |
||||
return FT_Err_Cannot_Open_Stream; |
||||
} |
||||
|
||||
/* compute file size if necessary */ |
||||
if ( resource->file_size < 0 ) |
||||
{ |
||||
DosSetFilePtr( file, 0, FILE_END, (ULONG*)&resource->file_size ); |
||||
DosSetFilePtr( file, 0, FILE_BEGIN, &ulAction ); |
||||
} |
||||
|
||||
stream->resource = (FT_Resource)resource; |
||||
stream->stream_id.pointer = (void*)file; |
||||
stream->size = resource->file_size; |
||||
|
||||
/* it's a disk-based resource, we don't need to use the "base" and */ |
||||
/* "cursor" fields of the stream objects */ |
||||
stream->base = NULL; |
||||
stream->cursor = NULL; |
||||
|
||||
PTRACE1(( "Os2File_Open: Opened `%s' (%d bytes) successfully\n", |
||||
resource->pathname, resource->file_size )); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* Os2File_Close */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Closes a given stream. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: The target stream object. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
static |
||||
FT_Error Os2File_Close( FT_Stream stream ) |
||||
{ |
||||
PTRACE1(( "OS2File_Close: Closing file `%s'\n", STREAM_Name( stream ) )); |
||||
|
||||
DosClose( STREAM_File( stream ) ); |
||||
|
||||
stream->resource = NULL; |
||||
stream->stream_id.pointer = NULL; |
||||
stream->size = 0; |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* Os2File_Seek */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Seeks a stream to a given position. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: The target stream object. */ |
||||
/* position :: The offset in bytes from the start of the */ |
||||
/* resource/stream. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* The `seek' method is never called by the stream manager in case */ |
||||
/* of a memory-based resource (i.e., when `stream->base' isn't NULL). */ |
||||
/* */ |
||||
static |
||||
FT_Error Os2File_Seek( FT_Stream stream, |
||||
FT_Long position ) |
||||
{ |
||||
ULONG ibActual; |
||||
|
||||
|
||||
if ( DosSetFilePtr( STREAM_File( stream ), position, |
||||
FILE_BEGIN, &ibActual ) ) |
||||
{ |
||||
PERROR(( "Os2File_Seek: FAILED! Pos. %ld of `%s'\n", |
||||
position, STREAM_Name( stream ) )); |
||||
|
||||
return FT_Err_Invalid_Stream_Seek; |
||||
} |
||||
|
||||
PTRACE2(( "Os2File_Seek: Pos. %ld of `%s'\n", |
||||
position, STREAM_Name( stream ) )); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* Os2File_Skip */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Skips a given number of bytes in an OS/2 stream. Useful to skip */ |
||||
/* pad bytes, for example. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: The target stream object. */ |
||||
/* count :: The number of bytes to skip in the stream. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* The `skip' method is never called by the stream manager in case */ |
||||
/* of a memory-based resource (i.e., when `stream->base' isn't NULL). */ |
||||
/* */ |
||||
static |
||||
FT_Error Os2File_Skip( FT_Stream stream, |
||||
FT_Long count ) |
||||
{ |
||||
ULONG ibActual; |
||||
|
||||
|
||||
DosSetFilePtr( STREAM_File( stream ), 0, FILE_CURRENT, &ibActual ); |
||||
return Os2File_Seek( stream, ibActual + count ); |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* Os2File_Pos */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Returns the current offset within an OS/2 stream's resource. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: The target stream object. */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* position :: The current offset. -1 in case of error. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* The `pos' method is never called by the stream manager in case */ |
||||
/* of a memory-based resource (i.e., when `stream->base' isn't NULL). */ |
||||
/* */ |
||||
static |
||||
FT_Error Os2File_Pos( FT_Stream stream, |
||||
FT_Long* position ) |
||||
{ |
||||
ULONG ibActual; |
||||
|
||||
|
||||
if ( DosSetFilePtr( STREAM_File( stream ), 0, FILE_CURRENT, &ibActual ) ) |
||||
{ |
||||
PTRACE2(( "Os2File_Pos: FAILED! in `%s'\n", STREAM_Name( stream ) )); |
||||
return FT_Err_Invalid_Stream_Seek; |
||||
} |
||||
|
||||
*position = ibActual; |
||||
|
||||
PTRACE2(( "Os2File_Pos: For `%s'\n", STREAM_Name( stream ) )); |
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* Os2File_Read */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Reads a given number of bytes from an OS/2 stream into memory. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: The target stream object. */ |
||||
/* buffer :: The target read buffer where data is copied. */ |
||||
/* size :: The number of bytes to read from the stream. */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* read_bytes :: The number of bytes effectively read from the */ |
||||
/* stream. Used in case of error */ |
||||
/* (i.e. FT_Err_Invalid_Stream_Read) by some parts of */ |
||||
/* the library. */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* It MUST return the error FT_Err_Invalid_Stream_Read in case of */ |
||||
/* an over-read (i.e., reading more bytes from the stream that what */ |
||||
/* is left), as the stream component checks for this specific value. */ |
||||
/* */ |
||||
/* The `read' method is never called by the stream manager in case */ |
||||
/* of a memory-based resource (i.e., when `stream->base' isn't NULL). */ |
||||
/* */ |
||||
static |
||||
FT_Error Os2File_Read( FT_Stream stream, |
||||
char* buffer, |
||||
FT_Long size, |
||||
FT_Long* read_bytes ) |
||||
{ |
||||
ULONG cbActual; |
||||
|
||||
|
||||
DosRead( STREAM_File( stream ), buffer, size, &cbActual ); |
||||
|
||||
*read_bytes = cbActual; |
||||
|
||||
if ( cbActual != (ULONG)size ) |
||||
{ |
||||
/* Note : we can have an over-read here when called by the */ |
||||
/* function FT_Access_Compressed_Frame. This means */ |
||||
/* that the following message should be a trace, */ |
||||
/* rather than an error for disk-based resources.. */ |
||||
/* */ |
||||
/* the function must set the value of 'read_bytes' */ |
||||
/* even if it returns an error code.. */ |
||||
PTRACE2(( "Os2File_Read: FAILED! Read %ld bytes from '%s'\n", |
||||
size, STREAM_Name( stream ) )); |
||||
|
||||
return FT_Err_Invalid_Stream_Read; |
||||
} |
||||
|
||||
PTRACE2(( "Os2File_Read: Read %ld bytes to buffer 0x%08lx from `%s'\n", |
||||
size, (long)buffer, STREAM_Name( stream ) )); |
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* The following table is the `virtual method table' for the `OS/2 */ |
||||
/* resource class', which methods are defined above. Its address is set */ |
||||
/* in the `interface' field of all resource objects created by the */ |
||||
/* function FT_Create_Os2File() (see below). */ |
||||
/* */ |
||||
static |
||||
FTRes_InterfaceRec FT_Os2File_Interface = |
||||
{ |
||||
(FTRes_Open_Func) Os2File_Open, |
||||
(FTRes_Close_Func) Os2File_Close, |
||||
(FTRes_Seek_Func) Os2File_Seek, |
||||
(FTRes_Skip_Func) Os2File_Skip, |
||||
(FTRes_Pos_Func) Os2File_Pos, |
||||
(FTRes_Read_Func) Os2File_Read, |
||||
}; |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_Create_Resource */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Creates a new resource object. This function is called by the */ |
||||
/* FT_New_Resource() function of the base layer. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* library :: The input library object. */ |
||||
/* pathname :: The file's pathname as an ASCII string. */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* aresource :: A handle to new resource object. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* Error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This functions does not open a stream. It simply copies the */ |
||||
/* pathname within a fresh new resource object. */ |
||||
/* */ |
||||
EXPORT_FUNC |
||||
FT_Error FT_Create_Resource( FT_Library library, |
||||
const char* pathname, |
||||
FT_Resource* aresource ) |
||||
{ |
||||
FT_Int len; |
||||
FT_Os2File resource; |
||||
FT_Error error; |
||||
FT_System system; |
||||
|
||||
|
||||
if ( !library ) |
||||
return FT_Err_Invalid_Library_Handle; |
||||
|
||||
system = library->system; |
||||
|
||||
if ( !pathname ) |
||||
goto Fail_Null; |
||||
|
||||
len = strlen( pathname ); |
||||
if ( len == 0 ) |
||||
goto Fail_Null; |
||||
|
||||
resource = NULL; |
||||
|
||||
if ( ALLOC( resource, sizeof ( *resource ) ) || |
||||
ALLOC( resource->pathname, len + 1 ) ) |
||||
goto Fail_Memory; |
||||
|
||||
resource->root.library = library; |
||||
resource->root.interface = &FT_Os2File_Interface; |
||||
resource->root.flags = FT_RESOURCE_TYPE_DISK_BASED; |
||||
resource->file_size = -1; |
||||
strcpy( resource->pathname, pathname ); |
||||
|
||||
PTRACE1(( "Create_Os2File: OS/2 resource created for '%s'\n", |
||||
pathname )); |
||||
|
||||
*aresource = (FT_Resource)resource; |
||||
return FT_Err_Ok; |
||||
|
||||
Fail_Null: |
||||
PERROR(( "Create_Os2File: Null pathname!\n" )); |
||||
return FT_Err_Invalid_Argument; |
||||
|
||||
Fail_Memory: |
||||
if ( resource ) |
||||
FREE( resource->pathname ); |
||||
FREE( resource ); |
||||
PERROR(( "Create_Os2File: Not enough memory to create resource!\n" )); |
||||
return error; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_Destroy_Resource */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Discards a given resource object explicitly. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* resource :: The OS/2 resource object. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function does not check whether runs or streams are opened */ |
||||
/* for the resource (for now, we assume developer intelligence. */ |
||||
/* We'll most probably lower our standard later to ease debugging :-) */ |
||||
/* */ |
||||
EXPORT_FUNC |
||||
FT_Error FT_Destroy_Resource( FT_Resource resource ) |
||||
{ |
||||
FT_System system = resource->library->system; |
||||
FT_Os2File ansi = (FT_Os2File)resource; |
||||
|
||||
if ( !ansi || ansi->root.interface != &FT_Os2File_Interface ) |
||||
{ |
||||
PERROR(( |
||||
"Destroy_Os2File: Trying to destroy an invalid resource!\n" )); |
||||
return FT_Err_Invalid_Resource_Handle; |
||||
} |
||||
|
||||
PTRACE1(( "Destroy_Os2File: Destroying resource for `%s'\n", |
||||
ansi->pathname )); |
||||
|
||||
FREE( ansi->pathname ); |
||||
FREE( ansi ); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* MEMORY MANAGEMENT */ |
||||
/* */ |
||||
/* */ |
||||
/* This part copies the old FreeType 1.0 and 1.1 memory management */ |
||||
/* scheme that was defined in the file `ttmemory.h'. One can see that */ |
||||
/* */ |
||||
/* - a set of macros is defined for the memory operations used by the */ |
||||
/* engine (MEM_Copy(), MEM_Move(), MEM_Set()). This comes from the */ |
||||
/* fact that many compilers are able to inline these operations */ |
||||
/* directly within the compiled code, rather than generating a call */ |
||||
/* to the C library. However, this obliges us to include the */ |
||||
/* `<string.h>' header file. */ |
||||
/* */ |
||||
/* If you provide your own memory operations, you can get rid of the */ |
||||
/* `#include <string.h>' below. */ |
||||
/* */ |
||||
/* */ |
||||
/* - the FT_Alloc() function has several essential properties that MUST */ |
||||
/* be retained by each port: */ |
||||
/* */ |
||||
/* - It returns an error code, NOT the allocated block's base */ |
||||
/* address. */ |
||||
/* */ |
||||
/* - It takes the address of a target pointer, where the block's base */ |
||||
/* address will be set. If the size is zero, its value will be */ |
||||
/* NULL, and the function returns successfully. */ |
||||
/* */ |
||||
/* - In case of error, the pointer's value is set to NULL and an */ |
||||
/* error code is returned. */ |
||||
/* */ |
||||
/* - The new allocated block MUST be zero-filled. This is a strong */ |
||||
/* convention the rest of the engine relies on. */ |
||||
/* */ |
||||
/* */ |
||||
/* - the FT_Free() function has also its essentials: */ |
||||
/* */ |
||||
/* - It takes the address of a pointer which value is the block's */ |
||||
/* base address. This is UNLIKE a standard `free()' which takes */ |
||||
/* the block's base directly. */ |
||||
/* */ |
||||
/* - It accepts successfully the address of a pointer which value is */ |
||||
/* NULL, in which case it simply returns. */ |
||||
/* */ |
||||
/* - The pointer is always set to NULL by the function. */ |
||||
/* */ |
||||
/* */ |
||||
/* - The MEM_Alloc(), ALLOC(), and ALLOC_ARRAY() macros are used by the */ |
||||
/* library and should NOT be modified by porters! */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */ |
||||
/* parameter of the PTRACE() and PERROR() macros, used to print/log */ |
||||
/* messages during execution. */ |
||||
/* */ |
||||
#undef FT_COMPONENT |
||||
#define FT_COMPONENT trace_memory |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_Alloc */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Allocates a new block of memory. The returned area is always */ |
||||
/* zero-filled, this is a strong convention in many FreeType parts. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* system :: A handle to a given `system object' where allocation */ |
||||
/* occurs. */ |
||||
/* */ |
||||
/* size :: The size in bytes of the block to allocate. */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* P :: A pointer to the fresh new block. It should be set to */ |
||||
/* NULL if `size' is 0, or in case of error. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
BASE_FUNC |
||||
FT_Error FT_Alloc( FT_System system, |
||||
FT_Long size, |
||||
void** P ) |
||||
{ |
||||
if ( !P ) |
||||
{ |
||||
PERROR(( "FT_Alloc: Invalid pointer address!\n" )); |
||||
return FT_Err_Invalid_Argument; |
||||
} |
||||
|
||||
if ( size > 0 ) |
||||
{ |
||||
*P = malloc( size ); |
||||
if ( !*P ) |
||||
{ |
||||
PERROR(( "FT_Alloc: Out of memory (%ld bytes requested)!\n", |
||||
size )); |
||||
|
||||
return FT_Err_Out_Of_Memory; |
||||
} |
||||
|
||||
system->total_alloc += size; |
||||
|
||||
/* ALWAYS ZERO-FILL THE BLOCK! */ |
||||
MEM_Set( *P, 0, size ); |
||||
} |
||||
else |
||||
*P = NULL; |
||||
|
||||
PTRACE2(( "FT_Alloc: Size = %ld, pointer = 0x%08lx, block = 0x%08lx\n", |
||||
size, (long)P, (long)*P )); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_Realloc */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Reallocates a block of memory pointed to by `*P' to `Size' bytes */ |
||||
/* from the heap, possibly changing `*P'. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* system :: A handle to a given `system object' where allocation */ |
||||
/* occurs. */ |
||||
/* */ |
||||
/* size :: The size in bytes of the block to allocate. */ |
||||
/* */ |
||||
/* <InOut> */ |
||||
/* P :: A pointer to the fresh new block. It should be set to */ |
||||
/* NULL if `size' is 0, or in case of error. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
BASE_FUNC |
||||
FT_Error FT_Realloc( FT_System system, |
||||
FT_Long size, |
||||
void** P ) |
||||
{ |
||||
void* Q; |
||||
|
||||
|
||||
if ( !P ) |
||||
{ |
||||
PERROR(( "FT_Realloc: Invalid pointer address!\n" )); |
||||
return FT_Err_Invalid_Argument; |
||||
} |
||||
|
||||
/* if the original pointer is NULL, call FT_Alloc() */ |
||||
if ( !*P ) |
||||
return FT_Alloc( system, size, P ); |
||||
|
||||
/* if the new block if zero-sized, clear the current one */ |
||||
if ( size <= 0 ) |
||||
return FT_Free( system, P ); |
||||
|
||||
Q = (void*)realloc( *P, size ); |
||||
if ( !Q ) |
||||
{ |
||||
PERROR(( "FT_Realloc: Reallocation failed!\n" )); |
||||
return FT_Err_Out_Of_Memory; |
||||
} |
||||
|
||||
*P = Q; |
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_Free */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Releases a given block of memory allocated through FT_Alloc(). */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* system :: A handle to a given `system object' where allocation */ |
||||
/* occured. */ |
||||
/* */ |
||||
/* P :: This is the _address_ of a _pointer_ which points to the */ |
||||
/* allocated block. It is always set to NULL on exit. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* If P or *P are NULL, this function should return successfully. */ |
||||
/* This is a strong convention within all of FreeType and its */ |
||||
/* drivers. */ |
||||
/* */ |
||||
BASE_FUNC |
||||
FT_Error FT_Free( FT_System system, |
||||
void* *P ) |
||||
{ |
||||
UNUSED( system ); |
||||
|
||||
PTRACE2(( "FT_Free: Freeing pointer 0x%08lx (block 0x%08lx)\n", |
||||
(long)P, (P ? (long)*P : -1) )); |
||||
|
||||
if ( !P || !*P ) |
||||
return FT_Err_Ok; |
||||
|
||||
free( *P ); |
||||
*P = NULL; |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* SYNCHRONIZATION MANAGEMENT */ |
||||
/* */ |
||||
/* */ |
||||
/* This section deals with mutexes. The library can be compiled to */ |
||||
/* two distinct thread support levels (namely single threaded and */ |
||||
/* re-entrant modes). */ |
||||
/* */ |
||||
/* It protects its variables through the MUTEX_Lock() and */ |
||||
/* MUTEX_Release() macros which are void in single threaded mode. */ |
||||
/* */ |
||||
/* It defines a typeless mutex reference type, `FT_Mutex', that you're */ |
||||
/* free to redefine for your system's needs. */ |
||||
/* */ |
||||
/* The default implementation of ftsys.c contains only dummy functions */ |
||||
/* which always return successfully. You NEED to specialize them in */ |
||||
/* order to port ftsys.c to any multi-threaded environment. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */ |
||||
/* parameter of the PTRACE() and PERROR() macros, used to print/log */ |
||||
/* messages during execution. */ |
||||
/* */ |
||||
#undef FT_COMPONENT |
||||
#define FT_COMPONENT trace_sync |
||||
|
||||
|
||||
#ifdef FT_CONFIG_THREADS |
||||
|
||||
BASE_FUNC |
||||
FT_Error FT_Mutex_Create( FT_System system, |
||||
TMutex* mutex ) |
||||
{ |
||||
UNUSED( system ); |
||||
|
||||
mutex = (void*)-1; |
||||
system->num_mutexes++; |
||||
|
||||
/* Insert your own mutex creation code here */ |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
BASE_FUNC |
||||
void FT_Mutex_Delete( FT_System system, |
||||
TMutex* mutex ) |
||||
{ |
||||
UNUSED( system ); |
||||
|
||||
mutex = (void*)0; |
||||
system->num_mutexes--; |
||||
|
||||
/* Insert your own mutex destruction code here */ |
||||
} |
||||
|
||||
|
||||
BASE_FUNC |
||||
void FT_Mutex_Lock( FT_System system, |
||||
TMutex* mutex ) |
||||
{ |
||||
/* NOTE: It is legal to call this function with a NULL argument */ |
||||
/* in which case an immediate return is appropriate. */ |
||||
|
||||
UNUSED( system ); |
||||
|
||||
if ( !mutex ) |
||||
return; |
||||
|
||||
/* Insert your own mutex locking code here */ |
||||
} |
||||
|
||||
|
||||
BASE_FUNC |
||||
void FT_Mutex_Release( FT_System system, |
||||
TMutex* mutex ) |
||||
{ |
||||
/* NOTE: It is legal to call this function with a NULL argument */ |
||||
/* in which case an immediate return is appropriate */ |
||||
|
||||
UNUSED( system ); |
||||
|
||||
if ( !mutex ) |
||||
return; |
||||
|
||||
/* Insert your own mutex release code here */ |
||||
} |
||||
|
||||
#endif /* FT_CONFIG_THREADS */ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_New_System */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* This function is used to create and initialize new system objects. */ |
||||
/* These are mainly used to let client applications and font servers */ |
||||
/* specify their own memory allocators and synchronization */ |
||||
/* procedures. */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* system :: A handle to a given `system object'. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
EXPORT_FUNC |
||||
FT_Error FT_New_System( FT_System* system ) |
||||
{ |
||||
*system = (FT_System)malloc( sizeof ( **system ) ); |
||||
|
||||
if ( !*system ) |
||||
return FT_Err_Out_Of_Memory; |
||||
|
||||
/* initialize memory management */ |
||||
|
||||
(*system)->system_flags = FT_SYSTEM_FLAG_TOTAL_ALLOC | |
||||
FT_SYSTEM_FLAG_MUTEXES; |
||||
(*system)->total_alloc = 0; |
||||
(*system)->num_mutexes = 0; |
||||
|
||||
/* initialize i/o management (nothing) */ |
||||
|
||||
/* initialize synchronisation (nothing) */ |
||||
|
||||
/* initialize streams (nothing) */ |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* FT_Done_System */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Destroys a given FreeType system object. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* system :: A handle to a given `system object'. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
EXPORT_FUNC |
||||
FT_Error FT_Done_System( FT_System system ) |
||||
{ |
||||
/* finalize synchronization (nothing) */ |
||||
|
||||
/* finalize i/o management (nothing) */ |
||||
|
||||
/* finalize memory management */ |
||||
|
||||
free( system ); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/* END */ |
@ -1,214 +0,0 @@ |
||||
/**************************************************************************
|
||||
* |
||||
* ftsystem.h 1.0 |
||||
* |
||||
* ANSI-specific FreeType low-level system interface |
||||
* |
||||
* This file contains the definition of interface used by FreeType |
||||
* to access low-level, i.e. memory management, i/o access as well |
||||
* as thread synchronisation.
|
||||
* |
||||
* |
||||
* Copyright 1996-1999 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used
|
||||
* modified and distributed under the terms of the FreeType project
|
||||
* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
* this file you indicate that you have read the license and
|
||||
* understand and accept it fully.
|
||||
*
|
||||
**************************************************************************/ |
||||
|
||||
#include <ftsystem.h> |
||||
#include <fterrors.h> |
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <string.h> |
||||
|
||||
/*********************************************************************/ |
||||
/* */ |
||||
/* MEMORY MANAGEMENT INTERFACE */ |
||||
/* */ |
||||
|
||||
/************************************************************************
|
||||
* |
||||
* <FuncType> |
||||
* FT_Alloc_Func |
||||
* |
||||
* <Description> |
||||
* The memory allocator function type |
||||
* |
||||
* <Input> |
||||
* system :: pointer to the system object |
||||
* size :: requested size in bytes |
||||
* |
||||
* <Output> |
||||
* block :: address of newly allocated block |
||||
* |
||||
* <Return>
|
||||
* Error code. 0 means success. |
||||
* |
||||
* <Note> |
||||
* If your allocation routine ALWAYS zeroes the new block, you |
||||
* should set the flag FT_SYSTEM_FLAG_ALLOC_ZEROES in your system |
||||
* object 'flags' field. |
||||
* |
||||
* If you have set the flag FT_SYSTEM_FLAG_REPORT_CURRENT_ALLOC in |
||||
* your system's "system_flags" field, this function should update |
||||
* the "current_alloc" field of the system object. |
||||
* |
||||
************************************************************************/ |
||||
|
||||
static |
||||
void* ft_alloc( FT_Memory memory, |
||||
long size ) |
||||
{ |
||||
(void)memory; |
||||
return malloc(size); |
||||
} |
||||
|
||||
|
||||
/************************************************************************
|
||||
* |
||||
* <FuncType> |
||||
* FT_Realloc_Func |
||||
* |
||||
* <Description> |
||||
* The memory reallocator function type |
||||
* |
||||
* <Input> |
||||
* system :: pointer to the system object |
||||
* new_size :: new requested size in bytes |
||||
* |
||||
* <InOut> |
||||
* block :: address of block in memory |
||||
* |
||||
* <Return> |
||||
* Error code. 0 means success. |
||||
* |
||||
* <Note> |
||||
* This function is _never_ called when the system flag
|
||||
* FT_SYSTEM_FLAG_NO_REALLOC is set. Instead, the engine will emulate |
||||
* realloc through "alloc" and "free". |
||||
* |
||||
* Note that this is possible due to the fact that FreeType's |
||||
* "FT_Realloc" always requests the _current_ size of the reallocated |
||||
* block as a parameter, thus avoiding memory leaks. |
||||
* |
||||
* If you have set the flag FT_SYSTEM_FLAG_REPORT_CURRENT_ALLOC in |
||||
* your system's "system_flags" field, this function should update |
||||
* the "current_alloc" field of the system object. |
||||
* |
||||
************************************************************************/ |
||||
|
||||
static |
||||
void* ft_realloc( FT_Memory memory, |
||||
long cur_size, |
||||
long new_size, |
||||
void* block ) |
||||
{ |
||||
(void)memory; |
||||
(void)cur_size; |
||||
|
||||
return realloc( block, new_size ); |
||||
} |
||||
|
||||
|
||||
/************************************************************************
|
||||
* |
||||
* <FuncType> |
||||
* FT_Free_Func |
||||
* |
||||
* <Description> |
||||
* The memory release function type |
||||
* |
||||
* <Input> |
||||
* system :: pointer to the system object |
||||
* block :: address of block in memory |
||||
* |
||||
* <Note> |
||||
* If you have set the flag FT_SYSTEM_FLAG_REPORT_CURRENT_ALLOC in |
||||
* your system's "system_flags" field, this function should update |
||||
* the "current_alloc" field of the system object. |
||||
* |
||||
************************************************************************/ |
||||
|
||||
static |
||||
void ft_free( FT_Memory memory, |
||||
void* block ) |
||||
{ |
||||
(void)memory; |
||||
free( block ); |
||||
} |
||||
|
||||
/*********************************************************************/ |
||||
/* */ |
||||
/* RESOURCE MANAGEMENT INTERFACE */ |
||||
/* */ |
||||
|
||||
|
||||
#define STREAM_FILE(stream) ((FILE*)stream->descriptor.pointer) |
||||
|
||||
static |
||||
void ft_close_stream( FT_Stream stream ) |
||||
{ |
||||
fclose( STREAM_FILE(stream) ); |
||||
} |
||||
|
||||
static |
||||
unsigned long ft_io_stream( FT_Stream stream, |
||||
unsigned long offset, |
||||
char* buffer, |
||||
unsigned long count ) |
||||
{ |
||||
FILE* file; |
||||
|
||||
file = STREAM_FILE(stream); |
||||
|
||||
fseek( file, offset, SEEK_SET );
|
||||
return (unsigned long)fread( buffer, 1, count, file ); |
||||
} |
||||
|
||||
|
||||
extern |
||||
int FT_New_Stream( const char* filepathname, |
||||
FT_Stream stream ) |
||||
{ |
||||
FILE* file; |
||||
|
||||
file = fopen( filepathname, "rb" ); |
||||
if (!file) |
||||
return FT_Err_Cannot_Open_Resource; |
||||
|
||||
fseek( file, 0, SEEK_END ); |
||||
stream->size = ftell(file); |
||||
fseek( file, 0, SEEK_SET ); |
||||
|
||||
stream->descriptor.pointer = file; |
||||
stream->pos = 0; |
||||
|
||||
stream->read = ft_io_stream; |
||||
stream->close = ft_close_stream; |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
|
||||
extern |
||||
FT_Memory FT_New_Memory( void ) |
||||
{ |
||||
FT_Memory memory; |
||||
|
||||
memory = (FT_Memory)malloc( sizeof(*memory) ); |
||||
if (memory) |
||||
{ |
||||
memory->user = 0; |
||||
memory->alloc = ft_alloc; |
||||
memory->realloc = ft_realloc; |
||||
memory->free = ft_free; |
||||
} |
||||
return memory; |
||||
} |
||||
|
@ -1,213 +0,0 @@ |
||||
#******************************************************************* |
||||
#* |
||||
#* FreeType 2 Configuration rules for Unix + gcc |
||||
#* |
||||
#* Copyright 1996-1999 by |
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg. |
||||
#* |
||||
#* This file is part of the FreeType project, and may only be used |
||||
#* modified and distributed under the terms of the FreeType project |
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute |
||||
#* this file you indicate that you have read the license and |
||||
#* understand and accept it fully. |
||||
#* |
||||
#* |
||||
#* The purpose of this sub-Makefile is to define various build and |
||||
#* platform specific variables before including the sub-Makefile |
||||
#* containing the FreeType library rules, found in |
||||
#* |
||||
#* $(TOP)/config/freetype.mk |
||||
#* |
||||
#* The following variables must be defined before including this |
||||
#* file : |
||||
#* |
||||
#* TOP Pathname to the top of the FreeType sources |
||||
#* hierarchy |
||||
#* |
||||
#* This file should define the following variables before including |
||||
#* the FreeType library rules file : |
||||
#* |
||||
#* BUILD Pathname to the platform-specific files used |
||||
#* for the build. Usually `$(TOP)/config/<system>' |
||||
#* |
||||
#* SEP Directory separator used during compilation. |
||||
#* (usually "/" or "\"). Note that on Win32, both gcc |
||||
#* and Visual C++ use "/" as a directory separator !! |
||||
#* |
||||
#* HOSTSEP Directory separator for $(COPY) and $(DELETE) |
||||
#* |
||||
#* DELETE The forced remove/delete command to erase one or more |
||||
#* files |
||||
#* |
||||
#* INCLUDE The location of all public header files. e.g. |
||||
#* `$(TOP)/include'include' * |
||||
#* |
||||
#* SRC The directory containing all sources. e.g. |
||||
#* '$(TOP)/src' |
||||
#* |
||||
#* OBJ_DIR The location where compiled object files will be |
||||
#* placed, e.g. '$(TOP)/obj' |
||||
#* |
||||
#* LIB_DIR The location where the resulting library file will be |
||||
#* placed, e.g. '$(TOP)/obj' |
||||
#* |
||||
#* LIBRARY The filename of the resulting library file, without |
||||
#* its extension.. e.g. 'libfreetype' or 'freetype' |
||||
#* |
||||
#* O The object file suffix. Can be '.o', '.obj,' '.lo,' |
||||
#* ';coff,' etc. |
||||
#* |
||||
#* A The library file suffix. Can be '.a' '.so,' '.lib' |
||||
#* '.dll,' etc. |
||||
#* |
||||
#* I The path inclusion flag. Some compilers use a |
||||
#* different flag than '-I' to specify an additional |
||||
#* include path. Examples are '/i=' or '-J ', etc. |
||||
#* |
||||
#* D The macro definition flag. I haven't met compilers |
||||
#* which don't use the '-D' switch to define a macro, but |
||||
#* who knows... |
||||
#* |
||||
#* T The compilation flag used to identify the target. Some |
||||
#* compilers use a different flag than '-o ' to specify |
||||
#* the name of the target object file. |
||||
#* |
||||
#* CFLAGS The set of flags used to compile object files. |
||||
#* (usually contains the flag '-c'). |
||||
#* |
||||
#* |
||||
#* |
||||
#******************************************************************* |
||||
|
||||
DELETE := del |
||||
SEP := / |
||||
HOSTSEP := $(strip \ ) |
||||
BUILD := $(TOP)/config/os2 |
||||
PLATFORM := os2 |
||||
CC := gcc |
||||
|
||||
# the directory where all object files are placed |
||||
# |
||||
# Note that this is not $(TOP)/obj !! |
||||
# This lets you build the library in your own directory |
||||
# with something like : |
||||
# |
||||
# set TOP=....../path/to/freetype2/top/dir... |
||||
# mkdir obj |
||||
# make -f %TOP%/Makefile setup [options] |
||||
# make -f %TOP%/Makefile |
||||
# |
||||
# |
||||
OBJ_DIR := obj |
||||
|
||||
|
||||
# the directory where all library files are placed |
||||
# |
||||
# by default, this is the same as OBJ_DIR, however, this can be |
||||
# changed to suit particular needs.. |
||||
# |
||||
LIB_DIR := $(OBJ_DIR) |
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc.. |
||||
# depending on the platform |
||||
# |
||||
O := o |
||||
|
||||
# the library file extension, this can be .a, .lib, etc.. |
||||
# depending on the platform |
||||
# |
||||
A := a |
||||
|
||||
|
||||
# The name of the final library file. |
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name |
||||
# |
||||
LIBRARY := libfreetype |
||||
|
||||
|
||||
# path inclusion flag. |
||||
# |
||||
# Some compilers use a different flag than '-I' to specify an |
||||
# additional include path. Examples are "/i=" or "-J", etc... |
||||
# |
||||
I := -I |
||||
|
||||
|
||||
# The link flag used to specify a given library file on link. |
||||
# Note that this is only used to compile the demo programs, not |
||||
# the library itself. |
||||
# |
||||
L := -L |
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given |
||||
# source object. Usually is '-D' like in "-DDEBUG" |
||||
# |
||||
D := -D |
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !! |
||||
# |
||||
# |
||||
T := -o |
||||
|
||||
# C flags |
||||
# |
||||
# These should concern : |
||||
# |
||||
# - debug output |
||||
# - optimization |
||||
# - warnings |
||||
# - ansi compliance.. |
||||
# |
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O0 -Wall |
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant |
||||
# nothing (if it already is by default like LCC). |
||||
# |
||||
ANSIFLAGS := -ansi -pedantic |
||||
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
# Librarian to use to build the static library |
||||
# |
||||
FT_LIBRARIAN := $(AR) -r |
||||
|
||||
|
||||
# This final rule is used to link all object files into a single |
||||
# library. It is part of the system-specific sub-Makefile because not |
||||
# all librarians accept a simple syntax like : |
||||
# |
||||
# librarian library_file {list of object files} |
||||
# |
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@ |
||||
$(FT_LIBRARIAN) $@ $(OBJECTS_LIST) |
||||
|
||||
|
||||
# Cleaning rules |
||||
# |
||||
DIR_OBJ := $(subst $(SEP),\,$(OBJ_DIR)) |
||||
|
||||
clean_freetype_objects: |
||||
-del $(DIR8OBJ)\*.$O |
||||
|
||||
clean_freetype_lib: |
||||
-del $(FT_LIBRARY) |
||||
|
||||
clean: clean_freetype_objects |
||||
|
||||
|
||||
|
||||
endif |
||||
|
||||
|
@ -1,196 +0,0 @@ |
||||
#******************************************************************* |
||||
#* |
||||
#* FreeType 2 Configuration rules for Unix + gcc |
||||
#* |
||||
#* Copyright 1996-1999 by |
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg. |
||||
#* |
||||
#* This file is part of the FreeType project, and may only be used |
||||
#* modified and distributed under the terms of the FreeType project |
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute |
||||
#* this file you indicate that you have read the license and |
||||
#* understand and accept it fully. |
||||
#* |
||||
#* |
||||
#* The purpose of this sub-Makefile is to define various build and |
||||
#* platform specific variables before including the sub-Makefile |
||||
#* containing the FreeType library rules, found in |
||||
#* |
||||
#* $(TOP)/config/freetype.mk |
||||
#* |
||||
#* The following variables must be defined before including this |
||||
#* file : |
||||
#* |
||||
#* TOP Pathname to the top of the FreeType sources |
||||
#* hierarchy |
||||
#* |
||||
#* This file should define the following variables before including |
||||
#* the FreeType library rules file : |
||||
#* |
||||
#* BUILD Pathname to the platform-specific files used |
||||
#* for the build. Usually `$(TOP)/config/<system>' |
||||
#* |
||||
#* SEP Directory separator used during compilation. |
||||
#* (usually "/" or "\"). Note that on Win32, both gcc |
||||
#* and Visual C++ use "/" as a directory separator !! |
||||
#* |
||||
#* HOSTSEP Directory separator for $(COPY) and $(DELETE) |
||||
#* |
||||
#* DELETE The forced remove/delete command to erase one or more |
||||
#* files |
||||
#* |
||||
#* INCLUDE The location of all public header files. e.g. |
||||
#* `$(TOP)/include'include' * |
||||
#* |
||||
#* SRC The directory containing all sources. e.g. |
||||
#* '$(TOP)/src' |
||||
#* |
||||
#* OBJ_DIR The location where compiled object files will be |
||||
#* placed, e.g. '$(TOP)/obj' |
||||
#* |
||||
#* LIB_DIR The location where the resulting library file will be |
||||
#* placed, e.g. '$(TOP)/obj' |
||||
#* |
||||
#* LIBRARY The filename of the resulting library file, without |
||||
#* its extension.. e.g. 'libfreetype' or 'freetype' |
||||
#* |
||||
#* O The object file suffix. Can be '.o', '.obj,' '.lo,' |
||||
#* ';coff,' etc. |
||||
#* |
||||
#* A The library file suffix. Can be '.a' '.so,' '.lib' |
||||
#* '.dll,' etc. |
||||
#* |
||||
#* I The path inclusion flag. Some compilers use a |
||||
#* different flag than '-I' to specify an additional |
||||
#* include path. Examples are '/i=' or '-J ', etc. |
||||
#* |
||||
#* D The macro definition flag. I haven't met compilers |
||||
#* which don't use the '-D' switch to define a macro, but |
||||
#* who knows... |
||||
#* |
||||
#* T The compilation flag used to identify the target. Some |
||||
#* compilers use a different flag than '-o ' to specify |
||||
#* the name of the target object file. |
||||
#* |
||||
#* CFLAGS The set of flags used to compile object files. |
||||
#* (usually contains the flag '-c'). |
||||
#* |
||||
#* |
||||
#* |
||||
#******************************************************************* |
||||
|
||||
DELETE := del |
||||
SEP := / |
||||
HOSTSEP := $(strip \ ) |
||||
BUILD := $(TOP)/config/os2 |
||||
PLATFORM := os2 |
||||
CC := gcc |
||||
|
||||
# the directory where all object files are placed |
||||
# |
||||
# Note that this is not $(TOP)/obj !! |
||||
# This lets you build the library in your own directory |
||||
# with something like : |
||||
# |
||||
# set TOP=....../path/to/freetype2/top/dir... |
||||
# mkdir obj |
||||
# make -f %TOP%/Makefile setup [options] |
||||
# make -f %TOP%/Makefile |
||||
# |
||||
# |
||||
OBJ_DIR := obj |
||||
|
||||
|
||||
# the directory where all library files are placed |
||||
# |
||||
# by default, this is the same as OBJ_DIR, however, this can be |
||||
# changed to suit particular needs.. |
||||
# |
||||
LIB_DIR := $(OBJ_DIR) |
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc.. |
||||
# depending on the platform |
||||
# |
||||
O := o |
||||
|
||||
# the library file extension, this can be .a, .lib, etc.. |
||||
# depending on the platform |
||||
# |
||||
A := a |
||||
|
||||
|
||||
# The name of the final library file. |
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name |
||||
# |
||||
LIBRARY := libfreetype |
||||
|
||||
|
||||
# path inclusion flag. |
||||
# |
||||
# Some compilers use a different flag than '-I' to specify an |
||||
# additional include path. Examples are "/i=" or "-J", etc... |
||||
# |
||||
I := -I |
||||
|
||||
|
||||
# The link flag used to specify a given library file on link. |
||||
# Note that this is only used to compile the demo programs, not |
||||
# the library itself. |
||||
# |
||||
L := -L |
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given |
||||
# source object. Usually is '-D' like in "-DDEBUG" |
||||
# |
||||
D := -D |
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !! |
||||
# |
||||
# |
||||
T := -o |
||||
|
||||
# C flags |
||||
# |
||||
# These should concern : |
||||
# |
||||
# - debug output |
||||
# - optimization |
||||
# - warnings |
||||
# - ansi compliance.. |
||||
# |
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O0 -Wall |
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant |
||||
# nothing (if it already is by default like LCC). |
||||
# |
||||
ANSIFLAGS := -ansi -pedantic |
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
|
||||
# Librarian to use to build the static library |
||||
# |
||||
FT_LIBRARIAN := $(AR) -r |
||||
|
||||
# This final rule is used to link all object files into a single |
||||
# library. It is part of the system-specific sub-Makefile because not |
||||
# all librarians accept a simple syntax like : |
||||
# |
||||
# librarian library_file {list of object files} |
||||
# |
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@ |
||||
$(FT_LIBRARIAN) $@ $(OBJECTS_LIST) |
||||
|
||||
endif |
||||
|
@ -0,0 +1,156 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for OS/2 + gcc
|
||||
#* THIS VERSION TURNS OFF OPTIMIZATIONS FOR DEBUGGING !!
|
||||
#*
|
||||
#* Copyright 1996-2000 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#* Please read the file "freetype/docs/config.txt" to understand
|
||||
#* what this file does..
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := del
|
||||
SEP := /
|
||||
HOSTSEP := $(strip \ )
|
||||
BUILD := $(TOP)/config/os2
|
||||
PLATFORM := os2
|
||||
CC := gcc
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O0 -Wall
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS := -ansi -pedantic
|
||||
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
# Librarian to use to build the static library
|
||||
#
|
||||
FT_LIBRARIAN := $(AR) -r
|
||||
|
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@
|
||||
$(FT_LIBRARIAN) $@ $(OBJECTS_LIST)
|
||||
|
||||
|
||||
# Cleaning rules
|
||||
#
|
||||
DIR_OBJ := $(subst $(SEP),\,$(OBJ_DIR))
|
||||
|
||||
clean_freetype_objects: |
||||
-del $(DIR_OBJ)\*.$O
|
||||
|
||||
clean_freetype_lib: |
||||
-del $(subst $(SEP),\,$(FT_LIBRARY))
|
||||
|
||||
clean: clean_freetype_objects |
||||
|
||||
|
||||
|
||||
endif |
||||
|
||||
|
@ -0,0 +1,155 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for OS/2 + gcc
|
||||
#*
|
||||
#* Copyright 1996-2000 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#* Please read the file "freetype/docs/config.txt" to understand
|
||||
#* what this file does..
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := del
|
||||
SEP := /
|
||||
HOSTSEP := $(strip \ )
|
||||
BUILD := $(TOP)/config/os2
|
||||
PLATFORM := os2
|
||||
CC := gcc
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O6 -Wall
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS := -ansi -pedantic
|
||||
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
# Librarian to use to build the static library
|
||||
#
|
||||
FT_LIBRARIAN := $(AR) -r
|
||||
|
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@
|
||||
$(FT_LIBRARIAN) $@ $(OBJECTS_LIST)
|
||||
|
||||
|
||||
# Cleaning rules
|
||||
#
|
||||
DIR_OBJ := $(subst $(SEP),\,$(OBJ_DIR))
|
||||
|
||||
clean_freetype_objects: |
||||
-del $(DIR_OBJ)\*.$O
|
||||
|
||||
clean_freetype_lib: |
||||
-del $(subst $(SEP),\,$(FT_LIBRARY))
|
||||
|
||||
clean: clean_freetype_objects |
||||
|
||||
|
||||
|
||||
endif |
||||
|
||||
|
@ -1,193 +0,0 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for Unix + gcc
|
||||
#*
|
||||
#* Copyright 1996-1999 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#*
|
||||
#* The purpose of this sub-Makefile is to define various build and
|
||||
#* platform specific variables before including the sub-Makefile
|
||||
#* containing the FreeType library rules, found in
|
||||
#*
|
||||
#* $(TOP)/config/freetype.mk
|
||||
#*
|
||||
#* The following variables must be defined before including this
|
||||
#* file :
|
||||
#*
|
||||
#* TOP Pathname to the top of the FreeType sources
|
||||
#* hierarchy
|
||||
#*
|
||||
#* This file should define the following variables before including
|
||||
#* the FreeType library rules file :
|
||||
#*
|
||||
#* BUILD Pathname to the platform-specific files used
|
||||
#* for the build. Usually `$(TOP)/config/<system>'
|
||||
#*
|
||||
#* SEP Directory separator used during compilation.
|
||||
#* (usually "/" or "\"). Note that on Win32, both gcc
|
||||
#* and Visual C++ use "/" as a directory separator !!
|
||||
#*
|
||||
#* HOSTSEP Directory separator for $(COPY) and $(DELETE)
|
||||
#*
|
||||
#* DELETE The forced remove/delete command to erase one or more
|
||||
#* files
|
||||
#*
|
||||
#* INCLUDE The location of all public header files. e.g.
|
||||
#* `$(TOP)/include'include' *
|
||||
#*
|
||||
#* SRC The directory containing all sources. e.g.
|
||||
#* '$(TOP)/src'
|
||||
#*
|
||||
#* OBJ_DIR The location where compiled object files will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIB_DIR The location where the resulting library file will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIBRARY The filename of the resulting library file, without
|
||||
#* its extension.. e.g. 'libfreetype' or 'freetype'
|
||||
#*
|
||||
#* O The object file suffix. Can be '.o', '.obj,' '.lo,'
|
||||
#* ';coff,' etc.
|
||||
#*
|
||||
#* A The library file suffix. Can be '.a' '.so,' '.lib'
|
||||
#* '.dll,' etc.
|
||||
#*
|
||||
#* I The path inclusion flag. Some compilers use a
|
||||
#* different flag than '-I' to specify an additional
|
||||
#* include path. Examples are '/i=' or '-J ', etc.
|
||||
#*
|
||||
#* D The macro definition flag. I haven't met compilers
|
||||
#* which don't use the '-D' switch to define a macro, but
|
||||
#* who knows...
|
||||
#*
|
||||
#* T The compilation flag used to identify the target. Some
|
||||
#* compilers use a different flag than '-o ' to specify
|
||||
#* the name of the target object file.
|
||||
#*
|
||||
#* CFLAGS The set of flags used to compile object files.
|
||||
#* (usually contains the flag '-c').
|
||||
#*
|
||||
#*
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := rm -f
|
||||
SEP := /
|
||||
HOSTSEP := $(SEP)
|
||||
BUILD := $(TOP)/config/unix
|
||||
PLATFORM := unix
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O6 -Wall
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS := -ansi -pedantic
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_std |
||||
distclean_freetype: distclean_freetype_std |
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@
|
||||
$(AR) -r $@ $(OBJECTS_LIST)
|
||||
|
||||
endif |
@ -1,193 +0,0 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for Unix + gcc
|
||||
#*
|
||||
#* Copyright 1996-1999 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#*
|
||||
#* The purpose of this sub-Makefile is to define various build and
|
||||
#* platform specific variables before including the sub-Makefile
|
||||
#* containing the FreeType library rules, found in
|
||||
#*
|
||||
#* $(TOP)/config/freetype.mk
|
||||
#*
|
||||
#* The following variables must be defined before including this
|
||||
#* file :
|
||||
#*
|
||||
#* TOP Pathname to the top of the FreeType sources
|
||||
#* hierarchy
|
||||
#*
|
||||
#* This file should define the following variables before including
|
||||
#* the FreeType library rules file :
|
||||
#*
|
||||
#* BUILD Pathname to the platform-specific files used
|
||||
#* for the build. Usually `$(TOP)/config/<system>'
|
||||
#*
|
||||
#* SEP Directory separator used during compilation.
|
||||
#* (usually "/" or "\"). Note that on Win32, both gcc
|
||||
#* and Visual C++ use "/" as a directory separator !!
|
||||
#*
|
||||
#* HOSTSEP Directory separator for $(COPY) and $(DELETE)
|
||||
#*
|
||||
#* DELETE The forced remove/delete command to erase one or more
|
||||
#* files
|
||||
#*
|
||||
#* INCLUDE The location of all public header files. e.g.
|
||||
#* `$(TOP)/include'include' *
|
||||
#*
|
||||
#* SRC The directory containing all sources. e.g.
|
||||
#* '$(TOP)/src'
|
||||
#*
|
||||
#* OBJ_DIR The location where compiled object files will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIB_DIR The location where the resulting library file will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIBRARY The filename of the resulting library file, without
|
||||
#* its extension.. e.g. 'libfreetype' or 'freetype'
|
||||
#*
|
||||
#* O The object file suffix. Can be '.o', '.obj,' '.lo,'
|
||||
#* ';coff,' etc.
|
||||
#*
|
||||
#* A The library file suffix. Can be '.a' '.so,' '.lib'
|
||||
#* '.dll,' etc.
|
||||
#*
|
||||
#* I The path inclusion flag. Some compilers use a
|
||||
#* different flag than '-I' to specify an additional
|
||||
#* include path. Examples are '/i=' or '-J ', etc.
|
||||
#*
|
||||
#* D The macro definition flag. I haven't met compilers
|
||||
#* which don't use the '-D' switch to define a macro, but
|
||||
#* who knows...
|
||||
#*
|
||||
#* T The compilation flag used to identify the target. Some
|
||||
#* compilers use a different flag than '-o ' to specify
|
||||
#* the name of the target object file.
|
||||
#*
|
||||
#* CFLAGS The set of flags used to compile object files.
|
||||
#* (usually contains the flag '-c').
|
||||
#*
|
||||
#*
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := rm -f
|
||||
SEP := /
|
||||
HOSTSEP := $(SEP)
|
||||
BUILD := $(TOP)/config/unix
|
||||
PLATFORM := unix
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O0 -Wall
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS := -ansi -pedantic
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_std |
||||
distclean_freetype: distclean_freetype_std |
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@
|
||||
$(AR) -r $@ $(OBJECTS_LIST)
|
||||
|
||||
endif |
@ -1,172 +0,0 @@ |
||||
/*******************************************************************
|
||||
* |
||||
* ftconfig.h |
||||
* |
||||
* Unix-specific configuration file |
||||
* |
||||
* Copyright 1996-1998 by |
||||
* David Turner, Robert Wilhelm, and Werner Lemberg. |
||||
* |
||||
* This file is part of the FreeType project, and may only be used |
||||
* modified and distributed under the terms of the FreeType project |
||||
* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
* this file you indicate that you have read the license and |
||||
* understand and accept it fully. |
||||
* |
||||
* |
||||
* This header file contains a number of macro definitions that are |
||||
* used by the rest of the engine. Porters are free to copy this file |
||||
* and adapt it to suit their own system.. |
||||
* |
||||
* IMPORTANT NOTE : |
||||
* |
||||
* Porters, read carefully the comments in ftsys.h before trying |
||||
* to port this file to your system. It contains many essential |
||||
* remarks, and will ease your work greatly.. |
||||
* |
||||
******************************************************************/ |
||||
|
||||
#ifndef FTCONFIG_H |
||||
#define FTCONFIG_H |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* PLATFORM-SPECIFIC CONFIGURATION MACROS */ |
||||
/* */ |
||||
/* These macros can be toggled to suit a specific system. The current */ |
||||
/* ones are defaults used to compile FreeType in a 32-bits ANSI C */ |
||||
/* environment. Copy this file to your own "freetype/arch/<system>" */ |
||||
/* directory, and edit it to port the engine.. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
/* Define to empty if the keyword does not work. */ |
||||
/* #undef const */ |
||||
|
||||
/* Define if you have a working `mmap' system call. */ |
||||
#define HAVE_MMAP |
||||
|
||||
/* Define if you have the ANSI C header files. */ |
||||
#define STDC_HEADERS 1 |
||||
|
||||
/* Define if your processor stores words with the most significant
|
||||
byte first (like Motorola and SPARC, unlike Intel and VAX). */ |
||||
/* #undef WORDS_BIGENDIAN */ |
||||
|
||||
/* Define if the X Window System is missing or not being used. */ |
||||
/* #undef X_DISPLAY_MISSING */ |
||||
|
||||
/* The number of bytes in a int. */ |
||||
#define SIZEOF_INT 4 |
||||
|
||||
/* The number of bytes in a long. */ |
||||
#define SIZEOF_LONG 4 |
||||
|
||||
/* Define if you have the getpagesize function. */ |
||||
#define HAVE_GETPAGESIZE 1 |
||||
|
||||
/* Define if you have the memcpy function. */ |
||||
#define HAVE_MEMCPY 1 |
||||
|
||||
/* Define if you have the <fcntl.h> header file. */ |
||||
#define HAVE_FCNTL_H 1 |
||||
|
||||
/* Define if you have the <unistd.h> header file. */ |
||||
#define HAVE_UNISTD_H 1 |
||||
|
||||
/* Define if you have the <locale.h> header file. */ |
||||
#define HAVE_LOCALE_H 1 |
||||
|
||||
/* Define if you have the <libintl.h> header file. */ |
||||
#undef HAVE_LIBINTL_H |
||||
|
||||
/* Define if you have the libintl library. */ |
||||
/* #undef HAVE_LIBINTL */ |
||||
|
||||
/* Preferred alignment of data */ |
||||
#define FT_ALIGNMENT 8 |
||||
|
||||
/* See the definition of the macro FT_CONFIG_OPTION_LITTLE_ENDIAN */ |
||||
/* and FT_CONFIG_OPTION_BIG_ENDIAN below, they may need to be set */ |
||||
/* according to the platform too.. */ |
||||
|
||||
|
||||
#include <ftoption.h> |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* AUTOMATIC CONFIGURATION MACROS */ |
||||
/* */ |
||||
/* These macros are computed from the ones defined above. Don't touch */ |
||||
/* their definition, unless you know precisely what you're doing. No */ |
||||
/* porter should need to mess with them. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
/* IntN types: */ |
||||
/* */ |
||||
/* Used to guarantee the size of some specific integers. */ |
||||
/* */ |
||||
|
||||
typedef signed short FT_Int16; |
||||
typedef unsigned short FT_Word16; |
||||
|
||||
#if SIZEOF_INT == 4 |
||||
|
||||
typedef signed int FT_Int32; |
||||
typedef unsigned int FT_Word32; |
||||
|
||||
#elif SIZEOF_LONG == 4 |
||||
|
||||
typedef signed long FT_Int32; |
||||
typedef unsigned long FT_Word32; |
||||
|
||||
#else |
||||
#error "no 32bit type found - please check your configuration files" |
||||
#endif |
||||
|
||||
#if SIZEOF_LONG == 8 |
||||
|
||||
/* LONG64 must be defined when a 64-bit type is available */ |
||||
#define LONG64 |
||||
#define INT64 long |
||||
|
||||
#else |
||||
|
||||
/* GCC provides the non-ANSI 'long long' 64-bit type. You can activate it */ |
||||
/* by defining the FTCALC_USE_LONG_LONG macro in 'ftconfig.h'. Note that */ |
||||
/* this will produce many -ansi warnings during library compilation. */ |
||||
#ifdef FTCALC_USE_LONG_LONG |
||||
|
||||
#define LONG64 |
||||
#define INT64 long long |
||||
|
||||
#endif /* FTCALC_USE_LONG_LONG */ |
||||
#endif |
||||
|
||||
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT |
||||
#define LOCAL_DEF static |
||||
#define LOCAL_FUNC static |
||||
#else |
||||
#define LOCAL_DEF extern |
||||
#define LOCAL_FUNC /* nothing */ |
||||
#endif |
||||
|
||||
#ifdef FT_MAKE_OPTION_SINGLE_LIBRARY_OBJECT |
||||
#define BASE_DEF LOCAL_DEF |
||||
#define BASE_FUNC LOCAL_FUNC |
||||
#else |
||||
#define BASE_DEF extern |
||||
#define BASE_FUNC /* nothing */ |
||||
#endif |
||||
|
||||
#ifndef EXPORT_DEF |
||||
#define EXPORT_DEF extern |
||||
#endif |
||||
|
||||
#ifndef EXPORT_FUNC |
||||
#define EXPORT_FUNC /* nothing */ |
||||
#endif |
||||
|
||||
|
||||
#endif /* FTCONFIG_H */ |
@ -1,4 +0,0 @@ |
||||
FT_DRIVER(sfnt_driver_interface) |
||||
FT_DRIVER(tt_driver_interface) |
||||
FT_DRIVER(t1_driver_interface) |
||||
FT_DRIVER(psnames_driver_interface) |
@ -1,204 +0,0 @@ |
||||
#ifndef FTOPTION_H |
||||
#define FTOPTION_H |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* USER-SELECTABLE CONFIGURATION MACROS */ |
||||
/* */ |
||||
/* These macros can be toggled by developers to enable or disable */ |
||||
/* certain aspects of FreeType. This file contains macros that apply to */ |
||||
/* all of FreeType. Driver-specific configurations are placed in each */ |
||||
/* driver directory (e.g. `freetype/drivers/ttlib/ttconfig.h'). */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Alternate Glyph Image Format support */ |
||||
/* */ |
||||
/* By default, the glyph images returned by the FreeType glyph loader */ |
||||
/* can either be a pixmap or a vectorial outline defined through */ |
||||
/* bezier control points. When defining the following configuration */ |
||||
/* macro, some font drivers will be able to register alternate */ |
||||
/* glyph image formats. */ |
||||
/* */ |
||||
/* Unset this macro if you're sure that you'll never use a font driver */ |
||||
/* with an alternate glyph format, this will reduce the size of the */ |
||||
/* base layer code. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_ALTERNATE_GLYPH_FORMATS |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Glyph Postscript Names handling */ |
||||
/* */ |
||||
/* By default, FreeType 2 is built with the "psnames" module compiled */ |
||||
/* in. This module is in charge of converting a glyph name string into */ |
||||
/* a Unicode value, or return a Macintosh standard glyph name for the */ |
||||
/* use with the TrueType "post" table. */ |
||||
/* */ |
||||
/* Undefine this macro if you do not want the "psnames" compiled in */ |
||||
/* your build of FreeType. This has the following effects : */ |
||||
/* */ |
||||
/* - the TrueType driver will provide its own set of glyph names, */ |
||||
/* if you build it to support postscript names in the TrueType */ |
||||
/* "post" table. */ |
||||
/* */ |
||||
/* - the Type 1 driver will not be able to synthetize a */ |
||||
/* Unicode charmap out of the glyphs found in the fonts. */ |
||||
/* */ |
||||
/* You would normally undefine this configuration macro when */ |
||||
/* building a version of FreeType that doesn't contain a Type 1 */ |
||||
/* or CFF driver. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Postscript Names to Unicode Values support */ |
||||
/* */ |
||||
/* By default, FreeType 2 is built with the "psnames" module compiled */ |
||||
/* in. Among other things, the module is used to convert a glyph */ |
||||
/* name into a unicode value. This is especially useful in order to */ |
||||
/* synthetize on the fly a Unicode charmap from the CFF/Type 1 driver */ |
||||
/* through a big table named the "Adobe Glyph List". */ |
||||
/* */ |
||||
/* Undefine this macro if you do not want the Adobe Glyph List */ |
||||
/* compiled in your "psnames" module. The Type 1 driver will not */ |
||||
/* be able to synthetize a Unicode charmap out of the glyphs found */ |
||||
/* in the fonts.. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* GCC provides the non-ANSI `long long' 64-bit type. You can activate */ |
||||
/* it by defining the FTCALC_USE_LONG_LONG macro here. Note however */ |
||||
/* that we did not experience any improvement in speed with gcc, and */ |
||||
/* that the final code seems bigger when linked. */ |
||||
/* */ |
||||
#undef FTCALC_USE_LONG_LONG |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* When compiling FreeType as a DLL, some systems/compilers need a */ |
||||
/* special keyword in front of each function definition instead of */ |
||||
/* `extern'. */ |
||||
/* */ |
||||
/* The macros EXPORT_DEF and EXPORT_FUNC are thus used to define */ |
||||
/* exported library function interfaces and exported library functions */ |
||||
/* implementations respectively. */ |
||||
/* */ |
||||
/* If not defined here, they automatically default to `extern' and void */ |
||||
/* later in this header file. */ |
||||
/* */ |
||||
#undef EXPORT_DEF |
||||
#undef EXPORT_FUNC |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Debug level */ |
||||
/* */ |
||||
/* FreeType can be compiled in debug or trace mode. In debug mode, */ |
||||
/* errors are reported through the `ftdebug' component. In trace */ |
||||
/* mode, additional messages are sent to the standard output during */ |
||||
/* execution. */ |
||||
/* */ |
||||
/* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */ |
||||
/* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */ |
||||
/* */ |
||||
/* Don't define any of these macros to compile in `release' mode. */ |
||||
/* */ |
||||
#undef FT_DEBUG_LEVEL_ERROR |
||||
#undef FT_DEBUG_LEVEL_TRACE |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Anti-aliasing support */ |
||||
/* */ |
||||
/* Undefine this macro only if you want to disable the anti-aliasing */ |
||||
/* support in FreeType. This will save you about 5 Kb of code. It */ |
||||
/* may be important for some embedded systems. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_ANTI_ALIAS |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Endianess performance improvement */ |
||||
/* */ |
||||
/* FreeType is completely endian-independent, and can thus be compiled */ |
||||
/* directly on _any_ machine. However, some components of the library */ |
||||
/* provide improved routines for the cases where endianess is known. */ |
||||
/* */ |
||||
/* It usually results in speed-ups and reduced code size. Note that */ |
||||
/* you should not define both of these macros. */ |
||||
/* */ |
||||
/* */ |
||||
/* NOTE: For now, only the scan-line converter (base/ftraster.c) uses */ |
||||
/* these macros to speed-up some anti-alias rendering routines. */ |
||||
/* */ |
||||
#undef FT_CONFIG_OPTION_LITTLE_ENDIAN |
||||
#undef FT_CONFIG_OPTION_BIG_ENDIAN |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Define this configuration macro whenever you want to build a version */ |
||||
/* of FreeType that does not include a default `system' component. */ |
||||
/* */ |
||||
/* Note that this will prevent the compilation of `ftinit', hence the */ |
||||
/* function FT_Init_FreeType */ |
||||
/* */ |
||||
#undef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* The size in bytes of the render pool used by the scan-line */ |
||||
/* converter to do all of its work. */ |
||||
/* */ |
||||
/* This must be greater than 4 Kb */ |
||||
/* */ |
||||
#define FT_RENDER_POOL_SIZE 32768 |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* FT_MAX_DRIVERS */ |
||||
/* */ |
||||
/* The maximum number of font drivers that can be registered in a */ |
||||
/* single FreeType library object. 8 seems to be a good choice due */ |
||||
/* to the relative low actual number of drivers ;-) */ |
||||
/* */ |
||||
#define FT_MAX_DRIVERS 8 |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* FT_MAX_EXTENSIONS */ |
||||
/* */ |
||||
/* The maximum number of extensions that can be registered in a */ |
||||
/* single font driver. 8 seems to be a good choice for now.. */ |
||||
/* */ |
||||
#define FT_MAX_EXTENSIONS 8 |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* FT_MAX_GLYPH_FORMATS */ |
||||
/* */ |
||||
/* The maximum number of glyph image formats that might be registered */ |
||||
/* in a given library instance. 8 seems to be a good choice due to */ |
||||
/* the relatively low number of current formats ;-) */ |
||||
/* */ |
||||
|
||||
#define FT_MAX_GLYPH_FORMATS 8 |
||||
|
||||
|
||||
|
||||
#endif /* FTOPTION_H */ |
@ -1,871 +0,0 @@ |
||||
/*******************************************************************
|
||||
* |
||||
* ftsys.c |
||||
* |
||||
* Unix-specific system operations. |
||||
* |
||||
* Copyright 1996-1998 by |
||||
* David Turner, Robert Wilhelm, and Werner Lemberg. |
||||
* |
||||
* This file is part of the FreeType project, and may only be used |
||||
* modified and distributed under the terms of the FreeType project |
||||
* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
* this file you indicate that you have read the license and |
||||
* understand and accept it fully. |
||||
* |
||||
* |
||||
* This implementation of the 'ftsys' component uses memory-mapped |
||||
* files, as well as the ANSI malloc/free functions.. |
||||
* |
||||
* IMPORTANT NOTE : |
||||
* |
||||
* Porters, read carefully the comments in ftsys.h before trying |
||||
* to port this file to your system. It contains many essential |
||||
* remarks, and will ease your work greatly.. |
||||
* |
||||
******************************************************************/ |
||||
|
||||
#include "ftsys.h" |
||||
#include "ftobjs.h" |
||||
#include "ftstream.h" |
||||
#include "ftdebug.h" |
||||
|
||||
/* Memory-mapping includes and definitions.. */ |
||||
/* */ |
||||
#ifdef HAVE_UNISTD_H |
||||
#include <unistd.h> |
||||
#endif |
||||
|
||||
#include <sys/mman.h> |
||||
#ifndef MAP_FILE |
||||
#define MAP_FILE 0x00 |
||||
#endif |
||||
|
||||
/*
|
||||
* The prototype for munmap() is not provided on SunOS. This needs to |
||||
* have a check added later to see if the GNU C library is being used. |
||||
* If so, then this prototype is not needed. |
||||
*/ |
||||
#if defined(__sun__) && !defined(SVR4) && !defined(__SVR4) |
||||
extern int munmap( caddr_t addr, int len ); |
||||
#endif |
||||
|
||||
#include <sys/stat.h> |
||||
#ifdef HAVE_FCNTL_H |
||||
#include <fcntl.h> |
||||
#endif |
||||
|
||||
|
||||
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */ |
||||
/* parameter of the PTRACE and PERROR macros, used to print/log */ |
||||
/* messages during execution.. */ |
||||
/* */ |
||||
#undef FT_COMPONENT |
||||
#define FT_COMPONENT trace_io |
||||
|
||||
|
||||
|
||||
|
||||
/* To ease porting, we use the macro SYS_STREAM to name the system-specific */ |
||||
/* stream type. For example, it is a "FILE*" with the ANSI libc, it will be */ |
||||
/* a file descriptor, i.e. an integer, when using the Unix system api, etc. */ |
||||
|
||||
/* we identify each memory-mapped file through its address in memory */ |
||||
/* hence the following macro definition.. */ |
||||
|
||||
#define SYS_STREAM void* |
||||
|
||||
|
||||
/**************************************************************************/ |
||||
/* */ |
||||
/* I/O ACCESS AND MANAGEMENT */ |
||||
/* */ |
||||
/* We only define the "ANSI" resource class in this class. It is */ |
||||
/* disk-based, and provides a MRU cache, in order to only keep the file */ |
||||
/* descriptors of the 10 most recently used resource files. */ |
||||
/* */ |
||||
/* it simply contains two lists. One contains the "cached" resources */ |
||||
/* with a valid FILE* pointer, the second contains all other "flushed" */ |
||||
/* resource objects. */ |
||||
/* */ |
||||
|
||||
/* The FT_MMapFile class derives from FT_ResourceRec - description : */ |
||||
/* */ |
||||
/* <Struct> FT_AnsiFileRec */ |
||||
/* */ |
||||
/* <Fields> */ |
||||
/* */ |
||||
/* root :: */ |
||||
/* the root resource class fields. */ |
||||
/* */ |
||||
/* pathname :: */ |
||||
/* the file's pathname. Needed because we open and close font */ |
||||
/* resources dynamically in order to limit the number of */ |
||||
/* concurrently active mappings (this saves kernel resources). */ |
||||
/* */ |
||||
/* file_size :: */ |
||||
/* the size in bytes of the resource. This field should be set to */ |
||||
/* -1 until the resource is first opened.. */ |
||||
/* */ |
||||
|
||||
#include <stdio.h> |
||||
|
||||
typedef struct FT_MMapFileRec_ |
||||
{ |
||||
FT_ResourceRec root; |
||||
const char* pathname; |
||||
FT_Long file_size; /* file size in bytes */ |
||||
|
||||
} FT_MMapFileRec, *FT_MMapFile; |
||||
|
||||
|
||||
/* We use the macro STREAM_Name as a convenience to return a given */ |
||||
/* ANSI resource's pathname. Its "stream" argument is a FT_Resource */ |
||||
/* which is typecasted to the FT_AnsiFile class */ |
||||
#define STREAM_Name(stream) ((FT_MMapFile)stream->resource)->pathname |
||||
|
||||
/* We use the macro STREAM_File as a convenience to extract the */ |
||||
/* system-specific stream handle from a given FreeType stream object */ |
||||
#define STREAM_File(stream) ((void*)stream->stream_id.pointer) |
||||
|
||||
|
||||
|
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* <Function> MMapFile_Open */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* This function is used to open a system-stream for a given resource. */ |
||||
/* */ |
||||
/* Note that it must update the target FreeType stream object with the */ |
||||
/* system-stream handle and the resource's size. */ |
||||
/* */ |
||||
/* Also, the 'stream->base' field must be set to NULL for disk-based */ |
||||
/* resource, and to the address in memory of the resource's first byte */ |
||||
/* for a memory-based one. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* resource :: the source resource */ |
||||
/* stream :: the target stream object */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* Error code */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function simply opens and maps the resource's file pathname */ |
||||
/* */ |
||||
/* The stream object IS NOT CREATED by this function, but by its caller. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
static |
||||
FT_Error MMapFile_Open( FT_MMapFile resource, |
||||
FT_Stream stream ) |
||||
{ |
||||
int file; |
||||
struct stat stat_buf; |
||||
|
||||
/* open the file */ |
||||
file = open( resource->pathname, O_RDONLY ); |
||||
if (file < 0) |
||||
{ |
||||
PERROR(( "UnixSys.MMapFile_Open : could not open '%s'\n", |
||||
resource->pathname )); |
||||
return FT_Err_Cannot_Open_Stream; |
||||
} |
||||
|
||||
if (fstat( file, &stat_buf ) < 0) |
||||
{ |
||||
PERROR(( "UnixSys.MMapFile_Open : could not 'fstat' file '%s'\n", |
||||
resource->pathname )); |
||||
goto Fail_Map; |
||||
} |
||||
|
||||
if ( resource->file_size < 0 ) |
||||
resource->file_size = stat_buf.st_size; |
||||
|
||||
stream->resource = (FT_Resource)resource; |
||||
stream->system = resource->root.driver->system; |
||||
stream->size = resource->file_size; |
||||
stream->stream_id.pointer = mmap( NULL, |
||||
resource->file_size, |
||||
PROT_READ, |
||||
MAP_FILE | MAP_PRIVATE, |
||||
file, |
||||
0 ); |
||||
|
||||
if ( (long)stream->stream_id.pointer == -1 ) |
||||
{ |
||||
PERROR(( "UnixSys.MMapFile_Open : Could not map file '%s'\n", |
||||
resource->pathname )); |
||||
goto Fail_Map; |
||||
} |
||||
|
||||
close(file); |
||||
stream->base = (FT_Byte*)stream->stream_id.pointer; |
||||
stream->cursor = stream->base; |
||||
|
||||
PTRACE1(( "UnixSys.MMapFile_Open: opened '%s' (%d bytes) succesfully\n", |
||||
resource->pathname, resource->file_size )); |
||||
|
||||
return FT_Err_Ok; |
||||
|
||||
Fail_Map: |
||||
close(file); |
||||
stream->resource = NULL; |
||||
stream->size = 0; |
||||
stream->stream_id.pointer = NULL; |
||||
stream->base = NULL; |
||||
stream->cursor = NULL; |
||||
|
||||
return FT_Err_Cannot_Open_Stream; |
||||
} |
||||
|
||||
|
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* <Function> MMapFile_Close */ |
||||
/* */ |
||||
/* <Description> Closes a given stream */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: the target stream object */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* Error code */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function simply unmaps the resource.. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
static |
||||
FT_Error MMapFile_Close( FT_Stream stream ) |
||||
{ |
||||
PTRACE1(( "Closing file '%s'\n", STREAM_Name(stream) )); |
||||
|
||||
munmap ( (void*)stream->stream_id.pointer, stream->size ); |
||||
|
||||
stream->resource = NULL; |
||||
stream->stream_id.pointer = NULL; |
||||
stream->size = 0; |
||||
stream->base = NULL; |
||||
stream->cursor = NULL; |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* <Function> MMapFile_Seek */ |
||||
/* */ |
||||
/* <Description> Seek a stream to a given position */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: the target stream object */ |
||||
/* position :: offset in bytes from start of resource/stream */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* Error code */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function should never be called for memory-based resources.. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
static |
||||
FT_Error MMapFile_Seek( FT_Stream stream, |
||||
FT_Long position ) |
||||
{ |
||||
(void)stream; |
||||
(void)position; |
||||
return FT_Err_Invalid_Stream_Operation; |
||||
} |
||||
|
||||
|
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* <Function> MMapFile_Skip */ |
||||
/* */ |
||||
/* <Description> Skip a given number of bytes in an MMap stream. */ |
||||
/* Useful to skip pad bytes, for example. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: the target stream object */ |
||||
/* count :: number of bytes to skip in the stream */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* Error code */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function should never be called for memory-based resources.. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
static |
||||
FT_Error MMapFile_Skip( FT_Stream stream, |
||||
FT_Long count ) |
||||
{ |
||||
(void)stream; |
||||
(void)count; |
||||
return FT_Err_Invalid_Stream_Operation; |
||||
}
|
||||
|
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* <Function> MMapFile_Pos */ |
||||
/* */ |
||||
/* <Description> Returns the current offset within an MMap stream's */ |
||||
/* resource. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: the target stream object */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* position :: current offset. -1 in case of error */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* Error code. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function should never be called for memory-based resources.. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
static |
||||
FT_Error MMapFile_Pos( FT_Stream stream, |
||||
FT_Long* position ) |
||||
{ |
||||
(void)stream; |
||||
(void)position; |
||||
return FT_Err_Invalid_Stream_Operation; |
||||
} |
||||
|
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* <Function> MMapFile_Read */ |
||||
/* */ |
||||
/* <Description> Read a given number of bytes from an MMap stream into */ |
||||
/* memory. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* stream :: the target stream object */ |
||||
/* buffer :: the target read buffer where data is copied */ |
||||
/* size :: number of bytes to read from the stream */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* read_bytes :: the number of bytes effectively read from the stream */ |
||||
/* used in case of error (i.e. FT_Err_Invalid_Stream_Read) */ |
||||
/* by some parts of the library.. */ |
||||
/* <Return> */ |
||||
/* Error code */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This function should never be called for memory-based resources.. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
static |
||||
FT_Error MMapFile_Read( FT_Stream stream, |
||||
FT_Byte* buffer, |
||||
FT_Long size, |
||||
FT_Long* read_bytes ) |
||||
{ |
||||
(void)stream; |
||||
(void)buffer; |
||||
(void)size; |
||||
(void)read_bytes; |
||||
return FT_Err_Invalid_Stream_Operation;
|
||||
} |
||||
|
||||
/* The following table is the "virtual method table" for the 'MMap */ |
||||
/* resource class', which methods are defined above. Its address is */ |
||||
/* set in the 'interface' field of all resource objects created by */ |
||||
/* the function FT_Create_MMapFile (see below) */ |
||||
|
||||
static |
||||
FTRes_InterfaceRec FT_MMapFile_Interface = |
||||
{ |
||||
(FTRes_Open_Func) MMapFile_Open, |
||||
(FTRes_Close_Func) MMapFile_Close, |
||||
(FTRes_Seek_Func) MMapFile_Seek, |
||||
(FTRes_Skip_Func) MMapFile_Skip, |
||||
(FTRes_Pos_Func) MMapFile_Pos, |
||||
(FTRes_Read_Func) MMapFile_Read, |
||||
}; |
||||
|
||||
|
||||
/************************************************************************/ |
||||
/* */ |
||||
/* <Function> FT_Create_Resource */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Create a new resource object for a given library. Note that this */ |
||||
/* function takes an ASCII 'pathname' as an argument. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* library :: handle to target library object */ |
||||
/* pathanme :: ASCII pathname of the font file */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* resource :: handle to new resource object */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* Error code. 0 means success */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* When porting the library to exotic environments, where an */ |
||||
/* ASCII pathname isn't used to name files, developers should */ |
||||
/* invoke directly their own resource creation function which */ |
||||
/* must be placed in their port of the "ftsys" component. */ |
||||
/* */ |
||||
/* See the porting guide for more information.. */ |
||||
/* */ |
||||
EXPORT_FUNC |
||||
FT_Error FT_Create_Resource( FT_Library library, |
||||
const char* pathname, |
||||
FT_Resource* aresource ) |
||||
{ |
||||
FT_Int len; |
||||
FT_System system; |
||||
FT_MMapFile resource; |
||||
FT_Error error; |
||||
|
||||
*aresource = NULL; |
||||
|
||||
if (!library) |
||||
{ |
||||
PERROR(( "Unix.New_Resource : null library handle\n" )); |
||||
return FT_Err_Invalid_Library_Handle; |
||||
} |
||||
|
||||
system = library->system; |
||||
|
||||
if ( !pathname ) |
||||
goto Fail_Null; |
||||
|
||||
len = strlen(pathname); |
||||
if (len == 0) |
||||
goto Fail_Null; |
||||
|
||||
resource = NULL; |
||||
|
||||
if ( ALLOC( resource, sizeof(*resource) ) || |
||||
ALLOC( resource->pathname, len+1 ) ) |
||||
goto Fail_Memory; |
||||
|
||||
resource->root.library = library; |
||||
resource->root.interface = &FT_MMapFile_Interface; |
||||
resource->root.flags = FT_RESOURCE_TYPE_MEMORY_BASED; |
||||
resource->file_size = -1; |
||||
strcpy( (char*)resource->pathname, pathname ); |
||||
|
||||
PTRACE1(( "Create_MMapFile : MMap resource created for '%s'\n", |
||||
pathname )); |
||||
|
||||
*aresource = (FT_Resource)resource; |
||||
return FT_Err_Ok; |
||||
|
||||
Fail_Null:
|
||||
PERROR(( "Create_MMapFile : null pathname !!\n" )); |
||||
return FT_Err_Invalid_Argument; |
||||
|
||||
Fail_Memory: |
||||
if (resource) |
||||
FREE( resource->pathname ); |
||||
FREE( resource ); |
||||
PERROR(( "Create_MMapFile : error when creating resource !\n" )); |
||||
return error; |
||||
} |
||||
|
||||
|
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* <Function> FT_Destroy_Resource */ |
||||
/* */ |
||||
/* <Description> Destroys an MMap resource object. */ |
||||
/* This function is never called directly by the font */ |
||||
/* drivers. Only by the higher-level part of FreeType */ |
||||
/* (called the HLib), or client applications */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* resource :: the MMap resource object */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* This functions does not check that runs or streams are opened for */ |
||||
/* the resource (for now, we assume developer intelligence. We'll most */ |
||||
/* probably lower our standard later to ease debugging ;-) */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
EXPORT_FUNC |
||||
FT_Error FT_Destroy_Resource( FT_Resource resource ) |
||||
{ |
||||
FT_System system = resource->library->system; |
||||
FT_MMapFile res = (FT_MMapFile)resource; |
||||
|
||||
if ( !res || res->root.interface != &FT_MMapFile_Interface ) |
||||
{ |
||||
PERROR((
|
||||
"Destroy_MMapFile : Trying to destroy an invalid resource !!\n" )); |
||||
return FT_Err_Invalid_Resource_Handle; |
||||
} |
||||
|
||||
PTRACE1(( "Destroy_MMapFile : destroying resource for '%s'\n", |
||||
res->pathname )); |
||||
|
||||
FREE( res->pathname ); |
||||
FREE( res ); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
|
||||
/**************************************************************************/ |
||||
/* */ |
||||
/* MEMORY MANAGEMENT */ |
||||
/* */ |
||||
/* */ |
||||
/* This part copies the old FreeType 1.0 and 1.1 memory management */ |
||||
/* scheme that was defined in the file "ttmemory.h". One can see that */ |
||||
/* */ |
||||
/* - a set of macros is defined for the memory operations used */ |
||||
/* by the engine ( MEM_Copy, MEM_Move, MEM_Set ). This comes from */ |
||||
/* the fact that many compilers are able to inline these ops directly */ |
||||
/* within the compiled code, rather than generating a call to the */ |
||||
/* C library. However, this obliges us to include the <string.h> */ |
||||
/* header file. */ |
||||
/* */ |
||||
/* If you provide your own memory operations routine, you can get */ |
||||
/* rid of the #include <string.h> below. */ |
||||
/* */ |
||||
/* */ |
||||
/* - the FT_Alloc function has several essential properties that */ |
||||
/* MUST be retained by each port : */ |
||||
/* */ |
||||
/* - it returns an error code, NOT the allocated block's base */ |
||||
/* address */ |
||||
/* */ |
||||
/* - it takes the address of a target pointer, where the block's */ |
||||
/* base address will be set. if the size is zero, its value */ |
||||
/* will be NULL and the function returns successfully */ |
||||
/* */ |
||||
/* - in case of error, the pointer's value is set to NULL and */ |
||||
/* an error code is returned.. */ |
||||
/* */ |
||||
/* - the new allocated block MUST be zero-filled. This is a strong */ |
||||
/* convetion the rest of the engine relies on */ |
||||
/* */ |
||||
/* */ |
||||
/* */ |
||||
/* - the FT_Free function has also its essentials : */ |
||||
/* */ |
||||
/* - it takes the address of a pointer which value is the block's */ |
||||
/* base address. This is UNLIKE a standard "free" which takes the */ |
||||
/* the block's base directly. */ |
||||
/* */ |
||||
/* - it accepts succesfully the address of a pointer which value */ |
||||
/* is NULL, in which case it simply returns. */ |
||||
/* */ |
||||
/* - the pointer is always set to NULL by the function */ |
||||
/* */ |
||||
/* */ |
||||
/* - the MEM_Alloc, ALLOC and ALLOC_ARRAY macros are used by the */ |
||||
/* library, and should NOT be modified by porters !! */ |
||||
/* */ |
||||
|
||||
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */ |
||||
/* parameter of the PTRACE and PERROR macros, used to print/log */ |
||||
/* messages during execution.. */ |
||||
/* */ |
||||
#undef FT_COMPONENT |
||||
#define FT_COMPONENT trace_memory |
||||
|
||||
|
||||
#include <stdlib.h> |
||||
|
||||
/**************************************************************************/ |
||||
/* */ |
||||
/* <Function> FT_Alloc */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Allocates a new bloc of memory. The returned area is always */ |
||||
/* zero-filled, this is a strong convention in many FreeType parts */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* system :: handle to a given 'system object' where allocation */ |
||||
/* occurs.. */ |
||||
/* */ |
||||
/* size :: size in bytes of the block to allocate */ |
||||
/* */ |
||||
/* <Output> */ |
||||
/* P :: pointer to the fresh new block. It should be set */ |
||||
/* to NULL if 'size' is 0, of in case of error.. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/**************************************************************************/ |
||||
|
||||
BASE_FUNC |
||||
FT_Error FT_Alloc( FT_System system, |
||||
long size,
|
||||
void* *P )
|
||||
{ |
||||
|
||||
if (!P) |
||||
{ |
||||
PERROR(( "FT_Alloc : invalid pointer address !!\n" )); |
||||
return FT_Err_Invalid_Argument; |
||||
} |
||||
|
||||
if ( size > 0 ) |
||||
{ |
||||
*P = malloc( size ); |
||||
if ( !*P ) |
||||
{ |
||||
PERROR(( "FT_Alloc : out of memory (%ld bytes requested) !!\n", |
||||
size )); |
||||
|
||||
return FT_Err_Out_Of_Memory; |
||||
} |
||||
|
||||
system->total_alloc += size; |
||||
|
||||
/* ALWAYS ZERO-FILL THE BLOCK !!!!! */
|
||||
MEM_Set( *P, 0, size ); |
||||
} |
||||
else |
||||
*P = NULL; |
||||
|
||||
PTRACE2(( "FT_Alloc : size = %ld, pointer = 0x%08lx, block = 0x%08lx\n", |
||||
size, (long)P, (long)*P )); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/**************************************************************************/ |
||||
/* */ |
||||
/* <Function> FT_Realloc */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Reallocates a block of memory pointed to by '*P' to 'Size' */ |
||||
/* bytes from the hea^, possibly changing '*P'. */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* system :: handle to a given 'system object' where allocation */ |
||||
/* occurs.. */ |
||||
/* */ |
||||
/* size :: size in bytes of the block to allocate */ |
||||
/* */ |
||||
/* <InOut> */ |
||||
/* P :: pointer to the fresh new block. It should be set */ |
||||
/* to NULL if 'size' is 0, of in case of error.. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
|
||||
BASE_FUNC |
||||
int FT_Realloc( FT_System system, |
||||
long size,
|
||||
void* *P ) |
||||
{ |
||||
void* Q; |
||||
|
||||
if (!P) |
||||
{ |
||||
PERROR(( "FT_Realloc : invalid pointer address !!\n" )); |
||||
return FT_Err_Invalid_Argument; |
||||
} |
||||
|
||||
/* if the original pointer is NULL, call FT_Alloc */
|
||||
if (!*P) |
||||
return FT_Alloc( system, size, P ); |
||||
|
||||
/* if the new block if zero-sized, clear the current one */
|
||||
if (size <= 0) |
||||
return FT_Free( system, P ); |
||||
|
||||
Q = (void*)realloc( *P, size ); |
||||
if (!Q) |
||||
{ |
||||
PERROR(( "FT_Realloc : reallocation failed\n" )); |
||||
return FT_Err_Out_Of_Memory; |
||||
} |
||||
|
||||
*P = Q;
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/**************************************************************************/ |
||||
/* */ |
||||
/* <Function> FT_Free */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* Releases a given block of memory allocated through FT_Alloc */ |
||||
/* */ |
||||
/* <Input> */ |
||||
/* system :: handle to a given 'system object' where allocation */ |
||||
/* occured.. */ |
||||
/* */ |
||||
/* P :: This is the _address_ of a _pointer_ which points to */ |
||||
/* the allocated block. It is always set to NULL on exit */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* FreeType error code. 0 means success. */ |
||||
/* */ |
||||
/* <Note> */ |
||||
/* If P or *P are NULL, this function should return successfuly. This */ |
||||
/* is a strong convention within all of FreeType and its drivers.. */ |
||||
/* */ |
||||
|
||||
BASE_FUNC |
||||
FT_Error FT_Free( FT_System system, |
||||
void* *P ) |
||||
{ |
||||
(void)system; /* unused parameter. Gets rid of warnings */ |
||||
|
||||
PTRACE2(( "FT_Free : freeing pointer 0x%08lx (block 0x%08lx)\n", |
||||
(long)P, (P ? (long)*P : -1) )); |
||||
|
||||
if ( !P || !*P ) |
||||
return FT_Err_Ok; |
||||
|
||||
free( *P ); |
||||
*P = NULL; |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
/**************************************************************************/ |
||||
/* */ |
||||
/* SYNCHRONIZATION MANAGEMENT */ |
||||
/* */ |
||||
/* */ |
||||
/* This section deals with mutexes. The library can be compiled to */ |
||||
/* three distinct thread-support levels ( namely single-threaded, */ |
||||
/* thread-safe and re-entrant modes ). */ |
||||
/* */ |
||||
/* It protects its variables through the MUTEX_Lock and MUTEX_Release */ |
||||
/* macros which are void in single-threaded mode. */ |
||||
/* */ |
||||
/* */ |
||||
/* It defines a type-less mutex reference type, "TMutex", that you're */ |
||||
/* free to redefine for your system's needs.. */ |
||||
/* */ |
||||
/* The default implementation of ftsys.c contains only dummy functions */ |
||||
/* which always return succesfully. you NEED to specialize them in */ |
||||
/* order to port ftsys.c in any multi-threaded environment... */ |
||||
/* */ |
||||
|
||||
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */ |
||||
/* parameter of the PTRACE and PERROR macros, used to print/log */ |
||||
/* messages during execution.. */ |
||||
/* */ |
||||
#undef FT_COMPONENT |
||||
#define FT_COMPONENT trace_sync |
||||
|
||||
#ifdef FT_CONFIG_THREADS |
||||
|
||||
|
||||
BASE_FUNC |
||||
FT_Error FT_Mutex_Create ( FT_System system, |
||||
TMutex* mutex ) |
||||
{ |
||||
(void)system; /* unused parameter. Gets rid of warnings */ |
||||
|
||||
mutex = (void*)-1; |
||||
system->num_mutexes++; |
||||
return FT_Err_Ok; |
||||
/* Replace this line with your own mutex creation code */ |
||||
} |
||||
|
||||
|
||||
BASE_FUNC |
||||
void FT_Mutex_Delete ( FT_System system, |
||||
TMutex* mutex ) |
||||
{ |
||||
(void)system; /* unused parameter. Gets rid of warnings */ |
||||
|
||||
mutex = (void*)0; |
||||
system->num_mutexes--; |
||||
/* Replace this line with your own mutex destruction code */ |
||||
} |
||||
|
||||
BASE_FUNC |
||||
void FT_Mutex_Lock ( FT_System system, |
||||
TMutex* mutex ) |
||||
{ |
||||
/* NOTE: It is legal to call this function with a NULL argument */ |
||||
/* in which case an immediate return is appropriate. */ |
||||
(void)system; /* unused parameter. Gets rid of warnings */ |
||||
|
||||
if ( !mutex ) |
||||
return; |
||||
|
||||
; /* Insert your own mutex locking code here */ |
||||
} |
||||
|
||||
|
||||
void FT_Mutex_Release( FT_System system, |
||||
TMutex* mutex ) |
||||
{ |
||||
/* NOTE: It is legal to call this function with a NULL argument */ |
||||
/* in which case an immediate return is appropriate */ |
||||
(void)system; /* unused parameter. Gets rid of warnings */ |
||||
|
||||
if ( !mutex ) |
||||
return; |
||||
; /* Insert your own mutex release code here */ |
||||
} |
||||
|
||||
#endif /* FT_CONFIG_THREADS */ |
||||
|
||||
|
||||
|
||||
|
||||
EXPORT_FUNC |
||||
FT_Error FT_New_System( FT_System* system ) |
||||
{ |
||||
*system = (FT_System)malloc( sizeof(FT_SystemRec) ); |
||||
if ( !*system ) |
||||
return FT_Err_Out_Of_Memory; |
||||
|
||||
/* the ANSI function 'free' is unable to return the number */ |
||||
/* of released bytes. Hence, the 'current_alloc' field of the */ |
||||
/* system object cannot be used */ |
||||
|
||||
(*system)->system_flags = FT_SYSTEM_FLAG_TOTAL_ALLOC | |
||||
FT_SYSTEM_FLAG_MUTEXES; |
||||
(*system)->total_alloc = 0; |
||||
(*system)->num_mutexes = 0; |
||||
|
||||
/* initialise i/o management (nothing) */ |
||||
|
||||
/* initialise synchronisation (nothing) */ |
||||
|
||||
/* initialise streams */ |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
|
||||
EXPORT_FUNC |
||||
FT_Error FT_Done_System( FT_System system ) |
||||
{ |
||||
/* finalise syncrhonisation (nothing) */ |
||||
|
||||
/* finalise i/o management (nothing) */ |
||||
|
||||
/* finalise memory management */ |
||||
free( system ); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
@ -0,0 +1,131 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for a standard Unix + GCC
|
||||
#* NOTE: THIS VERSION TURNS OFF ALL OPTIMIZATIONS FOR DEBUGGING !!
|
||||
#*
|
||||
#* Copyright 1996-2000 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#* Please read the file "freetype/docs/config.txt" to understand
|
||||
#* what this file does..
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := rm -f
|
||||
SEP := /
|
||||
HOSTSEP := $(SEP)
|
||||
BUILD := $(TOP)/config/unix
|
||||
PLATFORM := unix
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O0 -Wall
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS := -ansi -pedantic
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_std |
||||
distclean_freetype: distclean_freetype_std |
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@
|
||||
$(AR) -r $@ $(OBJECTS_LIST)
|
||||
|
||||
endif |
@ -0,0 +1,130 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for a standard Unix compiler
|
||||
#*
|
||||
#* Copyright 1996-2000 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#* Please read the file "freetype/docs/config.txt" to understand
|
||||
#* what this file does..
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := rm -f
|
||||
SEP := /
|
||||
HOSTSEP := $(SEP)
|
||||
BUILD := $(TOP)/config/unix
|
||||
PLATFORM := unix
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O6 -Wall
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS := -ansi -pedantic
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_std |
||||
distclean_freetype: distclean_freetype_std |
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@
|
||||
$(AR) -r $@ $(OBJECTS_LIST)
|
||||
|
||||
endif |
@ -0,0 +1,130 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for a standard Unix compiler
|
||||
#*
|
||||
#* Copyright 1996-2000 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#* Please read the file "freetype/docs/config.txt" to understand
|
||||
#* what this file does..
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := rm -f
|
||||
SEP := /
|
||||
HOSTSEP := $(SEP)
|
||||
BUILD := $(TOP)/config/unix
|
||||
PLATFORM := unix
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS :=
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_std |
||||
distclean_freetype: distclean_freetype_std |
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $@
|
||||
$(AR) -r $@ $(OBJECTS_LIST)
|
||||
|
||||
endif |
@ -1,200 +0,0 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for Unix + gcc
|
||||
#*
|
||||
#* Copyright 1996-1999 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#*
|
||||
#* The purpose of this sub-Makefile is to define various build and
|
||||
#* platform specific variables before including the sub-Makefile
|
||||
#* containing the FreeType library rules, found in
|
||||
#*
|
||||
#* $(TOP)/config/freetype.mk
|
||||
#*
|
||||
#* The following variables must be defined before including this
|
||||
#* file :
|
||||
#*
|
||||
#* TOP Pathname to the top of the FreeType sources
|
||||
#* hierarchy
|
||||
#*
|
||||
#* This file should define the following variables before including
|
||||
#* the FreeType library rules file :
|
||||
#*
|
||||
#* BUILD Pathname to the platform-specific files used
|
||||
#* for the build. Usually `$(TOP)/config/<system>'
|
||||
#*
|
||||
#* SEP Directory separator used during compilation.
|
||||
#* (usually "/" or "\"). Note that on Win32, both gcc
|
||||
#* and Visual C++ use "/" as a directory separator !!
|
||||
#*
|
||||
#* HOSTSEP Directory separator for $(COPY) and $(DELETE)
|
||||
#*
|
||||
#* DELETE The forced remove/delete command to erase one or more
|
||||
#* files
|
||||
#*
|
||||
#* INCLUDE The location of all public header files. e.g.
|
||||
#* `$(TOP)/include'include' *
|
||||
#*
|
||||
#* SRC The directory containing all sources. e.g.
|
||||
#* '$(TOP)/src'
|
||||
#*
|
||||
#* OBJ_DIR The location where compiled object files will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIB_DIR The location where the resulting library file will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIBRARY The filename of the resulting library file, without
|
||||
#* its extension.. e.g. 'libfreetype' or 'freetype'
|
||||
#*
|
||||
#* O The object file suffix. Can be '.o', '.obj,' '.lo,'
|
||||
#* ';coff,' etc.
|
||||
#*
|
||||
#* A The library file suffix. Can be '.a' '.so,' '.lib'
|
||||
#* '.dll,' etc.
|
||||
#*
|
||||
#* I The path inclusion flag. Some compilers use a
|
||||
#* different flag than '-I' to specify an additional
|
||||
#* include path. Examples are '/i=' or '-J ', etc.
|
||||
#*
|
||||
#* D The macro definition flag. I haven't met compilers
|
||||
#* which don't use the '-D' switch to define a macro, but
|
||||
#* who knows...
|
||||
#*
|
||||
#* T The compilation flag used to identify the target. Some
|
||||
#* compilers use a different flag than '-o ' to specify
|
||||
#* the name of the target object file.
|
||||
#*
|
||||
#* CFLAGS The set of flags used to compile object files.
|
||||
#* (usually contains the flag '-c').
|
||||
#*
|
||||
#*
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := del
|
||||
SEP := /
|
||||
HOSTSEP := $(strip \ )
|
||||
BUILD := $(TOP)/config/win32
|
||||
PLATFORM := win32
|
||||
CC := gcc
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O6 -Wall
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS := -ansi -pedantic
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
# Librarian to use to build the static library
|
||||
#
|
||||
FT_LIBRARIAN := $(AR) -r
|
||||
|
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $(subst $(SEP),$(HOSTSEP),$(FT_LIBRARY)) 2> nul
|
||||
$(FT_LIBRARIAN) $@ $(OBJECTS_LIST)
|
||||
|
||||
endif |
||||
|
@ -1,202 +0,0 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for Unix + gcc
|
||||
#*
|
||||
#* Copyright 1996-1999 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#*
|
||||
#* The purpose of this sub-Makefile is to define various build and
|
||||
#* platform specific variables before including the sub-Makefile
|
||||
#* containing the FreeType library rules, found in
|
||||
#*
|
||||
#* $(TOP)/config/freetype.mk
|
||||
#*
|
||||
#* The following variables must be defined before including this
|
||||
#* file :
|
||||
#*
|
||||
#* TOP Pathname to the top of the FreeType sources
|
||||
#* hierarchy
|
||||
#*
|
||||
#* This file should define the following variables before including
|
||||
#* the FreeType library rules file :
|
||||
#*
|
||||
#* BUILD Pathname to the platform-specific files used
|
||||
#* for the build. Usually `$(TOP)/config/<system>'
|
||||
#*
|
||||
#* SEP Directory separator used during compilation.
|
||||
#* (usually "/" or "\"). Note that on Win32, both gcc
|
||||
#* and Visual C++ use "/" as a directory separator !!
|
||||
#*
|
||||
#* HOSTSEP Directory separator for $(COPY) and $(DELETE)
|
||||
#*
|
||||
#* DELETE The forced remove/delete command to erase one or more
|
||||
#* files
|
||||
#*
|
||||
#* INCLUDE The location of all public header files. e.g.
|
||||
#* `$(TOP)/include'include' *
|
||||
#*
|
||||
#* SRC The directory containing all sources. e.g.
|
||||
#* '$(TOP)/src'
|
||||
#*
|
||||
#* OBJ_DIR The location where compiled object files will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIB_DIR The location where the resulting library file will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIBRARY The filename of the resulting library file, without
|
||||
#* its extension.. e.g. 'libfreetype' or 'freetype'
|
||||
#*
|
||||
#* O The object file suffix. Can be '.o', '.obj,' '.lo,'
|
||||
#* ';coff,' etc.
|
||||
#*
|
||||
#* A The library file suffix. Can be '.a' '.so,' '.lib'
|
||||
#* '.dll,' etc.
|
||||
#*
|
||||
#* I The path inclusion flag. Some compilers use a
|
||||
#* different flag than '-I' to specify an additional
|
||||
#* include path. Examples are '/i=' or '-J ', etc.
|
||||
#*
|
||||
#* D The macro definition flag. I haven't met compilers
|
||||
#* which don't use the '-D' switch to define a macro, but
|
||||
#* who knows...
|
||||
#*
|
||||
#* T The compilation flag used to identify the target. Some
|
||||
#* compilers use a different flag than '-o ' to specify
|
||||
#* the name of the target object file.
|
||||
#*
|
||||
#* CFLAGS The set of flags used to compile object files.
|
||||
#* (usually contains the flag '-c').
|
||||
#*
|
||||
#*
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := del
|
||||
SEP := /
|
||||
HOSTSEP := \\
|
||||
BUILD := $(TOP)$(SEP)config$(SEP)win32
|
||||
PLATFORM := win32
|
||||
CC := lcc
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := obj
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := lib
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := freetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - LCC uses "-Fo" instead of "-o ", what a broken compiler
|
||||
#
|
||||
#
|
||||
T := -Fo
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -Fl
|
||||
|
||||
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g2 -O
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS :=
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
# The LCC-Win32 Librarian, called LCCLIB needs all object files in the current
|
||||
# directory. That _is_ stupid, but we'll have to deal with it..
|
||||
#
|
||||
|
||||
DIR_OBJ := $(subst /,\\,$(OBJ_DIR))
|
||||
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
@$(TOP)/config/win32/lcclib.bat
|
||||
|
||||
endif |
||||
|
||||
|
@ -1,187 +0,0 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for Visual C++ on Win32
|
||||
#*
|
||||
#* Copyright 1996-1999 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#*
|
||||
#* The purpose of this sub-Makefile is to define various build and
|
||||
#* platform specific variables before including the sub-Makefile
|
||||
#* containing the FreeType library rules, found in
|
||||
#*
|
||||
#* $(TOP)/config/freetype.mk
|
||||
#*
|
||||
#* The following variables must be defined before including this
|
||||
#* file :
|
||||
#*
|
||||
#* TOP Pathname to the top of the FreeType sources
|
||||
#* hierarchy
|
||||
#*
|
||||
#* This file should define the following variables before including
|
||||
#* the FreeType library rules file :
|
||||
#*
|
||||
#* BUILD Pathname to the platform-specific files used
|
||||
#* for the build. Usually `$(TOP)/config/<system>'
|
||||
#*
|
||||
#* SEP Directory separator for the current platform.
|
||||
#* Either / or \ (maybe : on Macs)
|
||||
#*
|
||||
#* DELETE The forced remove/delete command to erase one or more
|
||||
#* files
|
||||
#*
|
||||
#* INCLUDE The location of all public header files. e.g.
|
||||
#* `$(TOP)/include'include' *
|
||||
#*
|
||||
#* SRC The directory containing all sources. e.g.
|
||||
#* '$(TOP)/src'
|
||||
#*
|
||||
#* OBJ_DIR The location where compiled object files will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIB_DIR The location where the resulting library file will be
|
||||
#* placed, e.g. '$(TOP)/obj'
|
||||
#*
|
||||
#* LIBRARY The filename of the resulting library file, without
|
||||
#* its extension.. e.g. 'libfreetype' or 'freetype'
|
||||
#*
|
||||
#* O The object file suffix. Can be '.o', '.obj,' '.lo,'
|
||||
#* ';coff,' etc.
|
||||
#*
|
||||
#* A The library file suffix. Can be '.a' '.so,' '.lib'
|
||||
#* '.dll,' etc.
|
||||
#*
|
||||
#* I The path inclusion flag. Some compilers use a
|
||||
#* different flag than '-I' to specify an additional
|
||||
#* include path. Examples are '/i=' or '-J ', etc.
|
||||
#*
|
||||
#* D The macro definition flag. I haven't met compilers
|
||||
#* which don't use the '-D' switch to define a macro, but
|
||||
#* who knows...
|
||||
#*
|
||||
#* T The compilation flag used to identify the target. Some
|
||||
#* compilers use a different flag than '-o ' to specify
|
||||
#* the name of the target object file.
|
||||
#*
|
||||
#* CFLAGS The set of flags used to compile object files.
|
||||
#* (usually contains the flag '-c').
|
||||
#*
|
||||
#*
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
DELETE := del
|
||||
SEP := /
|
||||
HOSTSEP := $(strip \ )
|
||||
BUILD := $(TOP)$(SEP)config$(SEP)win32
|
||||
PLATFORM := win32
|
||||
CC := cl
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := obj
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := lib
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := freetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := /I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := /Fl
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := /D
|
||||
|
||||
# Target flag - LCC uses "-Fo" instead of "-o ", what a broken compiler
|
||||
#
|
||||
#
|
||||
T := /Fo
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := /nologo /c /Ox /G5 /W3 /WX
|
||||
endif |
||||
|
||||
# ANSI_FLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSI_FLAGS := /Za
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
lib /nologo /out:$@ $(OBJECTS_LIST)
|
||||
|
||||
endif |
||||
|
||||
|
@ -1,182 +0,0 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* ftconfig.h */ |
||||
/* */ |
||||
/* ANSI-specific configuration file (specification only). */ |
||||
/* */ |
||||
/* Copyright 1996-1999 by */ |
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used */ |
||||
/* modified and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* This header file contains a number of macro definitions that are used */ |
||||
/* by the rest of the engine. Porters are free to copy this file and */ |
||||
/* adapt it to suit their own system. */ |
||||
/* */ |
||||
/* IMPORTANT NOTE: */ |
||||
/* */ |
||||
/* Porters, read carefully the comments in `ftsys.h' before trying to */ |
||||
/* port this file to your system. It contains many essential */ |
||||
/* remarks, and will ease your work greatly. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
#ifndef FTCONFIG_H |
||||
#define FTCONFIG_H |
||||
|
||||
/* Include the header file containing all developer build options */ |
||||
#include <ftoption.h> |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* PLATFORM-SPECIFIC CONFIGURATION MACROS */ |
||||
/* */ |
||||
/* These macros can be toggled to suit a specific system. The current */ |
||||
/* ones are defaults used to compile FreeType in an ANSI C environment */ |
||||
/* (16bit compilers are also supported). Copy this file to your own */ |
||||
/* `freetype/arch/<system>' directory, and edit it to port the engine. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/* Define to empty if the keyword does not work. */ |
||||
/* #undef const */ |
||||
|
||||
/* Define if you have the ANSI C header files. */ |
||||
#define STDC_HEADERS 1 |
||||
|
||||
/* We use <limits.h> values to know the sizes of the types. */ |
||||
#include <limits.h> |
||||
|
||||
/* The number of bytes in an `int' type. */ |
||||
#if UINT_MAX == 0xFFFFFFFF |
||||
#define SIZEOF_INT 4 |
||||
#elif UINT_MAX == 0xFFFF |
||||
#define SIZEOF_INT 2 |
||||
#elif UINT_MAX > 0xFFFFFFFF && UINT_MAX == 0xFFFFFFFFFFFFFFFF |
||||
#define SIZEOF_INT 8 |
||||
#else |
||||
#error "Unsupported number of bytes in `int' type!" |
||||
#endif |
||||
|
||||
/* The number of bytes in a `long' type. */ |
||||
#if ULONG_MAX == 0xFFFFFFFF |
||||
#define SIZEOF_LONG 4 |
||||
#elif ULONG_MAX > 0xFFFFFFFF && ULONG_MAX == 0xFFFFFFFFFFFFFFFF |
||||
#define SIZEOF_LONG 8 |
||||
#else |
||||
#error "Unsupported number of bytes in `long' type!" |
||||
#endif |
||||
|
||||
/* Define if you have the memcpy function. */ |
||||
#define HAVE_MEMCPY 1 |
||||
|
||||
/* Define if you have the <fcntl.h> header file. */ |
||||
#define HAVE_FCNTL_H 0 |
||||
|
||||
/* Define if you have the <unistd.h> header file. */ |
||||
#define HAVE_UNISTD_H 0 |
||||
|
||||
|
||||
/* Preferred alignment of data */ |
||||
#define FT_ALIGNMENT 8 |
||||
|
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* AUTOMATIC CONFIGURATION MACROS */ |
||||
/* */ |
||||
/* These macros are computed from the ones defined above. Don't touch */ |
||||
/* their definition, unless you know precisely what you're doing. No */ |
||||
/* porter should need to mess with them. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* IntN types */ |
||||
/* */ |
||||
/* Used to guarantee the size of some specific integers. */ |
||||
/* */ |
||||
typedef signed short FT_Int16; |
||||
typedef unsigned short FT_Word16; |
||||
|
||||
#if SIZEOF_INT == 4 |
||||
|
||||
typedef signed int FT_Int32; |
||||
typedef unsigned int FT_Word32; |
||||
|
||||
#elif SIZEOF_LONG == 4 |
||||
|
||||
typedef signed long FT_Int32; |
||||
typedef unsigned long FT_Word32; |
||||
|
||||
#else |
||||
#error "no 32bit type found - please check your configuration files" |
||||
#endif |
||||
|
||||
#if SIZEOF_LONG == 8 |
||||
|
||||
/* LONG64 must be defined when a 64-bit type is available */ |
||||
#define LONG64 |
||||
#define INT64 long |
||||
|
||||
#else |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* GCC provides the non-ANSI 'long long' 64-bit type. You can activate */ |
||||
/* it by defining the FTCALC_USE_LONG_LONG macro in `ftconfig.h'. Note */ |
||||
/* that this will produce many -ansi warnings during library */ |
||||
/* compilation. */ |
||||
/* */ |
||||
#ifdef FTCALC_USE_LONG_LONG |
||||
|
||||
#define LONG64 |
||||
#define INT64 long long |
||||
|
||||
#endif /* FTCALC_USE_LONG_LONG */ |
||||
#endif |
||||
|
||||
|
||||
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT |
||||
#define LOCAL_DEF static |
||||
#define LOCAL_FUNC static |
||||
#else |
||||
#define LOCAL_DEF extern |
||||
#define LOCAL_FUNC /* nothing */ |
||||
#endif |
||||
|
||||
#ifdef FT_MAKE_OPTION_SINGLE_LIBRARY_OBJECT |
||||
#define BASE_DEF LOCAL_DEF |
||||
#define BASE_FUNC LOCAL_FUNC |
||||
#else |
||||
#define BASE_DEF extern |
||||
#define BASE_FUNC /* nothing */ |
||||
#endif |
||||
|
||||
#ifndef EXPORT_DEF |
||||
#define EXPORT_DEF extern |
||||
#endif |
||||
|
||||
#ifndef EXPORT_FUNC |
||||
#define EXPORT_FUNC /* nothing */ |
||||
#endif |
||||
|
||||
#endif /* FTCONFIG_H */ |
||||
|
||||
|
||||
/* END */ |
@ -1,5 +0,0 @@ |
||||
FT_DRIVER(psnames_driver_interface) |
||||
FT_DRIVER(sfnt_driver_interface) |
||||
FT_DRIVER(tt_driver_interface) |
||||
FT_DRIVER(t1_driver_interface) |
||||
|
@ -1,204 +0,0 @@ |
||||
#ifndef FTOPTION_H |
||||
#define FTOPTION_H |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* USER-SELECTABLE CONFIGURATION MACROS */ |
||||
/* */ |
||||
/* These macros can be toggled by developers to enable or disable */ |
||||
/* certain aspects of FreeType. This file contains macros that apply to */ |
||||
/* all of FreeType. Driver-specific configurations are placed in each */ |
||||
/* driver directory (e.g. `freetype/drivers/ttlib/ttconfig.h'). */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Alternate Glyph Image Format support */ |
||||
/* */ |
||||
/* By default, the glyph images returned by the FreeType glyph loader */ |
||||
/* can either be a pixmap or a vectorial outline defined through */ |
||||
/* bezier control points. When defining the following configuration */ |
||||
/* macro, some font drivers will be able to register alternate */ |
||||
/* glyph image formats. */ |
||||
/* */ |
||||
/* Unset this macro if you're sure that you'll never use a font driver */ |
||||
/* with an alternate glyph format, this will reduce the size of the */ |
||||
/* base layer code. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_ALTERNATE_GLYPH_FORMATS |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Glyph Postscript Names handling */ |
||||
/* */ |
||||
/* By default, FreeType 2 is built with the "psnames" module compiled */ |
||||
/* in. This module is in charge of converting a glyph name string into */ |
||||
/* a Unicode value, or return a Macintosh standard glyph name for the */ |
||||
/* use with the TrueType "post" table. */ |
||||
/* */ |
||||
/* Undefine this macro if you do not want the "psnames" compiled in */ |
||||
/* your build of FreeType. This has the following effects : */ |
||||
/* */ |
||||
/* - the TrueType driver will provide its own set of glyph names, */ |
||||
/* if you build it to support postscript names in the TrueType */ |
||||
/* "post" table. */ |
||||
/* */ |
||||
/* - the Type 1 driver will not be able to synthetize a */ |
||||
/* Unicode charmap out of the glyphs found in the fonts. */ |
||||
/* */ |
||||
/* You would normally undefine this configuration macro when */ |
||||
/* building a version of FreeType that doesn't contain a Type 1 */ |
||||
/* or CFF driver. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Postscript Names to Unicode Values support */ |
||||
/* */ |
||||
/* By default, FreeType 2 is built with the "psnames" module compiled */ |
||||
/* in. Among other things, the module is used to convert a glyph */ |
||||
/* name into a unicode value. This is especially useful in order to */ |
||||
/* synthetize on the fly a Unicode charmap from the CFF/Type 1 driver */ |
||||
/* through a big table named the "Adobe Glyph List". */ |
||||
/* */ |
||||
/* Undefine this macro if you do not want the Adobe Glyph List */ |
||||
/* compiled in your "psnames" module. The Type 1 driver will not */ |
||||
/* be able to synthetize a Unicode charmap out of the glyphs found */ |
||||
/* in the fonts.. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* GCC provides the non-ANSI `long long' 64-bit type. You can activate */ |
||||
/* it by defining the FTCALC_USE_LONG_LONG macro here. Note however */ |
||||
/* that we did not experience any improvement in speed with gcc, and */ |
||||
/* that the final code seems bigger when linked. */ |
||||
/* */ |
||||
#undef FTCALC_USE_LONG_LONG |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* When compiling FreeType as a DLL, some systems/compilers need a */ |
||||
/* special keyword in front of each function definition instead of */ |
||||
/* `extern'. */ |
||||
/* */ |
||||
/* The macros EXPORT_DEF and EXPORT_FUNC are thus used to define */ |
||||
/* exported library function interfaces and exported library functions */ |
||||
/* implementations respectively. */ |
||||
/* */ |
||||
/* If not defined here, they automatically default to `extern' and void */ |
||||
/* later in this header file. */ |
||||
/* */ |
||||
#undef EXPORT_DEF |
||||
#undef EXPORT_FUNC |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Debug level */ |
||||
/* */ |
||||
/* FreeType can be compiled in debug or trace mode. In debug mode, */ |
||||
/* errors are reported through the `ftdebug' component. In trace */ |
||||
/* mode, additional messages are sent to the standard output during */ |
||||
/* execution. */ |
||||
/* */ |
||||
/* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */ |
||||
/* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */ |
||||
/* */ |
||||
/* Don't define any of these macros to compile in `release' mode. */ |
||||
/* */ |
||||
#undef FT_DEBUG_LEVEL_ERROR |
||||
#undef FT_DEBUG_LEVEL_TRACE |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Anti-aliasing support */ |
||||
/* */ |
||||
/* Undefine this macro only if you want to disable the anti-aliasing */ |
||||
/* support in FreeType. This will save you about 5 Kb of code. It */ |
||||
/* may be important for some embedded systems. */ |
||||
/* */ |
||||
#define FT_CONFIG_OPTION_ANTI_ALIAS |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Endianess performance improvement */ |
||||
/* */ |
||||
/* FreeType is completely endian-independent, and can thus be compiled */ |
||||
/* directly on _any_ machine. However, some components of the library */ |
||||
/* provide improved routines for the cases where endianess is known. */ |
||||
/* */ |
||||
/* It usually results in speed-ups and reduced code size. Note that */ |
||||
/* you should not define both of these macros. */ |
||||
/* */ |
||||
/* */ |
||||
/* NOTE: For now, only the scan-line converter (base/ftraster.c) uses */ |
||||
/* these macros to speed-up some anti-alias rendering routines. */ |
||||
/* */ |
||||
#undef FT_CONFIG_OPTION_LITTLE_ENDIAN |
||||
#undef FT_CONFIG_OPTION_BIG_ENDIAN |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Define this configuration macro whenever you want to build a version */ |
||||
/* of FreeType that does not include a default `system' component. */ |
||||
/* */ |
||||
/* Note that this will prevent the compilation of `ftinit', hence the */ |
||||
/* function FT_Init_FreeType */ |
||||
/* */ |
||||
#undef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* The size in bytes of the render pool used by the scan-line */ |
||||
/* converter to do all of its work. */ |
||||
/* */ |
||||
/* This must be greater than 4 Kb */ |
||||
/* */ |
||||
#define FT_RENDER_POOL_SIZE 32768 |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* FT_MAX_DRIVERS */ |
||||
/* */ |
||||
/* The maximum number of font drivers that can be registered in a */ |
||||
/* single FreeType library object. 8 seems to be a good choice due */ |
||||
/* to the relative low actual number of drivers ;-) */ |
||||
/* */ |
||||
#define FT_MAX_DRIVERS 8 |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* FT_MAX_EXTENSIONS */ |
||||
/* */ |
||||
/* The maximum number of extensions that can be registered in a */ |
||||
/* single font driver. 8 seems to be a good choice for now.. */ |
||||
/* */ |
||||
#define FT_MAX_EXTENSIONS 8 |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* FT_MAX_GLYPH_FORMATS */ |
||||
/* */ |
||||
/* The maximum number of glyph image formats that might be registered */ |
||||
/* in a given library instance. 8 seems to be a good choice due to */ |
||||
/* the relatively low number of current formats ;-) */ |
||||
/* */ |
||||
|
||||
#define FT_MAX_GLYPH_FORMATS 8 |
||||
|
||||
|
||||
|
||||
#endif /* FTOPTION_H */ |
@ -1,214 +0,0 @@ |
||||
/**************************************************************************
|
||||
* |
||||
* ftsystem.h 1.0 |
||||
* |
||||
* ANSI-specific FreeType low-level system interface |
||||
* |
||||
* This file contains the definition of interface used by FreeType |
||||
* to access low-level, i.e. memory management, i/o access as well |
||||
* as thread synchronisation.
|
||||
* |
||||
* |
||||
* Copyright 1996-1999 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used
|
||||
* modified and distributed under the terms of the FreeType project
|
||||
* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
* this file you indicate that you have read the license and
|
||||
* understand and accept it fully.
|
||||
*
|
||||
**************************************************************************/ |
||||
|
||||
#include <ftsystem.h> |
||||
#include <fterrors.h> |
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <string.h> |
||||
|
||||
/*********************************************************************/ |
||||
/* */ |
||||
/* MEMORY MANAGEMENT INTERFACE */ |
||||
/* */ |
||||
|
||||
/************************************************************************
|
||||
* |
||||
* <FuncType> |
||||
* FT_Alloc_Func |
||||
* |
||||
* <Description> |
||||
* The memory allocator function type |
||||
* |
||||
* <Input> |
||||
* system :: pointer to the system object |
||||
* size :: requested size in bytes |
||||
* |
||||
* <Output> |
||||
* block :: address of newly allocated block |
||||
* |
||||
* <Return>
|
||||
* Error code. 0 means success. |
||||
* |
||||
* <Note> |
||||
* If your allocation routine ALWAYS zeroes the new block, you |
||||
* should set the flag FT_SYSTEM_FLAG_ALLOC_ZEROES in your system |
||||
* object 'flags' field. |
||||
* |
||||
* If you have set the flag FT_SYSTEM_FLAG_REPORT_CURRENT_ALLOC in |
||||
* your system's "system_flags" field, this function should update |
||||
* the "current_alloc" field of the system object. |
||||
* |
||||
************************************************************************/ |
||||
|
||||
static |
||||
void* ft_alloc( FT_Memory memory, |
||||
long size ) |
||||
{ |
||||
(void)memory; |
||||
return malloc(size); |
||||
} |
||||
|
||||
|
||||
/************************************************************************
|
||||
* |
||||
* <FuncType> |
||||
* FT_Realloc_Func |
||||
* |
||||
* <Description> |
||||
* The memory reallocator function type |
||||
* |
||||
* <Input> |
||||
* system :: pointer to the system object |
||||
* new_size :: new requested size in bytes |
||||
* |
||||
* <InOut> |
||||
* block :: address of block in memory |
||||
* |
||||
* <Return> |
||||
* Error code. 0 means success. |
||||
* |
||||
* <Note> |
||||
* This function is _never_ called when the system flag
|
||||
* FT_SYSTEM_FLAG_NO_REALLOC is set. Instead, the engine will emulate |
||||
* realloc through "alloc" and "free". |
||||
* |
||||
* Note that this is possible due to the fact that FreeType's |
||||
* "FT_Realloc" always requests the _current_ size of the reallocated |
||||
* block as a parameter, thus avoiding memory leaks. |
||||
* |
||||
* If you have set the flag FT_SYSTEM_FLAG_REPORT_CURRENT_ALLOC in |
||||
* your system's "system_flags" field, this function should update |
||||
* the "current_alloc" field of the system object. |
||||
* |
||||
************************************************************************/ |
||||
|
||||
static |
||||
void* ft_realloc( FT_Memory memory, |
||||
long cur_size, |
||||
long new_size, |
||||
void* block ) |
||||
{ |
||||
(void)memory; |
||||
(void)cur_size; |
||||
|
||||
return realloc( block, new_size ); |
||||
} |
||||
|
||||
|
||||
/************************************************************************
|
||||
* |
||||
* <FuncType> |
||||
* FT_Free_Func |
||||
* |
||||
* <Description> |
||||
* The memory release function type |
||||
* |
||||
* <Input> |
||||
* system :: pointer to the system object |
||||
* block :: address of block in memory |
||||
* |
||||
* <Note> |
||||
* If you have set the flag FT_SYSTEM_FLAG_REPORT_CURRENT_ALLOC in |
||||
* your system's "system_flags" field, this function should update |
||||
* the "current_alloc" field of the system object. |
||||
* |
||||
************************************************************************/ |
||||
|
||||
static |
||||
void ft_free( FT_Memory memory, |
||||
void* block ) |
||||
{ |
||||
(void)memory; |
||||
free( block ); |
||||
} |
||||
|
||||
/*********************************************************************/ |
||||
/* */ |
||||
/* RESOURCE MANAGEMENT INTERFACE */ |
||||
/* */ |
||||
|
||||
|
||||
#define STREAM_FILE(stream) ((FILE*)stream->descriptor.pointer) |
||||
|
||||
static |
||||
void ft_close_stream( FT_Stream stream ) |
||||
{ |
||||
fclose( STREAM_FILE(stream) ); |
||||
} |
||||
|
||||
static |
||||
unsigned long ft_io_stream( FT_Stream stream, |
||||
unsigned long offset, |
||||
char* buffer, |
||||
unsigned long count ) |
||||
{ |
||||
FILE* file; |
||||
|
||||
file = STREAM_FILE(stream); |
||||
|
||||
fseek( file, offset, SEEK_SET );
|
||||
return (unsigned long)fread( buffer, 1, count, file ); |
||||
} |
||||
|
||||
|
||||
extern |
||||
int FT_New_Stream( const char* filepathname, |
||||
FT_Stream stream ) |
||||
{ |
||||
FILE* file; |
||||
|
||||
file = fopen( filepathname, "rb" ); |
||||
if (!file) |
||||
return FT_Err_Cannot_Open_Resource; |
||||
|
||||
fseek( file, 0, SEEK_END ); |
||||
stream->size = ftell(file); |
||||
fseek( file, 0, SEEK_SET ); |
||||
|
||||
stream->descriptor.pointer = file; |
||||
stream->pos = 0; |
||||
|
||||
stream->read = ft_io_stream; |
||||
stream->close = ft_close_stream; |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
|
||||
extern |
||||
FT_Memory FT_New_Memory( void ) |
||||
{ |
||||
FT_Memory memory; |
||||
|
||||
memory = (FT_Memory)malloc( sizeof(*memory) ); |
||||
if (memory) |
||||
{ |
||||
memory->user = 0; |
||||
memory->alloc = ft_alloc; |
||||
memory->realloc = ft_realloc; |
||||
memory->free = ft_free; |
||||
} |
||||
return memory; |
||||
} |
||||
|
@ -1,12 +0,0 @@ |
||||
@cd obj |
||||
@LCCLIB /out:freetype.lib *.obj |
||||
@echo The library file `obj/freetype.lib' was generated. |
||||
@exit 0 |
||||
|
||||
; the LCC Librarian has many flaws, one of them is that it *requires* that |
||||
; all object files be placed in the current directory. Another flaw is that |
||||
; it cannot accept a long list of object files. |
||||
; |
||||
; this file is used to build the library file `obj/freetype.lib' |
||||
; |
||||
|
@ -0,0 +1,142 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for Win32 + GCC
|
||||
#* THIS VERSION DISABLES OPTIMIZATIONS FOR DEBUGGING !!
|
||||
#*
|
||||
#* Copyright 1996-2000 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#* Please read the file "freetype/docs/config.txt" to understand
|
||||
#* what this file does..
|
||||
#*
|
||||
#*
|
||||
#* NOTE : This version requires that GNU Make be invoked from the
|
||||
#* Windows Shell (_not_ Cygwin BASH !!)
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := del
|
||||
SEP := /
|
||||
HOSTSEP := $(strip \ )
|
||||
BUILD := $(TOP)/config/win32
|
||||
PLATFORM := win32
|
||||
CC := gcc
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O0 -Wall
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS := -ansi -pedantic
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
# Librarian to use to build the static library
|
||||
#
|
||||
FT_LIBRARIAN := $(AR) -r
|
||||
|
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $(subst $(SEP),$(HOSTSEP),$(FT_LIBRARY)) 2> nul
|
||||
$(FT_LIBRARIAN) $@ $(OBJECTS_LIST)
|
||||
|
||||
endif |
||||
|
@ -0,0 +1,141 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for Win32 + GCC
|
||||
#*
|
||||
#* Copyright 1996-2000 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#* Please read the file "freetype/docs/config.txt" to understand
|
||||
#* what this file does..
|
||||
#*
|
||||
#*
|
||||
#* NOTE : This version requires that GNU Make be invoked from the
|
||||
#* Windows Shell (_not_ Cygwin BASH !!)
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := del
|
||||
SEP := /
|
||||
HOSTSEP := $(strip \ )
|
||||
BUILD := $(TOP)/config/win32
|
||||
PLATFORM := win32
|
||||
CC := gcc
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := o
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := a
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := libfreetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -l
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - beware, there is a space after the 'o' !!
|
||||
#
|
||||
#
|
||||
T := -o
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g -O6 -Wall
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS := -ansi -pedantic
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
# Librarian to use to build the static library
|
||||
#
|
||||
FT_LIBRARIAN := $(AR) -r
|
||||
|
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
-$(DELETE) $(subst $(SEP),$(HOSTSEP),$(FT_LIBRARY)) 2> nul
|
||||
$(FT_LIBRARIAN) $@ $(OBJECTS_LIST)
|
||||
|
||||
endif |
||||
|
@ -0,0 +1,135 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for Win32 + LCC
|
||||
#*
|
||||
#* Copyright 1996-2000 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#* Please read the file "freetype/docs/config.txt" to understand
|
||||
#* what this file does..
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
ifndef TOP |
||||
TOP := .
|
||||
endif |
||||
|
||||
DELETE := del
|
||||
SEP := /
|
||||
HOSTSEP := \\
|
||||
BUILD := $(TOP)$(SEP)config$(SEP)win32
|
||||
PLATFORM := win32
|
||||
CC := lcc
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := obj
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := lib
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := freetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := -I
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := -D
|
||||
|
||||
|
||||
# Target flag - LCC uses "-Fo" instead of "-o ", what a broken compiler
|
||||
#
|
||||
#
|
||||
T := -Fo
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := -Fl
|
||||
|
||||
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := -c -g2 -O
|
||||
endif |
||||
|
||||
# ANSIFLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSIFLAGS :=
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
DIR_OBJ := $(subst /,\\,$(OBJ_DIR))
|
||||
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
lcclnk -o $(subst /,\\,$@) $(subst /,\\,$<)
|
||||
|
||||
endif |
||||
|
||||
|
@ -0,0 +1,127 @@ |
||||
#*******************************************************************
|
||||
#*
|
||||
#* FreeType 2 Configuration rules for Win32 + Visual C++
|
||||
#*
|
||||
#* Copyright 1996-2000 by
|
||||
#* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#*
|
||||
#* This file is part of the FreeType project, and may only be used
|
||||
#* modified and distributed under the terms of the FreeType project
|
||||
#* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
#* this file you indicate that you have read the license and
|
||||
#* understand and accept it fully.
|
||||
#*
|
||||
#* Please read the file "freetype/docs/config.txt" to understand
|
||||
#* what this file does..
|
||||
#*
|
||||
#*******************************************************************
|
||||
|
||||
DELETE := del
|
||||
SEP := /
|
||||
HOSTSEP := $(strip \ )
|
||||
BUILD := $(TOP)$(SEP)config$(SEP)win32
|
||||
PLATFORM := win32
|
||||
CC := cl
|
||||
|
||||
# the directory where all object files are placed
|
||||
#
|
||||
# Note that this is not $(TOP)/obj !!
|
||||
# This lets you build the library in your own directory
|
||||
# with something like :
|
||||
#
|
||||
# set TOP=....../path/to/freetype2/top/dir...
|
||||
# mkdir obj
|
||||
# make -f %TOP%/Makefile setup [options]
|
||||
# make -f %TOP%/Makefile
|
||||
#
|
||||
#
|
||||
OBJ_DIR := obj
|
||||
|
||||
|
||||
# the directory where all library files are placed
|
||||
#
|
||||
# by default, this is the same as OBJ_DIR, however, this can be
|
||||
# changed to suit particular needs..
|
||||
#
|
||||
LIB_DIR := $(OBJ_DIR)
|
||||
|
||||
|
||||
# the object file extension, this can be .o, .tco, .obj, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
O := obj
|
||||
|
||||
# the library file extension, this can be .a, .lib, etc..
|
||||
# depending on the platform
|
||||
#
|
||||
A := lib
|
||||
|
||||
|
||||
# The name of the final library file.
|
||||
# Note that the DOS-specific Makefile uses a shorter (8.3) name
|
||||
#
|
||||
LIBRARY := freetype
|
||||
|
||||
|
||||
# path inclusion flag.
|
||||
#
|
||||
# Some compilers use a different flag than '-I' to specify an
|
||||
# additional include path. Examples are "/i=" or "-J", etc...
|
||||
#
|
||||
I := /I
|
||||
|
||||
|
||||
# The link flag used to specify a given library file on link.
|
||||
# Note that this is only used to compile the demo programs, not
|
||||
# the library itself.
|
||||
#
|
||||
L := /Fl
|
||||
|
||||
|
||||
# C flag used to define a macro before the compilation of a given
|
||||
# source object. Usually is '-D' like in "-DDEBUG"
|
||||
#
|
||||
D := /D
|
||||
|
||||
# Target flag - LCC uses "-Fo" instead of "-o ", what a broken compiler
|
||||
#
|
||||
#
|
||||
T := /Fo
|
||||
|
||||
# C flags
|
||||
#
|
||||
# These should concern :
|
||||
#
|
||||
# - debug output
|
||||
# - optimization
|
||||
# - warnings
|
||||
# - ansi compliance..
|
||||
#
|
||||
ifndef CFLAGS |
||||
CFLAGS := /nologo /c /Ox /G5 /W3 /WX
|
||||
endif |
||||
|
||||
# ANSI_FLAGS : put there the flags used to make your compiler ANSI-compliant
|
||||
# nothing (if it already is by default like LCC).
|
||||
#
|
||||
ANSI_FLAGS := /Za
|
||||
|
||||
ifdef BUILD_FREETYPE |
||||
|
||||
include $(TOP)/config/freetype.mk |
||||
|
||||
clean_freetype: clean_freetype_dos |
||||
distclean_freetype: distclean_freetype_dos |
||||
|
||||
# This final rule is used to link all object files into a single
|
||||
# library. It is part of the system-specific sub-Makefile because not
|
||||
# all librarians accept a simple syntax like :
|
||||
#
|
||||
# librarian library_file {list of object files}
|
||||
#
|
||||
$(FT_LIBRARY): $(OBJECTS_LIST) |
||||
lib /nologo /out:$@ $(OBJECTS_LIST)
|
||||
|
||||
endif |
||||
|
||||
|
Loading…
Reference in new issue