#include "IntrinsicI.h"
#include "StringDefs.h"
#include "Shell.h"
#include "VarargsI.h"
#include "CreateI.h"
#if (defined(SUNSHLIB) || defined(AIXSHLIB)) && defined(SHAREDCODE)
#define XtToolkitInitialize _XtToolkitInitialize
#endif
static Widget
_XtVaCreateWidget(
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;
}
Widget
XtVaCreateWidget(
_Xconst char* name,
WidgetClass widget_class,
Widget parent,
...)
{
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((String)name, widget_class, parent, var,
total_count);
va_end(var);
UNLOCK_APP(app);
return widget;
}
Widget
XtVaCreateManagedWidget(
_Xconst char* name,
WidgetClass widget_class,
Widget parent,
...)
{
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((String)name, widget_class, parent, var,
total_count);
XtManageChild(widget);
va_end(var);
UNLOCK_APP(app);
return widget;
}
Widget
XtVaAppCreateShell(
_Xconst char* name,
_Xconst char* class,
WidgetClass widget_class,
Display* display,
...)
{
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((String)name, (String)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;
}
Widget
XtVaCreatePopupShell(
_Xconst char* name,
WidgetClass widget_class,
Widget parent,
...)
{
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((String)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;
}
void
XtVaSetValues(Widget widget, ...)
{
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);
}
void
XtVaSetSubvalues(XtPointer base, XtResourceList resources, Cardinal num_resources, ...)
{
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);
}
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)
{
XtAppContext app_con;
Display * dpy;
register int saved_argc = *argc_in_out;
Widget root;
String attr;
int count = 0;
XtTypedArgList typed_args;
XtToolkitInitialize();
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);
}
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)
{
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))
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;
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);
}
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;
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