Charles.Forsyth20060303a828770d19 years agoHistory
309 lines · 17.7 KB · C
RawDownload
/***************************************************************************//*                                                                         *//*  ftsystem.h                                                             *//*                                                                         *//*    FreeType low-level system interface definition (specification).      *//*                                                                         *//*  Copyright 1996-2001, 2002 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  */  /*    input 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 a          */  /*    @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.                                       */  /*                                                                       */  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.                                               */  /*                                                                       */  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.                             */  /*                                                                       */  /*   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 */