1444c061aSmrg/*
2444c061aSmrg
3fdf6a26fSmrgCopyright (c) 1993, Oracle and/or its affiliates.
41477040fSmrg
51477040fSmrgPermission is hereby granted, free of charge, to any person obtaining a
61477040fSmrgcopy of this software and associated documentation files (the "Software"),
71477040fSmrgto deal in the Software without restriction, including without limitation
81477040fSmrgthe rights to use, copy, modify, merge, publish, distribute, sublicense,
91477040fSmrgand/or sell copies of the Software, and to permit persons to whom the
101477040fSmrgSoftware is furnished to do so, subject to the following conditions:
111477040fSmrg
121477040fSmrgThe above copyright notice and this permission notice (including the next
131477040fSmrgparagraph) shall be included in all copies or substantial portions of the
141477040fSmrgSoftware.
151477040fSmrg
161477040fSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
171477040fSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
181477040fSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
191477040fSmrgTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
201477040fSmrgLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
211477040fSmrgFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
221477040fSmrgDEALINGS IN THE SOFTWARE.
23444c061aSmrg
24444c061aSmrg*/
25444c061aSmrg
26444c061aSmrg/*
27444c061aSmrg
28444c061aSmrgCopyright 1885, 1986, 1987, 1988, 1989, 1994, 1998  The Open Group
29444c061aSmrg
30444c061aSmrgPermission to use, copy, modify, distribute, and sell this software and its
31444c061aSmrgdocumentation for any purpose is hereby granted without fee, provided that
32444c061aSmrgthe above copyright notice appear in all copies and that both that
33444c061aSmrgcopyright notice and this permission notice appear in supporting
34444c061aSmrgdocumentation.
35444c061aSmrg
36444c061aSmrgThe above copyright notice and this permission notice shall be included in
37444c061aSmrgall copies or substantial portions of the Software.
38444c061aSmrg
39444c061aSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
40444c061aSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
41444c061aSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
42444c061aSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
43444c061aSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
44444c061aSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
45444c061aSmrg
46444c061aSmrgExcept as contained in this notice, the name of The Open Group shall not be
47444c061aSmrgused in advertising or otherwise to promote the sale, use or other dealings
48444c061aSmrgin this Software without prior written authorization from The Open Group.
49444c061aSmrg
50444c061aSmrg*/
51444c061aSmrg
52444c061aSmrg#ifdef HAVE_CONFIG_H
53444c061aSmrg#include <config.h>
54444c061aSmrg#endif
55444c061aSmrg#include "IntrinsicI.h"
56444c061aSmrg#include "StringDefs.h"
57444c061aSmrg#include "Shell.h"
58444c061aSmrg#include "VarargsI.h"
59444c061aSmrg#include "CreateI.h"
60444c061aSmrg
61444c061aSmrgstatic Widget
62a3bd7f05Smrg_XtVaCreateWidget(String name,
63a3bd7f05Smrg                  WidgetClass widget_class,
64a3bd7f05Smrg                  Widget parent,
65a3bd7f05Smrg                  va_list var,
66a3bd7f05Smrg                  int count)
67444c061aSmrg{
68a3bd7f05Smrg    register Widget widget;
69a3bd7f05Smrg    XtTypedArgList typed_args = NULL;
70a3bd7f05Smrg    Cardinal num_args;
71444c061aSmrg
72444c061aSmrg    _XtVaToTypedArgList(var, count, &typed_args, &num_args);
73444c061aSmrg
74a3bd7f05Smrg    widget = _XtCreateWidget(name, widget_class, parent, (ArgList) NULL,
75a3bd7f05Smrg                             (Cardinal) 0, typed_args, num_args);
76444c061aSmrg
77a3bd7f05Smrg    XtFree((XtPointer) typed_args);
78444c061aSmrg
79444c061aSmrg    return widget;
80444c061aSmrg}
81444c061aSmrg
82444c061aSmrgWidget
83a3bd7f05SmrgXtVaCreateWidget(_Xconst char *name,
84a3bd7f05Smrg                 WidgetClass widget_class,
85a3bd7f05Smrg                 Widget parent,
86a3bd7f05Smrg                 ...)
87444c061aSmrg{
88a3bd7f05Smrg    va_list var;
89a3bd7f05Smrg    register Widget widget;
90a3bd7f05Smrg    int total_count, typed_count;
91a3bd7f05Smrg
92444c061aSmrg    WIDGET_TO_APPCON(parent);
93444c061aSmrg
94444c061aSmrg    LOCK_APP(app);
95a3bd7f05Smrg    va_start(var, parent);
96444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
97444c061aSmrg    va_end(var);
98444c061aSmrg
99a3bd7f05Smrg    va_start(var, parent);
100a3bd7f05Smrg    widget = _XtVaCreateWidget((String) name, widget_class, parent, var,
101a3bd7f05Smrg                               total_count);
102444c061aSmrg    va_end(var);
103444c061aSmrg    UNLOCK_APP(app);
104444c061aSmrg    return widget;
105444c061aSmrg}
106444c061aSmrg
107444c061aSmrgWidget
108a3bd7f05SmrgXtVaCreateManagedWidget(_Xconst char *name,
109a3bd7f05Smrg                        WidgetClass widget_class,
110a3bd7f05Smrg                        Widget parent,
111a3bd7f05Smrg                        ...)
112444c061aSmrg{
113a3bd7f05Smrg    va_list var;
114a3bd7f05Smrg    register Widget widget;
115a3bd7f05Smrg    int total_count, typed_count;
116a3bd7f05Smrg
117444c061aSmrg    WIDGET_TO_APPCON(parent);
118444c061aSmrg
119444c061aSmrg    LOCK_APP(app);
120a3bd7f05Smrg    va_start(var, parent);
121444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
122444c061aSmrg    va_end(var);
123444c061aSmrg
124a3bd7f05Smrg    va_start(var, parent);
125a3bd7f05Smrg    widget = _XtVaCreateWidget((String) name, widget_class, parent, var,
126a3bd7f05Smrg                               total_count);
127444c061aSmrg    XtManageChild(widget);
128444c061aSmrg    va_end(var);
129444c061aSmrg    UNLOCK_APP(app);
130444c061aSmrg    return widget;
131444c061aSmrg}
132444c061aSmrg
133444c061aSmrgWidget
134a3bd7f05SmrgXtVaAppCreateShell(_Xconst char *name,
135a3bd7f05Smrg                   _Xconst char *class,
136a3bd7f05Smrg                   WidgetClass widget_class,
137a3bd7f05Smrg                   Display *display,
138a3bd7f05Smrg                   ...)
139444c061aSmrg{
140a3bd7f05Smrg    va_list var;
141a3bd7f05Smrg    register Widget widget;
142a3bd7f05Smrg    XtTypedArgList typed_args = NULL;
143a3bd7f05Smrg    Cardinal num_args;
144a3bd7f05Smrg    int total_count, typed_count;
145444c061aSmrg    DPY_TO_APPCON(display);
146444c061aSmrg
147444c061aSmrg    LOCK_APP(app);
148a3bd7f05Smrg    va_start(var, display);
149a3bd7f05Smrg
150444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
151444c061aSmrg    va_end(var);
152444c061aSmrg
153a3bd7f05Smrg    va_start(var, display);
154444c061aSmrg
155444c061aSmrg    _XtVaToTypedArgList(var, total_count, &typed_args, &num_args);
156a3bd7f05Smrg    widget = _XtAppCreateShell((String) name, (String) class, widget_class,
157a3bd7f05Smrg                               display, (ArgList) NULL, (Cardinal) 0,
158a3bd7f05Smrg                               typed_args, num_args);
1590568f49bSmrg
160a3bd7f05Smrg    XtFree((XtPointer) typed_args);
1619e7bcd65Smrg
162444c061aSmrg    va_end(var);
163444c061aSmrg    UNLOCK_APP(app);
164444c061aSmrg    return widget;
165444c061aSmrg}
166444c061aSmrg
167444c061aSmrgWidget
168a3bd7f05SmrgXtVaCreatePopupShell(_Xconst char *name,
169a3bd7f05Smrg                     WidgetClass widget_class,
170a3bd7f05Smrg                     Widget parent,
171a3bd7f05Smrg                     ...)
172444c061aSmrg{
173a3bd7f05Smrg    va_list var;
174a3bd7f05Smrg    register Widget widget;
175a3bd7f05Smrg    XtTypedArgList typed_args = NULL;
176a3bd7f05Smrg    Cardinal num_args;
177a3bd7f05Smrg    int total_count, typed_count;
178a3bd7f05Smrg
179444c061aSmrg    WIDGET_TO_APPCON(parent);
180444c061aSmrg
181444c061aSmrg    LOCK_APP(app);
182a3bd7f05Smrg    va_start(var, parent);
183444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
184444c061aSmrg    va_end(var);
185444c061aSmrg
186a3bd7f05Smrg    va_start(var, parent);
187444c061aSmrg
188444c061aSmrg    _XtVaToTypedArgList(var, total_count, &typed_args, &num_args);
189a3bd7f05Smrg    widget = _XtCreatePopupShell((String) name, widget_class, parent,
190a3bd7f05Smrg                                 (ArgList) NULL, (Cardinal) 0, typed_args,
191a3bd7f05Smrg                                 num_args);
1920568f49bSmrg
193a3bd7f05Smrg    XtFree((XtPointer) typed_args);
194444c061aSmrg
195444c061aSmrg    va_end(var);
196444c061aSmrg    UNLOCK_APP(app);
197444c061aSmrg    return widget;
198444c061aSmrg}
199444c061aSmrg
200444c061aSmrgvoid
201444c061aSmrgXtVaSetValues(Widget widget, ...)
202444c061aSmrg{
203a3bd7f05Smrg    va_list var;
204a3bd7f05Smrg    ArgList args = NULL;
205a3bd7f05Smrg    Cardinal num_args;
206a3bd7f05Smrg    int total_count, typed_count;
207a3bd7f05Smrg
208444c061aSmrg    WIDGET_TO_APPCON(widget);
209444c061aSmrg
210444c061aSmrg    LOCK_APP(app);
211a3bd7f05Smrg    va_start(var, widget);
212444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
213444c061aSmrg    va_end(var);
214444c061aSmrg
215a3bd7f05Smrg    va_start(var, widget);
216444c061aSmrg
217444c061aSmrg    _XtVaToArgList(widget, var, total_count, &args, &num_args);
218444c061aSmrg    XtSetValues(widget, args, num_args);
219444c061aSmrg    _XtFreeArgList(args, total_count, typed_count);
220444c061aSmrg
221444c061aSmrg    UNLOCK_APP(app);
222444c061aSmrg    va_end(var);
223444c061aSmrg}
224444c061aSmrg
225444c061aSmrgvoid
226a3bd7f05SmrgXtVaSetSubvalues(XtPointer base,
227a3bd7f05Smrg                 XtResourceList resources,
228a3bd7f05Smrg                 Cardinal num_resources,
229a3bd7f05Smrg                 ...)
230444c061aSmrg{
231a3bd7f05Smrg    va_list var;
232a3bd7f05Smrg    ArgList args;
233a3bd7f05Smrg    Cardinal num_args;
234a3bd7f05Smrg    int total_count, typed_count;
235444c061aSmrg
236444c061aSmrg    va_start(var, num_resources);
237444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
238444c061aSmrg    va_end(var);
239444c061aSmrg
240444c061aSmrg    if (typed_count != 0) {
241a3bd7f05Smrg        XtWarning("XtVaTypedArg is not valid in XtVaSetSubvalues()\n");
242444c061aSmrg    }
243444c061aSmrg
244444c061aSmrg    va_start(var, num_resources);
245a3bd7f05Smrg    _XtVaToArgList((Widget) NULL, var, total_count, &args, &num_args);
246444c061aSmrg
247444c061aSmrg    XtSetSubvalues(base, resources, num_resources, args, num_args);
248444c061aSmrg
249a3bd7f05Smrg    XtFree((XtPointer) args);
250444c061aSmrg
251444c061aSmrg    va_end(var);
252444c061aSmrg}
253444c061aSmrg
254444c061aSmrgWidget
255a3bd7f05Smrg_XtVaOpenApplication(XtAppContext *app_context_return,
256a3bd7f05Smrg                     _Xconst char *application_class,
257a3bd7f05Smrg                     XrmOptionDescList options,
258a3bd7f05Smrg                     Cardinal num_options,
259a3bd7f05Smrg                     int *argc_in_out,
260a3bd7f05Smrg                     _XtString *argv_in_out,
261a3bd7f05Smrg                     String *fallback_resources,
262a3bd7f05Smrg                     WidgetClass widget_class,
263a3bd7f05Smrg                     va_list var_args)
264444c061aSmrg{
265444c061aSmrg    XtAppContext app_con;
266a3bd7f05Smrg    Display *dpy;
267444c061aSmrg    register int saved_argc = *argc_in_out;
268444c061aSmrg    Widget root;
269444c061aSmrg    String attr;
270444c061aSmrg    int count = 0;
271444c061aSmrg    XtTypedArgList typed_args;
272444c061aSmrg
273a3bd7f05Smrg    XtToolkitInitialize();      /* cannot be moved into _XtAppInit */
2749e7bcd65Smrg
275a3bd7f05Smrg    dpy = _XtAppInit(&app_con, (String) application_class, options, num_options,
276a3bd7f05Smrg                     argc_in_out, &argv_in_out, fallback_resources);
277444c061aSmrg
278444c061aSmrg    typed_args = (XtTypedArgList) __XtMalloc((unsigned) sizeof(XtTypedArg));
279a3bd7f05Smrg    attr = va_arg(var_args, String);
280a3bd7f05Smrg    for (; attr != NULL; attr = va_arg(var_args, String)) {
281444c061aSmrg        if (strcmp(attr, XtVaTypedArg) == 0) {
282444c061aSmrg            typed_args[count].name = va_arg(var_args, String);
283444c061aSmrg            typed_args[count].type = va_arg(var_args, String);
284444c061aSmrg            typed_args[count].value = va_arg(var_args, XtArgVal);
285444c061aSmrg            typed_args[count].size = va_arg(var_args, int);
286444c061aSmrg        }
287a3bd7f05Smrg        else {
288a3bd7f05Smrg            typed_args[count].name = attr;
289a3bd7f05Smrg            typed_args[count].type = NULL;
290a3bd7f05Smrg            typed_args[count].value = va_arg(var_args, XtArgVal);
291a3bd7f05Smrg            typed_args[count].size = 0;
292a3bd7f05Smrg        }
293a3bd7f05Smrg        count++;
294fdf6a26fSmrg        typed_args = XtReallocArray(typed_args, (Cardinal) count + 1,
295fdf6a26fSmrg                                    (Cardinal) sizeof(XtTypedArg));
296444c061aSmrg    }
297444c061aSmrg    typed_args[count].name = NULL;
298444c061aSmrg
299a3bd7f05Smrg    va_end(var_args);
300444c061aSmrg
301444c061aSmrg    root =
302a3bd7f05Smrg        XtVaAppCreateShell(NULL, application_class,
303a3bd7f05Smrg                           widget_class, dpy,
304a3bd7f05Smrg                           XtNscreen, (XtArgVal) DefaultScreenOfDisplay(dpy),
305a3bd7f05Smrg                           XtNargc, (XtArgVal) saved_argc,
306a3bd7f05Smrg                           XtNargv, (XtArgVal) argv_in_out,
307a3bd7f05Smrg                           XtVaNestedList, (XtVarArgsList) typed_args, NULL);
3089e7bcd65Smrg
309444c061aSmrg    if (app_context_return != NULL)
310a3bd7f05Smrg        *app_context_return = app_con;
311444c061aSmrg
312a3bd7f05Smrg    XtFree((XtPointer) typed_args);
313a3bd7f05Smrg    XtFree((XtPointer) argv_in_out);
314a3bd7f05Smrg    return (root);
315444c061aSmrg}
316444c061aSmrg
317444c061aSmrgWidget
318a3bd7f05Smrg_XtVaAppInitialize(XtAppContext *app_context_return,
319a3bd7f05Smrg                   _Xconst char *application_class,
320a3bd7f05Smrg                   XrmOptionDescList options,
321a3bd7f05Smrg                   Cardinal num_options,
322a3bd7f05Smrg                   int *argc_in_out,
323a3bd7f05Smrg                   _XtString *argv_in_out,
324a3bd7f05Smrg                   String *fallback_resources,
325a3bd7f05Smrg                   va_list var_args)
326444c061aSmrg{
327444c061aSmrg    return _XtVaOpenApplication(app_context_return, application_class,
328a3bd7f05Smrg                                options, num_options,
329a3bd7f05Smrg                                argc_in_out, argv_in_out, fallback_resources,
330a3bd7f05Smrg                                applicationShellWidgetClass, var_args);
331444c061aSmrg}
332444c061aSmrg
333444c061aSmrg/*
3349e7bcd65Smrg * If not used as a shared library, we still need a front end to
335444c061aSmrg * _XtVaOpenApplication and to _XtVaAppInitialize.
336444c061aSmrg */
337444c061aSmrg
338444c061aSmrgWidget
339a3bd7f05SmrgXtVaOpenApplication(XtAppContext *app_context_return,
340a3bd7f05Smrg                    _Xconst char *application_class,
341a3bd7f05Smrg                    XrmOptionDescList options,
342a3bd7f05Smrg                    Cardinal num_options,
343a3bd7f05Smrg                    int *argc_in_out,
344a3bd7f05Smrg                    _XtString *argv_in_out,
345a3bd7f05Smrg                    String *fallback_resources,
346a3bd7f05Smrg                    WidgetClass widget_class,
347a3bd7f05Smrg                    ...)
348444c061aSmrg{
349a3bd7f05Smrg    Widget code;
350a3bd7f05Smrg    va_list var;
351444c061aSmrg
3529e7bcd65Smrg    va_start(var, widget_class);
353a3bd7f05Smrg    code = _XtVaOpenApplication(app_context_return, (String) application_class,
354a3bd7f05Smrg                                options, num_options, argc_in_out, argv_in_out,
355a3bd7f05Smrg                                fallback_resources, widget_class, var);
3560568f49bSmrg    va_end(var);
3570568f49bSmrg    return code;
358444c061aSmrg}
359444c061aSmrg
360444c061aSmrgWidget
361a3bd7f05SmrgXtVaAppInitialize(XtAppContext *app_context_return,
362a3bd7f05Smrg                  _Xconst char *application_class,
363a3bd7f05Smrg                  XrmOptionDescList options,
364a3bd7f05Smrg                  Cardinal num_options,
365a3bd7f05Smrg                  int *argc_in_out,
366a3bd7f05Smrg                  _XtString *argv_in_out,
367a3bd7f05Smrg                  String *fallback_resources,
368a3bd7f05Smrg                  ...)
369444c061aSmrg{
370a3bd7f05Smrg    Widget code;
371a3bd7f05Smrg    va_list var;
372444c061aSmrg
3739e7bcd65Smrg    va_start(var, fallback_resources);
374a3bd7f05Smrg    code = _XtVaOpenApplication(app_context_return, (String) application_class,
375a3bd7f05Smrg                                options, num_options, argc_in_out, argv_in_out,
376a3bd7f05Smrg                                fallback_resources,
377a3bd7f05Smrg                                applicationShellWidgetClass, var);
3780568f49bSmrg    va_end(var);
3790568f49bSmrg    return code;
380444c061aSmrg}
381