You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
spOSMroute/base/config.c

237 lines
6.5 KiB

/*
* config.c
* Copyright (C) Steffen Pohle 2009 <steffen@gulpe.de>
*
* main.c 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 3 of the License, or
* (at your option) any later version.
*
* main.c 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#if defined(__MINGW32CE__) || defined(_WIN32_WCE) || defined(__MINGW32__)
#include <windows.h>
#include <commctrl.h>
#include <winbase.h>
#include <shlobj.h>
#endif
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include "osmroute.h"
#include "system.h"
#if defined(SPOSMROUTE)
#include "draw.h"
#include "favorites.h"
#endif
/*
* some variabled which have to be present in all apps.
*/
struct cfgdata cfg;
#if defined(__MINGW32CE__) || defined(_WIN32_WCE)
#define CONFIGFILE "config.txt"
#else
#define CONFIGFILE "config.cfg"
#endif
void config_init () {
struct stat sb;
strcpy (cfg.mappath, "map/");
strcpy (cfg.appdatapath, "android/assets");
strcpy (cfg.cachepath, "cache/");
strcpy (cfg.configpath, "");
strcpy (cfg.logpath, "logs/");
strcpy (cfg.temppath, "tmposm/");
strcpy (cfg.gps_device, "");
cfg.last_scale = 0.001;
cfg.last_lon = 11.183;
cfg.last_lat = 48.736;
/* Android version will not need config and log path.. */
#if defined(ANDROID)
if (engine.app->activity->internalDataPath == NULL)
strncpy (cfg.configpath, "/data/data/de.gulpe.sposmroute/", LEN_FILENAME);
else
strncpy (cfg.configpath, engine.app->activity->internalDataPath, LEN_FILENAME);
/* std::string dataPath(internalPath);
// internalDataPath points directly to the files/ directory
std::string configFile = dataPath + "/app_config.xml";
*/
#else
/* windows ce version */
#if defined(__MINGW32CE__) || defined(_WIN32_WCE)
strcpy (cfg.mappath, "\\Storage Card\\map\\");
strcpy (cfg.configpath, "\\My Documents\\wOSMroute\\");
strcpy (cfg.logpath, "\\My Documents\\wOSMroute\\Logdir\\");
#endif
/* windows version */
#if defined(__MINGW32__) && !defined(__MINGW32CE__) && !defined(_WIN32_WCE)
TCHAR szPath[MAX_PATH];
if(SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL|CSIDL_FLAG_CREATE, NULL, 0, szPath))) {
snprintf (cfg.configpath, LEN_FILENAME, "%s\\wOSMroute\\", szPath);
snprintf (cfg.logpath, LEN_FILENAME, "%s\\wOSMroute\\Logdir\\", szPath);
}
#endif
/* linux version */
#if !defined(__MINGW32CE__) && !defined(_WIN32_WCE) && !defined(__MINGW32__)
char *hd;
if ((hd = getenv ("HOME")) == NULL) {
/* Homedir konnte nicht ermittelt werden. */
strcpy (cfg.configpath, ".OSMroute/");
strcpy (cfg.logpath, ".OSMroute/Logdir/");
}
else {
snprintf (cfg.configpath, LEN_FILENAME, "%s/.OSMroute/", hd);
snprintf (cfg.logpath, LEN_FILENAME, "%s/.OSMroute/Logdir/", hd);
}
#endif
d_print_init();
if (stat(cfg.configpath, &sb) == -1) {
char fn[LEN_FILENAME];
strncpy (fn, cfg.configpath, LEN_FILENAME);
fn[strlen(fn)-1] = 0;
d_printf ("create config dir:%s", fn);
#if !defined(__MINGW32CE__) && !defined(_WIN32_WCE) && !defined(__MINGW32__)
mkdir (fn, 0755);
#else
mkdir (fn);
#endif
}
if (stat(cfg.logpath, &sb) == -1) {
char fn[LEN_FILENAME];
strncpy (fn, cfg.logpath, LEN_FILENAME);
fn[strlen(fn)-1] = 0;
d_printf ("create log dir:%s", fn);
#if !defined(__MINGW32CE__) && !defined(_WIN32_WCE) && !defined(__MINGW32__)
mkdir (fn, 0755);
#else
mkdir (fn);
#endif
}
#endif
config_load ();
config_save ();
};
/*
* load config files
*/
void config_load () {
char filename[LEN_FILENAME];
char buf[1024];
char *findit, *keyword, *value;
int i;
FILE *f;
sprintf (filename, "%s%s", cfg.configpath, CONFIGFILE);
d_printf ("load config file:%s", filename);
f = fopen (filename, "r");
if (f) {
while (fgets (buf, sizeof (buf), f) != NULL) {
d_printf ("config file line:%s", buf);
findit = strchr (buf, '\n');
if (findit) findit[0] = '\0';
if (buf[0] == '\0') continue;
keyword = buf;
while (isspace (*keyword)) keyword++;
value = strchr (buf, '=');
if (value == NULL) continue;
*value = 0;
value++;
while (*value == ' ') value++;
while (keyword[strlen (keyword) - 1] == ' ') keyword[strlen (keyword) - 1] = 0;
while (value[strlen (value) - 1] == ' ') value[strlen (value) - 1] = 0;
if (strlen (value) == 0) continue;
for (i = 0; i < (int) strlen (keyword); i++)
keyword[i] = tolower (keyword[i]);
if (!strcmp (keyword, "mappath"))
strncpy (cfg.mappath, value, LEN_FILENAME);
if (!strcmp (keyword, "temppath"))
strncpy (cfg.temppath, value, LEN_FILENAME);
if (!strcmp (keyword, "logpath"))
strncpy (cfg.logpath, value, LEN_FILENAME);
#if defined(SPOSMROUTE)
if (!strcmp (keyword, "last_lon"))
cfg.last_lon = atof (value);
if (!strcmp (keyword, "last_lat"))
cfg.last_lat = atof (value);
if (!strcmp (keyword, "last_scale"))
cfg.last_scale = atof (value);
if (!strcmp (keyword, "gps_device"))
strncpy (cfg.gps_device, value, LEN_FILENAME);
if (!strcmp (keyword, "gps_flags")) {
cfg.gps_flags = atoi (value);
}
if (!strcmp (keyword, "debug")) {
cfg.debug = atoi (value);
}
#endif
}
fclose (f);
}
d_printf ("configpath: %s", cfg.configpath);
d_printf (" mappath: %s", cfg.mappath);
d_printf (" logpath: %s", cfg.logpath);
d_printf (" cachepath: %s", cfg.cachepath);
d_printf (" temppath: %s", cfg.temppath);
};
/*
* save config file
*/
void config_save () {
char filename[LEN_FILENAME];
FILE *f;
sprintf (filename, "%s%s", cfg.configpath, CONFIGFILE);
d_printf ("save config file:%s", filename);
f = fopen (filename, "w");
if (f) {
fprintf (f, "# config file for osmroute\n\n");
fprintf (f, "mappath=%s\n", cfg.mappath);
fprintf (f, "logpath=%s\n", cfg.logpath);
fprintf (f, "temppath=%s\n", cfg.temppath);
#if defined(SPOSMROUTE)
fprintf (f, "last_lon=%f\n", cfg.last_lon);
fprintf (f, "last_lat=%f\n", cfg.last_lat);
fprintf (f, "last_scale=%f\n", cfg.last_scale);
fprintf (f, "gps_flags=%d\n", cfg.gps_flags);
fprintf (f, "gps_device=%s\n", cfg.gps_device);
fprintf (f, "debug=%d\n", cfg.debug);
#endif
fclose (f);
}
};