forked from minhngoc25a/freetype2
309 lines
18 KiB
C
309 lines
18 KiB
C
/***************************************************************************/
|
|
/* */
|
|
/* 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. */
|
|
/* */
|
|
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_END_HEADER
|
|
|
|
#endif /* __FTSYSTEM_H__ */
|
|
|
|
|
|
/* END */
|