213 lines
3.9 KiB
C
213 lines
3.9 KiB
C
#include <limits.h>
|
|
#include <pwd.h>
|
|
#include <unistd.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/types.h>
|
|
#include <stdio.h>
|
|
#include <errno.h>
|
|
#include <fcntl.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
|
|
#include <sys/unistd.h>
|
|
|
|
#include "snprintf.h"
|
|
#include "sdl_iconv.h"
|
|
#include "internals.h"
|
|
|
|
#ifndef PATH_MAX
|
|
#define PATH_MAX 256
|
|
#endif
|
|
|
|
static char save_path[PATH_MAX];
|
|
static char cfg_path[PATH_MAX];
|
|
static char local_games_path[PATH_MAX];
|
|
static char local_themes_path[PATH_MAX];
|
|
static char local_stead_path[PATH_MAX];
|
|
|
|
extern void s60delay(int u);
|
|
|
|
void nsleep(int u)
|
|
{
|
|
s60delay(u);
|
|
}
|
|
|
|
char *game_locale(void)
|
|
{
|
|
char *p;
|
|
char *s;
|
|
p = getenv("LANG");
|
|
if (!p || !(s = strdup(p)))
|
|
return NULL;
|
|
if ((p = strchr(s, '_')))
|
|
*p = 0;
|
|
return s;
|
|
}
|
|
|
|
char *game_tmp_path(void)
|
|
{
|
|
static char tmp[PATH_MAX]="/tmp/instead-games";
|
|
if (mkdir(tmp, S_IRWXU) && errno != EEXIST)
|
|
return NULL;
|
|
return tmp;
|
|
}
|
|
|
|
extern char *BROWSE_MENU;
|
|
|
|
extern char *get_file_name(void);
|
|
|
|
char *open_file_dialog(void)
|
|
{
|
|
#ifdef _USE_BROWSE
|
|
char *p;
|
|
unix_path((p = get_file_name()));
|
|
fprintf(stderr,"Selected file: %s\n", p);
|
|
return p;
|
|
#else
|
|
return NULL;
|
|
#endif
|
|
}
|
|
|
|
char *appdir(void)
|
|
{
|
|
static char dir[PATH_MAX];
|
|
if (appdata_sw)
|
|
strcpy(dir, appdata_sw);
|
|
else {
|
|
strcpy(dir, game_cwd);
|
|
strcat(dir, "/appdata");
|
|
}
|
|
return dir;
|
|
}
|
|
|
|
char *game_local_games_path(int cr)
|
|
{
|
|
char *app = appdir();
|
|
if (!app)
|
|
return NULL;
|
|
strcpy(local_games_path, app);
|
|
if (cr) {
|
|
if (mkdir(local_games_path, S_IRWXU) && errno != EEXIST)
|
|
return NULL;
|
|
}
|
|
strcat(local_games_path,"/games");
|
|
if (cr) {
|
|
if (mkdir(local_games_path, S_IRWXU) && errno != EEXIST)
|
|
return NULL;
|
|
}
|
|
return local_games_path;
|
|
}
|
|
|
|
char *game_local_themes_path(void)
|
|
{
|
|
char *app = appdir();
|
|
if (!app)
|
|
return NULL;
|
|
snprintf(local_themes_path, sizeof(local_themes_path) - 1 , "%s/themes", app);
|
|
return local_themes_path;
|
|
}
|
|
|
|
char *game_local_stead_path(void)
|
|
{
|
|
char *app = appdir();
|
|
if (!app)
|
|
return NULL;
|
|
snprintf(local_stead_path, sizeof(local_stead_path) - 1 , "%s/stead/", app);
|
|
return local_stead_path;
|
|
}
|
|
|
|
char *game_cfg_path(void)
|
|
{
|
|
char *app = appdir();
|
|
if (!app)
|
|
return NULL;
|
|
snprintf(cfg_path, sizeof(cfg_path) - 1 , "%s/insteadrc", app);
|
|
return cfg_path;
|
|
}
|
|
|
|
char *game_save_path(int cr, int nr)
|
|
{
|
|
char *app = appdir();
|
|
if (!curgame_dir)
|
|
return NULL;
|
|
if (!access("saves", R_OK)) {
|
|
if (nr)
|
|
snprintf(save_path, sizeof(save_path) - 1, "saves/save%d", nr);
|
|
else
|
|
snprintf(save_path, sizeof(save_path) - 1, "saves/autosave");
|
|
return save_path;
|
|
}
|
|
if (!app)
|
|
return NULL;
|
|
snprintf(save_path, sizeof(save_path) - 1 , "%s/", app);
|
|
if (cr && mkdir(save_path, S_IRWXU) && errno != EEXIST)
|
|
return NULL;
|
|
snprintf(save_path, sizeof(save_path) - 1 , "%s/saves", app);
|
|
if (cr && mkdir(save_path, S_IRWXU) && errno != EEXIST)
|
|
return NULL;
|
|
snprintf(save_path, sizeof(save_path) - 1, "%s/saves/%s/", app, curgame_dir);
|
|
if (cr && mkdir(save_path, S_IRWXU) && errno != EEXIST)
|
|
return NULL;
|
|
if (nr)
|
|
snprintf(save_path, sizeof(save_path) - 1, "%s/saves/%s/save%d", app, curgame_dir, nr);
|
|
else
|
|
snprintf(save_path, sizeof(save_path) - 1, "%s/saves/%s/autosave", app, curgame_dir);
|
|
return save_path;
|
|
}
|
|
|
|
int debug_init(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void debug_done()
|
|
{
|
|
|
|
}
|
|
|
|
char *sdl_path(char *p)
|
|
{
|
|
unix_path(p);
|
|
return p;
|
|
}
|
|
|
|
int setdir(const char *path)
|
|
{
|
|
return chdir(path);
|
|
}
|
|
|
|
char *getdir(char *path, size_t size)
|
|
{
|
|
return getcwd(path, size);
|
|
}
|
|
|
|
char *dirpath(const char *path)
|
|
{
|
|
return (char*)path;
|
|
}
|
|
|
|
char *dirname(char *path)
|
|
{
|
|
char *p;
|
|
if (path == NULL || *path == '\0')
|
|
return ".";
|
|
p = path + strlen(path) - 1;
|
|
while (*p == '/') {
|
|
if (p == path)
|
|
return path;
|
|
*p-- = '\0';
|
|
}
|
|
while (p >= path && *p != '/')
|
|
p--;
|
|
return p < path ? "." : p == path ? "/" : (*p = '\0', path);
|
|
}
|
|
|
|
char* basename (char* path)
|
|
{
|
|
char *ptr = path;
|
|
int l = 0;
|
|
while (ptr[(l = strcspn (ptr, "\\//"))])
|
|
ptr += l + 1;
|
|
return ptr;
|
|
}
|