1#ifdef __cplusplus
2extern "C" {
3#endif
4
5#ifndef GD_IO_H
6#define GD_IO_H 1
7
8#include <stdio.h>
9
10#ifdef VMS
11# define Putchar gdPutchar
12#endif
13
14/*
15 Group: Types
16
17 typedef: gdIOCtx
18
19 gdIOCtx structures hold function pointers for doing image IO.
20
21 Most of the gd functions that read and write files, such as
22 <gdImagePng> also have variants that accept a <gdIOCtx> structure;
23 see <gdImagePngCtx> and <gdImageCreateFromJpegCtx>.
24
25 Those who wish to provide their own custom routines to read and
26 write images can populate a gdIOCtx structure with functions of
27 their own devising to to read and write data. For image reading, the
28 only mandatory functions are getC and getBuf, which must return the
29 number of characters actually read, or a negative value on error or
30 EOF. These functions must read the number of characters requested
31 unless at the end of the file.
32
33 For image writing, the only mandatory functions are putC and putBuf,
34 which return the number of characters written; these functions must
35 write the number of characters requested except in the event of an
36 error. The seek and tell functions are only required in conjunction
37 with the gd2 file format, which supports quick loading of partial
38 images. The gd_free function will not be invoked when calling the
39 standard Ctx functions; it is an implementation convenience when
40 adding new data types to gd. For examples, see gd_png.c, gd_gd2.c,
41 gd_jpeg.c, etc., all of which rely on gdIOCtx to implement the
42 standard image read and write functions.
43
44 > typedef struct gdIOCtx
45 > {
46 > int (*getC) (struct gdIOCtx *);
47 > int (*getBuf) (struct gdIOCtx *, void *, int wanted);
48 >
49 > void (*putC) (struct gdIOCtx *, int);
50 > int (*putBuf) (struct gdIOCtx *, const void *, int wanted);
51 >
52 > // seek must return 1 on SUCCESS, 0 on FAILURE. Unlike fseek!
53 > int (*seek) (struct gdIOCtx *, const int);
54 > long (*tell) (struct gdIOCtx *);
55 >
56 > void (*gd_free) (struct gdIOCtx *);
57 > } gdIOCtx;
58
59
60
61
62 */
63typedef struct gdIOCtx {
64 int (*getC)(struct gdIOCtx *);
65 int (*getBuf)(struct gdIOCtx *, void *, int);
66 void (*putC)(struct gdIOCtx *, int);
67 int (*putBuf)(struct gdIOCtx *, const void *, int);
68 /* seek must return 1 on SUCCESS, 0 on FAILURE. Unlike fseek! */
69 int (*seek)(struct gdIOCtx *, const int);
70 long (*tell)(struct gdIOCtx *);
71 void (*gd_free)(struct gdIOCtx *);
72 void *data;
73} gdIOCtx;
74
75typedef struct gdIOCtx *gdIOCtxPtr;
76
77void Putword(int w, gdIOCtx *ctx);
78void Putchar(int c, gdIOCtx *ctx);
79
80void gdPutC(const unsigned char c, gdIOCtx *ctx);
81int gdPutBuf(const void *, int, gdIOCtx *);
82void gdPutWord(int w, gdIOCtx *ctx);
83void gdPutInt(int w, gdIOCtx *ctx);
84
85int gdGetC(gdIOCtx *ctx);
86int gdGetBuf(void *, int, gdIOCtx *);
87int gdGetByte(int *result, gdIOCtx *ctx);
88int gdGetWord(int *result, gdIOCtx *ctx);
89int gdGetWordLSB(signed short int *result, gdIOCtx *ctx);
90int gdGetInt(int *result, gdIOCtx *ctx);
91int gdGetIntLSB(signed int *result, gdIOCtx *ctx);
92
93int gdSeek(gdIOCtx *ctx, const int offset);
94long gdTell(gdIOCtx *ctx);
95
96#endif
97
98#ifdef __cplusplus
99}
100#endif
101