diff options
Diffstat (limited to 'Build/source/libs/gd/gd_io.c')
-rw-r--r-- | Build/source/libs/gd/gd_io.c | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/Build/source/libs/gd/gd_io.c b/Build/source/libs/gd/gd_io.c new file mode 100644 index 00000000000..8d70ceb56e0 --- /dev/null +++ b/Build/source/libs/gd/gd_io.c @@ -0,0 +1,179 @@ + + +/* + * io.c + * + * Implements the simple I/O 'helper' routines. + * + * Not really essential, but these routines were used extensively in GD, + * so they were moved here. They also make IOCtx calls look better... + * + * Written (or, at least, moved) 1999, Philip Warner. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <math.h> +#include <string.h> +#include <stdlib.h> +#include "gd.h" + +/* Use this for commenting out debug-print statements. */ +/* Just use the first '#define' to allow all the prints... */ +/*#define IO_DBG(s) (s) */ +#define IO_DBG(s) + + +/* + * Write out a word to the I/O context pointer + */ +void +Putword (int w, gdIOCtx * ctx) +{ + unsigned char buf[2]; + buf[0] = w & 0xff; + buf[1] = (w / 256) & 0xff; + (ctx->putBuf) (ctx, (char *) buf, 2); +} + +void +Putchar (int c, gdIOCtx * ctx) +{ + (ctx->putC) (ctx, c & 0xff); +} + +void +gdPutC (const unsigned char c, gdIOCtx * ctx) +{ + (ctx->putC) (ctx, c); +} + +void +gdPutWord (int w, gdIOCtx * ctx) +{ + IO_DBG (printf ("Putting word...\n")); + (ctx->putC) (ctx, (unsigned char) (w >> 8)); + (ctx->putC) (ctx, (unsigned char) (w & 0xFF)); + IO_DBG (printf ("put.\n")); +} + +void +gdPutInt (int w, gdIOCtx * ctx) +{ + IO_DBG (printf ("Putting int...\n")); + (ctx->putC) (ctx, (unsigned char) (w >> 24)); + (ctx->putC) (ctx, (unsigned char) ((w >> 16) & 0xFF)); + (ctx->putC) (ctx, (unsigned char) ((w >> 8) & 0xFF)); + (ctx->putC) (ctx, (unsigned char) (w & 0xFF)); + IO_DBG (printf ("put.\n")); +} + +int +gdGetC (gdIOCtx * ctx) +{ + return ((ctx->getC) (ctx)); +} + + + +int +gdGetByte (int *result, gdIOCtx * ctx) +{ + int r; + r = (ctx->getC) (ctx); + if (r == EOF) + { + return 0; + } + *result = r; + return 1; +} + +int +gdGetWord (int *result, gdIOCtx * ctx) +{ + int r; + r = (ctx->getC) (ctx); + if (r == EOF) + { + return 0; + } + *result = r << 8; + r = (ctx->getC) (ctx); + if (r == EOF) + { + return 0; + } + *result += r; + return 1; +} + + +int +gdGetInt (int *result, gdIOCtx * ctx) +{ + int r; + r = (ctx->getC) (ctx); + if (r == EOF) + { + return 0; + } + *result = r << 24; + + r = (ctx->getC) (ctx); + if (r == EOF) + { + return 0; + } + *result += r << 16; + + r = (ctx->getC) (ctx); + if (r == EOF) + { + return 0; + } + *result += r << 8; + + r = (ctx->getC) (ctx); + if (r == EOF) + { + return 0; + } + *result += r; + + return 1; +} + +int +gdPutBuf (const void *buf, int size, gdIOCtx * ctx) +{ + IO_DBG (printf ("Putting buf...\n")); + return (ctx->putBuf) (ctx, buf, size); + IO_DBG (printf ("put.\n")); +} + +int +gdGetBuf (void *buf, int size, gdIOCtx * ctx) +{ + return (ctx->getBuf) (ctx, buf, size); +} + + +int +gdSeek (gdIOCtx * ctx, const int pos) +{ + IO_DBG (printf ("Seeking...\n")); + return ((ctx->seek) (ctx, pos)); + IO_DBG (printf ("Done.\n")); +} + +long +gdTell (gdIOCtx * ctx) +{ + IO_DBG (printf ("Telling...\n")); + return ((ctx->tell) (ctx)); + IO_DBG (printf ("told.\n")); +} |