Blame src/OCWrap.c

Packit 5bd3a9
/*
Packit 5bd3a9
 * Copyright 1992, 1993 by TOSHIBA Corp.
Packit 5bd3a9
 *
Packit 5bd3a9
 * Permission to use, copy, modify, and distribute this software and its
Packit 5bd3a9
 * documentation for any purpose and without fee is hereby granted, provided
Packit 5bd3a9
 * that the above copyright notice appear in all copies and that both that
Packit 5bd3a9
 * copyright notice and this permission notice appear in supporting
Packit 5bd3a9
 * documentation, and that the name of TOSHIBA not be used in advertising
Packit 5bd3a9
 * or publicity pertaining to distribution of the software without specific,
Packit 5bd3a9
 * written prior permission. TOSHIBA make no representations about the
Packit 5bd3a9
 * suitability of this software for any purpose.  It is provided "as is"
Packit 5bd3a9
 * without express or implied warranty.
Packit 5bd3a9
 *
Packit 5bd3a9
 * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
Packit 5bd3a9
 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
Packit 5bd3a9
 * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
Packit 5bd3a9
 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
Packit 5bd3a9
 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
Packit 5bd3a9
 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
Packit 5bd3a9
 * SOFTWARE.
Packit 5bd3a9
 *
Packit 5bd3a9
 * Author: Katsuhisa Yano	TOSHIBA Corp.
Packit 5bd3a9
 *			   	mopi@osa.ilab.toshiba.co.jp
Packit 5bd3a9
 */
Packit 5bd3a9
Packit 5bd3a9
#ifdef HAVE_CONFIG_H
Packit 5bd3a9
#include <config.h>
Packit 5bd3a9
#endif
Packit 5bd3a9
#include "Xlibint.h"
Packit 5bd3a9
#include "Xlcint.h"
Packit 5bd3a9
Packit 5bd3a9
XOC
Packit 5bd3a9
XCreateOC(XOM om, ...)
Packit 5bd3a9
{
Packit 5bd3a9
    va_list var;
Packit 5bd3a9
    XlcArgList args;
Packit 5bd3a9
    XOC oc;
Packit 5bd3a9
    int num_args;
Packit 5bd3a9
Packit 5bd3a9
    va_start(var, om);
Packit 5bd3a9
    _XlcCountVaList(var, &num_args);
Packit 5bd3a9
    va_end(var);
Packit 5bd3a9
Packit 5bd3a9
    va_start(var, om);
Packit 5bd3a9
    _XlcVaToArgList(var, num_args, &args);
Packit 5bd3a9
    va_end(var);
Packit 5bd3a9
Packit 5bd3a9
    if (args == (XlcArgList) NULL)
Packit 5bd3a9
	return (XOC) NULL;
Packit 5bd3a9
Packit 5bd3a9
    oc = (*om->methods->create_oc)(om, args, num_args);
Packit 5bd3a9
Packit 5bd3a9
    Xfree(args);
Packit 5bd3a9
Packit 5bd3a9
    if (oc) {
Packit 5bd3a9
	oc->core.next = om->core.oc_list;
Packit 5bd3a9
	om->core.oc_list = oc;
Packit 5bd3a9
    }
Packit 5bd3a9
Packit 5bd3a9
    return oc;
Packit 5bd3a9
}
Packit 5bd3a9
Packit 5bd3a9
void
Packit 5bd3a9
XDestroyOC(XOC oc)
Packit 5bd3a9
{
Packit 5bd3a9
    XOC prev, oc_list;
Packit 5bd3a9
Packit 5bd3a9
    prev = oc_list = oc->core.om->core.oc_list;
Packit 5bd3a9
    if (oc_list == oc)
Packit 5bd3a9
	oc->core.om->core.oc_list = oc_list->core.next;
Packit 5bd3a9
    else {
Packit 5bd3a9
	while ((oc_list = oc_list->core.next)) {
Packit 5bd3a9
	    if (oc_list == oc) {
Packit 5bd3a9
		prev->core.next = oc_list->core.next;
Packit 5bd3a9
		break;
Packit 5bd3a9
	    }
Packit 5bd3a9
	    prev = oc_list;
Packit 5bd3a9
	}
Packit 5bd3a9
    }
Packit 5bd3a9
Packit 5bd3a9
    (*oc->methods->destroy)(oc);
Packit 5bd3a9
}
Packit 5bd3a9
Packit 5bd3a9
XOM
Packit 5bd3a9
XOMOfOC(XOC oc)
Packit 5bd3a9
{
Packit 5bd3a9
    return oc->core.om;
Packit 5bd3a9
}
Packit 5bd3a9
Packit 5bd3a9
char *
Packit 5bd3a9
XSetOCValues(XOC oc, ...)
Packit 5bd3a9
{
Packit 5bd3a9
    va_list var;
Packit 5bd3a9
    XlcArgList args;
Packit 5bd3a9
    char *ret;
Packit 5bd3a9
    int num_args;
Packit 5bd3a9
Packit 5bd3a9
    va_start(var, oc);
Packit 5bd3a9
    _XlcCountVaList(var, &num_args);
Packit 5bd3a9
    va_end(var);
Packit 5bd3a9
Packit 5bd3a9
    va_start(var, oc);
Packit 5bd3a9
    _XlcVaToArgList(var, num_args, &args);
Packit 5bd3a9
    va_end(var);
Packit 5bd3a9
Packit 5bd3a9
    if (args == (XlcArgList) NULL)
Packit 5bd3a9
	return (char *) NULL;
Packit 5bd3a9
Packit 5bd3a9
    ret = (*oc->methods->set_values)(oc, args, num_args);
Packit 5bd3a9
Packit 5bd3a9
    Xfree(args);
Packit 5bd3a9
Packit 5bd3a9
    return ret;
Packit 5bd3a9
}
Packit 5bd3a9
Packit 5bd3a9
char *
Packit 5bd3a9
XGetOCValues(XOC oc, ...)
Packit 5bd3a9
{
Packit 5bd3a9
    va_list var;
Packit 5bd3a9
    XlcArgList args;
Packit 5bd3a9
    char *ret;
Packit 5bd3a9
    int num_args;
Packit 5bd3a9
Packit 5bd3a9
    va_start(var, oc);
Packit 5bd3a9
    _XlcCountVaList(var, &num_args);
Packit 5bd3a9
    va_end(var);
Packit 5bd3a9
Packit 5bd3a9
    va_start(var, oc);
Packit 5bd3a9
    _XlcVaToArgList(var, num_args, &args);
Packit 5bd3a9
    va_end(var);
Packit 5bd3a9
Packit 5bd3a9
    if (args == (XlcArgList) NULL)
Packit 5bd3a9
	return (char *) NULL;
Packit 5bd3a9
Packit 5bd3a9
    ret = (*oc->methods->get_values)(oc, args, num_args);
Packit 5bd3a9
Packit 5bd3a9
    Xfree(args);
Packit 5bd3a9
Packit 5bd3a9
    return ret;
Packit 5bd3a9
}