Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
/***************************************************************************/
2
/*                                                                         */
3
/*  ftmisc.h                                                               */
4
/*                                                                         */
5
/*    Miscellaneous macros for stand-alone rasterizer (specification       */
6
/*    only).                                                               */
7
/*                                                                         */
8
/*  Copyright 2005, 2009, 2010 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
 
31
  /* memset */
32
#include FT_CONFIG_STANDARD_LIBRARY_H
33
 
34
#define FT_BEGIN_HEADER
35
#define FT_END_HEADER
36
 
37
#define FT_LOCAL_DEF( x )   static x
38
 
39
 
40
  /* from include/freetype2/fttypes.h */
41
 
42
  typedef unsigned char  FT_Byte;
43
  typedef signed int     FT_Int;
44
  typedef unsigned int   FT_UInt;
45
  typedef signed long    FT_Long;
46
  typedef unsigned long  FT_ULong;
47
  typedef signed long    FT_F26Dot6;
48
  typedef int            FT_Error;
49
 
50
#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
51
          ( ( (FT_ULong)_x1 << 24 ) |     \
52
            ( (FT_ULong)_x2 << 16 ) |     \
53
            ( (FT_ULong)_x3 <<  8 ) |     \
54
              (FT_ULong)_x4         )
55
 
56
 
57
  /* from include/freetype2/ftsystem.h */
58
 
59
  typedef struct FT_MemoryRec_*  FT_Memory;
60
 
61
  typedef void* (*FT_Alloc_Func)( FT_Memory  memory,
62
                                  long       size );
63
 
64
  typedef void (*FT_Free_Func)( FT_Memory  memory,
65
                                void*      block );
66
 
67
  typedef void* (*FT_Realloc_Func)( FT_Memory  memory,
68
                                    long       cur_size,
69
                                    long       new_size,
70
                                    void*      block );
71
 
72
  typedef struct FT_MemoryRec_
73
  {
74
    void*            user;
75
 
76
    FT_Alloc_Func    alloc;
77
    FT_Free_Func     free;
78
    FT_Realloc_Func  realloc;
79
 
80
  } FT_MemoryRec;
81
 
82
 
83
  /* from src/ftcalc.c */
84
 
85
#if ( defined _WIN32 || defined _WIN64 )
86
 
87
  typedef __int64  FT_Int64;
88
 
89
#else
90
 
91
#include "inttypes.h"
92
 
93
  typedef int64_t  FT_Int64;
94
 
95
#endif
96
 
97
 
98
  static FT_Long
99
  FT_MulDiv( FT_Long  a,
100
             FT_Long  b,
101
             FT_Long  c )
102
  {
103
    FT_Int   s;
104
    FT_Long  d;
105
 
106
 
107
    s = 1;
108
    if ( a < 0 ) { a = -a; s = -1; }
109
    if ( b < 0 ) { b = -b; s = -s; }
110
    if ( c < 0 ) { c = -c; s = -s; }
111
 
112
    d = (FT_Long)( c > 0 ? ( (FT_Int64)a * b + ( c >> 1 ) ) / c
113
                         : 0x7FFFFFFFL );
114
 
115
    return ( s > 0 ) ? d : -d;
116
  }
117
 
118
 
119
  static FT_Long
120
  FT_MulDiv_No_Round( FT_Long  a,
121
                      FT_Long  b,
122
                      FT_Long  c )
123
  {
124
    FT_Int   s;
125
    FT_Long  d;
126
 
127
 
128
    s = 1;
129
    if ( a < 0 ) { a = -a; s = -1; }
130
    if ( b < 0 ) { b = -b; s = -s; }
131
    if ( c < 0 ) { c = -c; s = -s; }
132
 
133
    d = (FT_Long)( c > 0 ? (FT_Int64)a * b / c
134
                         : 0x7FFFFFFFL );
135
 
136
    return ( s > 0 ) ? d : -d;
137
  }
138
 
139
#endif /* __FTMISC_H__ */
140
 
141
 
142
/* END */