changeset 59:c560703e85ed

Add resource writing functions (only work for stdio backend)
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 01 Oct 2012 07:51:08 +0300
parents 76a7d469eab9
children f28cd66356f6
files Makefile.gen dmres.c dmres.h dmresw.c dmresw.h
diffstat 5 files changed, 97 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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,
--- 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
--- /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
--- /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