Ejemplo n.º 1
0
Archivo: XlcDL.c Proyecto: iquiw/xsrc
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;
}
Ejemplo n.º 2
0
Archivo: XlcDL.c Proyecto: aosm/X11
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;
}
Ejemplo n.º 3
0
Archivo: read.c Proyecto: miklos1/scene
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;
}
Ejemplo n.º 4
0
Archivo: XlcDL.c Proyecto: iquiw/xsrc
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;
}
Ejemplo n.º 5
0
Archivo: read.c Proyecto: miklos1/scene
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 */
	}
}
Ejemplo n.º 6
0
Archivo: XlcDL.c Proyecto: iquiw/xsrc
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;
}