topical media & game development

talk show tell print

lib-of-vs-libs-free-type-2.1.4-include-freetype2-freetype-ftsysio.h / h



  ifndef __FT_SYSTEM_IO_H__
  define __FT_SYSTEM_IO_H__
  
   
*********************************************************************

  
   
*********************************************************************

  
   
*** ****

  
   
*** NOTE: THE CONTENT OF THIS FILE IS NOT CURRENTLY USED ****

  
   
*** IN NORMAL BUILDS. CONSIDER IT EXPERIMENTAL. ****

  
   
*** ****

  
   
*********************************************************************

  
   
*********************************************************************

  
  
   
****************************************************************** designing custom streams is a bit different now

  
  
  include <ft2build.h>
  include FT_INTERNAL_OBJECT_H
  
  FT_BEGIN_HEADER
  
   /*@*******************************************************************
    *
    * @type: FT_Stream
    *
    * @description:
    *   handle to an input stream object. These are also @FT_Object handles
    */
    typedef struct FT_StreamRec_*    FT_Stream;
  
   /*@*******************************************************************
    *
    * @type: FT_Stream_Class
    *
    * @description:
    *   opaque handle to a @FT_Stream_ClassRec class structure describing
    *   the methods of input streams
    */
    typedef const struct FT_Stream_ClassRec_*   FT_Stream_Class;
  
   /*@*******************************************************************
    *
    * @functype: FT_Stream_ReadFunc
    *
    * @description:
    *   a method used to read bytes from an input stream into memory
    *
    * @input:
    *   stream  :: target stream handle
    *   buffer  :: target buffer address
    *   size    :: number of bytes to read
    *
    * @return:
    *   number of bytes effectively read. Must be <= 'size'.
    */
    typedef FT_ULong  (*FT_Stream_ReadFunc)( FT_Stream   stream,
                                             FT_Byte*    buffer,
                                             FT_ULong    size );
  
   /*@*******************************************************************
    *
    * @functype: FT_Stream_SeekFunc
    *
    * @description:
    *   a method used to seek to a new position within a stream
    *
    * @input:
    *   stream  :: target stream handle
    *   pos     :: new read position, from start of stream
    *
    * @return:
    *   error code. 0 means success
    */
    typedef FT_Error  (*FT_Stream_SeekFunc)( FT_Stream   stream,
                                             FT_ULong    pos );
  
   /*@*******************************************************************
    *
    * @struct: FT_Stream_ClassRec
    *
    * @description:
    *   a structure used to describe an input stream class
    *
    * @input:
    *   clazz       :: root @FT_ClassRec fields
    *   stream_read :: stream byte read method
    *   stream_seek :: stream seek method
    */
    typedef struct FT_Stream_ClassRec_
    {
      FT_ClassRec          clazz;
      FT_Stream_ReadFunc   stream_read;
      FT_Stream_SeekFunc   stream_seek;
  
    } FT_Stream_ClassRec;
  
   /* */
  
  define  FT_STREAM_CLASS(x)        ((FT_Stream_Class)(x))
  define  FT_STREAM_CLASS__READ(x)  FT_STREAM_CLASS(x)->stream_read
  define  FT_STREAM_CLASS__SEEK(x)  FT_STREAM_CLASS(x)->stream_seek;
  
   /*@*******************************************************************
    *
    * @struct: FT_StreamRec
    *
    * @description:
    *   the input stream object structure. See @FT_Stream_ClassRec for
    *   its class descriptor
    *
    * @fields:
    *   object      :: root @FT_ObjectRec fields
    *   size        :: size of stream in bytes (0 if unknown)
    *   pos         :: current position within stream
    *   base        :: for memory-based streams, the address of the stream's
    *                  first data byte in memory. NULL otherwise
    *
    *   cursor      :: the current cursor position within an input stream
    *                  frame. Only valid within a FT_FRAME_ENTER .. FT_FRAME_EXIT
    *                  block; NULL otherwise
    *
    *   limit       :: the current frame limit within a FT_FRAME_ENTER ..
    *                  FT_FRAME_EXIT block. NULL otherwise
    */
    typedef struct FT_StreamRec_
    {
      FT_ObjectRec        object;
      FT_ULong            size;
      FT_ULong            pos;
      const FT_Byte*      base;
      const FT_Byte*      cursor;
      const FT_Byte*      limit;
  
    } FT_StreamRec;
  
   /* some useful macros */
  define  FT_STREAM(x)    ((FT_Stream)(x))
  define  FT_STREAM_P(x)  ((FT_Stream*)(x))
  
  define  FT_STREAM__READ(x)  FT_STREAM_CLASS__READ(FT_OBJECT__CLASS(x))
  define  FT_STREAM__SEEK(x)  FT_STREAM_CLASS__SEEK(FT_OBJECT__CLASS(x))
  
  define  FT_STREAM_IS_BASED(x)  ( FT_STREAM(x)->base != NULL )
  
   /* */
  
   /* create new memory-based stream */
    FT_BASE( FT_Error )   ft_stream_new_memory( const FT_Byte*  stream_base,
                                                FT_ULong        stream_size,
                                                FT_Memory       memory,
                                                FT_Stream      *astream );
  
    FT_BASE( FT_Error )   ft_stream_new_iso( const char*  pathanme,
                                             FT_Memory    memory,
                                             FT_Stream   *astream );
  
   /* handle to default stream class implementation for a given build */
   /* this is used by "FT_New_Face"                                   */
   /*                                                                 */
    FT_APIVAR( FT_Type )   ft_stream_default_type;
  
  FT_END_HEADER
  
  endif /* __FT_SYSTEM_STREAM_H__ */
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.