Edit

kc3-lang/freetype/include/ftsystem.h

Branch :

  • Show log

    Commit

  • Author : Werner Lemberg
    Date : 2015-01-17 20:41:43
    Hash : f57fc59e
    Message : Run `src/tools/update-copyright'.

  • include/ftsystem.h
  • /***************************************************************************/
    /*                                                                         */
    /*  ftsystem.h                                                             */
    /*                                                                         */
    /*    FreeType low-level system interface definition (specification).      */
    /*                                                                         */
    /*  Copyright 1996-2015 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.                                        */
    /*                                                                         */
    /***************************************************************************/
    
    
    #ifndef __FTSYSTEM_H__
    #define __FTSYSTEM_H__
    
    
    #include <ft2build.h>
    
    
    FT_BEGIN_HEADER
    
    
      /*************************************************************************/
      /*                                                                       */
      /* <Section>                                                             */
      /*   system_interface                                                    */
      /*                                                                       */
      /* <Title>                                                               */
      /*   System Interface                                                    */
      /*                                                                       */
      /* <Abstract>                                                            */
      /*   How FreeType manages memory and i/o.                                */
      /*                                                                       */
      /* <Description>                                                         */
      /*   This section contains various definitions related to memory         */
      /*   management and i/o access.  You need to understand this             */
      /*   information if you want to use a custom memory manager or you own   */
      /*   i/o streams.                                                        */
      /*                                                                       */
      /*************************************************************************/
    
    
      /*************************************************************************/
      /*                                                                       */
      /*                  M E M O R Y   M A N A G E M E N T                    */
      /*                                                                       */
      /*************************************************************************/
    
    
      /*************************************************************************
       *
       * @type:
       *   FT_Memory
       *
       * @description:
       *   A handle to a given memory manager object, defined with an
       *   @FT_MemoryRec structure.
       *
       */
      typedef struct FT_MemoryRec_*  FT_Memory;
    
    
      /*************************************************************************
       *
       * @functype:
       *   FT_Alloc_Func
       *
       * @description:
       *   A function used to allocate `size' bytes from `memory'.
       *
       * @input:
       *   memory ::
       *     A handle to the source memory manager.
       *
       *   size ::
       *     The size in bytes to allocate.
       *
       * @return:
       *   Address of new memory block.  0~in case of failure.
       *
       */
      typedef void*
      (*FT_Alloc_Func)( FT_Memory  memory,
                        long       size );
    
    
      /*************************************************************************
       *
       * @functype:
       *   FT_Free_Func
       *
       * @description:
       *   A function used to release a given block of memory.
       *
       * @input:
       *   memory ::
       *     A handle to the source memory manager.
       *
       *   block ::
       *     The address of the target memory block.
       *
       */
      typedef void
      (*FT_Free_Func)( FT_Memory  memory,
                       void*      block );
    
    
      /*************************************************************************
       *
       * @functype:
       *   FT_Realloc_Func
       *
       * @description:
       *   A function used to re-allocate a given block of memory.
       *
       * @input:
       *   memory ::
       *     A handle to the source memory manager.
       *
       *   cur_size ::
       *     The block's current size in bytes.
       *
       *   new_size ::
       *     The block's requested new size.
       *
       *   block ::
       *     The block's current address.
       *
       * @return:
       *   New block address.  0~in case of memory shortage.
       *
       * @note:
       *   In case of error, the old block must still be available.
       *
       */
      typedef void*
      (*FT_Realloc_Func)( FT_Memory  memory,
                          long       cur_size,
                          long       new_size,
                          void*      block );
    
    
      /*************************************************************************
       *
       * @struct:
       *   FT_MemoryRec
       *
       * @description:
       *   A structure used to describe a given memory manager to FreeType~2.
       *
       * @fields:
       *   user ::
       *     A generic typeless pointer for user data.
       *
       *   alloc ::
       *     A pointer type to an allocation function.
       *
       *   free ::
       *     A pointer type to an memory freeing function.
       *
       *   realloc ::
       *     A pointer type to a reallocation function.
       *
       */
      struct  FT_MemoryRec_
      {
        void*            user;
        FT_Alloc_Func    alloc;
        FT_Free_Func     free;
        FT_Realloc_Func  realloc;
      };
    
    
      /*************************************************************************/
      /*                                                                       */
      /*                       I / O   M A N A G E M E N T                     */
      /*                                                                       */
      /*************************************************************************/
    
    
      /*************************************************************************
       *
       * @type:
       *   FT_Stream
       *
       * @description:
       *   A handle to an input stream.
       *
       * @also:
       *   See @FT_StreamRec for the publicly accessible fields of a given
       *   stream object.
       *
       */
      typedef struct FT_StreamRec_*  FT_Stream;
    
    
      /*************************************************************************
       *
       * @struct:
       *   FT_StreamDesc
       *
       * @description:
       *   A union type used to store either a long or a pointer.  This is used
       *   to store a file descriptor or a `FILE*' in an input stream.
       *
       */
      typedef union  FT_StreamDesc_
      {
        long   value;
        void*  pointer;
    
      } FT_StreamDesc;
    
    
      /*************************************************************************
       *
       * @functype:
       *   FT_Stream_IoFunc
       *
       * @description:
       *   A function used to seek and read data from a given input stream.
       *
       * @input:
       *   stream ::
       *     A handle to the source stream.
       *
       *   offset ::
       *     The offset of read in stream (always from start).
       *
       *   buffer ::
       *     The address of the read buffer.
       *
       *   count ::
       *     The number of bytes to read from the stream.
       *
       * @return:
       *   The number of bytes effectively read by the stream.
       *
       * @note:
       *   This function might be called to perform a seek or skip operation
       *   with a `count' of~0.  A non-zero return value then indicates an
       *   error.
       *
       */
      typedef unsigned long
      (*FT_Stream_IoFunc)( FT_Stream       stream,
                           unsigned long   offset,
                           unsigned char*  buffer,
                           unsigned long   count );
    
    
      /*************************************************************************
       *
       * @functype:
       *   FT_Stream_CloseFunc
       *
       * @description:
       *   A function used to close a given input stream.
       *
       * @input:
       *  stream ::
       *     A handle to the target stream.
       *
       */
      typedef void
      (*FT_Stream_CloseFunc)( FT_Stream  stream );
    
    
      /*************************************************************************
       *
       * @struct:
       *   FT_StreamRec
       *
       * @description:
       *   A structure used to describe an input stream.
       *
       * @input:
       *   base ::
       *     For memory-based streams, this is the address of the first stream
       *     byte in memory.  This field should always be set to NULL for
       *     disk-based streams.
       *
       *   size ::
       *     The stream size in bytes.
       *
       *     In case of compressed streams where the size is unknown before
       *     actually doing the decompression, the value is set to 0x7FFFFFFF. 
       *     (Note that this size value can occur for normal streams also; it is
       *     thus just a hint.)
       *
       *   pos ::
       *     The current position within the stream.
       *
       *   descriptor ::
       *     This field is a union that can hold an integer or a pointer.  It is
       *     used by stream implementations to store file descriptors or `FILE*'
       *     pointers.
       *
       *   pathname ::
       *     This field is completely ignored by FreeType.  However, it is often
       *     useful during debugging to use it to store the stream's filename
       *     (where available).
       *
       *   read ::
       *     The stream's input function.
       *
       *   close ::
       *     The stream's close function.
       *
       *   memory ::
       *     The memory manager to use to preload frames.  This is set
       *     internally by FreeType and shouldn't be touched by stream
       *     implementations.
       *
       *   cursor ::
       *     This field is set and used internally by FreeType when parsing
       *     frames.
       *
       *   limit ::
       *     This field is set and used internally by FreeType when parsing
       *     frames.
       *
       */
      typedef struct  FT_StreamRec_
      {
        unsigned char*       base;
        unsigned long        size;
        unsigned long        pos;
    
        FT_StreamDesc        descriptor;
        FT_StreamDesc        pathname;
        FT_Stream_IoFunc     read;
        FT_Stream_CloseFunc  close;
    
        FT_Memory            memory;
        unsigned char*       cursor;
        unsigned char*       limit;
    
      } FT_StreamRec;
    
      /* */
    
    
    FT_END_HEADER
    
    #endif /* __FTSYSTEM_H__ */
    
    
    /* END */