changeset 1850:30f2821ffd65

Allow rom directory and rom name in screenshot path. Allow rom name in screenshot name. Remove ability for path variables to contain underscores
author Michael Pavone <pavone@retrodev.com>
date Tue, 23 Apr 2019 23:33:16 -0700
parents 6b5147f08846
children 419b458f93cd
files bindings.c blastem.c blastem.h util.c
diffstat 4 files changed, 19 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/bindings.c	Tue Apr 23 23:31:34 2019 -0700
+++ b/bindings.c	Tue Apr 23 23:33:16 2019 -0700
@@ -358,21 +358,30 @@
 				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;
--- a/blastem.c	Tue Apr 23 23:31:34 2019 -0700
+++ b/blastem.c	Tue Apr 23 23:33:16 2019 -0700
@@ -267,6 +267,7 @@
 		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 system_media cart, lock_on;
+const system_media *current_media(void)
+{
+	return &cart;
+}
+
 void reload_media(void)
 {
 	if (!current_system) {
--- a/blastem.h	Tue Apr 23 23:31:34 2019 -0700
+++ b/blastem.h	Tue Apr 23 23:33:16 2019 -0700
@@ -19,5 +19,6 @@
 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_
--- a/util.c	Tue Apr 23 23:31:34 2019 -0700
+++ b/util.c	Tue Apr 23 23:33:16 2019 -0700
@@ -80,7 +80,7 @@
 	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;