Blame src/gd_io.h

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