summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2019-04-23 23:33:16 -0700
committerMichael Pavone <pavone@retrodev.com>2019-04-23 23:33:16 -0700
commitf860d1303a1393ce2bd010ae023011c8ce87a537 (patch)
tree4bc93d89837b925f2544a07d77bf11bdd3637c96
parent3f57803b9a159b23ace70149ce56dfccb296e695 (diff)
Allow rom directory and rom name in screenshot path. Allow rom name in screenshot name. Remove ability for path variables to contain underscores
-rw-r--r--bindings.c13
-rw-r--r--blastem.c6
-rw-r--r--blastem.h1
-rw-r--r--util.c2
4 files changed, 19 insertions, 3 deletions
diff --git a/bindings.c b/bindings.c
index d2c797c..357a859 100644
--- a/bindings.c
+++ b/bindings.c
@@ -358,21 +358,30 @@ void handle_binding_up(keybinding * binding)
if (!screenshot_base) {
screenshot_base = "$HOME";
}
+ const system_media *media = current_media();
tern_node *vars = tern_insert_ptr(NULL, "HOME", get_home_dir());
vars = tern_insert_ptr(vars, "EXEDIR", get_exe_dir());
+ vars = tern_insert_ptr(vars, "USERDATA", (char *)get_userdata_dir());
+ vars = tern_insert_ptr(vars, "ROMNAME", media->name);
+ vars = tern_insert_ptr(vars, "ROMDIR", media->dir);
screenshot_base = replace_vars(screenshot_base, vars, 1);
tern_free(vars);
+ ensure_dir_exists(screenshot_base);
time_t now = time(NULL);
struct tm local_store;
char fname_part[256];
char *template = tern_find_path(config, "ui\0screenshot_template\0", TVAL_PTR).ptrval;
- if (!template) {
- template = "blastem_%c.ppm";
+ if (template) {
+ vars = tern_insert_ptr(NULL, "ROMNAME", media->name);
+ template = replace_vars(template, vars, 0);
+ } else {
+ template = strdup("blastem_%c.ppm");
}
strftime(fname_part, sizeof(fname_part), template, localtime_r(&now, &local_store));
char const *parts[] = {screenshot_base, PATH_SEP, fname_part};
char *path = alloc_concat_m(3, parts);
free(screenshot_base);
+ free(template);
render_save_screenshot(path);
}
break;
diff --git a/blastem.c b/blastem.c
index c56b93a..f052da0 100644
--- a/blastem.c
+++ b/blastem.c
@@ -267,6 +267,7 @@ static char *get_save_dir(system_media *media)
savedir_template = "$USERDATA/blastem/$ROMNAME";
}
tern_node *vars = tern_insert_ptr(NULL, "ROMNAME", media->name);
+ vars = tern_insert_ptr(vars, "ROMDIR", media->dir);
vars = tern_insert_ptr(vars, "HOME", get_home_dir());
vars = tern_insert_ptr(vars, "EXEDIR", get_exe_dir());
vars = tern_insert_ptr(vars, "USERDATA", (char *)get_userdata_dir());
@@ -343,6 +344,11 @@ static void on_drag_drop(const char *filename)
}
static system_media cart, lock_on;
+const system_media *current_media(void)
+{
+ return &cart;
+}
+
void reload_media(void)
{
if (!current_system) {
diff --git a/blastem.h b/blastem.h
index f33e3aa..6827529 100644
--- a/blastem.h
+++ b/blastem.h
@@ -19,5 +19,6 @@ void reload_media(void);
void lockon_media(char *lock_on_path);
void init_system_with_media(const char *path, system_type force_stype);
void apply_updated_config(void);
+const system_media *current_media(void);
#endif //BLASTEM_H_
diff --git a/util.c b/util.c
index 4826959..e22dfc2 100644
--- a/util.c
+++ b/util.c
@@ -80,7 +80,7 @@ char *replace_vars(char *base, tern_node *vars, uint8_t allow_env)
for (char *cur = base; *cur; ++cur)
{
if (in_var) {
- if (!(*cur == '_' || isalnum(*cur))) {
+ if (!isalnum(*cur)) {
positions[num_vars].end = cur-base;
if (positions[num_vars].end - positions[num_vars].start > max_var_len) {
max_var_len = positions[num_vars].end - positions[num_vars].start;