summaryrefslogtreecommitdiff
path: root/src/VarCreate.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/VarCreate.c')
-rw-r--r--src/VarCreate.c509
1 files changed, 509 insertions, 0 deletions
diff --git a/src/VarCreate.c b/src/VarCreate.c
new file mode 100644
index 0000000..3d9614d
--- /dev/null
+++ b/src/VarCreate.c
@@ -0,0 +1,509 @@
+/* $Xorg: VarCreate.c,v 1.4 2001/02/09 02:03:59 xorgcvs Exp $ */
+
+/*
+
+Copyright 1993 by Sun Microsystems, Inc. Mountain View, CA.
+
+Permission to use, copy, modify, and distribute this
+software and its documentation for any purpose and without
+fee is hereby granted, provided that the above copyright
+notice appear in all copies and that both that copyright
+notice and this permission notice appear in supporting
+documentation, and that the name Sun not be used in
+advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+Sun makes no representations about the suitability of
+this software for any purpose. It is provided "as is"
+without express or implied warranty.
+
+SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
+NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI-
+ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
+THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/*
+
+Copyright 1885, 1986, 1987, 1988, 1989, 1994, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+*/
+
+#include "IntrinsicI.h"
+#include "StringDefs.h"
+#include "Shell.h"
+#include "VarargsI.h"
+
+#if (defined(SUNSHLIB) || defined(AIXSHLIB)) && defined(SHAREDCODE)
+#define XtToolkitInitialize _XtToolkitInitialize
+#endif /* (SUNSHLIB || AIXSHLIB) && SHAREDCODE */
+
+extern Widget _XtCreateWidget();
+extern Widget _XtAppCreateShell();
+extern Widget _XtCreatePopupShell();
+
+static Widget
+_XtVaCreateWidget(name, widget_class, parent, var, count)
+ String name;
+ WidgetClass widget_class;
+ Widget parent;
+ va_list var;
+ int count;
+{
+ register Widget widget;
+ XtTypedArgList typed_args = NULL;
+ Cardinal num_args;
+
+ _XtVaToTypedArgList(var, count, &typed_args, &num_args);
+
+ widget = _XtCreateWidget(name, widget_class, parent, (ArgList)NULL,
+ (Cardinal)0, typed_args, num_args);
+
+ if (typed_args != NULL) {
+ XtFree((XtPointer)typed_args);
+ }
+
+ return widget;
+}
+
+
+#if NeedVarargsPrototypes
+Widget
+XtVaCreateWidget(
+ _Xconst char* name,
+ WidgetClass widget_class,
+ Widget parent,
+ ...)
+#else
+/*VARARGS3*/
+Widget XtVaCreateWidget(name, widget_class, parent, va_alist)
+ String name;
+ WidgetClass widget_class;
+ Widget parent;
+ va_dcl
+#endif
+{
+ va_list var;
+ register Widget widget;
+ int total_count, typed_count;
+ WIDGET_TO_APPCON(parent);
+
+ LOCK_APP(app);
+ Va_start(var,parent);
+ _XtCountVaList(var, &total_count, &typed_count);
+ va_end(var);
+
+ Va_start(var,parent);
+ widget = _XtVaCreateWidget(name, widget_class, parent, var, total_count);
+ va_end(var);
+ UNLOCK_APP(app);
+ return widget;
+}
+
+
+#if NeedVarargsPrototypes
+Widget
+XtVaCreateManagedWidget(
+ _Xconst char* name,
+ WidgetClass widget_class,
+ Widget parent,
+ ...)
+#else
+/*VARARGS3*/
+Widget XtVaCreateManagedWidget(name, widget_class, parent, va_alist)
+ String name;
+ WidgetClass widget_class;
+ Widget parent;
+ va_dcl
+#endif
+{
+ va_list var;
+ register Widget widget;
+ int total_count, typed_count;
+ WIDGET_TO_APPCON(parent);
+
+ LOCK_APP(app);
+ Va_start(var,parent);
+ _XtCountVaList(var, &total_count, &typed_count);
+ va_end(var);
+
+ Va_start(var,parent);
+ widget = _XtVaCreateWidget(name, widget_class, parent, var, total_count);
+ XtManageChild(widget);
+ va_end(var);
+ UNLOCK_APP(app);
+ return widget;
+}
+
+
+#if NeedVarargsPrototypes
+Widget
+XtVaAppCreateShell(
+ _Xconst char* name,
+ _Xconst char* class,
+ WidgetClass widget_class,
+ Display* display,
+ ...)
+#else
+/*VARARGS4*/
+Widget XtVaAppCreateShell(name, class, widget_class, display, va_alist)
+ String name;
+ String class;
+ WidgetClass widget_class;
+ Display* display;
+ va_dcl
+#endif
+{
+ va_list var;
+ register Widget widget;
+ XtTypedArgList typed_args = NULL;
+ Cardinal num_args;
+ int total_count, typed_count;
+ DPY_TO_APPCON(display);
+
+ LOCK_APP(app);
+ Va_start(var,display);
+ _XtCountVaList(var, &total_count, &typed_count);
+ va_end(var);
+
+ Va_start(var,display);
+
+ _XtVaToTypedArgList(var, total_count, &typed_args, &num_args);
+ widget = _XtAppCreateShell(name, class, widget_class, display,
+ (ArgList)NULL, (Cardinal)0, typed_args, num_args);
+ if (typed_args != NULL) {
+ XtFree((XtPointer)typed_args);
+ }
+
+ va_end(var);
+ UNLOCK_APP(app);
+ return widget;
+}
+
+
+#if NeedVarargsPrototypes
+Widget
+XtVaCreatePopupShell(
+ _Xconst char* name,
+ WidgetClass widget_class,
+ Widget parent,
+ ...)
+#else
+/*VARARGS3*/
+Widget XtVaCreatePopupShell(name, widget_class, parent, va_alist)
+ String name;
+ WidgetClass widget_class;
+ Widget parent;
+ va_dcl
+#endif
+{
+ va_list var;
+ register Widget widget;
+ XtTypedArgList typed_args = NULL;
+ Cardinal num_args;
+ int total_count, typed_count;
+ WIDGET_TO_APPCON(parent);
+
+ LOCK_APP(app);
+ Va_start(var,parent);
+ _XtCountVaList(var, &total_count, &typed_count);
+ va_end(var);
+
+ Va_start(var,parent);
+
+ _XtVaToTypedArgList(var, total_count, &typed_args, &num_args);
+ widget = _XtCreatePopupShell(name, widget_class, parent,
+ (ArgList)NULL, (Cardinal)0, typed_args, num_args);
+ if (typed_args != NULL) {
+ XtFree((XtPointer)typed_args);
+ }
+
+ va_end(var);
+ UNLOCK_APP(app);
+ return widget;
+}
+
+#if NeedVarargsPrototypes
+void
+XtVaSetValues(Widget widget, ...)
+#else
+/*VARARGS1*/
+void XtVaSetValues(widget, va_alist)
+ Widget widget;
+ va_dcl
+#endif
+{
+ va_list var;
+ ArgList args = NULL;
+ Cardinal num_args;
+ int total_count, typed_count;
+ WIDGET_TO_APPCON(widget);
+
+ LOCK_APP(app);
+ Va_start(var,widget);
+ _XtCountVaList(var, &total_count, &typed_count);
+ va_end(var);
+
+ Va_start(var,widget);
+
+ _XtVaToArgList(widget, var, total_count, &args, &num_args);
+ XtSetValues(widget, args, num_args);
+ _XtFreeArgList(args, total_count, typed_count);
+
+ UNLOCK_APP(app);
+ va_end(var);
+}
+
+
+#if NeedVarargsPrototypes
+void
+XtVaSetSubvalues(XtPointer base, XtResourceList resources, Cardinal num_resources, ...)
+#else
+/*VARARGS3*/
+void XtVaSetSubvalues(base, resources, num_resources, va_alist)
+ XtPointer base;
+ XtResourceList resources;
+ Cardinal num_resources;
+ va_dcl
+#endif
+{
+ va_list var;
+ ArgList args;
+ Cardinal num_args;
+ int total_count, typed_count;
+
+ Va_start(var, num_resources);
+ _XtCountVaList(var, &total_count, &typed_count);
+ va_end(var);
+
+ if (typed_count != 0) {
+ XtWarning("XtVaTypedArg is not valid in XtVaSetSubvalues()\n");
+ }
+
+ Va_start(var, num_resources);
+ _XtVaToArgList((Widget)NULL, var, total_count, &args, &num_args);
+
+ XtSetSubvalues(base, resources, num_resources, args, num_args);
+
+ if (num_args != 0) {
+ XtFree((XtPointer)args);
+ }
+
+ va_end(var);
+}
+
+#if NeedVarargsPrototypes
+Widget
+_XtVaOpenApplication(
+ XtAppContext *app_context_return,
+ _Xconst char* application_class,
+ XrmOptionDescList options,
+ Cardinal num_options,
+ int *argc_in_out,
+ String *argv_in_out,
+ String *fallback_resources,
+ WidgetClass widget_class,
+ va_list var_args)
+#else
+/*VARARGS8*/
+Widget _XtVaOpenApplication(app_context_return, application_class, options,
+ num_options, argc_in_out, argv_in_out,
+ fallback_resources, widget_class, var_args)
+ XtAppContext *app_context_return;
+ char *application_class;
+ XrmOptionDescList options;
+ Cardinal num_options;
+ int *argc_in_out;
+ String *argv_in_out;
+ String *fallback_resources;
+ WidgetClass widget_class;
+ va_list var_args;
+#endif
+{
+ XtAppContext app_con;
+ Display * dpy;
+ register int saved_argc = *argc_in_out;
+ Widget root;
+ String attr;
+ int count = 0;
+ XtTypedArgList typed_args;
+
+ XtToolkitInitialize(); /* cannot be moved into _XtAppInit */
+
+ dpy = _XtAppInit(&app_con, (String)application_class, options, num_options,
+ argc_in_out, &argv_in_out, fallback_resources);
+
+ typed_args = (XtTypedArgList) __XtMalloc((unsigned) sizeof(XtTypedArg));
+ attr = va_arg (var_args, String);
+ for(; attr != NULL; attr = va_arg (var_args, String)) {
+ if (strcmp(attr, XtVaTypedArg) == 0) {
+ typed_args[count].name = va_arg(var_args, String);
+ typed_args[count].type = va_arg(var_args, String);
+ typed_args[count].value = va_arg(var_args, XtArgVal);
+ typed_args[count].size = va_arg(var_args, int);
+ } else {
+ typed_args[count].name = attr;
+ typed_args[count].type = NULL;
+ typed_args[count].value = va_arg(var_args, XtArgVal);
+ typed_args[count].size = 0;
+ }
+ count++;
+ typed_args = (XtTypedArgList)
+ XtRealloc((char *) typed_args,
+ (unsigned) (count + 1) * sizeof(XtTypedArg));
+ }
+ typed_args[count].name = NULL;
+
+ va_end (var_args);
+
+ root =
+ XtVaAppCreateShell( NULL, application_class,
+ widget_class, dpy,
+ XtNscreen, (XtArgVal)DefaultScreenOfDisplay(dpy),
+ XtNargc, (XtArgVal)saved_argc,
+ XtNargv, (XtArgVal)argv_in_out,
+ XtVaNestedList, (XtVarArgsList)typed_args,
+ NULL );
+
+ if (app_context_return != NULL)
+ *app_context_return = app_con;
+
+ XtFree((XtPointer)typed_args);
+ XtFree((XtPointer)argv_in_out);
+ return(root);
+}
+
+#if NeedVarargsPrototypes
+Widget
+_XtVaAppInitialize(
+ XtAppContext *app_context_return,
+ _Xconst char* application_class,
+ XrmOptionDescList options,
+ Cardinal num_options,
+ int *argc_in_out,
+ String *argv_in_out,
+ String *fallback_resources,
+ va_list var_args)
+#else
+/*VARARGS7*/
+Widget _XtVaAppInitialize(app_context_return, application_class, options,
+ num_options, argc_in_out, argv_in_out,
+ fallback_resources, var_args)
+ XtAppContext *app_context_return;
+ char *application_class;
+ XrmOptionDescList options;
+ Cardinal num_options;
+ int *argc_in_out;
+ String *argv_in_out;
+ String *fallback_resources;
+ va_list var_args;
+#endif
+{
+ return _XtVaOpenApplication(app_context_return, application_class,
+ options, num_options,
+ argc_in_out, argv_in_out, fallback_resources,
+ applicationShellWidgetClass, var_args);
+}
+
+#if !((defined(SUNSHLIB) || defined(AIXSHLIB)) && defined(SHAREDCODE))
+
+/*
+ * If not used as a shared library, we still need a front end to
+ * _XtVaOpenApplication and to _XtVaAppInitialize.
+ */
+
+#if NeedVarargsPrototypes
+Widget
+XtVaOpenApplication(
+ XtAppContext *app_context_return,
+ _Xconst char* application_class,
+ XrmOptionDescList options,
+ Cardinal num_options,
+ int *argc_in_out,
+ String *argv_in_out,
+ String *fallback_resources,
+ WidgetClass widget_class,
+ ...)
+#else
+Widget XtVaOpenApplication(app_context_return, application_class, options,
+ num_options, argc_in_out, argv_in_out,
+ fallback_resources, widget_class, va_alist)
+ XtAppContext *app_context_return;
+ String application_class;
+ XrmOptionDescList options;
+ Cardinal num_options;
+ int *argc_in_out;
+ String *argv_in_out;
+ String *fallback_resources;
+ WidgetClass widget_class;
+ va_dcl
+#endif
+{
+ va_list var;
+
+ Va_start(var, widget_class);
+ return _XtVaOpenApplication(app_context_return, (String)application_class,
+ options, num_options, argc_in_out, argv_in_out,
+ fallback_resources, widget_class, var);
+}
+
+#if NeedVarargsPrototypes
+Widget
+XtVaAppInitialize(
+ XtAppContext *app_context_return,
+ _Xconst char* application_class,
+ XrmOptionDescList options,
+ Cardinal num_options,
+ int *argc_in_out,
+ String *argv_in_out,
+ String *fallback_resources,
+ ...)
+#else
+Widget XtVaAppInitialize(app_context_return, application_class, options,
+ num_options, argc_in_out, argv_in_out,
+ fallback_resources, va_alist)
+ XtAppContext *app_context_return;
+ String application_class;
+ XrmOptionDescList options;
+ Cardinal num_options;
+ int *argc_in_out;
+ String *argv_in_out;
+ String *fallback_resources;
+ va_dcl
+#endif
+{
+ va_list var;
+
+ Va_start(var, fallback_resources);
+ return _XtVaOpenApplication(app_context_return, (String)application_class,
+ options, num_options, argc_in_out, argv_in_out,
+ fallback_resources,
+ applicationShellWidgetClass, var);
+}
+
+#endif /* !((SUNSHLIB || AIXSHLIB) && SHAREDCODE) */
+