| /***************************************************************************/ |
| /* */ |
| /* ftmisc.h */ |
| /* */ |
| /* Miscellaneous macros for stand-alone rasterizer (specification */ |
| /* only). */ |
| /* */ |
| /* Copyright 2005, 2009, 2010 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 file is *not* portable! You have to adapt */ |
| /* its definitions to your platform. */ |
| /* */ |
| /***************************************************/ |
| |
| #ifndef __FTMISC_H__ |
| #define __FTMISC_H__ |
| |
| |
| /* memset */ |
| #include "../../include/freetype/config/ftstdlib.h" |
| |
| #define FT_BEGIN_HEADER |
| #define FT_END_HEADER |
| |
| #define FT_LOCAL_DEF( x ) static x |
| |
| |
| /* from include/freetype2/fttypes.h */ |
| |
| typedef unsigned char FT_Byte; |
| typedef signed int FT_Int; |
| typedef unsigned int FT_UInt; |
| typedef signed long FT_Long; |
| typedef unsigned long FT_ULong; |
| typedef signed long FT_F26Dot6; |
| typedef int FT_Error; |
| |
| #define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \ |
| ( ( (FT_ULong)_x1 << 24 ) | \ |
| ( (FT_ULong)_x2 << 16 ) | \ |
| ( (FT_ULong)_x3 << 8 ) | \ |
| (FT_ULong)_x4 ) |
| |
| |
| /* from include/freetype2/ftsystem.h */ |
| |
| typedef struct FT_MemoryRec_* FT_Memory; |
| |
| typedef void* (*FT_Alloc_Func)( FT_Memory memory, |
| long size ); |
| |
| typedef void (*FT_Free_Func)( FT_Memory memory, |
| void* block ); |
| |
| typedef void* (*FT_Realloc_Func)( FT_Memory memory, |
| long cur_size, |
| long new_size, |
| void* block ); |
| |
| typedef struct FT_MemoryRec_ |
| { |
| void* user; |
| |
| FT_Alloc_Func alloc; |
| FT_Free_Func free; |
| FT_Realloc_Func realloc; |
| |
| } FT_MemoryRec; |
| |
| |
| /* from src/ftcalc.c */ |
| |
| #if ( defined _WIN32 || defined _WIN64 ) |
| |
| typedef __int64 FT_Int64; |
| |
| #else |
| |
| #include "inttypes.h" |
| |
| typedef int64_t FT_Int64; |
| |
| #endif |
| |
| |
| static FT_Long |
| FT_MulDiv( FT_Long a, |
| FT_Long b, |
| FT_Long c ) |
| { |
| FT_Int s; |
| FT_Long d; |
| |
| |
| s = 1; |
| if ( a < 0 ) { a = -a; s = -1; } |
| if ( b < 0 ) { b = -b; s = -s; } |
| if ( c < 0 ) { c = -c; s = -s; } |
| |
| d = (FT_Long)( c > 0 ? ( (FT_Int64)a * b + ( c >> 1 ) ) / c |
| : 0x7FFFFFFFL ); |
| |
| return ( s > 0 ) ? d : -d; |
| } |
| |
| |
| static FT_Long |
| FT_MulDiv_No_Round( FT_Long a, |
| FT_Long b, |
| FT_Long c ) |
| { |
| FT_Int s; |
| FT_Long d; |
| |
| |
| s = 1; |
| if ( a < 0 ) { a = -a; s = -1; } |
| if ( b < 0 ) { b = -b; s = -s; } |
| if ( c < 0 ) { c = -c; s = -s; } |
| |
| d = (FT_Long)( c > 0 ? (FT_Int64)a * b / c |
| : 0x7FFFFFFFL ); |
| |
| return ( s > 0 ) ? d : -d; |
| } |
| |
| #endif /* __FTMISC_H__ */ |
| |
| |
| /* END */ |