ftmisc.h revision f463818dd9146e11105c0572fb119e757eb47768
1/***************************************************************************/
2/*                                                                         */
3/*  ftmisc.h                                                               */
4/*                                                                         */
5/*    Miscellaneous macros for stand-alone rasterizer (specification       */
6/*    only).                                                               */
7/*                                                                         */
8/*  Copyright 2005 by                                                      */
9/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
10/*                                                                         */
11/*  This file is part of the FreeType project, and may only be used        */
12/*  modified and distributed under the terms of the FreeType project       */
13/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
14/*  this file you indicate that you have read the license and              */
15/*  understand and accept it fully.                                        */
16/*                                                                         */
17/***************************************************************************/
18
19
20  /***************************************************/
21  /*                                                 */
22  /* This file is *not* portable!  You have to adapt */
23  /* its definitions to your platform.               */
24  /*                                                 */
25  /***************************************************/
26
27#ifndef __FTMISC_H__
28#define __FTMISC_H__
29
30#include <string.h> /* memset */
31
32#define FT_BEGIN_HEADER
33#define FT_END_HEADER
34
35#define FT_LOCAL_DEF( x )   static x
36
37  /* from include/freetype2/fttypes.h */
38
39  typedef unsigned char  FT_Byte;
40  typedef signed int     FT_Int;
41  typedef unsigned int   FT_UInt;
42  typedef signed long    FT_Long;
43  typedef unsigned long  FT_ULong;
44  typedef signed long    FT_F26Dot6;
45  typedef int            FT_Error;
46
47#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
48          ( ( (FT_ULong)_x1 << 24 ) |     \
49            ( (FT_ULong)_x2 << 16 ) |     \
50            ( (FT_ULong)_x3 <<  8 ) |     \
51              (FT_ULong)_x4         )
52
53
54  /* from src/ftcalc.c */
55
56#include <inttypes.h>
57
58  typedef int64_t  FT_Int64;
59
60  static FT_Long
61  FT_MulDiv( FT_Long  a,
62             FT_Long  b,
63             FT_Long  c )
64  {
65    FT_Int   s;
66    FT_Long  d;
67
68
69    s = 1;
70    if ( a < 0 ) { a = -a; s = -1; }
71    if ( b < 0 ) { b = -b; s = -s; }
72    if ( c < 0 ) { c = -c; s = -s; }
73
74    d = (FT_Long)( c > 0 ? ( (FT_Int64)a * b + ( c >> 1 ) ) / c
75                         : 0x7FFFFFFFL );
76
77    return ( s > 0 ) ? d : -d;
78  }
79
80#endif /* __FTMISC_H__ */
81
82
83/* END */
84