Subversion Repositories Kolibri OS

Rev

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

  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.