Blame src/gd_io.h

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