--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "xgnokii_cfg.h"
+#include "xgnokii.h"
+
+ConfigEntry config[] = {
+ {"name", &(xgnokiiConfig.user.name)},
+ {"title", &(xgnokiiConfig.user.title)},
+ {"company", &(xgnokiiConfig.user.company)},
+ {"telephone", &(xgnokiiConfig.user.telephone)},
+ {"fax", &(xgnokiiConfig.user.fax)},
+ {"email", &(xgnokiiConfig.user.email)},
+ {"address", &(xgnokiiConfig.user.address)},
+ {"viewer", &(xgnokiiConfig.helpviewer)},
+ {"mailbox", &(xgnokiiConfig.mailbox)},
+ {"simlen", &(xgnokiiConfig.maxSIMLen)},
+ {"phonelen", &(xgnokiiConfig.maxPhoneLen)},
+ {"", NULL}
+};
+
+
+static void GetDefaultValues ()
+{
+ gchar *homedir;
+
+ xgnokiiConfig.user.name = g_strdup ("");
+ xgnokiiConfig.user.title = g_strdup ("");
+ xgnokiiConfig.user.company = g_strdup ("");
+ xgnokiiConfig.user.telephone = g_strdup ("");
+ xgnokiiConfig.user.fax = g_strdup ("");
+ xgnokiiConfig.user.email = g_strdup ("");
+ xgnokiiConfig.user.address = g_strdup ("");
+ xgnokiiConfig.helpviewer = g_strdup ("netscape");
+ if ((homedir = g_get_home_dir ()) == NULL)
+ homedir = "";
+ xgnokiiConfig.mailbox = g_strdup_printf ("%s/Mail/smsbox", homedir);
+ xgnokiiConfig.maxSIMLen = g_strdup ("14");
+ xgnokiiConfig.maxPhoneLen = g_strdup ("16");
+}
+
+
+void GUI_ReadXConfig ()
+{
+ FILE *file;
+ gchar *line;
+ gchar *homedir;
+ gchar *rcfile;
+ gchar *current;
+ register gint len;
+ register gint i;
+
+ GetDefaultValues ();
+
+#ifdef WIN32
+/* homedir = getenv("HOMEDRIVE");
+ g_strconcat(homedir, getenv("HOMEPATH"), NULL); */
+ homedir = g_get_home_dir ();
+ rcfile=g_strconcat(homedir, "\\_xgnokiirc", NULL);
+#else
+ if ((homedir = g_get_home_dir ()) == NULL)
+ {
+ g_print (_("WARNING: Can't find HOME enviroment variable!\n"));
+ return;
+ }
+
+ if ((rcfile = g_strconcat (homedir, "/.xgnokiirc", NULL)) == NULL)
+ {
+ g_print (_("WARNING: Can't allocate memory for config reading!\n"));
+ return;
+ }
+#endif
+
+ if ((file = fopen (rcfile, "r")) == NULL)
+ {
+ g_free (rcfile);
+ return;
+ }
+
+ g_free (rcfile);
+
+ if ((line = (char *) g_malloc (255)) == NULL)
+ {
+ g_print (_("WARNING: Can't allocate memory for config reading!\n"));
+ fclose (file);
+ return;
+ }
+
+ while (fgets (line, 255, file) != NULL)
+ {
+ gint v;
+ current = line;
+
+ /* Strip leading, trailing whitespace */
+ while (isspace ((gint) *current))
+ current++;
+
+ while ((strlen (current) > 0) && isspace ((gint) current[strlen (current) - 1]))
+ current[strlen (current) - 1] = '\0';
+
+ /* Ignore blank lines and comments */
+
+ if ((*current == '\n') || (*current == '\0') || (*current == '#'))
+ continue;
+
+ i = 0;
+ while (*config[i].key != '\0')
+ {
+ len = strlen (config[i].key);
+ if (g_strncasecmp (config[i].key, current, len) == 0)
+ {
+ current += len;
+ while (isspace ((int) *current))
+ current++;
+ if (*current == '=')
+ {
+ current++;
+ while(isspace ((int) *current))
+ current++;
+ g_free (*config[i].value);
+ switch (i)
+ {
+ case 3:
+ case 4:
+ *config[i].value = g_strndup (current, max_phonebook_number_length);
+ break;
+
+ case 7:
+ *config[i].value = g_strndup (current, HTMLVIEWER_LENGTH);
+ break;
+
+ case 8:
+ *config[i].value = g_strndup (current, MAILBOX_LENGTH);
+ break;
+
+ case 9:
+ case 10:
+ v = atoi (current);
+ if ( v > 0 && v < 100 )
+ *config[i].value = g_strndup (current, 3);
+ break;
+
+ default:
+ *config[i].value = g_strndup (current, MAX_BUSINESS_CARD_LENGTH);
+ break;
+ }
+ }
+ }
+ i++;
+ }
+ }
+
+ fclose (file);
+ g_free (line);
+}
+
+
+gint GUI_SaveXConfig ()
+{
+ FILE *file;
+ gchar *line;
+ gchar *homedir;
+ gchar *rcfile;
+ register gint i;
+
+ if ((homedir = getenv ("HOME")) == NULL)
+ {
+ g_print (_("ERROR: Can't find HOME enviroment variable!\n"));
+ return (1);
+ }
+
+ if ((rcfile = g_strconcat (homedir, "/.xgnokiirc", NULL)) == NULL)
+ {
+ g_print (_("ERROR: Can't allocate memory for config writing!\n"));
+ return (2);
+ }
+
+ if ((file = fopen (rcfile, "w")) == NULL)
+ {
+ g_print (_("ERROR: Can't open file %s for writing!\n"), rcfile);
+ g_free (rcfile);
+ return (3);
+ }
+
+ g_free (rcfile);
+
+ i = 0;
+ while (*config[i].key != '\0')
+ {
+ if ((line = g_strdup_printf ("%s = %s\n", config[i].key, *config[i].value)) == NULL)
+ {
+ g_print (_("ERROR: Can't allocate memory for config writing!\n"));
+ fclose (file);
+ return (2);
+ }
+ if (fputs (line, file) == EOF)
+ {
+ g_print (_("ERROR: Can't write config file!\n"));
+ g_free (line);
+ fclose (file);
+ return (4);
+ }
+ g_free (line);
+ i++;
+ }
+
+ fclose (file);
+ return (0);
+}