summaryrefslogtreecommitdiff
path: root/plugins/adplug/libbinio/binstr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/adplug/libbinio/binstr.cpp')
-rw-r--r--plugins/adplug/libbinio/binstr.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/plugins/adplug/libbinio/binstr.cpp b/plugins/adplug/libbinio/binstr.cpp
new file mode 100644
index 00000000..0e3a9f86
--- /dev/null
+++ b/plugins/adplug/libbinio/binstr.cpp
@@ -0,0 +1,114 @@
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * binstr.cpp - Binary I/O on standard C strings in memory
+ * Copyright (C) 2003 Simon Peter <dn.tlp@gmx.net>
+ */
+
+#include "binstr.h"
+
+/***** binsbase *****/
+
+binsbase::binsbase(void *str, unsigned long len)
+ : data((Byte *)str), spos((Byte *)str), length(len)
+{
+}
+
+binsbase::~binsbase()
+{
+}
+
+void binsbase::seek(long p, Offset offs)
+{
+ switch(offs) {
+ case Set: spos = data + p; break;
+ case Add: spos += p; break;
+ case End: spos = data + length - 1 + p; break;
+ }
+
+ // Seek before start of data
+ if(spos < data) {
+ err |= Eof;
+ spos = data;
+ return;
+ }
+
+ // Seek after end of data
+ if(spos - data >= length) {
+ err |= Eof;
+ spos = data + length - 1;
+ }
+}
+
+long binsbase::pos()
+{
+ return (long)(spos - data);
+}
+
+/***** binisstream *****/
+
+binisstream::binisstream(void *str, unsigned long len)
+ : binsbase(str, len)
+{
+}
+
+binisstream::~binisstream()
+{
+}
+
+binisstream::Byte binisstream::getByte()
+{
+ Byte in = 0;
+
+ if(spos - data >= length)
+ err |= Eof;
+ else {
+ in = *spos;
+ spos++;
+ }
+
+ return in;
+}
+
+/***** binosstream *****/
+
+binosstream::binosstream(void *str, unsigned long len)
+ : binsbase(str, len)
+{
+}
+
+binosstream::~binosstream()
+{
+}
+
+void binosstream::putByte(Byte b)
+{
+ *spos = b;
+ spos++;
+
+ if(spos - data >= length)
+ spos = data + length - 1;
+}
+
+/***** binsstream *****/
+
+binsstream::binsstream(void *str, unsigned long len)
+ : binsbase(str, len), binisstream(str, len), binosstream(str, len)
+{
+}
+
+binsstream::~binsstream()
+{
+}