123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #ifndef SEEK_SET
- #define SEEK_SET 0
- #endif
- #include <math.h>
- #include <string.h>
- #include <stdlib.h>
- #include "gd.h"
- #include "gdhelpers.h"
- typedef struct fileIOCtx
- {
- gdIOCtx ctx;
- FILE *f;
- } fileIOCtx;
- gdIOCtx *newFileCtx (FILE * f);
- static int fileGetbuf (gdIOCtx *, void *, int);
- static int filePutbuf (gdIOCtx *, const void *, int);
- static void filePutchar (gdIOCtx *, int);
- static int fileGetchar (gdIOCtx * ctx);
- static int fileSeek (struct gdIOCtx *, const int);
- static long fileTell (struct gdIOCtx *);
- static void gdFreeFileCtx (gdIOCtx * ctx);
- gdIOCtx * gdNewFileCtx (FILE * f)
- {
- fileIOCtx *ctx;
- ctx = (fileIOCtx *) gdMalloc(sizeof (fileIOCtx));
- ctx->f = f;
- ctx->ctx.getC = fileGetchar;
- ctx->ctx.putC = filePutchar;
- ctx->ctx.getBuf = fileGetbuf;
- ctx->ctx.putBuf = filePutbuf;
- ctx->ctx.tell = fileTell;
- ctx->ctx.seek = fileSeek;
- ctx->ctx.gd_free = gdFreeFileCtx;
- return (gdIOCtx *) ctx;
- }
- static void gdFreeFileCtx (gdIOCtx * ctx)
- {
- gdFree(ctx);
- }
- static int filePutbuf (gdIOCtx * ctx, const void *buf, int size)
- {
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
- return fwrite(buf, 1, size, fctx->f);
- }
- static int fileGetbuf (gdIOCtx * ctx, void *buf, int size)
- {
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
- return fread(buf, 1, size, fctx->f);
- }
- static void filePutchar (gdIOCtx * ctx, int a)
- {
- unsigned char b;
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
- b = a;
- putc (b, fctx->f);
- }
- static int fileGetchar (gdIOCtx * ctx)
- {
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
- return getc (fctx->f);
- }
- static int fileSeek (struct gdIOCtx *ctx, const int pos)
- {
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
- return (fseek (fctx->f, pos, SEEK_SET) == 0);
- }
- static long fileTell (struct gdIOCtx *ctx)
- {
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
- return ftell (fctx->f);
- }
|