summaryrefslogtreecommitdiff
path: root/src/jas_binfile.c
diff options
context:
space:
mode:
authorscuri <scuri>2008-10-17 06:10:15 +0000
committerscuri <scuri>2008-10-17 06:10:15 +0000
commit5a422aba704c375a307a902bafe658342e209906 (patch)
tree5005011e086bb863d8fb587ad3319bbec59b2447 /src/jas_binfile.c
First commit - moving from LuaForge to SourceForge
Diffstat (limited to 'src/jas_binfile.c')
-rw-r--r--src/jas_binfile.c97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/jas_binfile.c b/src/jas_binfile.c
new file mode 100644
index 0000000..487a2d3
--- /dev/null
+++ b/src/jas_binfile.c
@@ -0,0 +1,97 @@
+/** \file
+ * \brief libJasper I/O
+ * I/O uses imBinFile instead of libJasper original handlers.
+ *
+ * See Copyright Notice in im_lib.h
+ * $Id: jas_binfile.c,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ */
+
+#include <stdlib.h>
+
+#include "jasper/jas_types.h"
+#include "jasper/jas_stream.h"
+#include "jasper/jas_malloc.h"
+#include "jasper/jas_math.h"
+
+#include "im_binfile.h"
+
+/* These were static in jas_stream.c */
+jas_stream_t *jas_stream_create(void);
+void jas_stream_initbuf(jas_stream_t *stream, int bufmode, char *buf, int bufsize);
+
+static int file_read(jas_stream_obj_t *obj, char *buf, int cnt)
+{
+ imBinFile* file_bin = (imBinFile*)obj;
+ return imBinFileRead(file_bin, buf, cnt, 1);
+}
+
+static int file_write(jas_stream_obj_t *obj, char *buf, int cnt)
+{
+ imBinFile* file_bin = (imBinFile*)obj;
+ return imBinFileWrite(file_bin, buf, cnt, 1);
+}
+
+static long file_seek(jas_stream_obj_t *obj, long offset, int origin)
+{
+ imBinFile* file_bin = (imBinFile*)obj;
+ switch (origin)
+ {
+ case SEEK_SET:
+ imBinFileSeekTo(file_bin, offset);
+ break;
+ case SEEK_CUR:
+ imBinFileSeekOffset(file_bin, offset);
+ break;
+ case SEEK_END:
+ imBinFileSeekFrom(file_bin, offset);
+ break;
+ }
+
+ return imBinFileError(file_bin);
+}
+
+static int file_close(jas_stream_obj_t *obj)
+{
+ imBinFile* file_bin = (imBinFile*)obj;
+ imBinFileClose(file_bin);
+ return 0;
+}
+
+static jas_stream_ops_t jas_stream_fileops = {
+ file_read,
+ file_write,
+ file_seek,
+ file_close
+};
+
+jas_stream_t *jas_binfile_open(const char *file_name, int is_new)
+{
+ void* handle;
+ jas_stream_t *stream;
+
+ if (is_new)
+ handle = (void*)imBinFileNew(file_name);
+ else
+ handle = (void*)imBinFileOpen(file_name);
+
+ if (!handle)
+ return 0;
+
+ /* Allocate a stream object. */
+ stream = jas_stream_create();
+
+ if (is_new)
+ stream->openmode_ = JAS_STREAM_WRITE | JAS_STREAM_CREATE | JAS_STREAM_BINARY;
+ else
+ stream->openmode_ = JAS_STREAM_READ | JAS_STREAM_BINARY;
+
+ /* Select the operations for a file stream object. */
+ stream->ops_ = &jas_stream_fileops;
+
+ stream->obj_ = handle;
+
+ /* By default, use full buffering for this type of stream. */
+ jas_stream_initbuf(stream, JAS_STREAM_FULLBUF, 0, 0);
+
+ return stream;
+}