VarCreate.c revision fdf6a26f
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
61444c061aSmrg#if (defined(SUNSHLIB) || defined(AIXSHLIB)) && defined(SHAREDCODE)
62444c061aSmrg#define XtToolkitInitialize _XtToolkitInitialize
63a3bd7f05Smrg#endif                          /* (SUNSHLIB || AIXSHLIB) && SHAREDCODE */
64444c061aSmrg
65444c061aSmrgstatic Widget
66a3bd7f05Smrg_XtVaCreateWidget(String name,
67a3bd7f05Smrg                  WidgetClass widget_class,
68a3bd7f05Smrg                  Widget parent,
69a3bd7f05Smrg                  va_list var,
70a3bd7f05Smrg                  int count)
71444c061aSmrg{
72a3bd7f05Smrg    register Widget widget;
73a3bd7f05Smrg    XtTypedArgList typed_args = NULL;
74a3bd7f05Smrg    Cardinal num_args;
75444c061aSmrg
76444c061aSmrg    _XtVaToTypedArgList(var, count, &typed_args, &num_args);
77444c061aSmrg
78a3bd7f05Smrg    widget = _XtCreateWidget(name, widget_class, parent, (ArgList) NULL,
79a3bd7f05Smrg                             (Cardinal) 0, typed_args, num_args);
80444c061aSmrg
81a3bd7f05Smrg    XtFree((XtPointer) typed_args);
82444c061aSmrg
83444c061aSmrg    return widget;
84444c061aSmrg}
85444c061aSmrg
86444c061aSmrgWidget
87a3bd7f05SmrgXtVaCreateWidget(_Xconst char *name,
88a3bd7f05Smrg                 WidgetClass widget_class,
89a3bd7f05Smrg                 Widget parent,
90a3bd7f05Smrg                 ...)
91444c061aSmrg{
92a3bd7f05Smrg    va_list var;
93a3bd7f05Smrg    register Widget widget;
94a3bd7f05Smrg    int total_count, typed_count;
95a3bd7f05Smrg
96444c061aSmrg    WIDGET_TO_APPCON(parent);
97444c061aSmrg
98444c061aSmrg    LOCK_APP(app);
99a3bd7f05Smrg    va_start(var, parent);
100444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
101444c061aSmrg    va_end(var);
102444c061aSmrg
103a3bd7f05Smrg    va_start(var, parent);
104a3bd7f05Smrg    widget = _XtVaCreateWidget((String) name, widget_class, parent, var,
105a3bd7f05Smrg                               total_count);
106444c061aSmrg    va_end(var);
107444c061aSmrg    UNLOCK_APP(app);
108444c061aSmrg    return widget;
109444c061aSmrg}
110444c061aSmrg
111444c061aSmrgWidget
112a3bd7f05SmrgXtVaCreateManagedWidget(_Xconst char *name,
113a3bd7f05Smrg                        WidgetClass widget_class,
114a3bd7f05Smrg                        Widget parent,
115a3bd7f05Smrg                        ...)
116444c061aSmrg{
117a3bd7f05Smrg    va_list var;
118a3bd7f05Smrg    register Widget widget;
119a3bd7f05Smrg    int total_count, typed_count;
120a3bd7f05Smrg
121444c061aSmrg    WIDGET_TO_APPCON(parent);
122444c061aSmrg
123444c061aSmrg    LOCK_APP(app);
124a3bd7f05Smrg    va_start(var, parent);
125444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
126444c061aSmrg    va_end(var);
127444c061aSmrg
128a3bd7f05Smrg    va_start(var, parent);
129a3bd7f05Smrg    widget = _XtVaCreateWidget((String) name, widget_class, parent, var,
130a3bd7f05Smrg                               total_count);
131444c061aSmrg    XtManageChild(widget);
132444c061aSmrg    va_end(var);
133444c061aSmrg    UNLOCK_APP(app);
134444c061aSmrg    return widget;
135444c061aSmrg}
136444c061aSmrg
137444c061aSmrgWidget
138a3bd7f05SmrgXtVaAppCreateShell(_Xconst char *name,
139a3bd7f05Smrg                   _Xconst char *class,
140a3bd7f05Smrg                   WidgetClass widget_class,
141a3bd7f05Smrg                   Display *display,
142a3bd7f05Smrg                   ...)
143444c061aSmrg{
144a3bd7f05Smrg    va_list var;
145a3bd7f05Smrg    register Widget widget;
146a3bd7f05Smrg    XtTypedArgList typed_args = NULL;
147a3bd7f05Smrg    Cardinal num_args;
148a3bd7f05Smrg    int total_count, typed_count;
149444c061aSmrg    DPY_TO_APPCON(display);
150444c061aSmrg
151444c061aSmrg    LOCK_APP(app);
152a3bd7f05Smrg    va_start(var, display);
153a3bd7f05Smrg
154444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
155444c061aSmrg    va_end(var);
156444c061aSmrg
157a3bd7f05Smrg    va_start(var, display);
158444c061aSmrg
159444c061aSmrg    _XtVaToTypedArgList(var, total_count, &typed_args, &num_args);
160a3bd7f05Smrg    widget = _XtAppCreateShell((String) name, (String) class, widget_class,
161a3bd7f05Smrg                               display, (ArgList) NULL, (Cardinal) 0,
162a3bd7f05Smrg                               typed_args, num_args);
1630568f49bSmrg
164a3bd7f05Smrg    XtFree((XtPointer) typed_args);
1659e7bcd65Smrg
166444c061aSmrg    va_end(var);
167444c061aSmrg    UNLOCK_APP(app);
168444c061aSmrg    return widget;
169444c061aSmrg}
170444c061aSmrg
171444c061aSmrgWidget
172a3bd7f05SmrgXtVaCreatePopupShell(_Xconst char *name,
173a3bd7f05Smrg                     WidgetClass widget_class,
174a3bd7f05Smrg                     Widget parent,
175a3bd7f05Smrg                     ...)
176444c061aSmrg{
177a3bd7f05Smrg    va_list var;
178a3bd7f05Smrg    register Widget widget;
179a3bd7f05Smrg    XtTypedArgList typed_args = NULL;
180a3bd7f05Smrg    Cardinal num_args;
181a3bd7f05Smrg    int total_count, typed_count;
182a3bd7f05Smrg
183444c061aSmrg    WIDGET_TO_APPCON(parent);
184444c061aSmrg
185444c061aSmrg    LOCK_APP(app);
186a3bd7f05Smrg    va_start(var, parent);
187444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
188444c061aSmrg    va_end(var);
189444c061aSmrg
190a3bd7f05Smrg    va_start(var, parent);
191444c061aSmrg
192444c061aSmrg    _XtVaToTypedArgList(var, total_count, &typed_args, &num_args);
193a3bd7f05Smrg    widget = _XtCreatePopupShell((String) name, widget_class, parent,
194a3bd7f05Smrg                                 (ArgList) NULL, (Cardinal) 0, typed_args,
195a3bd7f05Smrg                                 num_args);
1960568f49bSmrg
197a3bd7f05Smrg    XtFree((XtPointer) typed_args);
198444c061aSmrg
199444c061aSmrg    va_end(var);
200444c061aSmrg    UNLOCK_APP(app);
201444c061aSmrg    return widget;
202444c061aSmrg}
203444c061aSmrg
204444c061aSmrgvoid
205444c061aSmrgXtVaSetValues(Widget widget, ...)
206444c061aSmrg{
207a3bd7f05Smrg    va_list var;
208a3bd7f05Smrg    ArgList args = NULL;
209a3bd7f05Smrg    Cardinal num_args;
210a3bd7f05Smrg    int total_count, typed_count;
211a3bd7f05Smrg
212444c061aSmrg    WIDGET_TO_APPCON(widget);
213444c061aSmrg
214444c061aSmrg    LOCK_APP(app);
215a3bd7f05Smrg    va_start(var, widget);
216444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
217444c061aSmrg    va_end(var);
218444c061aSmrg
219a3bd7f05Smrg    va_start(var, widget);
220444c061aSmrg
221444c061aSmrg    _XtVaToArgList(widget, var, total_count, &args, &num_args);
222444c061aSmrg    XtSetValues(widget, args, num_args);
223444c061aSmrg    _XtFreeArgList(args, total_count, typed_count);
224444c061aSmrg
225444c061aSmrg    UNLOCK_APP(app);
226444c061aSmrg    va_end(var);
227444c061aSmrg}
228444c061aSmrg
229444c061aSmrgvoid
230a3bd7f05SmrgXtVaSetSubvalues(XtPointer base,
231a3bd7f05Smrg                 XtResourceList resources,
232a3bd7f05Smrg                 Cardinal num_resources,
233a3bd7f05Smrg                 ...)
234444c061aSmrg{
235a3bd7f05Smrg    va_list var;
236a3bd7f05Smrg    ArgList args;
237a3bd7f05Smrg    Cardinal num_args;
238a3bd7f05Smrg    int total_count, typed_count;
239444c061aSmrg
240444c061aSmrg    va_start(var, num_resources);
241444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
242444c061aSmrg    va_end(var);
243444c061aSmrg
244444c061aSmrg    if (typed_count != 0) {
245a3bd7f05Smrg        XtWarning("XtVaTypedArg is not valid in XtVaSetSubvalues()\n");
246444c061aSmrg    }
247444c061aSmrg
248444c061aSmrg    va_start(var, num_resources);
249a3bd7f05Smrg    _XtVaToArgList((Widget) NULL, var, total_count, &args, &num_args);
250444c061aSmrg
251444c061aSmrg    XtSetSubvalues(base, resources, num_resources, args, num_args);
252444c061aSmrg
253a3bd7f05Smrg    XtFree((XtPointer) args);
254444c061aSmrg
255444c061aSmrg    va_end(var);
256444c061aSmrg}
257444c061aSmrg
258444c061aSmrgWidget
259a3bd7f05Smrg_XtVaOpenApplication(XtAppContext *app_context_return,
260a3bd7f05Smrg                     _Xconst char *application_class,
261a3bd7f05Smrg                     XrmOptionDescList options,
262a3bd7f05Smrg                     Cardinal num_options,
263a3bd7f05Smrg                     int *argc_in_out,
264a3bd7f05Smrg                     _XtString *argv_in_out,
265a3bd7f05Smrg                     String *fallback_resources,
266a3bd7f05Smrg                     WidgetClass widget_class,
267a3bd7f05Smrg                     va_list var_args)
268444c061aSmrg{
269444c061aSmrg    XtAppContext app_con;
270a3bd7f05Smrg    Display *dpy;
271444c061aSmrg    register int saved_argc = *argc_in_out;
272444c061aSmrg    Widget root;
273444c061aSmrg    String attr;
274444c061aSmrg    int count = 0;
275444c061aSmrg    XtTypedArgList typed_args;
276444c061aSmrg
277a3bd7f05Smrg    XtToolkitInitialize();      /* cannot be moved into _XtAppInit */
2789e7bcd65Smrg
279a3bd7f05Smrg    dpy = _XtAppInit(&app_con, (String) application_class, options, num_options,
280a3bd7f05Smrg                     argc_in_out, &argv_in_out, fallback_resources);
281444c061aSmrg
282444c061aSmrg    typed_args = (XtTypedArgList) __XtMalloc((unsigned) sizeof(XtTypedArg));
283a3bd7f05Smrg    attr = va_arg(var_args, String);
284a3bd7f05Smrg    for (; attr != NULL; attr = va_arg(var_args, String)) {
285444c061aSmrg        if (strcmp(attr, XtVaTypedArg) == 0) {
286444c061aSmrg            typed_args[count].name = va_arg(var_args, String);
287444c061aSmrg            typed_args[count].type = va_arg(var_args, String);
288444c061aSmrg            typed_args[count].value = va_arg(var_args, XtArgVal);
289444c061aSmrg            typed_args[count].size = va_arg(var_args, int);
290444c061aSmrg        }
291a3bd7f05Smrg        else {
292a3bd7f05Smrg            typed_args[count].name = attr;
293a3bd7f05Smrg            typed_args[count].type = NULL;
294a3bd7f05Smrg            typed_args[count].value = va_arg(var_args, XtArgVal);
295a3bd7f05Smrg            typed_args[count].size = 0;
296a3bd7f05Smrg        }
297a3bd7f05Smrg        count++;
298fdf6a26fSmrg        typed_args = XtReallocArray(typed_args, (Cardinal) count + 1,
299fdf6a26fSmrg                                    (Cardinal) sizeof(XtTypedArg));
300444c061aSmrg    }
301444c061aSmrg    typed_args[count].name = NULL;
302444c061aSmrg
303a3bd7f05Smrg    va_end(var_args);
304444c061aSmrg
305444c061aSmrg    root =
306a3bd7f05Smrg        XtVaAppCreateShell(NULL, application_class,
307a3bd7f05Smrg                           widget_class, dpy,
308a3bd7f05Smrg                           XtNscreen, (XtArgVal) DefaultScreenOfDisplay(dpy),
309a3bd7f05Smrg                           XtNargc, (XtArgVal) saved_argc,
310a3bd7f05Smrg                           XtNargv, (XtArgVal) argv_in_out,
311a3bd7f05Smrg                           XtVaNestedList, (XtVarArgsList) typed_args, NULL);
3129e7bcd65Smrg
313444c061aSmrg    if (app_context_return != NULL)
314a3bd7f05Smrg        *app_context_return = app_con;
315444c061aSmrg
316a3bd7f05Smrg    XtFree((XtPointer) typed_args);
317a3bd7f05Smrg    XtFree((XtPointer) argv_in_out);
318a3bd7f05Smrg    return (root);
319444c061aSmrg}
320444c061aSmrg
321444c061aSmrgWidget
322a3bd7f05Smrg_XtVaAppInitialize(XtAppContext *app_context_return,
323a3bd7f05Smrg                   _Xconst char *application_class,
324a3bd7f05Smrg                   XrmOptionDescList options,
325a3bd7f05Smrg                   Cardinal num_options,
326a3bd7f05Smrg                   int *argc_in_out,
327a3bd7f05Smrg                   _XtString *argv_in_out,
328a3bd7f05Smrg                   String *fallback_resources,
329a3bd7f05Smrg                   va_list var_args)
330444c061aSmrg{
331444c061aSmrg    return _XtVaOpenApplication(app_context_return, application_class,
332a3bd7f05Smrg                                options, num_options,
333a3bd7f05Smrg                                argc_in_out, argv_in_out, fallback_resources,
334a3bd7f05Smrg                                applicationShellWidgetClass, var_args);
335444c061aSmrg}
336444c061aSmrg
337444c061aSmrg#if !((defined(SUNSHLIB) || defined(AIXSHLIB)) && defined(SHAREDCODE))
338444c061aSmrg
339444c061aSmrg/*
3409e7bcd65Smrg * If not used as a shared library, we still need a front end to
341444c061aSmrg * _XtVaOpenApplication and to _XtVaAppInitialize.
342444c061aSmrg */
343444c061aSmrg
344444c061aSmrgWidget
345a3bd7f05SmrgXtVaOpenApplication(XtAppContext *app_context_return,
346a3bd7f05Smrg                    _Xconst char *application_class,
347a3bd7f05Smrg                    XrmOptionDescList options,
348a3bd7f05Smrg                    Cardinal num_options,
349a3bd7f05Smrg                    int *argc_in_out,
350a3bd7f05Smrg                    _XtString *argv_in_out,
351a3bd7f05Smrg                    String *fallback_resources,
352a3bd7f05Smrg                    WidgetClass widget_class,
353a3bd7f05Smrg                    ...)
354444c061aSmrg{
355a3bd7f05Smrg    Widget code;
356a3bd7f05Smrg    va_list var;
357444c061aSmrg
3589e7bcd65Smrg    va_start(var, widget_class);
359a3bd7f05Smrg    code = _XtVaOpenApplication(app_context_return, (String) application_class,
360a3bd7f05Smrg                                options, num_options, argc_in_out, argv_in_out,
361a3bd7f05Smrg                                fallback_resources, widget_class, var);
3620568f49bSmrg    va_end(var);
3630568f49bSmrg    return code;
364444c061aSmrg}
365444c061aSmrg
366444c061aSmrgWidget
367a3bd7f05SmrgXtVaAppInitialize(XtAppContext *app_context_return,
368a3bd7f05Smrg                  _Xconst char *application_class,
369a3bd7f05Smrg                  XrmOptionDescList options,
370a3bd7f05Smrg                  Cardinal num_options,
371a3bd7f05Smrg                  int *argc_in_out,
372a3bd7f05Smrg                  _XtString *argv_in_out,
373a3bd7f05Smrg                  String *fallback_resources,
374a3bd7f05Smrg                  ...)
375444c061aSmrg{
376a3bd7f05Smrg    Widget code;
377a3bd7f05Smrg    va_list var;
378444c061aSmrg
3799e7bcd65Smrg    va_start(var, fallback_resources);
380a3bd7f05Smrg    code = _XtVaOpenApplication(app_context_return, (String) application_class,
381a3bd7f05Smrg                                options, num_options, argc_in_out, argv_in_out,
382a3bd7f05Smrg                                fallback_resources,
383a3bd7f05Smrg                                applicationShellWidgetClass, var);
3840568f49bSmrg    va_end(var);
3850568f49bSmrg    return code;
386444c061aSmrg}
387444c061aSmrg
388a3bd7f05Smrg#endif                          /* !((SUNSHLIB || AIXSHLIB) && SHAREDCODE) */
389