📄 gd_io_file.c
字号:
/* * io_file.c * * Implements the file interface. * * As will all I/O modules, most functions are for local use only (called * via function pointers in the I/O context). * * Most functions are just 'wrappers' for standard file functions. * * Written/Modified 1999, Philip Warner. * *//* For platforms with incomplete ANSI defines. Fortunately, SEEK_SET is defined to be zero by the standard. */#ifndef SEEK_SET#define SEEK_SET 0#endif /* SEEK_SET */#include <math.h>#include <string.h>#include <stdlib.h>#include "gd.h"#include "gdhelpers.h"/* this is used for creating images in main memory */typedef struct fileIOCtx { gdIOCtx ctx; FILE *f; }fileIOCtx;struct fileIOCtx *fileIOCtxPtr;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);/* return data as a dynamic pointer */gdIOCtx *gdNewFileCtx (FILE * f){ fileIOCtx *ctx; ctx = (fileIOCtx *) gdMalloc (sizeof (fileIOCtx)); if (ctx == NULL) { return NULL; } 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.free = gdFreeFileCtx; return (gdIOCtx *) ctx;}staticvoidgdFreeFileCtx (gdIOCtx * ctx){ gdFree (ctx);}static intfilePutbuf (gdIOCtx * ctx, const void *buf, int size){ fileIOCtx *fctx; fctx = (fileIOCtx *) ctx; return fwrite (buf, 1, size, fctx->f);}static intfileGetbuf (gdIOCtx * ctx, void *buf, int size){ fileIOCtx *fctx; fctx = (fileIOCtx *) ctx; return (fread (buf, 1, size, fctx->f));}static voidfilePutchar (gdIOCtx * ctx, int a){ unsigned char b; fileIOCtx *fctx; fctx = (fileIOCtx *) ctx; b = a; putc (b, fctx->f);}static intfileGetchar (gdIOCtx * ctx){ fileIOCtx *fctx; fctx = (fileIOCtx *) ctx; return getc (fctx->f);}static intfileSeek (struct gdIOCtx *ctx, const int pos){ fileIOCtx *fctx; fctx = (fileIOCtx *) ctx; return (fseek (fctx->f, pos, SEEK_SET) == 0);}static longfileTell (struct gdIOCtx *ctx){ fileIOCtx *fctx; fctx = (fileIOCtx *) ctx; return ftell (fctx->f);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -