VarCreate.c revision 0568f49b
1444c061aSmrg/*
2444c061aSmrg
3249c3046SmrgCopyright (c) 1993, Oracle and/or its affiliates. All rights reserved.
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
63444c061aSmrg#endif /* (SUNSHLIB || AIXSHLIB) && SHAREDCODE */
64444c061aSmrg
65444c061aSmrgstatic Widget
66444c061aSmrg_XtVaCreateWidget(
67444c061aSmrg    String      name,
68444c061aSmrg    WidgetClass widget_class,
69444c061aSmrg    Widget      parent,
70444c061aSmrg    va_list     var,
71444c061aSmrg    int		count)
72444c061aSmrg{
73444c061aSmrg    register Widget         widget;
74444c061aSmrg    XtTypedArgList	    typed_args = NULL;
75444c061aSmrg    Cardinal		    num_args;
76444c061aSmrg
77444c061aSmrg    _XtVaToTypedArgList(var, count, &typed_args, &num_args);
78444c061aSmrg
799e7bcd65Smrg    widget = _XtCreateWidget(name, widget_class, parent, (ArgList)NULL,
80444c061aSmrg		    (Cardinal)0, typed_args, num_args);
81444c061aSmrg
820568f49bSmrg
830568f49bSmrg    XtFree((XtPointer)typed_args);
84444c061aSmrg
85444c061aSmrg    return widget;
86444c061aSmrg}
87444c061aSmrg
88444c061aSmrg
89444c061aSmrgWidget
90444c061aSmrgXtVaCreateWidget(
91444c061aSmrg    _Xconst char* name,
92444c061aSmrg    WidgetClass widget_class,
93444c061aSmrg    Widget parent,
94444c061aSmrg    ...)
95444c061aSmrg{
96444c061aSmrg    va_list                 var;
97444c061aSmrg    register Widget         widget;
98444c061aSmrg    int			    total_count, typed_count;
99444c061aSmrg    WIDGET_TO_APPCON(parent);
100444c061aSmrg
101444c061aSmrg    LOCK_APP(app);
102444c061aSmrg    va_start(var,parent);
103444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
104444c061aSmrg    va_end(var);
105444c061aSmrg
106444c061aSmrg    va_start(var,parent);
107444c061aSmrg    widget = _XtVaCreateWidget((String)name, widget_class, parent, var,
108444c061aSmrg				total_count);
109444c061aSmrg    va_end(var);
110444c061aSmrg    UNLOCK_APP(app);
111444c061aSmrg    return widget;
112444c061aSmrg}
113444c061aSmrg
114444c061aSmrg
115444c061aSmrgWidget
116444c061aSmrgXtVaCreateManagedWidget(
117444c061aSmrg    _Xconst char* name,
118444c061aSmrg    WidgetClass widget_class,
119444c061aSmrg    Widget parent,
120444c061aSmrg    ...)
121444c061aSmrg{
122444c061aSmrg    va_list		var;
123444c061aSmrg    register Widget	widget;
124444c061aSmrg    int			total_count, typed_count;
125444c061aSmrg    WIDGET_TO_APPCON(parent);
126444c061aSmrg
127444c061aSmrg    LOCK_APP(app);
128444c061aSmrg    va_start(var,parent);
129444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
130444c061aSmrg    va_end(var);
131444c061aSmrg
132444c061aSmrg    va_start(var,parent);
133444c061aSmrg    widget = _XtVaCreateWidget((String)name, widget_class, parent, var,
134444c061aSmrg				total_count);
135444c061aSmrg    XtManageChild(widget);
136444c061aSmrg    va_end(var);
137444c061aSmrg    UNLOCK_APP(app);
138444c061aSmrg    return widget;
139444c061aSmrg}
140444c061aSmrg
141444c061aSmrg
142444c061aSmrgWidget
143444c061aSmrgXtVaAppCreateShell(
144444c061aSmrg    _Xconst char* name,
145444c061aSmrg    _Xconst char* class,
146444c061aSmrg    WidgetClass widget_class,
147444c061aSmrg    Display* display,
148444c061aSmrg    ...)
149444c061aSmrg{
150444c061aSmrg    va_list                 var;
151444c061aSmrg    register Widget         widget;
152444c061aSmrg    XtTypedArgList          typed_args = NULL;
153444c061aSmrg    Cardinal                num_args;
154444c061aSmrg    int			    total_count, typed_count;
155444c061aSmrg    DPY_TO_APPCON(display);
156444c061aSmrg
157444c061aSmrg    LOCK_APP(app);
158444c061aSmrg    va_start(var,display);
159444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
160444c061aSmrg    va_end(var);
161444c061aSmrg
162444c061aSmrg    va_start(var,display);
163444c061aSmrg
164444c061aSmrg    _XtVaToTypedArgList(var, total_count, &typed_args, &num_args);
165444c061aSmrg    widget = _XtAppCreateShell((String)name, (String)class, widget_class,
166444c061aSmrg		display, (ArgList)NULL, (Cardinal)0, typed_args, num_args);
1670568f49bSmrg
1680568f49bSmrg    XtFree((XtPointer)typed_args);
1699e7bcd65Smrg
170444c061aSmrg    va_end(var);
171444c061aSmrg    UNLOCK_APP(app);
172444c061aSmrg    return widget;
173444c061aSmrg}
174444c061aSmrg
175444c061aSmrg
176444c061aSmrgWidget
177444c061aSmrgXtVaCreatePopupShell(
178444c061aSmrg    _Xconst char* name,
179444c061aSmrg    WidgetClass widget_class,
180444c061aSmrg    Widget parent,
181444c061aSmrg    ...)
182444c061aSmrg{
183444c061aSmrg    va_list                 var;
184444c061aSmrg    register Widget         widget;
185444c061aSmrg    XtTypedArgList          typed_args = NULL;
186444c061aSmrg    Cardinal                num_args;
187444c061aSmrg    int			    total_count, typed_count;
188444c061aSmrg    WIDGET_TO_APPCON(parent);
189444c061aSmrg
190444c061aSmrg    LOCK_APP(app);
191444c061aSmrg    va_start(var,parent);
192444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
193444c061aSmrg    va_end(var);
194444c061aSmrg
195444c061aSmrg    va_start(var,parent);
196444c061aSmrg
197444c061aSmrg    _XtVaToTypedArgList(var, total_count, &typed_args, &num_args);
198444c061aSmrg    widget = _XtCreatePopupShell((String)name, widget_class, parent,
199444c061aSmrg		(ArgList)NULL, (Cardinal)0, typed_args, num_args);
2000568f49bSmrg
2010568f49bSmrg    XtFree((XtPointer)typed_args);
202444c061aSmrg
203444c061aSmrg    va_end(var);
204444c061aSmrg    UNLOCK_APP(app);
205444c061aSmrg    return widget;
206444c061aSmrg}
207444c061aSmrg
208444c061aSmrgvoid
209444c061aSmrgXtVaSetValues(Widget widget, ...)
210444c061aSmrg{
211444c061aSmrg    va_list                 var;
212444c061aSmrg    ArgList                 args = NULL;
213444c061aSmrg    Cardinal                num_args;
214444c061aSmrg    int			    total_count, typed_count;
215444c061aSmrg    WIDGET_TO_APPCON(widget);
216444c061aSmrg
217444c061aSmrg    LOCK_APP(app);
218444c061aSmrg    va_start(var,widget);
219444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
220444c061aSmrg    va_end(var);
221444c061aSmrg
222444c061aSmrg    va_start(var,widget);
223444c061aSmrg
224444c061aSmrg    _XtVaToArgList(widget, var, total_count, &args, &num_args);
225444c061aSmrg    XtSetValues(widget, args, num_args);
226444c061aSmrg    _XtFreeArgList(args, total_count, typed_count);
227444c061aSmrg
228444c061aSmrg    UNLOCK_APP(app);
229444c061aSmrg    va_end(var);
230444c061aSmrg}
231444c061aSmrg
232444c061aSmrg
233444c061aSmrgvoid
234444c061aSmrgXtVaSetSubvalues(XtPointer base, XtResourceList resources, Cardinal num_resources, ...)
235444c061aSmrg{
236444c061aSmrg    va_list	var;
237444c061aSmrg    ArgList    	args;
238444c061aSmrg    Cardinal   	num_args;
2399e7bcd65Smrg    int		total_count, typed_count;
240444c061aSmrg
241444c061aSmrg    va_start(var, num_resources);
242444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
243444c061aSmrg    va_end(var);
244444c061aSmrg
245444c061aSmrg    if (typed_count != 0) {
246444c061aSmrg	XtWarning("XtVaTypedArg is not valid in XtVaSetSubvalues()\n");
247444c061aSmrg    }
248444c061aSmrg
249444c061aSmrg    va_start(var, num_resources);
250444c061aSmrg    _XtVaToArgList((Widget)NULL, var, total_count, &args, &num_args);
251444c061aSmrg
252444c061aSmrg    XtSetSubvalues(base, resources, num_resources, args, num_args);
253444c061aSmrg
2540568f49bSmrg    XtFree((XtPointer)args);
255444c061aSmrg
256444c061aSmrg    va_end(var);
257444c061aSmrg}
258444c061aSmrg
259444c061aSmrgWidget
260444c061aSmrg_XtVaOpenApplication(
261444c061aSmrg    XtAppContext *app_context_return,
262444c061aSmrg    _Xconst char* application_class,
263444c061aSmrg    XrmOptionDescList options,
264444c061aSmrg    Cardinal num_options,
265444c061aSmrg    int *argc_in_out,
2660568f49bSmrg    _XtString *argv_in_out,
267444c061aSmrg    String *fallback_resources,
268444c061aSmrg    WidgetClass widget_class,
269444c061aSmrg    va_list var_args)
270444c061aSmrg{
271444c061aSmrg    XtAppContext app_con;
272444c061aSmrg    Display * dpy;
273444c061aSmrg    register int saved_argc = *argc_in_out;
274444c061aSmrg    Widget root;
275444c061aSmrg    String attr;
276444c061aSmrg    int count = 0;
277444c061aSmrg    XtTypedArgList typed_args;
278444c061aSmrg
279444c061aSmrg    XtToolkitInitialize(); /* cannot be moved into _XtAppInit */
2809e7bcd65Smrg
281444c061aSmrg    dpy = _XtAppInit(&app_con, (String)application_class, options, num_options,
282444c061aSmrg		     argc_in_out, &argv_in_out, fallback_resources);
283444c061aSmrg
284444c061aSmrg    typed_args = (XtTypedArgList) __XtMalloc((unsigned) sizeof(XtTypedArg));
285444c061aSmrg    attr = va_arg (var_args, String);
286444c061aSmrg    for(; attr != NULL; attr = va_arg (var_args, String)) {
287444c061aSmrg        if (strcmp(attr, XtVaTypedArg) == 0) {
288444c061aSmrg            typed_args[count].name = va_arg(var_args, String);
289444c061aSmrg            typed_args[count].type = va_arg(var_args, String);
290444c061aSmrg            typed_args[count].value = va_arg(var_args, XtArgVal);
291444c061aSmrg            typed_args[count].size = va_arg(var_args, int);
292444c061aSmrg        } else {
293444c061aSmrg	    typed_args[count].name = attr;
294444c061aSmrg	    typed_args[count].type = NULL;
295444c061aSmrg	    typed_args[count].value = va_arg(var_args, XtArgVal);
296444c061aSmrg	    typed_args[count].size = 0;
297444c061aSmrg        }
298444c061aSmrg	count++;
2999e7bcd65Smrg	typed_args = (XtTypedArgList)
3009e7bcd65Smrg	    XtRealloc((char *) typed_args,
3010568f49bSmrg		       (Cardinal) ((size_t)(count + 1) * sizeof(XtTypedArg)));
302444c061aSmrg    }
303444c061aSmrg    typed_args[count].name = NULL;
304444c061aSmrg
305444c061aSmrg    va_end (var_args);
306444c061aSmrg
307444c061aSmrg    root =
3089e7bcd65Smrg	XtVaAppCreateShell( NULL, application_class,
309444c061aSmrg			    widget_class, dpy,
310444c061aSmrg			    XtNscreen, (XtArgVal)DefaultScreenOfDisplay(dpy),
311444c061aSmrg			    XtNargc, (XtArgVal)saved_argc,
312444c061aSmrg			    XtNargv, (XtArgVal)argv_in_out,
313444c061aSmrg			    XtVaNestedList, (XtVarArgsList)typed_args,
314444c061aSmrg			    NULL );
3159e7bcd65Smrg
316444c061aSmrg    if (app_context_return != NULL)
317444c061aSmrg	*app_context_return = app_con;
318444c061aSmrg
319444c061aSmrg    XtFree((XtPointer)typed_args);
320444c061aSmrg    XtFree((XtPointer)argv_in_out);
321444c061aSmrg    return(root);
322444c061aSmrg}
323444c061aSmrg
324444c061aSmrgWidget
325444c061aSmrg_XtVaAppInitialize(
326444c061aSmrg    XtAppContext *app_context_return,
327444c061aSmrg    _Xconst char* application_class,
328444c061aSmrg    XrmOptionDescList options,
329444c061aSmrg    Cardinal num_options,
330444c061aSmrg    int *argc_in_out,
3310568f49bSmrg    _XtString *argv_in_out,
332444c061aSmrg    String *fallback_resources,
333444c061aSmrg    va_list var_args)
334444c061aSmrg{
335444c061aSmrg    return _XtVaOpenApplication(app_context_return, application_class,
336444c061aSmrg				options, num_options,
337444c061aSmrg				argc_in_out, argv_in_out, fallback_resources,
338444c061aSmrg				applicationShellWidgetClass, var_args);
339444c061aSmrg}
340444c061aSmrg
341444c061aSmrg#if !((defined(SUNSHLIB) || defined(AIXSHLIB)) && defined(SHAREDCODE))
342444c061aSmrg
343444c061aSmrg/*
3449e7bcd65Smrg * If not used as a shared library, we still need a front end to
345444c061aSmrg * _XtVaOpenApplication and to _XtVaAppInitialize.
346444c061aSmrg */
347444c061aSmrg
348444c061aSmrgWidget
349444c061aSmrgXtVaOpenApplication(
350444c061aSmrg    XtAppContext *app_context_return,
351444c061aSmrg    _Xconst char* application_class,
352444c061aSmrg    XrmOptionDescList options,
353444c061aSmrg    Cardinal num_options,
354444c061aSmrg    int *argc_in_out,
3550568f49bSmrg    _XtString *argv_in_out,
356444c061aSmrg    String *fallback_resources,
357444c061aSmrg    WidgetClass widget_class,
358444c061aSmrg    ...)
359444c061aSmrg{
3600568f49bSmrg    Widget      code;
361444c061aSmrg    va_list	var;
362444c061aSmrg
3639e7bcd65Smrg    va_start(var, widget_class);
3640568f49bSmrg    code = _XtVaOpenApplication(app_context_return, (String)application_class,
365444c061aSmrg				options, num_options, argc_in_out, argv_in_out,
366444c061aSmrg				fallback_resources, widget_class, var);
3670568f49bSmrg    va_end(var);
3680568f49bSmrg    return code;
369444c061aSmrg}
370444c061aSmrg
371444c061aSmrgWidget
372444c061aSmrgXtVaAppInitialize(
373444c061aSmrg    XtAppContext *app_context_return,
374444c061aSmrg    _Xconst char* application_class,
375444c061aSmrg    XrmOptionDescList options,
376444c061aSmrg    Cardinal num_options,
377444c061aSmrg    int *argc_in_out,
3780568f49bSmrg    _XtString *argv_in_out,
379444c061aSmrg    String *fallback_resources,
380444c061aSmrg    ...)
381444c061aSmrg{
3820568f49bSmrg    Widget      code;
383444c061aSmrg    va_list	var;
384444c061aSmrg
3859e7bcd65Smrg    va_start(var, fallback_resources);
3860568f49bSmrg    code = _XtVaOpenApplication(app_context_return, (String)application_class,
387444c061aSmrg				options, num_options, argc_in_out, argv_in_out,
388444c061aSmrg				fallback_resources,
389444c061aSmrg				applicationShellWidgetClass, var);
3900568f49bSmrg    va_end(var);
3910568f49bSmrg    return code;
392444c061aSmrg}
393444c061aSmrg
394444c061aSmrg#endif /* !((SUNSHLIB || AIXSHLIB) && SHAREDCODE) */
395444c061aSmrg
396