XF86ConfInputPtr xf86findInputByDriver (const char *driver, XF86ConfInputPtr p) { while (p) { if (xf86nameCompare (driver, p->inp_driver) == 0) return p; p = p->list.next; } return NULL; }
XF86ConfDevicePtr xf86findDevice (const char *ident, XF86ConfDevicePtr p) { while (p) { if (xf86nameCompare (ident, p->dev_identifier) == 0) return (p); p = p->list.next; } return (NULL); }
XF86ConfInputPtr xf86findInput (const char *ident, XF86ConfInputPtr p) { while (p) { if (xf86nameCompare (ident, p->inp_identifier) == 0) return p; p = p->list.next; } return NULL; }
XF86ConfScreenPtr xf86findScreen (const char *ident, XF86ConfScreenPtr p) { while (p) { if (xf86nameCompare (ident, p->scrn_identifier) == 0) return p; p = p->list.next; } return NULL; }
static XF86ConfDevicePtr _xf86findDriver(const char *ident, XF86ConfDevicePtr p) { while (p) { if (p->dev_driver && xf86nameCompare(ident, p->dev_driver) == 0) return p; p = p->list.next; } return NULL; }
XF86ConfModeLinePtr xf86findModeLine (const char *ident, XF86ConfModeLinePtr p) { while (p) { if (xf86nameCompare (ident, p->ml_identifier) == 0) return (p); p = p->list.next; } return (NULL); }
XF86ConfVideoAdaptorPtr xf86findVideoAdaptor (const char *ident, XF86ConfVideoAdaptorPtr p) { while (p) { if (xf86nameCompare (ident, p->va_identifier) == 0) return (p); p = p->list.next; } return (NULL); }
XF86ConfigPtr xf86parseConfigFile (XF86ConfigPtr ptr) { int token; if (!ptr) { if ((ptr = xf86confcalloc (1, sizeof (XF86ConfigRec))) == NULL) { return NULL; } memset (ptr, 0, sizeof (XF86ConfigRec)); } while ((token = xf86getToken (TopLevelTab)) != EOF_TOKEN) { switch (token) { case COMMENT: ptr->conf_comment = xf86addComment(ptr->conf_comment, val.str); break; case SECTION: if (xf86getSubToken (&(ptr->conf_comment)) != STRING) { xf86parseError (QUOTE_MSG, "Section"); CLEANUP (ptr); return (NULL); } xf86setSection (val.str); if (xf86nameCompare (val.str, "files") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_files_lst, xf86parseFilesSection, XF86ConfFilesPtr); } else if (xf86nameCompare (val.str, "serverflags") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_flags_lst, xf86parseFlagsSection, XF86ConfFlagsPtr); } else if (xf86nameCompare (val.str, "keyboard") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_input_lst, xf86parseKeyboardSection, XF86ConfInputPtr); } else if (xf86nameCompare (val.str, "pointer") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_input_lst, xf86parsePointerSection, XF86ConfInputPtr); } else if (xf86nameCompare (val.str, "videoadaptor") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_videoadaptor_lst, xf86parseVideoAdaptorSection, XF86ConfVideoAdaptorPtr); } else if (xf86nameCompare (val.str, "device") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_device_lst, xf86parseDeviceSection, XF86ConfDevicePtr); } else if (xf86nameCompare (val.str, "monitor") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_monitor_lst, xf86parseMonitorSection, XF86ConfMonitorPtr); } else if (xf86nameCompare (val.str, "modes") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_modes_lst, xf86parseModesSection, XF86ConfModesPtr); } else if (xf86nameCompare (val.str, "screen") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_screen_lst, xf86parseScreenSection, XF86ConfScreenPtr); } else if (xf86nameCompare(val.str, "inputdevice") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_input_lst, xf86parseInputSection, XF86ConfInputPtr); } else if (xf86nameCompare (val.str, "module") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_modules_lst, xf86parseModuleSection, XF86ConfModulePtr); } else if (xf86nameCompare (val.str, "serverlayout") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_layout_lst, xf86parseLayoutSection, XF86ConfLayoutPtr); } else if (xf86nameCompare (val.str, "vendor") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_vendor_lst, xf86parseVendorSection, XF86ConfVendorPtr); } else if (xf86nameCompare (val.str, "dri") == 0) { xf86conffree(val.str); val.str = NULL; HANDLE_LIST (conf_dri_lst, xf86parseDRISection, XF86ConfDRIPtr); } else { Error (INVALID_SECTION_MSG, xf86tokenString ()); xf86conffree(val.str); val.str = NULL; } break; default: Error (INVALID_KEYWORD_MSG, xf86tokenString ()); xf86conffree(val.str); val.str = NULL; } } return ptr; }
/* * xf86getToken -- * Read next Token from the config file. Handle the global variable * pushToken. */ int xf86getToken (xf86ConfigSymTabRec * tab) { int c, i; /* * First check whether pushToken has a different value than LOCK_TOKEN. * In this case rBuf[] contains a valid STRING/TOKEN/NUMBER. But in the * oth * case the next token must be read from the input. */ if (pushToken == EOF_TOKEN) return EOF_TOKEN; else if (pushToken == LOCK_TOKEN) { /* * eol_seen is only set for the first token after a newline. */ eol_seen = 0; c = configBuf[configPos]; /* * Get start of next Token. EOF is handled, * whitespaces are skipped. */ again: if (!c) { char *ret; if (numFiles > 0) ret = xf86getNextLine(); else { if (builtinConfig[builtinIndex] == NULL) ret = NULL; else { ret = strncpy(configBuf, builtinConfig[builtinIndex], CONFIG_BUF_LEN); builtinIndex++; } } if (ret == NULL) { /* * if necessary, move to the next file and * read the first line */ if (curFileIndex + 1 < numFiles) { curFileIndex++; configLineNo = 0; goto again; } else return pushToken = EOF_TOKEN; } configLineNo++; configPos = 0; eol_seen = 1; } i = 0; for (;;) { c = configBuf[configPos++]; configRBuf[i++] = c; switch (c) { case ' ': case '\t': case '\r': continue; case '\n': i = 0; continue; } break; } if (c == '\0') goto again; if (c == '#') { do { configRBuf[i++] = (c = configBuf[configPos++]); } while ((c != '\n') && (c != '\r') && (c != '\0')); configRBuf[i] = '\0'; /* XXX no private copy. * Use xf86addComment when setting a comment. */ val.str = configRBuf; return COMMENT; } /* GJA -- handle '-' and ',' * Be careful: "-hsync" is a keyword. */ else if ((c == ',') && !isalpha (configBuf[configPos])) { return COMMA; } else if ((c == '-') && !isalpha (configBuf[configPos])) { return DASH; } /* * Numbers are returned immediately ... */ if (isdigit (c)) { int base; if (c == '0') if ((configBuf[configPos] == 'x') || (configBuf[configPos] == 'X')) { base = 16; val.numType = PARSE_HEX; } else { base = 8; val.numType = PARSE_OCTAL; } else { base = 10; val.numType = PARSE_DECIMAL; } configRBuf[0] = c; i = 1; while (isdigit (c = configBuf[configPos++]) || (c == '.') || (c == 'x') || (c == 'X') || ((base == 16) && (((c >= 'a') && (c <= 'f')) || ((c >= 'A') && (c <= 'F'))))) configRBuf[i++] = c; configPos--; /* GJA -- one too far */ configRBuf[i] = '\0'; val.num = strtoul (configRBuf, NULL, 0); val.realnum = atof (configRBuf); return NUMBER; } /* * All Strings START with a \" ... */ else if (c == '\"') { i = -1; do { configRBuf[++i] = (c = configBuf[configPos++]); } while ((c != '\"') && (c != '\n') && (c != '\r') && (c != '\0')); configRBuf[i] = '\0'; val.str = malloc (strlen (configRBuf) + 1); strcpy (val.str, configRBuf); /* private copy ! */ return STRING; } /* * ... and now we MUST have a valid token. The search is * handled later along with the pushed tokens. */ else { configRBuf[0] = c; i = 0; do { configRBuf[++i] = (c = configBuf[configPos++]); } while ((c != ' ') && (c != '\t') && (c != '\n') && (c != '\r') && (c != '\0') && (c != '#')); --configPos; configRBuf[i] = '\0'; i = 0; } } else { /* * Here we deal with pushed tokens. Reinitialize pushToken again. If * the pushed token was NUMBER || STRING return them again ... */ int temp = pushToken; pushToken = LOCK_TOKEN; if (temp == COMMA || temp == DASH) return temp; if (temp == NUMBER || temp == STRING) return temp; } /* * Joop, at last we have to lookup the token ... */ if (tab) { i = 0; while (tab[i].token != -1) if (xf86nameCompare (configRBuf, tab[i].name) == 0) return tab[i].token; else i++; } return ERROR_TOKEN; /* Error catcher */ }
XF86ConfScreenPtr xf86parseScreenSection(void) { int has_ident = FALSE; int has_driver = FALSE; int token; parsePrologue(XF86ConfScreenPtr, XF86ConfScreenRec) while ((token = xf86getToken(ScreenTab)) != ENDSECTION) { switch (token) { case COMMENT: ptr->scrn_comment = xf86addComment(ptr->scrn_comment, xf86_lex_val.str); break; case IDENTIFIER: if (xf86getSubToken(&(ptr->scrn_comment)) != STRING) Error(QUOTE_MSG, "Identifier"); ptr->scrn_identifier = xf86_lex_val.str; if (has_ident || has_driver) Error(ONLY_ONE_MSG, "Identifier or Driver"); has_ident = TRUE; break; case MATCHSEAT: if (xf86getSubToken(&(ptr->scrn_comment)) != STRING) Error(QUOTE_MSG, "MatchSeat"); ptr->match_seat = xf86_lex_val.str; break; case OBSDRIVER: if (xf86getSubToken(&(ptr->scrn_comment)) != STRING) Error(QUOTE_MSG, "Driver"); ptr->scrn_obso_driver = xf86_lex_val.str; if (has_ident || has_driver) Error(ONLY_ONE_MSG, "Identifier or Driver"); has_driver = TRUE; break; case DEFAULTDEPTH: if (xf86getSubToken(&(ptr->scrn_comment)) != NUMBER) Error(NUMBER_MSG, "DefaultDepth"); ptr->scrn_defaultdepth = xf86_lex_val.num; break; case DEFAULTBPP: if (xf86getSubToken(&(ptr->scrn_comment)) != NUMBER) Error(NUMBER_MSG, "DefaultBPP"); ptr->scrn_defaultbpp = xf86_lex_val.num; break; case DEFAULTFBBPP: if (xf86getSubToken(&(ptr->scrn_comment)) != NUMBER) Error(NUMBER_MSG, "DefaultFbBPP"); ptr->scrn_defaultfbbpp = xf86_lex_val.num; break; case MDEVICE: if (xf86getSubToken(&(ptr->scrn_comment)) != STRING) Error(QUOTE_MSG, "Device"); ptr->scrn_device_str = xf86_lex_val.str; break; case MONITOR: if (xf86getSubToken(&(ptr->scrn_comment)) != STRING) Error(QUOTE_MSG, "Monitor"); ptr->scrn_monitor_str = xf86_lex_val.str; break; case VIDEOADAPTOR: { XF86ConfAdaptorLinkPtr aptr; if (xf86getSubToken(&(ptr->scrn_comment)) != STRING) Error(QUOTE_MSG, "VideoAdaptor"); /* Don't allow duplicates */ for (aptr = ptr->scrn_adaptor_lst; aptr; aptr = (XF86ConfAdaptorLinkPtr) aptr->list.next) if (xf86nameCompare(xf86_lex_val.str, aptr->al_adaptor_str) == 0) break; if (aptr == NULL) { aptr = calloc(1, sizeof(XF86ConfAdaptorLinkRec)); aptr->list.next = NULL; aptr->al_adaptor_str = xf86_lex_val.str; ptr->scrn_adaptor_lst = (XF86ConfAdaptorLinkPtr) xf86addListItem((glp) ptr->scrn_adaptor_lst, (glp) aptr); } } break; case VIRTUAL: if (xf86getSubToken(&(ptr->scrn_comment)) != NUMBER) Error(VIRTUAL_MSG); ptr->scrn_virtualX = xf86_lex_val.num; if (xf86getSubToken(&(ptr->scrn_comment)) != NUMBER) Error(VIRTUAL_MSG); ptr->scrn_virtualY = xf86_lex_val.num; break; case OPTION: ptr->scrn_option_lst = xf86parseOption(ptr->scrn_option_lst); break; case SUBSECTION: if (xf86getSubToken(&(ptr->scrn_comment)) != STRING) Error(QUOTE_MSG, "SubSection"); { free(xf86_lex_val.str); HANDLE_LIST(scrn_display_lst, xf86parseDisplaySubSection, XF86ConfDisplayPtr); } break; case EOF_TOKEN: Error(UNEXPECTED_EOF_MSG); break; default: Error(INVALID_KEYWORD_MSG, xf86tokenString()); break; } } if (!has_ident && !has_driver) Error(NO_IDENT_MSG); #ifdef DEBUG printf("Screen section parsed\n"); #endif return ptr; }
XF86ConfigPtr xf86readConfigFile(void) { int token; XF86ConfigPtr ptr = NULL; if ((ptr = calloc(1, sizeof(XF86ConfigRec))) == NULL) { return NULL; } while ((token = xf86getToken(TopLevelTab)) != EOF_TOKEN) { switch (token) { case COMMENT: ptr->conf_comment = xf86addComment(ptr->conf_comment, xf86_lex_val.str); break; case SECTION: if (xf86getSubToken(&(ptr->conf_comment)) != STRING) { xf86parseError(QUOTE_MSG, "Section"); CLEANUP(ptr); return NULL; } xf86setSection(xf86_lex_val.str); if (xf86nameCompare(xf86_lex_val.str, "files") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_RETURN(conf_files, xf86parseFilesSection()); } else if (xf86nameCompare(xf86_lex_val.str, "serverflags") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_RETURN(conf_flags, xf86parseFlagsSection()); } else if (xf86nameCompare(xf86_lex_val.str, "pointer") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_LIST(conf_input_lst, xf86parsePointerSection, XF86ConfInputPtr); } else if (xf86nameCompare(xf86_lex_val.str, "videoadaptor") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_LIST(conf_videoadaptor_lst, xf86parseVideoAdaptorSection, XF86ConfVideoAdaptorPtr); } else if (xf86nameCompare(xf86_lex_val.str, "device") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_LIST(conf_device_lst, xf86parseDeviceSection, XF86ConfDevicePtr); } else if (xf86nameCompare(xf86_lex_val.str, "monitor") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_LIST(conf_monitor_lst, xf86parseMonitorSection, XF86ConfMonitorPtr); } else if (xf86nameCompare(xf86_lex_val.str, "modes") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_LIST(conf_modes_lst, xf86parseModesSection, XF86ConfModesPtr); } else if (xf86nameCompare(xf86_lex_val.str, "screen") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_LIST(conf_screen_lst, xf86parseScreenSection, XF86ConfScreenPtr); } else if (xf86nameCompare(xf86_lex_val.str, "inputdevice") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_LIST(conf_input_lst, xf86parseInputSection, XF86ConfInputPtr); } else if (xf86nameCompare(xf86_lex_val.str, "inputclass") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_LIST(conf_inputclass_lst, xf86parseInputClassSection, XF86ConfInputClassPtr); } else if (xf86nameCompare(xf86_lex_val.str, "outputclass") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_LIST(conf_outputclass_lst, xf86parseOutputClassSection, XF86ConfOutputClassPtr); } else if (xf86nameCompare(xf86_lex_val.str, "module") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_RETURN(conf_modules, xf86parseModuleSection()); } else if (xf86nameCompare(xf86_lex_val.str, "serverlayout") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_LIST(conf_layout_lst, xf86parseLayoutSection, XF86ConfLayoutPtr); } else if (xf86nameCompare(xf86_lex_val.str, "vendor") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_LIST(conf_vendor_lst, xf86parseVendorSection, XF86ConfVendorPtr); } else if (xf86nameCompare(xf86_lex_val.str, "dri") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_RETURN(conf_dri, xf86parseDRISection()); } else if (xf86nameCompare(xf86_lex_val.str, "extensions") == 0) { free(xf86_lex_val.str); xf86_lex_val.str = NULL; HANDLE_RETURN(conf_extensions, xf86parseExtensionsSection()); } else { free(xf86_lex_val.str); xf86_lex_val.str = NULL; Error(INVALID_SECTION_MSG, xf86tokenString()); } break; default: free(xf86_lex_val.str); xf86_lex_val.str = NULL; Error(INVALID_KEYWORD_MSG, xf86tokenString()); } } if (xf86validateConfig(ptr)) return ptr; else { CLEANUP(ptr); return NULL; } }
void ScreenDialog(XF86SetupInfo *info) { static Widget dialog, d1, d4, d8, d16, d24, labelRotate, cw, ccw; Arg args[2]; XF86ConfMonitorPtr mon = screen->scrn_monitor; XF86ConfModeLinePtr mline = mon != NULL ? mon->mon_modeline_lst : NULL; int i; #ifdef USE_MODULES xf86cfgModuleOptions *drv_opts = module_options; Bool foundRotate = False; #endif while (nmodes > 0) XtFree(modes[--nmodes]); XtFree((XtPointer)modes); modes = NULL; while (mline) { if (nmodes % 16 == 0) modes = (char**)XtRealloc((XtPointer)modes, sizeof(char*) * (nmodes + 16)); modes[nmodes++] = XtNewString(mline->ml_identifier); mline = (XF86ConfModeLinePtr)(mline->list.next); } for (i = 0; i < sizeof(standard_modes) / sizeof(standard_modes[0]); i++) { if (nmodes % 16 == 0) modes = (char**)XtRealloc((XtPointer)modes, sizeof(char*) * (nmodes + 16)); modes[nmodes++] = XtNewString(standard_modes[i]); } if (dialog == NULL) { Widget command, viewport; dialog = XtCreateWidget("screenD", formWidgetClass, configp, NULL, 0); XtCreateManagedWidget("depthL", labelWidgetClass, dialog, NULL, 0); d1 = XtCreateManagedWidget("1", toggleWidgetClass, dialog, NULL, 0); XtAddCallback(d1, XtNcallback, DepthCallback, (XtPointer)1); d4 = XtVaCreateManagedWidget("4", toggleWidgetClass, dialog, XtNradioGroup, d1, NULL); XtAddCallback(d4, XtNcallback, DepthCallback, (XtPointer)4); d8 = XtVaCreateManagedWidget("8", toggleWidgetClass, dialog, XtNradioGroup, d4, NULL); XtAddCallback(d8, XtNcallback, DepthCallback, (XtPointer)8); d16 = XtVaCreateManagedWidget("16", toggleWidgetClass, dialog, XtNradioGroup, d8, NULL); XtAddCallback(d16, XtNcallback, DepthCallback, (XtPointer)16); d24 = XtVaCreateManagedWidget("24", toggleWidgetClass, dialog, XtNradioGroup, d16, NULL); XtAddCallback(d24, XtNcallback, DepthCallback, (XtPointer)24); XtCreateManagedWidget("modeL", labelWidgetClass, dialog, NULL, 0); viewport = XtCreateManagedWidget("viewL", viewportWidgetClass, dialog, NULL, 0); listL = XtCreateManagedWidget("listLeft", listWidgetClass, viewport, NULL, 0); XtAddCallback(listL, XtNcallback, SelectIndexCallback, NULL); command = XtCreateManagedWidget("select", commandWidgetClass, dialog, NULL, 0); XtAddCallback(command, XtNcallback, SelectCallback, NULL); command = XtCreateManagedWidget("unselect", commandWidgetClass, dialog, NULL, 0); XtAddCallback(command, XtNcallback, UnselectCallback, NULL); command = XtCreateManagedWidget("up", commandWidgetClass, dialog, NULL, 0); XtAddCallback(command, XtNcallback, MoveCallback, (XtPointer)False); command = XtCreateManagedWidget("down", commandWidgetClass, dialog, NULL, 0); XtAddCallback(command, XtNcallback, MoveCallback, (XtPointer)True); viewport = XtCreateManagedWidget("viewR", viewportWidgetClass, dialog, NULL, 0); listR = XtCreateManagedWidget("listRight", listWidgetClass, viewport, NULL, 0); XtAddCallback(listR, XtNcallback, UnselectIndexCallback, NULL); labelRotate = XtCreateManagedWidget("rotate", labelWidgetClass, dialog, NULL, 0); cw = XtCreateManagedWidget("CW", toggleWidgetClass, dialog, NULL, 0); XtAddCallback(cw, XtNcallback, RotateCallback, (XtPointer)CW); ccw = XtVaCreateManagedWidget("CCW", toggleWidgetClass, dialog, XtNradioGroup, cw, NULL); XtAddCallback(ccw, XtNcallback, RotateCallback, (XtPointer)CCW); XtRealizeWidget(dialog); } #ifdef USE_MODULES if (!nomodules) { while (drv_opts) { if (drv_opts->type == VideoModule && strcmp(drv_opts->name, screen->scrn_device->dev_driver) == 0) { OptionInfoPtr opts = drv_opts->option; while (opts->name) { if (xf86nameCompare(opts->name, "Rotate") == 0) { foundRotate = True; break; } opts++; } break; } drv_opts = drv_opts->next; } if (!foundRotate) { XtUnmapWidget(labelRotate); XtUnmapWidget(cw); XtUnmapWidget(ccw); } else { XtMapWidget(labelRotate); XtMapWidget(cw); XtMapWidget(ccw); } } #else (void)labelRotate; #endif if (rotate == CW) { XtVaSetValues(cw, XtNstate, True, NULL); XtVaSetValues(ccw, XtNstate, False, NULL); } else if (rotate == CCW) { XtVaSetValues(cw, XtNstate, False, NULL); XtVaSetValues(ccw, XtNstate, True, NULL); } else { XtVaSetValues(cw, XtNstate, False, NULL); XtVaSetValues(ccw, XtNstate, False, NULL); } XtSetArg(args[0], XtNlist, modes); XtSetArg(args[1], XtNnumberStrings, nmodes); XtSetValues(listL, args, 2); XtSetArg(args[0], XtNlist, defmodes); XtSetArg(args[1], XtNnumberStrings, ndefmodes); XtSetValues(listR, args, 2); XtSetArg(args[0], XtNstate, True); XtSetValues(default_depth == 1 ? d1 : default_depth == 4 ? d4 : default_depth == 16 ? d16 : default_depth == 24 ? d24 : d8, args, 1); XtChangeManagedSet(¤t, 1, NULL, NULL, &dialog, 1); current = dialog; }