static int manage_fork(t_fifo_elem *cur, t_sllist **myenv, int *status) { cur->data.pid = xfork(); if (!cur->data.pid) return (manage_child(cur, myenv)); if (cur->data.flag[DSYNC]) { printf("%s%d\n", BG_PRC, cur->data.pid); usleep(150); } else if (cur->data.pid > 0 && (!F_ISPIPE(cur->data.flag[OUT]) || !cur->next)) { xwaitpid(cur->data.pid, status, 0); manage_status(cur, *status); } return (EXIT_SUCCESS); }
static void configure_plot(PlotWindowInfo *plot) { if (plot->plotter == 0) return; int ndim = plot->plotter->dimensions(); // Set up plot menu int i; for (i = 0; plot_menu[i].name != 0; i++) { if ((plot_menu[i].type & MMTypeMask) != MMToggle) continue; string name = plot_menu[i].name; const string s1 = "*" + name; Widget w = XtNameToWidget(plot->shell, s1.chars()); if (name.contains("2d", -1)) XtSetSensitive(w, ndim == 2); else if (name.contains("3d", -1)) XtSetSensitive(w, ndim >= 3); else XtSetSensitive(w, ndim >= 2); } // Log scale is available only iff all values are non-negative Widget logscale = XtNameToWidget(plot->shell, "*logscale"); XtSetSensitive(logscale, plot->plotter->min_v() >= 0.0); // Axes can be toggled in 2d mode only Widget xzeroaxis = XtNameToWidget(plot->shell, "*xzeroaxis"); Widget yzeroaxis = XtNameToWidget(plot->shell, "*yzeroaxis"); XtSetSensitive(xzeroaxis, ndim <= 2); XtSetSensitive(yzeroaxis, ndim <= 2); // Z Tics are available in 3d mode only Widget ztics = XtNameToWidget(plot->shell, "*ztics"); XtSetSensitive(ztics, ndim >= 3); // Contour drawing is available in 3d mode only Widget base = XtNameToWidget(plot->shell, "*base"); Widget surface = XtNameToWidget(plot->shell, "*surface"); XtSetSensitive(base, ndim >= 3); XtSetSensitive(surface, ndim >= 3); // Set scrollbars manage_child(plot->hsb, ndim >= 3); manage_child(plot->vsb, ndim >= 3); // Check if we can export something bool have_source = false; bool can_export = false; const StringArray& sources = plot->plotter->data_files(); for (i = 0; i < sources.size(); i++) { if (!sources[i].empty()) { if (have_source) can_export = false; // Multiple source files else can_export = have_source = true; } } Widget export_w = XtNameToWidget(plot->shell, "*export"); set_sensitive(export_w, can_export); // The remainder requires settings if (plot->settings.empty()) { // No settings yet if (plot->settings_timer == 0) { plot->settings_delay = new StatusDelay("Retrieving Plot Settings"); // Save settings... plot->settings_file = tempfile(); string cmd = "save " + quote(plot->settings_file) + "\n"; send(plot, cmd); // ...and try again in 250ms plot->settings_timer = XtAppAddTimeOut(XtWidgetToApplicationContext(plot->shell), 250, GetPlotSettingsCB, XtPointer(plot)); // Set initial scrollbar defaults XtVaSetValues(plot->vsb, XmNvalue, 60, XtPointer(0)); XtVaSetValues(plot->hsb, XmNvalue, 30, XtPointer(0)); } return; } configure_options(plot, view_menu, plot->settings); configure_options(plot, contour_menu, plot->settings); configure_options(plot, scale_menu, plot->settings); // Get style for (i = 0; plot_menu[i].name != 0; i++) { if ((plot_menu[i].type & MMTypeMask) != MMToggle) continue; string name = plot_menu[i].name; const string s1 = "*" + name; Widget w = XtNameToWidget(plot->shell, s1.chars()); bool set = plot->settings.contains("\nset data style " + name + "\n"); XmToggleButtonSetState(w, set, False); } // Get position int rot_x = 60; int rot_z = 30; int view_index = plot->settings.index("set view "); if (view_index >= 0) { // `set view <rot_x> {,{<rot_z>}{,{<scale>}{,<scale_z>}}}' string view_setting = plot->settings.after("set view "); rot_x = atoi(view_setting.chars()); view_setting = view_setting.after(", "); rot_z = atoi(view_setting.chars()); } XtVaSetValues(plot->vsb, XmNvalue, rot_x, XtPointer(0)); XtVaSetValues(plot->hsb, XmNvalue, rot_z, XtPointer(0)); }
void gdbExamineCB(Widget w, XtPointer, XtPointer) { static Widget dialog = 0; if (dialog == 0) { Arg args[10]; Cardinal arg = 0; XtSetArg(args[arg], XmNautoUnmanage, False); arg++; dialog = verify(XmCreatePromptDialog(find_shell(w), XMST("examine_dialog"), args, arg)); Delay::register_shell(dialog); XtManageChild(XmSelectionBoxGetChild(dialog, XmDIALOG_APPLY_BUTTON)); XtUnmanageChild(XmSelectionBoxGetChild(dialog, XmDIALOG_SELECTION_LABEL)); XtUnmanageChild(XmSelectionBoxGetChild(dialog, XmDIALOG_TEXT)); arg = 0; XtSetArg(args[arg], XmNorientation, XmHORIZONTAL); arg++; XtSetArg(args[arg], XmNborderWidth, 0); arg++; XtSetArg(args[arg], XmNentryBorder, 0); arg++; XtSetArg(args[arg], XmNspacing, 0); arg++; XtSetArg(args[arg], XmNmarginWidth, 0); arg++; XtSetArg(args[arg], XmNmarginHeight, 0); arg++; Widget panel = MMcreateButtonPanel(dialog, "panel", examine_menu, args, arg); (void) panel; MMaddCallbacks(examine_menu); MMaddHelpCallback(examine_menu, ImmediateHelpCB); manage_child(unsigned_char_w, gdb->type() == GDB); manage_child(binary_w, gdb->type() == GDB); manage_child(address_format_w, gdb->type() == GDB); manage_child(wide_char_w, gdb->type() == DBX); manage_child(wide_string_w, gdb->type() == DBX); manage_child(long_w, gdb->type() == DBX); // Initialize: use `o' and `b' as default menu items XtCallActionProc(octal_w, "ArmAndActivate", (XEvent *)0, (String *)0, 0); XtCallActionProc(byte_w, "ArmAndActivate", (XEvent *)0, (String *)0, 0); tie_combo_box_to_history(address_w, arg_history_filter); XtAddCallback(dialog, XmNokCallback, PrintExaminedCB, XtPointer(0)); XtAddCallback(dialog, XmNapplyCallback, DisplayExaminedCB, XtPointer(0)); XtAddCallback(dialog, XmNcancelCallback, UnmanageThisCB, XtPointer(dialog)); XtAddCallback(dialog, XmNhelpCallback, ImmediateHelpCB, XtPointer(0)); } string arg = source_arg->get_string(); if (!is_file_pos(arg) && !arg.empty()) XmTextFieldSetString(address_w, XMST(arg.chars())); manage_and_raise(dialog); }