VarCreate.c revision 9e7bcd65
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 82444c061aSmrg if (typed_args != NULL) { 83444c061aSmrg XtFree((XtPointer)typed_args); 849e7bcd65Smrg } 85444c061aSmrg 86444c061aSmrg return widget; 87444c061aSmrg} 88444c061aSmrg 89444c061aSmrg 90444c061aSmrgWidget 91444c061aSmrgXtVaCreateWidget( 92444c061aSmrg _Xconst char* name, 93444c061aSmrg WidgetClass widget_class, 94444c061aSmrg Widget parent, 95444c061aSmrg ...) 96444c061aSmrg{ 97444c061aSmrg va_list var; 98444c061aSmrg register Widget widget; 99444c061aSmrg int total_count, typed_count; 100444c061aSmrg WIDGET_TO_APPCON(parent); 101444c061aSmrg 102444c061aSmrg LOCK_APP(app); 103444c061aSmrg va_start(var,parent); 104444c061aSmrg _XtCountVaList(var, &total_count, &typed_count); 105444c061aSmrg va_end(var); 106444c061aSmrg 107444c061aSmrg va_start(var,parent); 108444c061aSmrg widget = _XtVaCreateWidget((String)name, widget_class, parent, var, 109444c061aSmrg total_count); 110444c061aSmrg va_end(var); 111444c061aSmrg UNLOCK_APP(app); 112444c061aSmrg return widget; 113444c061aSmrg} 114444c061aSmrg 115444c061aSmrg 116444c061aSmrgWidget 117444c061aSmrgXtVaCreateManagedWidget( 118444c061aSmrg _Xconst char* name, 119444c061aSmrg WidgetClass widget_class, 120444c061aSmrg Widget parent, 121444c061aSmrg ...) 122444c061aSmrg{ 123444c061aSmrg va_list var; 124444c061aSmrg register Widget widget; 125444c061aSmrg int total_count, typed_count; 126444c061aSmrg WIDGET_TO_APPCON(parent); 127444c061aSmrg 128444c061aSmrg LOCK_APP(app); 129444c061aSmrg va_start(var,parent); 130444c061aSmrg _XtCountVaList(var, &total_count, &typed_count); 131444c061aSmrg va_end(var); 132444c061aSmrg 133444c061aSmrg va_start(var,parent); 134444c061aSmrg widget = _XtVaCreateWidget((String)name, widget_class, parent, var, 135444c061aSmrg total_count); 136444c061aSmrg XtManageChild(widget); 137444c061aSmrg va_end(var); 138444c061aSmrg UNLOCK_APP(app); 139444c061aSmrg return widget; 140444c061aSmrg} 141444c061aSmrg 142444c061aSmrg 143444c061aSmrgWidget 144444c061aSmrgXtVaAppCreateShell( 145444c061aSmrg _Xconst char* name, 146444c061aSmrg _Xconst char* class, 147444c061aSmrg WidgetClass widget_class, 148444c061aSmrg Display* display, 149444c061aSmrg ...) 150444c061aSmrg{ 151444c061aSmrg va_list var; 152444c061aSmrg register Widget widget; 153444c061aSmrg XtTypedArgList typed_args = NULL; 154444c061aSmrg Cardinal num_args; 155444c061aSmrg int total_count, typed_count; 156444c061aSmrg DPY_TO_APPCON(display); 157444c061aSmrg 158444c061aSmrg LOCK_APP(app); 159444c061aSmrg va_start(var,display); 160444c061aSmrg _XtCountVaList(var, &total_count, &typed_count); 161444c061aSmrg va_end(var); 162444c061aSmrg 163444c061aSmrg va_start(var,display); 164444c061aSmrg 165444c061aSmrg _XtVaToTypedArgList(var, total_count, &typed_args, &num_args); 166444c061aSmrg widget = _XtAppCreateShell((String)name, (String)class, widget_class, 167444c061aSmrg display, (ArgList)NULL, (Cardinal)0, typed_args, num_args); 168444c061aSmrg if (typed_args != NULL) { 169444c061aSmrg XtFree((XtPointer)typed_args); 170444c061aSmrg } 1719e7bcd65Smrg 172444c061aSmrg va_end(var); 173444c061aSmrg UNLOCK_APP(app); 174444c061aSmrg return widget; 175444c061aSmrg} 176444c061aSmrg 177444c061aSmrg 178444c061aSmrgWidget 179444c061aSmrgXtVaCreatePopupShell( 180444c061aSmrg _Xconst char* name, 181444c061aSmrg WidgetClass widget_class, 182444c061aSmrg Widget parent, 183444c061aSmrg ...) 184444c061aSmrg{ 185444c061aSmrg va_list var; 186444c061aSmrg register Widget widget; 187444c061aSmrg XtTypedArgList typed_args = NULL; 188444c061aSmrg Cardinal num_args; 189444c061aSmrg int total_count, typed_count; 190444c061aSmrg WIDGET_TO_APPCON(parent); 191444c061aSmrg 192444c061aSmrg LOCK_APP(app); 193444c061aSmrg va_start(var,parent); 194444c061aSmrg _XtCountVaList(var, &total_count, &typed_count); 195444c061aSmrg va_end(var); 196444c061aSmrg 197444c061aSmrg va_start(var,parent); 198444c061aSmrg 199444c061aSmrg _XtVaToTypedArgList(var, total_count, &typed_args, &num_args); 200444c061aSmrg widget = _XtCreatePopupShell((String)name, widget_class, parent, 201444c061aSmrg (ArgList)NULL, (Cardinal)0, typed_args, num_args); 202444c061aSmrg if (typed_args != NULL) { 203444c061aSmrg XtFree((XtPointer)typed_args); 204444c061aSmrg } 205444c061aSmrg 206444c061aSmrg va_end(var); 207444c061aSmrg UNLOCK_APP(app); 208444c061aSmrg return widget; 209444c061aSmrg} 210444c061aSmrg 211444c061aSmrgvoid 212444c061aSmrgXtVaSetValues(Widget widget, ...) 213444c061aSmrg{ 214444c061aSmrg va_list var; 215444c061aSmrg ArgList args = NULL; 216444c061aSmrg Cardinal num_args; 217444c061aSmrg int total_count, typed_count; 218444c061aSmrg WIDGET_TO_APPCON(widget); 219444c061aSmrg 220444c061aSmrg LOCK_APP(app); 221444c061aSmrg va_start(var,widget); 222444c061aSmrg _XtCountVaList(var, &total_count, &typed_count); 223444c061aSmrg va_end(var); 224444c061aSmrg 225444c061aSmrg va_start(var,widget); 226444c061aSmrg 227444c061aSmrg _XtVaToArgList(widget, var, total_count, &args, &num_args); 228444c061aSmrg XtSetValues(widget, args, num_args); 229444c061aSmrg _XtFreeArgList(args, total_count, typed_count); 230444c061aSmrg 231444c061aSmrg UNLOCK_APP(app); 232444c061aSmrg va_end(var); 233444c061aSmrg} 234444c061aSmrg 235444c061aSmrg 236444c061aSmrgvoid 237444c061aSmrgXtVaSetSubvalues(XtPointer base, XtResourceList resources, Cardinal num_resources, ...) 238444c061aSmrg{ 239444c061aSmrg va_list var; 240444c061aSmrg ArgList args; 241444c061aSmrg Cardinal num_args; 2429e7bcd65Smrg int total_count, typed_count; 243444c061aSmrg 244444c061aSmrg va_start(var, num_resources); 245444c061aSmrg _XtCountVaList(var, &total_count, &typed_count); 246444c061aSmrg va_end(var); 247444c061aSmrg 248444c061aSmrg if (typed_count != 0) { 249444c061aSmrg XtWarning("XtVaTypedArg is not valid in XtVaSetSubvalues()\n"); 250444c061aSmrg } 251444c061aSmrg 252444c061aSmrg va_start(var, num_resources); 253444c061aSmrg _XtVaToArgList((Widget)NULL, var, total_count, &args, &num_args); 254444c061aSmrg 255444c061aSmrg XtSetSubvalues(base, resources, num_resources, args, num_args); 256444c061aSmrg 257444c061aSmrg if (num_args != 0) { 258444c061aSmrg XtFree((XtPointer)args); 2599e7bcd65Smrg } 260444c061aSmrg 261444c061aSmrg va_end(var); 262444c061aSmrg} 263444c061aSmrg 264444c061aSmrgWidget 265444c061aSmrg_XtVaOpenApplication( 266444c061aSmrg XtAppContext *app_context_return, 267444c061aSmrg _Xconst char* application_class, 268444c061aSmrg XrmOptionDescList options, 269444c061aSmrg Cardinal num_options, 270444c061aSmrg int *argc_in_out, 271444c061aSmrg String *argv_in_out, 272444c061aSmrg String *fallback_resources, 273444c061aSmrg WidgetClass widget_class, 274444c061aSmrg va_list var_args) 275444c061aSmrg{ 276444c061aSmrg XtAppContext app_con; 277444c061aSmrg Display * dpy; 278444c061aSmrg register int saved_argc = *argc_in_out; 279444c061aSmrg Widget root; 280444c061aSmrg String attr; 281444c061aSmrg int count = 0; 282444c061aSmrg XtTypedArgList typed_args; 283444c061aSmrg 284444c061aSmrg XtToolkitInitialize(); /* cannot be moved into _XtAppInit */ 2859e7bcd65Smrg 286444c061aSmrg dpy = _XtAppInit(&app_con, (String)application_class, options, num_options, 287444c061aSmrg argc_in_out, &argv_in_out, fallback_resources); 288444c061aSmrg 289444c061aSmrg typed_args = (XtTypedArgList) __XtMalloc((unsigned) sizeof(XtTypedArg)); 290444c061aSmrg attr = va_arg (var_args, String); 291444c061aSmrg for(; attr != NULL; attr = va_arg (var_args, String)) { 292444c061aSmrg if (strcmp(attr, XtVaTypedArg) == 0) { 293444c061aSmrg typed_args[count].name = va_arg(var_args, String); 294444c061aSmrg typed_args[count].type = va_arg(var_args, String); 295444c061aSmrg typed_args[count].value = va_arg(var_args, XtArgVal); 296444c061aSmrg typed_args[count].size = va_arg(var_args, int); 297444c061aSmrg } else { 298444c061aSmrg typed_args[count].name = attr; 299444c061aSmrg typed_args[count].type = NULL; 300444c061aSmrg typed_args[count].value = va_arg(var_args, XtArgVal); 301444c061aSmrg typed_args[count].size = 0; 302444c061aSmrg } 303444c061aSmrg count++; 3049e7bcd65Smrg typed_args = (XtTypedArgList) 3059e7bcd65Smrg XtRealloc((char *) typed_args, 306444c061aSmrg (unsigned) (count + 1) * sizeof(XtTypedArg)); 307444c061aSmrg } 308444c061aSmrg typed_args[count].name = NULL; 309444c061aSmrg 310444c061aSmrg va_end (var_args); 311444c061aSmrg 312444c061aSmrg root = 3139e7bcd65Smrg XtVaAppCreateShell( NULL, application_class, 314444c061aSmrg widget_class, dpy, 315444c061aSmrg XtNscreen, (XtArgVal)DefaultScreenOfDisplay(dpy), 316444c061aSmrg XtNargc, (XtArgVal)saved_argc, 317444c061aSmrg XtNargv, (XtArgVal)argv_in_out, 318444c061aSmrg XtVaNestedList, (XtVarArgsList)typed_args, 319444c061aSmrg NULL ); 3209e7bcd65Smrg 321444c061aSmrg if (app_context_return != NULL) 322444c061aSmrg *app_context_return = app_con; 323444c061aSmrg 324444c061aSmrg XtFree((XtPointer)typed_args); 325444c061aSmrg XtFree((XtPointer)argv_in_out); 326444c061aSmrg return(root); 327444c061aSmrg} 328444c061aSmrg 329444c061aSmrgWidget 330444c061aSmrg_XtVaAppInitialize( 331444c061aSmrg XtAppContext *app_context_return, 332444c061aSmrg _Xconst char* application_class, 333444c061aSmrg XrmOptionDescList options, 334444c061aSmrg Cardinal num_options, 335444c061aSmrg int *argc_in_out, 336444c061aSmrg String *argv_in_out, 337444c061aSmrg String *fallback_resources, 338444c061aSmrg va_list var_args) 339444c061aSmrg{ 340444c061aSmrg return _XtVaOpenApplication(app_context_return, application_class, 341444c061aSmrg options, num_options, 342444c061aSmrg argc_in_out, argv_in_out, fallback_resources, 343444c061aSmrg applicationShellWidgetClass, var_args); 344444c061aSmrg} 345444c061aSmrg 346444c061aSmrg#if !((defined(SUNSHLIB) || defined(AIXSHLIB)) && defined(SHAREDCODE)) 347444c061aSmrg 348444c061aSmrg/* 3499e7bcd65Smrg * If not used as a shared library, we still need a front end to 350444c061aSmrg * _XtVaOpenApplication and to _XtVaAppInitialize. 351444c061aSmrg */ 352444c061aSmrg 353444c061aSmrgWidget 354444c061aSmrgXtVaOpenApplication( 355444c061aSmrg XtAppContext *app_context_return, 356444c061aSmrg _Xconst char* application_class, 357444c061aSmrg XrmOptionDescList options, 358444c061aSmrg Cardinal num_options, 359444c061aSmrg int *argc_in_out, 360444c061aSmrg String *argv_in_out, 361444c061aSmrg String *fallback_resources, 362444c061aSmrg WidgetClass widget_class, 363444c061aSmrg ...) 364444c061aSmrg{ 365444c061aSmrg va_list var; 366444c061aSmrg 3679e7bcd65Smrg va_start(var, widget_class); 368444c061aSmrg return _XtVaOpenApplication(app_context_return, (String)application_class, 369444c061aSmrg options, num_options, argc_in_out, argv_in_out, 370444c061aSmrg fallback_resources, widget_class, var); 371444c061aSmrg} 372444c061aSmrg 373444c061aSmrgWidget 374444c061aSmrgXtVaAppInitialize( 375444c061aSmrg XtAppContext *app_context_return, 376444c061aSmrg _Xconst char* application_class, 377444c061aSmrg XrmOptionDescList options, 378444c061aSmrg Cardinal num_options, 379444c061aSmrg int *argc_in_out, 380444c061aSmrg String *argv_in_out, 381444c061aSmrg String *fallback_resources, 382444c061aSmrg ...) 383444c061aSmrg{ 384444c061aSmrg va_list var; 385444c061aSmrg 3869e7bcd65Smrg va_start(var, fallback_resources); 387444c061aSmrg return _XtVaOpenApplication(app_context_return, (String)application_class, 388444c061aSmrg options, num_options, argc_in_out, argv_in_out, 389444c061aSmrg fallback_resources, 390444c061aSmrg applicationShellWidgetClass, var); 391444c061aSmrg} 392444c061aSmrg 393444c061aSmrg#endif /* !((SUNSHLIB || AIXSHLIB) && SHAREDCODE) */ 394444c061aSmrg 395