/**************************************************************************
 *
 *  ftsystem.h                                                        1.0
 *
 *    FreeType low-level system interface definition
 *
 *    This file contains the definitions of the stream and memory interfaces
 *    used by FreeType.                                                  
 *
 *
 *  Copyright 1996-1999 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

/*************************************************************************
 *
 *                  M E M O R Y   M A N A G E M E N T
 *
 *************************************************************************/

  typedef struct FT_MemoryRec_*  FT_Memory;
  
  typedef void* (*FT_Alloc_Func)( FT_Memory  memory,
                                  long       size );

  typedef void  (*FT_Free_Func)( FT_Memory  memory,
                                 void*      block );

  typedef void* (*FT_Realloc_Func)( FT_Memory  memory,
                                    long       cur_size,
                                    long       new_size,
                                    void*      block );

  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
 *
 *************************************************************************/
  
  typedef union FT_StreamDesc_
  {
    long  value;
    void* pointer;
    
  } FT_StreamDesc;


  typedef struct FT_StreamRec_*  FT_Stream;

  typedef  unsigned long (*FT_Stream_IO)( FT_Stream      stream,
                                          unsigned long  offset,
                                          char*          buffer,
                                          unsigned long  count );

  typedef  void (*FT_Stream_Close)( FT_Stream  stream );

  struct FT_StreamRec_
  {
    char*           base;
    unsigned long   size;
    unsigned long   pos;
    
    FT_StreamDesc   descriptor;
    FT_StreamDesc   pathname;    /* ignored by FreeType - useful for debugging */

    FT_Stream_IO    read;
    FT_Stream_Close close;

    FT_Memory       memory;
    char*           cursor;
    char*           limit;
  };


#endif /* FTSYSTEM_H */
