/* 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 #include #include #include #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); }