text: /***************************************************************************/
  /*                                                                         */
  /*  ftmisc.h                                                               */
  /*                                                                         */
  /*    Miscellaneous macros for stand-alone rasterizer (specification       */
  /*    only).                                                               */
  /*                                                                         */
  /*  Copyright 2005, 2009 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 FT_CONFIG_STANDARD_LIBRARY_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 */
  
  #include <inttypes.h>
  
    typedef int64_t  FT_Int64;
  
    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;
    }
  
  #endif /* __FTMISC_H__ */
  
  
  /* END */
  