|
Packit |
ed3af9 |
#ifdef __cplusplus
|
|
Packit |
ed3af9 |
extern "C" {
|
|
Packit |
ed3af9 |
#endif
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#ifndef GD_IO_H
|
|
Packit |
ed3af9 |
#define GD_IO_H 1
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#include <stdio.h>
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#ifdef VMS
|
|
Packit |
ed3af9 |
# define Putchar gdPutchar
|
|
Packit |
ed3af9 |
#endif
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
/*
|
|
Packit |
ed3af9 |
Group: Types
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
typedef: gdIOCtx
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
gdIOCtx structures hold function pointers for doing image IO.
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
Most of the gd functions that read and write files, such as
|
|
Packit |
ed3af9 |
<gdImagePng> also have variants that accept a <gdIOCtx> structure;
|
|
Packit |
ed3af9 |
see <gdImagePngCtx> and <gdImageCreateFromJpegCtx>.
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
Those who wish to provide their own custom routines to read and
|
|
Packit |
ed3af9 |
write images can populate a gdIOCtx structure with functions of
|
|
Packit |
ed3af9 |
their own devising to to read and write data. For image reading, the
|
|
Packit |
ed3af9 |
only mandatory functions are getC and getBuf, which must return the
|
|
Packit |
ed3af9 |
number of characters actually read, or a negative value on error or
|
|
Packit |
ed3af9 |
EOF. These functions must read the number of characters requested
|
|
Packit |
ed3af9 |
unless at the end of the file.
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
For image writing, the only mandatory functions are putC and putBuf,
|
|
Packit |
ed3af9 |
which return the number of characters written; these functions must
|
|
Packit |
ed3af9 |
write the number of characters requested except in the event of an
|
|
Packit |
ed3af9 |
error. The seek and tell functions are only required in conjunction
|
|
Packit |
ed3af9 |
with the gd2 file format, which supports quick loading of partial
|
|
Packit |
ed3af9 |
images. The gd_free function will not be invoked when calling the
|
|
Packit |
ed3af9 |
standard Ctx functions; it is an implementation convenience when
|
|
Packit |
ed3af9 |
adding new data types to gd. For examples, see gd_png.c, gd_gd2.c,
|
|
Packit |
ed3af9 |
gd_jpeg.c, etc., all of which rely on gdIOCtx to implement the
|
|
Packit |
ed3af9 |
standard image read and write functions.
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
> typedef struct gdIOCtx
|
|
Packit |
ed3af9 |
> {
|
|
Packit |
ed3af9 |
> int (*getC) (struct gdIOCtx *);
|
|
Packit |
ed3af9 |
> int (*getBuf) (struct gdIOCtx *, void *, int wanted);
|
|
Packit |
ed3af9 |
>
|
|
Packit |
ed3af9 |
> void (*putC) (struct gdIOCtx *, int);
|
|
Packit |
ed3af9 |
> int (*putBuf) (struct gdIOCtx *, const void *, int wanted);
|
|
Packit |
ed3af9 |
>
|
|
Packit |
ed3af9 |
> // seek must return 1 on SUCCESS, 0 on FAILURE. Unlike fseek!
|
|
Packit |
ed3af9 |
> int (*seek) (struct gdIOCtx *, const int);
|
|
Packit |
ed3af9 |
> long (*tell) (struct gdIOCtx *);
|
|
Packit |
ed3af9 |
>
|
|
Packit |
ed3af9 |
> void (*gd_free) (struct gdIOCtx *);
|
|
Packit |
ed3af9 |
> } gdIOCtx;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
*/
|
|
Packit |
ed3af9 |
typedef struct gdIOCtx {
|
|
Packit |
ed3af9 |
int (*getC)(struct gdIOCtx *);
|
|
Packit |
ed3af9 |
int (*getBuf)(struct gdIOCtx *, void *, int);
|
|
Packit |
ed3af9 |
void (*putC)(struct gdIOCtx *, int);
|
|
Packit |
ed3af9 |
int (*putBuf)(struct gdIOCtx *, const void *, int);
|
|
Packit |
ed3af9 |
/* seek must return 1 on SUCCESS, 0 on FAILURE. Unlike fseek! */
|
|
Packit |
ed3af9 |
int (*seek)(struct gdIOCtx *, const int);
|
|
Packit |
ed3af9 |
long (*tell)(struct gdIOCtx *);
|
|
Packit |
ed3af9 |
void (*gd_free)(struct gdIOCtx *);
|
|
Packit |
ed3af9 |
void *data;
|
|
Packit |
ed3af9 |
} gdIOCtx;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
typedef struct gdIOCtx *gdIOCtxPtr;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
void Putword(int w, gdIOCtx *ctx);
|
|
Packit |
ed3af9 |
void Putchar(int c, gdIOCtx *ctx);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
void gdPutC(const unsigned char c, gdIOCtx *ctx);
|
|
Packit |
ed3af9 |
int gdPutBuf(const void *, int, gdIOCtx *);
|
|
Packit |
ed3af9 |
void gdPutWord(int w, gdIOCtx *ctx);
|
|
Packit |
ed3af9 |
void gdPutInt(int w, gdIOCtx *ctx);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
int gdGetC(gdIOCtx *ctx);
|
|
Packit |
ed3af9 |
int gdGetBuf(void *, int, gdIOCtx *);
|
|
Packit |
ed3af9 |
int gdGetByte(int *result, gdIOCtx *ctx);
|
|
Packit |
ed3af9 |
int gdGetWord(int *result, gdIOCtx *ctx);
|
|
Packit |
ed3af9 |
int gdGetWordLSB(signed short int *result, gdIOCtx *ctx);
|
|
Packit |
ed3af9 |
int gdGetInt(int *result, gdIOCtx *ctx);
|
|
Packit |
ed3af9 |
int gdGetIntLSB(signed int *result, gdIOCtx *ctx);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
int gdSeek(gdIOCtx *ctx, const int offset);
|
|
Packit |
ed3af9 |
long gdTell(gdIOCtx *ctx);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#endif
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#ifdef __cplusplus
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
#endif
|