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