summaryrefslogtreecommitdiff
path: root/plugins/sid/sidplay-libs/libsidutils/include/sidplay/utils/libini.h
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/sid/sidplay-libs/libsidutils/include/sidplay/utils/libini.h')
-rw-r--r--plugins/sid/sidplay-libs/libsidutils/include/sidplay/utils/libini.h215
1 files changed, 215 insertions, 0 deletions
diff --git a/plugins/sid/sidplay-libs/libsidutils/include/sidplay/utils/libini.h b/plugins/sid/sidplay-libs/libsidutils/include/sidplay/utils/libini.h
new file mode 100644
index 00000000..798dfe8e
--- /dev/null
+++ b/plugins/sid/sidplay-libs/libsidutils/include/sidplay/utils/libini.h
@@ -0,0 +1,215 @@
+/***************************************************************************
+ libini.h - Header file of functions to
+ manipulate an ini file.
+ -------------------
+ begin : Fri Apr 21 2000
+ copyright : (C) 2000 by Simon White
+ email : s_a_white@email.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _libini_h_
+#define _libini_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Rev 1.3 Added scripting support using Swig 1.3a5 */
+#ifdef SWIG
+%module libini
+#endif
+
+#include <stdio.h>
+
+#define INI_ADD_EXTRAS
+#define INI_ADD_LIST_SUPPORT
+
+typedef void* ini_fd_t;
+
+//#ifdef _WINDOWS
+//# define INI_LINKAGE __stdcall
+//#else
+# define INI_LINKAGE
+//#endif
+
+/* DLL building support on win32 hosts */
+#ifndef INI_EXTERN
+# ifdef DLL_EXPORT /* defined by libtool (if required) */
+# define INI_EXTERN __declspec(dllexport)
+# endif
+# ifdef LIBINI_DLL_IMPORT /* define if linking with this dll */
+# define INI_EXTERN extern __declspec(dllimport)
+# endif
+# ifndef INI_EXTERN /* static linking or !_WIN32 */
+# define INI_EXTERN extern
+# endif
+#endif
+
+#ifndef INI_ADD_EXTRAS
+#undef INI_ADD_LIST_SUPPORT
+#endif
+
+#ifdef SWIG
+%include typemaps.i
+%apply int *BOTH { int *value };
+%apply long *BOTH { long *value };
+%apply double *BOTH { double *value };
+%name (ini_readString)
+ int ini_readFileToBuffer (ini_fd_t fd, ini_buffer_t *buffer);
+
+ini_buffer_t *ini_createBuffer (unsigned long size);
+void ini_deleteBuffer (ini_buffer_t *buffer);
+char *ini_getBuffer (ini_buffer_t *buffer);
+int ini_setBuffer (ini_buffer_t *buffer, char *str);
+
+%{
+#include "libini.h"
+
+typedef struct
+{
+ char *buffer;
+ size_t size;
+} ini_buffer_t;
+
+ini_buffer_t *ini_createBuffer (unsigned int size)
+{
+ ini_buffer_t *b;
+ /* Allocate memory to structure */
+ if (size == ( ((unsigned) -1 << 1) >> 1 ))
+ return 0; /* Size is too big */
+ b = malloc (sizeof (ini_buffer_t));
+ if (!b)
+ return 0;
+
+ /* Allocate memory to buffer */
+ b->buffer = malloc (sizeof (char) * (size + 1));
+ if (!b->buffer)
+ {
+ free (b);
+ return 0;
+ }
+ b->size = size;
+
+ /* Returns address to tcl */
+ return b;
+}
+
+void ini_deleteBuffer (ini_buffer_t *buffer)
+{
+ if (!buffer)
+ return;
+ free (buffer->buffer);
+ free (buffer);
+}
+
+/*************************************************************
+ * SWIG helper functions to create C compatible string buffers
+ *************************************************************/
+int ini_readFileToBuffer (ini_fd_t fd, ini_buffer_t *buffer)
+{
+ if (!buffer)
+ return -1;
+ return ini_readString (fd, buffer->buffer, buffer->size + 1);
+}
+
+char *ini_getBuffer (ini_buffer_t *buffer)
+{
+ if (!buffer)
+ return "";
+ return buffer->buffer;
+}
+
+int ini_setBuffer (ini_buffer_t *buffer, char *str)
+{
+ size_t len;
+ if (!buffer)
+ return -1;
+ len = strlen (str);
+ if (len > buffer->size)
+ len = buffer->size;
+
+ memcpy (buffer->buffer, str, len);
+ buffer->buffer[len] = '\0';
+ return len;
+}
+
+%}
+
+#endif /* SWIG */
+
+
+/* Rev 1.2 Added new fuction */
+INI_EXTERN ini_fd_t INI_LINKAGE ini_open (const char *name, const char *mode,
+ const char *comment);
+INI_EXTERN int INI_LINKAGE ini_close (ini_fd_t fd);
+INI_EXTERN int INI_LINKAGE ini_flush (ini_fd_t fd);
+INI_EXTERN int INI_LINKAGE ini_delete (ini_fd_t fd);
+
+/* Rev 1.2 Added these functions to make life a bit easier, can still be implemented
+ * through ini_writeString though. */
+INI_EXTERN int INI_LINKAGE ini_locateKey (ini_fd_t fd, char *key);
+INI_EXTERN int INI_LINKAGE ini_locateHeading (ini_fd_t fd, char *heading);
+INI_EXTERN int INI_LINKAGE ini_deleteKey (ini_fd_t fd);
+INI_EXTERN int INI_LINKAGE ini_deleteHeading (ini_fd_t fd);
+
+/* Returns the number of bytes required to be able to read the key as a
+ * string from the file. (1 should be added to this length to account
+ * for a NULL character). If delimiters are used, returns the length
+ * of the next data element in the key to be read */
+INI_EXTERN int INI_LINKAGE ini_dataLength (ini_fd_t fd);
+
+/* Default Data Type Operations
+ * Arrays implemented to help with reading, for writing you should format the
+ * complete array as a string and perform an ini_writeString. */
+#ifndef SWIG
+INI_EXTERN int INI_LINKAGE ini_readString (ini_fd_t fd, char *str, size_t size);
+#endif /* SWIG */
+INI_EXTERN int INI_LINKAGE ini_writeString (ini_fd_t fd, char *str);
+INI_EXTERN int INI_LINKAGE ini_readInt (ini_fd_t fd, int *value);
+
+
+#ifdef INI_ADD_EXTRAS
+ /* Read Operations */
+ INI_EXTERN int INI_LINKAGE ini_readLong (ini_fd_t fd, long *value);
+ INI_EXTERN int INI_LINKAGE ini_readDouble (ini_fd_t fd, double *value);
+
+ /* Write Operations */
+ INI_EXTERN int INI_LINKAGE ini_writeInt (ini_fd_t fd, int value);
+ INI_EXTERN int INI_LINKAGE ini_writeLong (ini_fd_t fd, long value);
+ INI_EXTERN int INI_LINKAGE ini_writeDouble (ini_fd_t fd, double value);
+
+ /* Extra Functions */
+ INI_EXTERN int INI_LINKAGE ini_append (ini_fd_t fddst, ini_fd_t fdsrc);
+#endif /* INI_ADD_EXTRAS */
+
+
+#ifdef INI_ADD_LIST_SUPPORT
+ /* Rev 1.1 Added - List Operations (Used for read operations only)
+ * Be warned, once delimiters are set, every key that is read will be checked for the
+ * presence of sub strings. This will incure a speed hit and therefore once a line
+ * has been read and list/array functionality is not required, set delimiters
+ * back to NULL.
+ */
+
+ /* Returns the number of elements in an list being seperated by the provided delimiters */
+ INI_EXTERN int INI_LINKAGE ini_listLength (ini_fd_t fd);
+ /* Change delimiters, default "" */
+ INI_EXTERN int INI_LINKAGE ini_listDelims (ini_fd_t fd, char *delims);
+ /* Set index to access in a list. When read the index will automatically increment */
+ INI_EXTERN int INI_LINKAGE ini_listIndex (ini_fd_t fd, unsigned long index);
+#endif // INI_ADD_LIST_SUPPORT
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _libini_h_ */