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