Home | History | Annotate | Download | only in freetype
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  ftsystem.h                                                             */
      4 /*                                                                         */
      5 /*    FreeType low-level system interface definition (specification).      */
      6 /*                                                                         */
      7 /*  Copyright 1996-2001, 2002, 2005, 2010 by                               */
      8 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
      9 /*                                                                         */
     10 /*  This file is part of the FreeType project, and may only be used,       */
     11 /*  modified, and distributed under the terms of the FreeType project      */
     12 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
     13 /*  this file you indicate that you have read the license and              */
     14 /*  understand and accept it fully.                                        */
     15 /*                                                                         */
     16 /***************************************************************************/
     17 
     18 
     19 #ifndef __FTSYSTEM_H__
     20 #define __FTSYSTEM_H__
     21 
     22 
     23 #include <ft2build.h>
     24 
     25 
     26 FT_BEGIN_HEADER
     27 
     28 
     29   /*************************************************************************/
     30   /*                                                                       */
     31   /* <Section>                                                             */
     32   /*   system_interface                                                    */
     33   /*                                                                       */
     34   /* <Title>                                                               */
     35   /*   System Interface                                                    */
     36   /*                                                                       */
     37   /* <Abstract>                                                            */
     38   /*   How FreeType manages memory and i/o.                                */
     39   /*                                                                       */
     40   /* <Description>                                                         */
     41   /*   This section contains various definitions related to memory         */
     42   /*   management and i/o access.  You need to understand this             */
     43   /*   information if you want to use a custom memory manager or you own   */
     44   /*   i/o streams.                                                        */
     45   /*                                                                       */
     46   /*************************************************************************/
     47 
     48 
     49   /*************************************************************************/
     50   /*                                                                       */
     51   /*                  M E M O R Y   M A N A G E M E N T                    */
     52   /*                                                                       */
     53   /*************************************************************************/
     54 
     55 
     56   /*************************************************************************
     57    *
     58    * @type:
     59    *   FT_Memory
     60    *
     61    * @description:
     62    *   A handle to a given memory manager object, defined with an
     63    *   @FT_MemoryRec structure.
     64    *
     65    */
     66   typedef struct FT_MemoryRec_*  FT_Memory;
     67 
     68 
     69   /*************************************************************************
     70    *
     71    * @functype:
     72    *   FT_Alloc_Func
     73    *
     74    * @description:
     75    *   A function used to allocate `size' bytes from `memory'.
     76    *
     77    * @input:
     78    *   memory ::
     79    *     A handle to the source memory manager.
     80    *
     81    *   size ::
     82    *     The size in bytes to allocate.
     83    *
     84    * @return:
     85    *   Address of new memory block.  0~in case of failure.
     86    *
     87    */
     88   typedef void*
     89   (*FT_Alloc_Func)( FT_Memory  memory,
     90                     long       size );
     91 
     92 
     93   /*************************************************************************
     94    *
     95    * @functype:
     96    *   FT_Free_Func
     97    *
     98    * @description:
     99    *   A function used to release a given block of memory.
    100    *
    101    * @input:
    102    *   memory ::
    103    *     A handle to the source memory manager.
    104    *
    105    *   block ::
    106    *     The address of the target memory block.
    107    *
    108    */
    109   typedef void
    110   (*FT_Free_Func)( FT_Memory  memory,
    111                    void*      block );
    112 
    113 
    114   /*************************************************************************
    115    *
    116    * @functype:
    117    *   FT_Realloc_Func
    118    *
    119    * @description:
    120    *   A function used to re-allocate a given block of memory.
    121    *
    122    * @input:
    123    *   memory ::
    124    *     A handle to the source memory manager.
    125    *
    126    *   cur_size ::
    127    *     The block's current size in bytes.
    128    *
    129    *   new_size ::
    130    *     The block's requested new size.
    131    *
    132    *   block ::
    133    *     The block's current address.
    134    *
    135    * @return:
    136    *   New block address.  0~in case of memory shortage.
    137    *
    138    * @note:
    139    *   In case of error, the old block must still be available.
    140    *
    141    */
    142   typedef void*
    143   (*FT_Realloc_Func)( FT_Memory  memory,
    144                       long       cur_size,
    145                       long       new_size,
    146                       void*      block );
    147 
    148 
    149   /*************************************************************************
    150    *
    151    * @struct:
    152    *   FT_MemoryRec
    153    *
    154    * @description:
    155    *   A structure used to describe a given memory manager to FreeType~2.
    156    *
    157    * @fields:
    158    *   user ::
    159    *     A generic typeless pointer for user data.
    160    *
    161    *   alloc ::
    162    *     A pointer type to an allocation function.
    163    *
    164    *   free ::
    165    *     A pointer type to an memory freeing function.
    166    *
    167    *   realloc ::
    168    *     A pointer type to a reallocation function.
    169    *
    170    */
    171   struct  FT_MemoryRec_
    172   {
    173     void*            user;
    174     FT_Alloc_Func    alloc;
    175     FT_Free_Func     free;
    176     FT_Realloc_Func  realloc;
    177   };
    178 
    179 
    180   /*************************************************************************/
    181   /*                                                                       */
    182   /*                       I / O   M A N A G E M E N T                     */
    183   /*                                                                       */
    184   /*************************************************************************/
    185 
    186 
    187   /*************************************************************************
    188    *
    189    * @type:
    190    *   FT_Stream
    191    *
    192    * @description:
    193    *   A handle to an input stream.
    194    *
    195    */
    196   typedef struct FT_StreamRec_*  FT_Stream;
    197 
    198 
    199   /*************************************************************************
    200    *
    201    * @struct:
    202    *   FT_StreamDesc
    203    *
    204    * @description:
    205    *   A union type used to store either a long or a pointer.  This is used
    206    *   to store a file descriptor or a `FILE*' in an input stream.
    207    *
    208    */
    209   typedef union  FT_StreamDesc_
    210   {
    211     long   value;
    212     void*  pointer;
    213 
    214   } FT_StreamDesc;
    215 
    216 
    217   /*************************************************************************
    218    *
    219    * @functype:
    220    *   FT_Stream_IoFunc
    221    *
    222    * @description:
    223    *   A function used to seek and read data from a given input stream.
    224    *
    225    * @input:
    226    *   stream ::
    227    *     A handle to the source stream.
    228    *
    229    *   offset ::
    230    *     The offset of read in stream (always from start).
    231    *
    232    *   buffer ::
    233    *     The address of the read buffer.
    234    *
    235    *   count ::
    236    *     The number of bytes to read from the stream.
    237    *
    238    * @return:
    239    *   The number of bytes effectively read by the stream.
    240    *
    241    * @note:
    242    *   This function might be called to perform a seek or skip operation
    243    *   with a `count' of~0.  A non-zero return value then indicates an
    244    *   error.
    245    *
    246    */
    247   typedef unsigned long
    248   (*FT_Stream_IoFunc)( FT_Stream       stream,
    249                        unsigned long   offset,
    250                        unsigned char*  buffer,
    251                        unsigned long   count );
    252 
    253 
    254   /*************************************************************************
    255    *
    256    * @functype:
    257    *   FT_Stream_CloseFunc
    258    *
    259    * @description:
    260    *   A function used to close a given input stream.
    261    *
    262    * @input:
    263    *  stream ::
    264    *     A handle to the target stream.
    265    *
    266    */
    267   typedef void
    268   (*FT_Stream_CloseFunc)( FT_Stream  stream );
    269 
    270 
    271   /*************************************************************************
    272    *
    273    * @struct:
    274    *   FT_StreamRec
    275    *
    276    * @description:
    277    *   A structure used to describe an input stream.
    278    *
    279    * @input:
    280    *   base ::
    281    *     For memory-based streams, this is the address of the first stream
    282    *     byte in memory.  This field should always be set to NULL for
    283    *     disk-based streams.
    284    *
    285    *   size ::
    286    *     The stream size in bytes.
    287    *
    288    *   pos ::
    289    *     The current position within the stream.
    290    *
    291    *   descriptor ::
    292    *     This field is a union that can hold an integer or a pointer.  It is
    293    *     used by stream implementations to store file descriptors or `FILE*'
    294    *     pointers.
    295    *
    296    *   pathname ::
    297    *     This field is completely ignored by FreeType.  However, it is often
    298    *     useful during debugging to use it to store the stream's filename
    299    *     (where available).
    300    *
    301    *   read ::
    302    *     The stream's input function.
    303    *
    304    *   close ::
    305    *     The stream's close function.
    306    *
    307    *   memory ::
    308    *     The memory manager to use to preload frames.  This is set
    309    *     internally by FreeType and shouldn't be touched by stream
    310    *     implementations.
    311    *
    312    *   cursor ::
    313    *     This field is set and used internally by FreeType when parsing
    314    *     frames.
    315    *
    316    *   limit ::
    317    *     This field is set and used internally by FreeType when parsing
    318    *     frames.
    319    *
    320    */
    321   typedef struct  FT_StreamRec_
    322   {
    323     unsigned char*       base;
    324     unsigned long        size;
    325     unsigned long        pos;
    326 
    327     FT_StreamDesc        descriptor;
    328     FT_StreamDesc        pathname;
    329     FT_Stream_IoFunc     read;
    330     FT_Stream_CloseFunc  close;
    331 
    332     FT_Memory            memory;
    333     unsigned char*       cursor;
    334     unsigned char*       limit;
    335 
    336   } FT_StreamRec;
    337 
    338 
    339   /* */
    340 
    341 
    342 FT_END_HEADER
    343 
    344 #endif /* __FTSYSTEM_H__ */
    345 
    346 
    347 /* END */
    348