summaryrefslogtreecommitdiff
path: root/sid/sidplay-libs-2.1.0/libsidutils/src/ini/types.i
diff options
context:
space:
mode:
Diffstat (limited to 'sid/sidplay-libs-2.1.0/libsidutils/src/ini/types.i')
-rw-r--r--sid/sidplay-libs-2.1.0/libsidutils/src/ini/types.i409
1 files changed, 409 insertions, 0 deletions
diff --git a/sid/sidplay-libs-2.1.0/libsidutils/src/ini/types.i b/sid/sidplay-libs-2.1.0/libsidutils/src/ini/types.i
new file mode 100644
index 00000000..a59d0dbf
--- /dev/null
+++ b/sid/sidplay-libs-2.1.0/libsidutils/src/ini/types.i
@@ -0,0 +1,409 @@
+/***************************************************************************
+ types.i - Libini supported data types
+ Use readString for others
+
+ -------------------
+ 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. *
+ * *
+ ***************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "ini.h"
+
+
+/********************************************************************************************************************
+ * Function : __ini_write
+ * Parameters : ini - pointer to ini file database. heading - heading name. key - key name.
+ * Returns : Pointer to new key.
+ * Globals Used :
+ * Globals Modified :
+ * Description : Make calls to add a new key and appends a description of changes in the backup file
+ ********************************************************************************************************************
+ * Rev | Date | By | Comment
+ * ----------------------------------------------------------------------------------------------------------------
+ ********************************************************************************************************************/
+static struct key_tag *__ini_write (ini_t *ini)
+{
+ struct section_tag *section;
+ struct key_tag *key;
+
+ // Is file read only?
+ if (ini->mode == INI_READ)
+ return NULL;
+
+ // Check to make sure a section/key has
+ // been asked for by the user
+ section = ini->selected;
+ if (!section)
+ return NULL;
+ key = section->selected;
+ if (!key)
+ return NULL;
+
+ // Add or replace key
+ if (!__ini_addHeading (ini, section->heading))
+ return NULL;
+ return __ini_addKey (ini, key->key);
+}
+
+
+/********************************************************************************************************************
+ * Function : ini_readString
+ * Parameters : ini - pointer to ini file database.
+ * : value - keys data
+ * Returns : -1 for error or the number of chars read.
+ * Globals Used :
+ * Globals Modified :
+ * Description : Reads data part from a key and returns it as a string
+ ********************************************************************************************************************
+ * Rev | Date | By | Comment
+ * ----------------------------------------------------------------------------------------------------------------
+ ********************************************************************************************************************/
+int INI_LINKAGE ini_readString (ini_fd_t fd, char *str, size_t size)
+{
+ struct key_tag *_key;
+ ini_t *ini = (ini_t *) fd;
+
+ if (!ini->selected)
+ return -1;
+ if (size <= 0)
+ return -1;
+
+ // Locate and read keys value
+ _key = ini->selected->selected;
+ if (!_key)
+ return -1;
+
+ size--; // Reserve space for NULL
+
+#ifdef INI_ADD_LIST_SUPPORT
+ if (ini->listDelims)
+ {
+ char *data;
+ size_t length;
+
+ data = __ini_listRead (ini);
+ if (!data)
+ return -1;
+
+ // Check to make sure size is correct
+ length = strlen (data);
+ if (size > length)
+ size = length;
+ memcpy (str, data, size);
+ }
+ else
+#endif // INI_ADD_LIST_SUPPORT
+ { // Locate and read back keys data (Index ignored)
+ // Check to make sure size is correct
+ if (size > _key->length)
+ size = _key->length;
+
+ if (size)
+ {
+ fseek (ini->ftmp, _key->pos, SEEK_SET);
+ size = fread (str, sizeof(char), size, ini->ftmp);
+ }
+ else if (_key == &ini->tmpKey)
+ return -1; // Can't read tmpKey
+ }
+
+ str[size] = '\0';
+ __ini_strtrim (str);
+ return size;
+}
+
+
+/********************************************************************************************************************
+ * Function : ini_writeString
+ * Parameters : ini - pointer to ini file database.
+ * : value - keys data
+ * Returns : -1 for Error and 0 on success
+ * Globals Used :
+ * Globals Modified :
+ * Description : Writes data part to a key.
+ * : Conforms to Microsoft API call. E.g. use NULLS to remove headings/keys
+ * : Headings and keys will be created as necessary
+ ********************************************************************************************************************
+ * Rev | Date | By | Comment
+ * ----------------------------------------------------------------------------------------------------------------
+ ********************************************************************************************************************/
+int INI_LINKAGE ini_writeString (ini_fd_t fd, char *str)
+{
+ ini_t *ini = (ini_t *) fd;
+ struct key_tag *_key;
+
+ _key = __ini_write (ini);
+ if (!_key)
+ return -1;
+
+ // Write data to bottom of backup file
+ _key->length = strlen (str);
+ fprintf (ini->ftmp, "%s\n", str);
+ return 0;
+}
+
+
+/********************************************************************************************************************
+ * Function : ini_readInt
+ * Parameters : ini - pointer to ini file database.
+ * : value - keys data
+ * Returns : -1 for error or the number of values read.
+ * Globals Used :
+ * Globals Modified :
+ * Description : Reads data part from a key and returns it as a int
+ ********************************************************************************************************************
+ * Rev | Date | By | Comment
+ * ----------------------------------------------------------------------------------------------------------------
+ ********************************************************************************************************************/
+int INI_LINKAGE ini_readInt (ini_fd_t fd, int *value)
+{
+ ini_t *ini = (ini_t *) fd;
+ struct key_tag *_key;
+
+ // Check to make sure a section has been
+ // asked for by the user
+ if (!ini->selected)
+ return -1;
+ // Locate and read keys value
+ _key = ini->selected->selected;
+ if (!_key)
+ return -1;
+
+#ifdef INI_ADD_LIST_SUPPORT
+ if (ini->listDelims)
+ {
+ char *data;
+ data = __ini_listRead (ini);
+ if (!data)
+ return -1;
+ sscanf (data, "%d", value);
+ }
+ else
+#endif // INI_ADD_LIST_SUPPORT
+ {
+ if (_key->length)
+ { // Locate and read back keys data
+ fseek (ini->ftmp, _key->pos, SEEK_SET);
+ fscanf (ini->ftmp, "%d", value);
+ }
+ else if (_key == &ini->tmpKey)
+ return -1; // Can't read tmpKey
+ }
+
+ return 0;
+}
+
+
+#ifdef INI_ADD_EXTRAS
+
+/********************************************************************************************************************
+ * Function : ini_readLong
+ * Parameters : ini - pointer to ini file database.
+ * : value - keys data
+ * Returns : -1 for error or the number of values read.
+ * Globals Used :
+ * Globals Modified :
+ * Description : Reads data part from a key and returns it as a long
+ ********************************************************************************************************************
+ * Rev | Date | By | Comment
+ * ----------------------------------------------------------------------------------------------------------------
+ ********************************************************************************************************************/
+int INI_LINKAGE ini_readLong (ini_fd_t fd, long *value)
+{
+ ini_t *ini = (ini_t *) fd;
+ struct key_tag *_key;
+
+ // Check to make sure a section has been
+ // asked for by the user
+ if (!ini->selected)
+ return -1;
+ // Locate and read keys value
+ _key = ini->selected->selected;
+ if (!_key)
+ return -1;
+
+#ifdef INI_ADD_LIST_SUPPORT
+ if (ini->listDelims)
+ {
+ char *data;
+ data = __ini_listRead (ini);
+ if (!data)
+ return -1;
+ sscanf (data, "%ld", value);
+ }
+ else
+#endif // INI_ADD_LIST_SUPPORT
+ {
+ if (_key->length)
+ { // Locate and read back keys data
+ fseek (ini->ftmp, _key->pos, SEEK_SET);
+ fscanf (ini->ftmp, "%ld", value);
+ }
+ else if (_key == &ini->tmpKey)
+ return -1; // Can't read tmpKey
+ }
+
+ return 0;
+}
+
+
+/********************************************************************************************************************
+ * Function : ini_readDouble
+ * Parameters : ini - pointer to ini file database.
+ * : value - keys data
+ * Returns : -1 for error or the number of values read.
+ * Globals Used :
+ * Globals Modified :
+ * Description : Reads data part from a key and returns it as a double (real)
+ ********************************************************************************************************************
+ * Rev | Date | By | Comment
+ * ----------------------------------------------------------------------------------------------------------------
+ ********************************************************************************************************************/
+int INI_LINKAGE ini_readDouble (ini_fd_t fd, double *value)
+{
+ ini_t *ini = (ini_t *) fd;
+ struct key_tag *_key;
+
+ // Check to make sure a section has been
+ // asked for by the user
+ if (!ini->selected)
+ return -1;
+ // Locate and read keys value
+ _key = ini->selected->selected;
+ if (!_key)
+ return -1;
+
+#ifdef INI_ADD_LIST_SUPPORT
+ if (ini->listDelims)
+ {
+ char *data;
+ data = __ini_listRead (ini);
+ if (!data)
+ return -1;
+ sscanf (data, "%lf", value);
+ }
+ else
+#endif // INI_ADD_LIST_SUPPORT
+ {
+ if (_key->length)
+ { // Locate and read back keys data
+ fseek (ini->ftmp, _key->pos, SEEK_SET);
+ fscanf (ini->ftmp, "%lf", value);
+ }
+ else if (_key == &ini->tmpKey)
+ return -1; // Can't read tmpKey
+ }
+
+ return 0;
+}
+
+
+/********************************************************************************************************************
+ * Function : ini_writeInt
+ * Parameters : ini - pointer to ini file database.
+ * : value - keys data
+ * Returns : -1 for Error and 0 on success
+ * Globals Used :
+ * Globals Modified :
+ * Description : Writes data part to a key.
+ * : Headings and keys will be created as necessary
+ ********************************************************************************************************************
+ * Rev | Date | By | Comment
+ * ----------------------------------------------------------------------------------------------------------------
+ ********************************************************************************************************************/
+int INI_LINKAGE ini_writeInt (ini_fd_t fd, int value)
+{
+ ini_t *ini = (ini_t *) fd;
+ struct key_tag *_key;
+ long pos;
+
+ _key = __ini_write (ini);
+ if (!_key)
+ return -1;
+
+ // Write data to bottom of backup file
+ fprintf (ini->ftmp, "%d", value);
+ pos = ftell (ini->ftmp);
+ _key->length = (size_t) (pos - _key->pos);
+ fprintf (ini->ftmp, "\n");
+ return 0;
+}
+
+
+/********************************************************************************************************************
+ * Function : ini_writeLong
+ * Parameters : ini - pointer to ini file database.
+ * : value - keys data
+ * Returns : -1 for Error and 0 on success
+ * Globals Used :
+ * Globals Modified :
+ * Description : Writes data part to a key.
+ * : Headings and keys will be created as necessary
+ ********************************************************************************************************************
+ * Rev | Date | By | Comment
+ * ----------------------------------------------------------------------------------------------------------------
+ ********************************************************************************************************************/
+int INI_LINKAGE ini_writeLong (ini_fd_t fd, long value)
+{
+ ini_t *ini = (ini_t *) fd;
+ struct key_tag *_key;
+ long pos;
+
+ _key = __ini_write (ini);
+ if (!_key)
+ return -1;
+
+ // Write data to bottom of backup file
+ fprintf (ini->ftmp, "%ld", value);
+ pos = ftell (ini->ftmp);
+ _key->length = (size_t) (pos - _key->pos);
+ fprintf (ini->ftmp, "\n");
+ return 0;
+}
+
+
+/********************************************************************************************************************
+ * Function : ini_writeDouble
+ * Parameters : ini - pointer to ini file database.
+ * : value - keys data
+ * Returns : -1 for Error and 0 on success
+ * Globals Used :
+ * Globals Modified :
+ * Description : Writes data part to a key.
+ * : Headings and keys will be created as necessary
+ ********************************************************************************************************************
+ * Rev | Date | By | Comment
+ * ----------------------------------------------------------------------------------------------------------------
+ ********************************************************************************************************************/
+int INI_LINKAGE ini_writeDouble (ini_fd_t fd, double value)
+{
+ ini_t *ini = (ini_t *) fd;
+ struct key_tag *_key;
+ long pos;
+
+ _key = __ini_write (ini);
+ if (!_key)
+ return -1;
+
+ // Write data to bottom of backup file
+ fprintf (ini->ftmp, "%f", value);
+ pos = ftell (ini->ftmp);
+ _key->length = (size_t) (pos - _key->pos);
+ fprintf (ini->ftmp, "\n");
+ return 0;
+}
+
+#endif // INI_ADD_EXTRAS