# HG changeset patch # User Matti Hamalainen # Date 1349067068 -10800 # Node ID c560703e85ed9551d95ddf060394f23a8592f7fa # Parent 76a7d469eab98ef9b623f7d974f2d0278a4aa43b Add resource writing functions (only work for stdio backend) diff -r 76a7d469eab9 -r c560703e85ed Makefile.gen --- a/Makefile.gen Mon Oct 01 07:09:37 2012 +0300 +++ b/Makefile.gen Mon Oct 01 07:51:08 2012 +0300 @@ -174,8 +174,8 @@ DMLIB_A=$(OBJPATH)dmlib.a DMLIB_OBJS += dmfile.o dmlib.o dmlerp.o dmstring.o \ - dmargs.o dmvecmat.o dmperlin.o dmimage.o dmres.o \ - dmsimple.o + dmargs.o dmvecmat.o dmperlin.o dmimage.o \ + dmres.o dmresw.o dmsimple.o ifeq ($(DM_BUILD_TESTS),yes) BINARIES += vecmattest fptest diff -r 76a7d469eab9 -r c560703e85ed dmres.c --- a/dmres.c Mon Oct 01 07:09:37 2012 +0300 +++ b/dmres.c Mon Oct 01 07:51:08 2012 +0300 @@ -228,6 +228,14 @@ } +static int dm_stdio_fputc(int v, DMResource * f) +{ + int ret = fputc(v, f->fh); + f->error = dmGetErrno(); + return ret; +} + + static size_t dm_stdio_fread(void *ptr, size_t size, size_t nmemb, DMResource * f) { size_t ret = fread(ptr, size, nmemb, f->fh); @@ -236,6 +244,14 @@ } +static size_t dm_stdio_fwrite(void *ptr, size_t size, size_t nmemb, DMResource * f) +{ + size_t ret = fwrite(ptr, size, nmemb, f->fh); + f->error = dmGetErrno(); + return ret; +} + + static int dm_stdio_preload(DMResource *handle) { int ret = dm_stdio_fopen(handle); @@ -263,7 +279,9 @@ dm_stdio_ftell, dm_stdio_feof, dm_stdio_fgetc, + dm_stdio_fputc, dm_stdio_fread, + dm_stdio_fwrite, dm_stdio_fopen, dm_stdio_fclose, @@ -278,7 +296,9 @@ dm_stdio_ftell, dm_stdio_feof, dm_stdio_fgetc, + dm_stdio_fputc, dm_stdio_fread, + dm_stdio_fwrite, NULL, NULL, @@ -484,7 +504,9 @@ dm_mem_ftell, dm_mem_feof, dm_mem_fgetc, + NULL, dm_mem_fread, + NULL, NULL, dm_mem_fclose, @@ -500,7 +522,9 @@ dm_mem_ftell, dm_mem_feof, dm_mem_fgetc, + NULL, dm_mem_fread, + NULL, NULL, NULL, diff -r 76a7d469eab9 -r c560703e85ed dmres.h --- a/dmres.h Mon Oct 01 07:09:37 2012 +0300 +++ b/dmres.h Mon Oct 01 07:51:08 2012 +0300 @@ -94,7 +94,9 @@ off_t (*ftell)(DMResource *); BOOL (*feof)(DMResource *); int (*fgetc)(DMResource *); + int (*fputc)(int, DMResource *); size_t (*fread)(void *, const size_t, const size_t, DMResource *); + size_t (*fwrite)(void *, const size_t, const size_t, DMResource *); int (*fopen)(DMResource *); void (*fclose)(DMResource *); @@ -135,7 +137,9 @@ off_t dmftell(DMResource *); BOOL dmfeof(DMResource *); int dmfgetc(DMResource *); +int dmfputc(int, DMResource *); size_t dmfread(void *, const size_t, const size_t, DMResource *); +size_t dmfwrite(void *, const size_t, const size_t, DMResource *); // Specialized functions for endianess based reading etc diff -r 76a7d469eab9 -r c560703e85ed dmresw.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dmresw.c Mon Oct 01 07:51:08 2012 +0300 @@ -0,0 +1,35 @@ +/* + * DMLib + * -- Resource management + * Programmed and designed by Matti 'ccr' Hamalainen + * (C) Copyright 2011-2012 Tecnic Software productions (TNSP) + */ +#include "dmresw.h" + +/* Helper resource access routines + */ +int dmf_write_str(DMResource *f, Uint8 *s, size_t l) +{ + return dmfwrite(s, sizeof(Uint8), l, f) == l; +} + + +#define DM_DEFINE_FUNC(xname, xtype, xmacro) \ +BOOL dmf_write_ ## xname (DMResource *f, xtype *v) { \ + xtype result; \ + if (dmfwrite(&result, sizeof( xtype ), 1, f) != 1) \ + return FALSE; \ + *v = DM_ ## xmacro ## _TO_NATIVE (result); \ + return TRUE; \ +} + +DM_DEFINE_FUNC(le16, Uint16, LE16) +DM_DEFINE_FUNC(le32, Uint32, LE32) + +DM_DEFINE_FUNC(be16, Uint16, BE16) +DM_DEFINE_FUNC(be32, Uint32, BE32) + +#ifdef DM_HAVE_64BIT +DM_DEFINE_FUNC(le64, Uint64, LE64) +DM_DEFINE_FUNC(be64, Uint64, BE64) +#endif diff -r 76a7d469eab9 -r c560703e85ed dmresw.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dmresw.h Mon Oct 01 07:51:08 2012 +0300 @@ -0,0 +1,32 @@ +/* + * DMLib + * -- Resource management write helpers + * Programmed and designed by Matti 'ccr' Hamalainen + * (C) Copyright 2011-2012 Tecnic Software productions (TNSP) + */ +#ifndef DMRESW_H +#define DMRESW_H + +#include "dmres.h" + +#ifdef __cplusplus +extern "C" { +#endif + +int dmf_write_str(DMResource *, Uint8 *, size_t); +BOOL dmf_write_be16(DMResource *, Uint16 *); +BOOL dmf_write_be32(DMResource *, Uint32 *); +BOOL dmf_write_le16(DMResource *, Uint16 *); +BOOL dmf_write_le32(DMResource *, Uint32 *); + +#ifdef DM_HAVE_64BIT +BOOL dmf_write_be64(DMResource *, Uint64 *); +BOOL dmf_write_le64(DMResource *, Uint64 *); +#endif + + +#ifdef __cplusplus +} +#endif + +#endif // DMRESW_H