54#include <glib/gstdio.h>
55#include <glib/gprintf.h>
96 char *str_new = g_strdup(str);
104 str = (
char *)g_malloc0(
sizeof(int32_t));
119 const int is_overridden = (over && !strcmp(str, over));
127 return is_overridden;
132 char *str = g_strdup_printf(
"%d", val);
141 char *str = g_strdup_printf(
"%" PRId64, val);
150 char *str = (
char *)g_malloc(G_ASCII_DTOSTR_BUF_SIZE);
151 g_ascii_dtostr(str, G_ASCII_DTOSTR_BUF_SIZE, val);
160 char *str = g_strdup(val ?
"TRUE" :
"FALSE");
169 char *str = g_strdup(val);
182 if(GTK_IS_FILE_CHOOSER_NATIVE(chooser))
184 gchar *pathname = gtk_file_chooser_get_filename(chooser);
187 gchar *folder = g_path_get_dirname(pathname);
198 gchar *folder = gtk_file_chooser_get_current_folder(chooser);
220 char *fix_badval = g_strdup(def_val);
235 val = new_value + 0.5;
237 val = new_value - 0.5;
246 const int ret = CLAMP(val,
min,
max);
265 char *fix_badval = g_strdup(def_val);
280 val = new_value + 0.5;
282 val = new_value - 0.5;
291 const int64_t ret = CLAMP(val,
min,
max);
310 char *fix_badval = g_strdup(def_val);
330 const float ret = CLAMP(val,
min,
max);
367 const int val = (str[0] ==
'T') || (str[0] ==
't');
374 return g_strdup(str);
386 if(strlen(val) == 0)
return FALSE;
395 gtk_file_chooser_set_current_folder(chooser, folder);
404 return g_strcmp0(str,
value) == 0;
425 result = g_strdup_printf(
"%d", CLAMP(val,
min,
max));
436 result = g_strdup_printf(
"%"PRId64, CLAMP(val,
min,
max));
447 result = g_strdup_printf(
"%f", CLAMP(val,
min,
max));
452 if(strcasecmp(
value,
"true") && strcasecmp(
value,
"false"))
455 result = g_strdup(
value);
460 char *
v = g_strdup_printf(
"[%s]",
value);
464 result = g_strdup(
value);
469 result = g_strdup(
value);
487#define LINE_SIZE 1023
494 f = g_fopen(filename,
"rb");
502 const int read = fscanf(
f,
"%" STR(
LINE_SIZE)
"[^\r\n]\r\n", line);
506 char *end = line + strlen(line);
508 while(*c !=
'=' && c < end) c++;
514 char *
name = g_strdup(line);
533 while (g_hash_table_iter_next (&iter, &
key, &
value))
535 const char *
name = (
const char *)
key;
543 for(GSList *
p = override_entries;
p;
p = g_slist_next(
p))
567 if(strncmp(
key,
d->match, strlen(
d->match)) == 0)
570 nv->
key = g_strdup(
key + strlen(
d->match) + 1);
571 nv->
value = g_strdup(val);
572 d->result = g_slist_append(
d->result, nv);
752 return (int64_t)
value;
758 return !strcmp(str,
"true");
826 return g_strcmp0(def_val, cur_val) == 0;
835#define CONFIG_DIR "$(config)"
836#define HOME_DIR "$(home)"
843 path = g_strdup_printf(
"%s%s", configdir, dir + strlen(
CONFIG_DIR));
845 else if(g_str_has_prefix(dir,
HOME_DIR))
848 path = g_strdup_printf(
"%s%s", homedir, dir + strlen(
HOME_DIR));
851 else path = g_strdup(dir);
856 return normalized_path;
861 fprintf(
f,
"%s=%s\n",
key, val);
869 GList *keys = g_hash_table_get_keys(cf->
table);
870 GList *sorted = g_list_sort(keys, (GCompareFunc)g_strcmp0);
872 for(GList *iter = sorted; iter; iter = g_list_next(iter))
874 const gchar *
key = (
const gchar *)iter->data;
875 const gchar *val = (
const gchar *)g_hash_table_lookup(cf->
table,
key);
887 g_hash_table_unref(cf->
table);
float dt_calculator_solve(const float x, const char *formula)
static const dt_adaptation_t kind
static const dt_aligned_pixel_simd_t const dt_adaptation_t const float p
const dt_aligned_pixel_t f
static const float const float const float min
void dt_conf_cleanup(dt_conf_t *cf)
void dt_conf_string_entry_free(gpointer data)
void dt_conf_set_bool(const char *name, int val)
int dt_conf_get_bool(const char *name)
int dt_conf_key_exists(const char *key)
float dt_confgen_get_float(const char *name, dt_confgen_value_kind_t kind)
int64_t dt_conf_get_int64_fast(const char *name)
static char * _sanitize_confgen(const char *name, const char *value)
void dt_conf_init(dt_conf_t *cf, const char *filename, GSList *override_entries)
void dt_conf_set_float(const char *name, float val)
float dt_conf_get_float(const char *name)
const char * dt_confgen_get_tooltip(const char *name)
static void _conf_add(char *key, char *val, dt_conf_dreggn_t *d)
static int dt_conf_set_if_not_overridden(const char *name, char *str)
gchar * dt_conf_get_string(const char *name)
int dt_conf_get_int_fast(const char *name)
int dt_conf_get_and_sanitize_int(const char *name, int min, int max)
static void _free_confgen_value(void *value)
void dt_conf_set_int(const char *name, int val)
gboolean dt_confgen_get_bool(const char *name, dt_confgen_value_kind_t kind)
void dt_conf_set_int64(const char *name, int64_t val)
gchar * dt_conf_expand_default_dir(const char *dir)
GSList * dt_conf_all_string_entries(const char *dir)
gboolean dt_conf_is_default(const char *name)
int dt_conf_get_int(const char *name)
int64_t dt_conf_get_int64(const char *name)
gboolean dt_confgen_value_exists(const char *name, dt_confgen_value_kind_t kind)
int64_t dt_confgen_get_int64(const char *name, dt_confgen_value_kind_t kind)
gboolean dt_confgen_exists(const char *name)
int dt_confgen_get_int(const char *name, dt_confgen_value_kind_t kind)
void dt_conf_set_string(const char *name, const char *val)
float dt_conf_get_float_fast(const char *name)
const char * dt_conf_get_string_const(const char *name)
static char * dt_conf_get_var(const char *name)
const char * dt_confgen_get(const char *name, dt_confgen_value_kind_t kind)
void dt_conf_save(dt_conf_t *cf)
int64_t dt_conf_get_and_sanitize_int64(const char *name, int64_t min, int64_t max)
void dt_conf_set_folder_from_file_chooser(const char *name, GtkFileChooser *chooser)
dt_confgen_type_t dt_confgen_type(const char *name)
static void dt_conf_print(const gchar *key, const gchar *val, FILE *f)
gboolean dt_conf_is_equal(const char *name, const char *value)
const char * dt_confgen_get_label(const char *name)
gboolean dt_conf_get_folder_to_file_chooser(const char *name, GtkFileChooser *chooser)
float dt_conf_get_and_sanitize_float(const char *name, float min, float max)
gboolean dt_conf_key_not_empty(const char *name)
static void dt_free_gpointer(gpointer ptr)
static const dt_aligned_pixel_simd_t value
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
static int dt_pthread_mutex_unlock(dt_pthread_mutex_t *mutex) RELEASE(mutex) NO_THREAD_SAFETY_ANALYSIS
static int dt_pthread_mutex_init(dt_pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)
static int dt_pthread_mutex_destroy(dt_pthread_mutex_t *mutex)
static int dt_pthread_mutex_lock(dt_pthread_mutex_t *mutex) ACQUIRE(mutex) NO_THREAD_SAFETY_ANALYSIS
gchar * dt_loc_get_home_dir(const gchar *user)
void dt_loc_get_user_config_dir(char *configdir, size_t bufsize)
GHashTable * override_entries
gchar * dt_util_normalize_path(const gchar *_input)