]> git.tdb.fi Git - gldbg.git/blobdiff - source/glprint.c
Initial revision
[gldbg.git] / source / glprint.c
diff --git a/source/glprint.c b/source/glprint.c
new file mode 100644 (file)
index 0000000..901949d
--- /dev/null
@@ -0,0 +1,54 @@
+/* $Id$
+
+This file is part of gldbg
+Copyright © 2009  Mikko Rasa, Mikkosoft Productions
+Distributed under the GPL
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "glprint.h"
+
+typedef struct sGlPrintData
+{
+       char *buffer;
+       unsigned bufsize;
+} GlPrintData;
+
+static void init_print(GlDecoder *);
+static void glprint_data_free(void *);
+
+GlDecoder *glprint_new(char *buffer, unsigned bufsize)
+{
+       GlDecoder *dec;
+       GlPrintData *gpd;
+
+       gpd = (GlPrintData *)malloc(sizeof(GlPrintData));
+       gpd->buffer = buffer;
+       gpd->bufsize = bufsize;
+       if(!gpd->buffer)
+       {
+               if(!gpd->bufsize)
+                       gpd->bufsize = 1024;
+               gpd->buffer = (char *)malloc(gpd->bufsize);
+               dec = gldecoder_new(gpd, glprint_data_free);
+       }
+       else
+               dec = gldecoder_new(gpd, free);
+
+       init_print(dec);
+}
+
+char *glprint_get_buffer(GlDecoder *dec)
+{
+       return ((GlPrintData *)dec->user_data)->buffer;
+}
+
+static void glprint_data_free(void *data)
+{
+       GlPrintData *gpd = (GlPrintData *)data;
+       free(gpd->buffer);
+       free(gpd);
+}
+
+#include "glprint.funcs"