5172
+ − 1
/***************************************************************************/
+ − 2
/* */
+ − 3
/* ftsystem.h */
+ − 4
/* */
+ − 5
/* FreeType low-level system interface definition (specification). */
+ − 6
/* */
+ − 7
/* Copyright 1996-2001, 2002, 2005, 2010 by */
+ − 8
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+ − 9
/* */
+ − 10
/* This file is part of the FreeType project, and may only be used, */
+ − 11
/* modified, and distributed under the terms of the FreeType project */
+ − 12
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+ − 13
/* this file you indicate that you have read the license and */
+ − 14
/* understand and accept it fully. */
+ − 15
/* */
+ − 16
/***************************************************************************/
+ − 17
+ − 18
+ − 19
#ifndef __FTSYSTEM_H__
+ − 20
#define __FTSYSTEM_H__
+ − 21
+ − 22
+ − 23
#include <ft2build.h>
+ − 24
+ − 25
+ − 26
FT_BEGIN_HEADER
+ − 27
+ − 28
+ − 29
/*************************************************************************/
+ − 30
/* */
+ − 31
/* <Section> */
+ − 32
/* system_interface */
+ − 33
/* */
+ − 34
/* <Title> */
+ − 35
/* System Interface */
+ − 36
/* */
+ − 37
/* <Abstract> */
+ − 38
/* How FreeType manages memory and i/o. */
+ − 39
/* */
+ − 40
/* <Description> */
+ − 41
/* This section contains various definitions related to memory */
+ − 42
/* management and i/o access. You need to understand this */
+ − 43
/* information if you want to use a custom memory manager or you own */
+ − 44
/* i/o streams. */
+ − 45
/* */
+ − 46
/*************************************************************************/
+ − 47
+ − 48
+ − 49
/*************************************************************************/
+ − 50
/* */
+ − 51
/* M E M O R Y M A N A G E M E N T */
+ − 52
/* */
+ − 53
/*************************************************************************/
+ − 54
+ − 55
+ − 56
/*************************************************************************
+ − 57
*
+ − 58
* @type:
+ − 59
* FT_Memory
+ − 60
*
+ − 61
* @description:
+ − 62
* A handle to a given memory manager object, defined with an
+ − 63
* @FT_MemoryRec structure.
+ − 64
*
+ − 65
*/
+ − 66
typedef struct FT_MemoryRec_* FT_Memory;
+ − 67
+ − 68
+ − 69
/*************************************************************************
+ − 70
*
+ − 71
* @functype:
+ − 72
* FT_Alloc_Func
+ − 73
*
+ − 74
* @description:
+ − 75
* A function used to allocate `size' bytes from `memory'.
+ − 76
*
+ − 77
* @input:
+ − 78
* memory ::
+ − 79
* A handle to the source memory manager.
+ − 80
*
+ − 81
* size ::
+ − 82
* The size in bytes to allocate.
+ − 83
*
+ − 84
* @return:
+ − 85
* Address of new memory block. 0~in case of failure.
+ − 86
*
+ − 87
*/
+ − 88
typedef void*
+ − 89
(*FT_Alloc_Func)( FT_Memory memory,
+ − 90
long size );
+ − 91
+ − 92
+ − 93
/*************************************************************************
+ − 94
*
+ − 95
* @functype:
+ − 96
* FT_Free_Func
+ − 97
*
+ − 98
* @description:
+ − 99
* A function used to release a given block of memory.
+ − 100
*
+ − 101
* @input:
+ − 102
* memory ::
+ − 103
* A handle to the source memory manager.
+ − 104
*
+ − 105
* block ::
+ − 106
* The address of the target memory block.
+ − 107
*
+ − 108
*/
+ − 109
typedef void
+ − 110
(*FT_Free_Func)( FT_Memory memory,
+ − 111
void* block );
+ − 112
+ − 113
+ − 114
/*************************************************************************
+ − 115
*
+ − 116
* @functype:
+ − 117
* FT_Realloc_Func
+ − 118
*
+ − 119
* @description:
+ − 120
* A function used to re-allocate a given block of memory.
+ − 121
*
+ − 122
* @input:
+ − 123
* memory ::
+ − 124
* A handle to the source memory manager.
+ − 125
*
+ − 126
* cur_size ::
+ − 127
* The block's current size in bytes.
+ − 128
*
+ − 129
* new_size ::
+ − 130
* The block's requested new size.
+ − 131
*
+ − 132
* block ::
+ − 133
* The block's current address.
+ − 134
*
+ − 135
* @return:
+ − 136
* New block address. 0~in case of memory shortage.
+ − 137
*
+ − 138
* @note:
+ − 139
* In case of error, the old block must still be available.
+ − 140
*
+ − 141
*/
+ − 142
typedef void*
+ − 143
(*FT_Realloc_Func)( FT_Memory memory,
+ − 144
long cur_size,
+ − 145
long new_size,
+ − 146
void* block );
+ − 147
+ − 148
+ − 149
/*************************************************************************
+ − 150
*
+ − 151
* @struct:
+ − 152
* FT_MemoryRec
+ − 153
*
+ − 154
* @description:
+ − 155
* A structure used to describe a given memory manager to FreeType~2.
+ − 156
*
+ − 157
* @fields:
+ − 158
* user ::
+ − 159
* A generic typeless pointer for user data.
+ − 160
*
+ − 161
* alloc ::
+ − 162
* A pointer type to an allocation function.
+ − 163
*
+ − 164
* free ::
+ − 165
* A pointer type to an memory freeing function.
+ − 166
*
+ − 167
* realloc ::
+ − 168
* A pointer type to a reallocation function.
+ − 169
*
+ − 170
*/
+ − 171
struct FT_MemoryRec_
+ − 172
{
+ − 173
void* user;
+ − 174
FT_Alloc_Func alloc;
+ − 175
FT_Free_Func free;
+ − 176
FT_Realloc_Func realloc;
+ − 177
};
+ − 178
+ − 179
+ − 180
/*************************************************************************/
+ − 181
/* */
+ − 182
/* I / O M A N A G E M E N T */
+ − 183
/* */
+ − 184
/*************************************************************************/
+ − 185
+ − 186
+ − 187
/*************************************************************************
+ − 188
*
+ − 189
* @type:
+ − 190
* FT_Stream
+ − 191
*
+ − 192
* @description:
+ − 193
* A handle to an input stream.
+ − 194
*
+ − 195
*/
+ − 196
typedef struct FT_StreamRec_* FT_Stream;
+ − 197
+ − 198
+ − 199
/*************************************************************************
+ − 200
*
+ − 201
* @struct:
+ − 202
* FT_StreamDesc
+ − 203
*
+ − 204
* @description:
+ − 205
* A union type used to store either a long or a pointer. This is used
+ − 206
* to store a file descriptor or a `FILE*' in an input stream.
+ − 207
*
+ − 208
*/
+ − 209
typedef union FT_StreamDesc_
+ − 210
{
+ − 211
long value;
+ − 212
void* pointer;
+ − 213
+ − 214
} FT_StreamDesc;
+ − 215
+ − 216
+ − 217
/*************************************************************************
+ − 218
*
+ − 219
* @functype:
+ − 220
* FT_Stream_IoFunc
+ − 221
*
+ − 222
* @description:
+ − 223
* A function used to seek and read data from a given input stream.
+ − 224
*
+ − 225
* @input:
+ − 226
* stream ::
+ − 227
* A handle to the source stream.
+ − 228
*
+ − 229
* offset ::
+ − 230
* The offset of read in stream (always from start).
+ − 231
*
+ − 232
* buffer ::
+ − 233
* The address of the read buffer.
+ − 234
*
+ − 235
* count ::
+ − 236
* The number of bytes to read from the stream.
+ − 237
*
+ − 238
* @return:
+ − 239
* The number of bytes effectively read by the stream.
+ − 240
*
+ − 241
* @note:
+ − 242
* This function might be called to perform a seek or skip operation
+ − 243
* with a `count' of~0. A non-zero return value then indicates an
+ − 244
* error.
+ − 245
*
+ − 246
*/
+ − 247
typedef unsigned long
+ − 248
(*FT_Stream_IoFunc)( FT_Stream stream,
+ − 249
unsigned long offset,
+ − 250
unsigned char* buffer,
+ − 251
unsigned long count );
+ − 252
+ − 253
+ − 254
/*************************************************************************
+ − 255
*
+ − 256
* @functype:
+ − 257
* FT_Stream_CloseFunc
+ − 258
*
+ − 259
* @description:
+ − 260
* A function used to close a given input stream.
+ − 261
*
+ − 262
* @input:
+ − 263
* stream ::
+ − 264
* A handle to the target stream.
+ − 265
*
+ − 266
*/
+ − 267
typedef void
+ − 268
(*FT_Stream_CloseFunc)( FT_Stream stream );
+ − 269
+ − 270
+ − 271
/*************************************************************************
+ − 272
*
+ − 273
* @struct:
+ − 274
* FT_StreamRec
+ − 275
*
+ − 276
* @description:
+ − 277
* A structure used to describe an input stream.
+ − 278
*
+ − 279
* @input:
+ − 280
* base ::
+ − 281
* For memory-based streams, this is the address of the first stream
+ − 282
* byte in memory. This field should always be set to NULL for
+ − 283
* disk-based streams.
+ − 284
*
+ − 285
* size ::
+ − 286
* The stream size in bytes.
+ − 287
*
+ − 288
* pos ::
+ − 289
* The current position within the stream.
+ − 290
*
+ − 291
* descriptor ::
+ − 292
* This field is a union that can hold an integer or a pointer. It is
+ − 293
* used by stream implementations to store file descriptors or `FILE*'
+ − 294
* pointers.
+ − 295
*
+ − 296
* pathname ::
+ − 297
* This field is completely ignored by FreeType. However, it is often
+ − 298
* useful during debugging to use it to store the stream's filename
+ − 299
* (where available).
+ − 300
*
+ − 301
* read ::
+ − 302
* The stream's input function.
+ − 303
*
+ − 304
* close ::
+ − 305
* The stream's close function.
+ − 306
*
+ − 307
* memory ::
+ − 308
* The memory manager to use to preload frames. This is set
+ − 309
* internally by FreeType and shouldn't be touched by stream
+ − 310
* implementations.
+ − 311
*
+ − 312
* cursor ::
+ − 313
* This field is set and used internally by FreeType when parsing
+ − 314
* frames.
+ − 315
*
+ − 316
* limit ::
+ − 317
* This field is set and used internally by FreeType when parsing
+ − 318
* frames.
+ − 319
*
+ − 320
*/
+ − 321
typedef struct FT_StreamRec_
+ − 322
{
+ − 323
unsigned char* base;
+ − 324
unsigned long size;
+ − 325
unsigned long pos;
+ − 326
+ − 327
FT_StreamDesc descriptor;
+ − 328
FT_StreamDesc pathname;
+ − 329
FT_Stream_IoFunc read;
+ − 330
FT_Stream_CloseFunc close;
+ − 331
+ − 332
FT_Memory memory;
+ − 333
unsigned char* cursor;
+ − 334
unsigned char* limit;
+ − 335
+ − 336
} FT_StreamRec;
+ − 337
+ − 338
+ − 339
/* */
+ − 340
+ − 341
+ − 342
FT_END_HEADER
+ − 343
+ − 344
#endif /* __FTSYSTEM_H__ */
+ − 345
+ − 346
+ − 347
/* END */