static XIM _XDynamicOpenIM(XLCd lcd, Display *display, XrmDatabase rdb, char *res_name, char *res_class) { XIM im = (XIM)NULL; char lc_dir[BUFSIZE]; char *lc_name; dynamicOpenProcp im_openIM = (dynamicOpenProcp)NULL; int count; XI18NObjectsList objects_list = xi18n_objects_list; lc_name = lcd->core->name; if (_XlcLocaleLibDirName(lc_dir, BUFSIZE, lc_name) == NULL) return (XIM)0; count = lc_count; for (; count-- > 0; objects_list++) { if (objects_list->type != XIM_OBJECT || strcmp(objects_list->locale_name, lc_name)) continue; if (!open_object (objects_list, lc_dir)) continue; im_openIM = (dynamicOpenProcp)fetch_symbol(objects_list, objects_list->open); if (!im_openIM) continue; im = (*im_openIM)(lcd, display, rdb, res_name, res_class); if (im != (XIM)NULL) { break; } close_object (objects_list); } return (XIM)im; }
XLCd _XlcDynamicLoad(const char *lc_name) { XLCd lcd = (XLCd)NULL; dynamicLoadProc lc_loader = (dynamicLoadProc)NULL; int count; XI18NObjectsList objects_list; char lc_dir[BUFSIZE]; if (lc_name == NULL) return (XLCd)NULL; if (_XlcLocaleDirName(lc_dir, BUFSIZE, (char *)lc_name) == (char*)NULL) return (XLCd)NULL; resolve_object(lc_dir, lc_name); objects_list = xi18n_objects_list; count = lc_count; for (; count-- > 0; objects_list++) { if (objects_list->type != XLC_OBJECT || strcmp(objects_list->locale_name, lc_name)) continue; if (!open_object (objects_list, lc_dir)) continue; lc_loader = (dynamicLoadProc)fetch_symbol (objects_list, objects_list->open); if (!lc_loader) continue; lcd = (*lc_loader)(lc_name); if (lcd != (XLCd)NULL) { break; } close_object (objects_list); } return (XLCd)lcd; }
static int print_quotation(FILE *out, obj_t obj) { obj_t sym = car(obj); if (!is_symbol(sym)) return 0; if (!is_pair(cdr(obj))) return 0; if (!is_null(cdr(cdr(obj)))) return 0; register_quotation_symbols(); if (fetch_symbol(sym) == S_QUOTE) { fputs("'", out); } else if (fetch_symbol(sym) == S_QUASIQUOTE) { fputs("`", out); } else if (fetch_symbol(sym) == S_UNQUOTE) { fputs(",", out); } else if (fetch_symbol(sym) == S_UNQUOTE_SPLICING) { fputs(",@", out); } else { return 0; } print_atom(out, car(cdr(obj))); return 1; }
static Bool _XDynamicUnRegisterIMInstantiateCallback( XLCd lcd, Display *display, XrmDatabase rdb, char *res_name, char *res_class, XIDProc callback, XPointer client_data) { char lc_dir[BUFSIZE]; const char *lc_name; dynamicUnregisterProcp im_unregisterIM = (dynamicUnregisterProcp)NULL; Bool ret_flag = False; int count; XI18NObjectsList objects_list = xi18n_objects_list; #if defined(hpux) int getsyms_cnt, i; struct shl_symbol *symbols; #endif lc_name = lcd->core->name; if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return False; count = lc_count; for (; count-- > 0; objects_list++) { if (objects_list->type != XIM_OBJECT || strcmp(objects_list->locale_name, lc_name)) continue; if (!objects_list->refcount) /* Must already be opened */ continue; im_unregisterIM = (dynamicUnregisterProcp)fetch_symbol(objects_list, objects_list->im_unregister); if (!im_unregisterIM) continue; ret_flag = (*im_unregisterIM)(lcd, display, rdb, res_name, res_class, callback, client_data); if (ret_flag) { close_object (objects_list); /* opened in RegisterIMInstantiateCallback */ break; } } return (Bool)ret_flag; }
static void print_atom(FILE *out, obj_t obj) { if (eq(obj, unspecific)) { fputs("#<unspecified>", out); } else if (is_null(obj)) { fputs("()", out); } else if (is_bool(obj)) { if (fetch_bool(obj)) fputs("#t", out); else fputs("#f", out); } else if (is_symbol(obj)) { print_string(out, fetch_symbol(obj)); } else if (is_num(obj)) { fprintf(out, "%ld", (long)fetch_num(obj)); } else if (is_char(obj)) { char ch = fetch_char(obj); switch (ch) { case ' ': fputs("#\\space", out); break; case '\n': fputs("#\\newline", out); break; default: fprintf(out, "#\\%c", ch); break; } } else if (is_string(obj)) { putc('"', out); print_string(out, fetch_string(obj)); putc('"', out); } else if (is_pair(obj)) { if (!print_quotation(out, obj)) print_list(out, obj); } else { fputs("#<unknown>", out); /* TODO: function, lambda */ } }
static XOM _XDynamicOpenOM(XLCd lcd, Display *display, XrmDatabase rdb, _Xconst char *res_name, _Xconst char *res_class) { XOM om = (XOM)NULL; int count; char lc_dir[BUFSIZE]; char *lc_name; dynamicIOpenProcp om_openOM = (dynamicIOpenProcp)NULL; XI18NObjectsList objects_list = xi18n_objects_list; #if defined(hpux) int getsyms_cnt, i; struct shl_symbol *symbols; #endif lc_name = lcd->core->name; if (_XlcLocaleLibDirName(lc_dir, BUFSIZE, lc_name) == NULL) return (XOM)0; count = lc_count; for (; count-- > 0; objects_list++) { if (objects_list->type != XOM_OBJECT || strcmp(objects_list->locale_name, lc_name)) continue; if (!open_object (objects_list, lc_dir)) continue; om_openOM = (dynamicIOpenProcp)fetch_symbol(objects_list, objects_list->open); if (!om_openOM) continue; om = (*om_openOM)(lcd, display, rdb, res_name, res_class); if (om != (XOM)NULL) { break; } close_object(objects_list); } return (XOM)om; }