137
139
#if UIM_SCM_GCC4_READY_GC
138
140
static char *literalize_string_internal(const char *str);
139
static uim_bool custom_cb_add_internal(const char *hook, const char *validator,
140
const char *custom_sym, void *ptr,
141
const char *gate_func, void (*cb)(void));
142
struct custom_cb_add_args {
144
const char *validator;
145
const char *custom_sym;
147
const char *gate_func;
150
static void *custom_cb_add_internal(struct custom_cb_add_args *args);
144
153
static const char str_list_arg[] = "uim-custom-c-str-list-arg";
152
161
literalize_string(const char *str)
153
162
#if UIM_SCM_GCC4_READY_GC
157
UIM_SCM_GC_PROTECTED_CALL(ret, char *, literalize_string_internal, (str));
164
return uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)literalize_string_internal, (void *)str);
824
UIM_EVAL_STRING(NULL, "(string-append (getenv \"HOME\") \"/.uim.d\")");
829
UIM_EVAL_STRING(NULL, "(string-append (or (getenv \"HOME\") \"\") \"/.uim.d\")");
825
830
dir = uim_scm_c_str(uim_scm_return_value());
827
832
UIM_EVAL_FSTRING2(NULL, "\"%s/%s\"", dir, subpath);
1463
1468
const char *gate_func, void (*cb)(void))
1464
1469
#if UIM_SCM_GCC4_READY_GC
1468
UIM_SCM_GC_PROTECTED_CALL(ret, uim_bool, custom_cb_add_internal,
1469
(hook, validator, custom_sym, ptr, gate_func, cb));
1471
struct custom_cb_add_args args;
1474
args.validator = validator;
1475
args.custom_sym = custom_sym;
1477
args.gate_func = gate_func;
1479
return (uim_bool)(uintptr_t)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)custom_cb_add_internal, &args);
1475
custom_cb_add_internal(const char *hook, const char *validator,
1476
const char *custom_sym, void *ptr,
1477
const char *gate_func, void (*cb)(void))
1483
custom_cb_add_internal(struct custom_cb_add_args *args)
1480
1486
uim_bool succeeded;
1481
#if !UIM_SCM_GCC4_READY_GC
1487
#if UIM_SCM_GCC4_READY_GC
1489
const char *validator;
1490
const char *custom_sym;
1492
const char *gate_func;
1482
1495
uim_lisp stack_start;
1486
#if !UIM_SCM_GCC4_READY_GC
1499
#if UIM_SCM_GCC4_READY_GC
1501
validator = args->validator;
1502
custom_sym = args->custom_sym;
1504
gate_func = args->gate_func;
1487
1507
uim_scm_gc_protect_stack(&stack_start);
1496
1516
form = uim_scm_cons(uim_scm_make_symbol("custom-register-cb"), form);
1497
1517
succeeded = uim_scm_c_bool(uim_scm_eval(form));
1499
#if !UIM_SCM_GCC4_READY_GC
1519
#if UIM_SCM_GCC4_READY_GC
1520
return (void *)(uintptr_t)succeeded;
1500
1522
uim_scm_gc_unprotect_stack(&stack_start);
1506
1528
static uim_bool