Index: trunk/src_plugins/hid_lesstif/Plug.tmpasm =================================================================== --- trunk/src_plugins/hid_lesstif/Plug.tmpasm (revision 1465) +++ trunk/src_plugins/hid_lesstif/Plug.tmpasm (revision 1466) @@ -6,6 +6,7 @@ $(PLUGDIR)/hid_lesstif/menu.o $(PLUGDIR)/hid_lesstif/netlist.o $(PLUGDIR)/hid_lesstif/styles.o + $(PLUGDIR)/hid_lesstif/stdarg.o @] switch /local/pcb/hid_lesstif/controls Index: trunk/src_plugins/hid_lesstif/lesstif.h =================================================================== --- trunk/src_plugins/hid_lesstif/lesstif.h (revision 1465) +++ trunk/src_plugins/hid_lesstif/lesstif.h (revision 1466) @@ -50,7 +50,7 @@ extern void lesstif_pan_fixup(void); extern void lesstif_show_library(void); extern void lesstif_show_netlist(void); -extern Pixel lesstif_parse_color(char *value); +extern Pixel lesstif_parse_color(const char *value); extern void lesstif_insert_style_buttons(Widget menu); extern void lesstif_styles_update_values(); extern void lesstif_update_layer_groups(); Index: trunk/src_plugins/hid_lesstif/main.c =================================================================== --- trunk/src_plugins/hid_lesstif/main.c (revision 1465) +++ trunk/src_plugins/hid_lesstif/main.c (revision 1466) @@ -102,7 +102,7 @@ static int pixmap_w = 0, pixmap_h = 0; Screen *screen_s; int screen; -static Colormap colormap; +Colormap lesstif_colormap; static GC my_gc = 0, bg_gc, clip_gc = 0, bset_gc = 0, bclear_gc = 0, mask_gc = 0; static Pixel bgcolor, offlimit_color, grid_color; static int bgred, bggreen, bgblue; @@ -301,25 +301,15 @@ *py = Py(vy); } -Pixel lesstif_parse_color(char *value) +Pixel lesstif_parse_color(const char *value) { XColor color; - if (XParseColor(display, colormap, value, &color)) - if (XAllocColor(display, colormap, &color)) + if (XParseColor(display, lesstif_colormap, value, &color)) + if (XAllocColor(display, lesstif_colormap, &color)) return color.pixel; return 0; } -#warning rename this: prefix! -void do_color(char *value, char *which) -{ - XColor color; - if (XParseColor(display, colormap, value, &color)) - if (XAllocColor(display, colormap, &color)) { - stdarg(which, color.pixel); - } -} - /* ------------------------------------------------------------ */ static char *cur_clip() @@ -1024,7 +1014,7 @@ pix.green = pg * 65535 / maxval; pix.blue = pb * 65535 / maxval; pix.flags = DoRed | DoGreen | DoBlue; - XAllocColor(display, colormap, &pix); + XAllocColor(display, lesstif_colormap, &pix); bg[r][c] = pix.pixel; break; case PT_RGB565: @@ -1585,7 +1575,7 @@ view_height = height; color.pixel = bgcolor; - XQueryColor(display, colormap, &color); + XQueryColor(display, lesstif_colormap, &color); bgred = color.red; bggreen = color.green; bgblue = color.blue; @@ -1756,7 +1746,7 @@ XtManageChild(work_area_frame); n = 0; - do_color(Settings.BackgroundColor, XmNbackground); + stdarg_do_color(Settings.BackgroundColor, XmNbackground); work_area = XmCreateDrawingArea(work_area_frame, "work_area", args, n); XtManageChild(work_area); XtAddCallback(work_area, XmNexposeCallback, (XtCallbackProc) work_area_first_expose, 0); @@ -2104,7 +2094,7 @@ display = XtDisplay(appwidget); screen_s = XtScreen(appwidget); screen = XScreenNumberOfScreen(screen_s); - colormap = XDefaultColormap(display, screen); + lesstif_colormap = XDefaultColormap(display, screen); close_atom = XmInternAtom(display, "WM_DELETE_WINDOW", 0); XmAddWMProtocolCallback(appwidget, close_atom, (XtCallbackProc) mainwind_delete_cb, 0); @@ -2171,10 +2161,10 @@ } } - /* redefine colormap, if requested via "-install" */ + /* redefine lesstif_colormap, if requested via "-install" */ if (use_private_colormap) { - colormap = XCopyColormapAndFree(display, colormap); - XtVaSetValues(appwidget, XtNcolormap, colormap, NULL); + lesstif_colormap = XCopyColormapAndFree(display, lesstif_colormap); + XtVaSetValues(appwidget, XtNcolormap, lesstif_colormap, NULL); } /* listen on standard input for actions */ @@ -2967,7 +2957,7 @@ gc->erase = 0; } else { - if (!XAllocNamedColor(display, colormap, name, &color, &exact_color)) + if (!XAllocNamedColor(display, lesstif_colormap, name, &color, &exact_color)) color.pixel = WhitePixel(display, screen); #if 0 printf("lesstif_set_color `%s' %08x rgb/%d/%d/%d\n", name, color.pixel, color.red, color.green, color.blue); @@ -2984,11 +2974,11 @@ lastcolor = gc->color; color.pixel = gc->color; - XQueryColor(display, colormap, &color); + XQueryColor(display, lesstif_colormap, &color); color.red = (bgred + color.red) / 2; color.green = (bggreen + color.green) / 2; color.blue = (bgblue + color.blue) / 2; - XAllocColor(display, colormap, &color); + XAllocColor(display, lesstif_colormap, &color); lastfade = gc->color = color.pixel; } } Index: trunk/src_plugins/hid_lesstif/menu.c =================================================================== --- trunk/src_plugins/hid_lesstif/menu.c (revision 1465) +++ trunk/src_plugins/hid_lesstif/menu.c (revision 1466) @@ -25,6 +25,7 @@ #include "paths.h" #include "hid_actions.h" #include "hid_flags.h" +#include "stdarg.h" #include "pcb-menu.h" #include @@ -41,10 +42,6 @@ static Colormap cmap; -static Arg args[30]; -static int n; -#define stdarg(t,v) XtSetArg(args[n], t, v), n++ - static void note_accelerator(const char *acc, lht_node_t *node); static void note_widget_flag(Widget w, char *type, char *name); @@ -202,7 +199,7 @@ break; } - n = 0; + stdarg_n = 0; if (i < MAX_LAYER && PCB->Data->Layer[i].Name) { XmString s = XmStringCreatePCB(PCB->Data->Layer[i].Name); stdarg(XmNlabelString, s); @@ -223,7 +220,7 @@ stdarg(XmNbackground, fg_colors[i]); stdarg(XmNset, current_layer == i ? True : False); } - XtSetValues(lb->w[i], args, n); + XtSetValues(lb->w[i], stdarg_args, stdarg_n); if (i >= max_copper_layer && i < MAX_LAYER) XtUnmanageChild(lb->w[i]); @@ -243,11 +240,11 @@ name = PCB->Data->Layer[current_layer].Name; break; } - n = 0; + stdarg_n = 0; stdarg(XmNbackground, fg_colors[current_layer]); stdarg(XmNforeground, bg_color); stdarg(XmNlabelString, XmStringCreatePCB(name)); - XtSetValues(lesstif_m_layer, args, n); + XtSetValues(lesstif_m_layer, stdarg_args, stdarg_n); } lesstif_update_layer_groups(); @@ -258,7 +255,8 @@ static void show_one_layer_button(int layer, int set) { int l; - n = 0; + + stdarg_n = 0; if (set) { stdarg(XmNforeground, bg_color); stdarg(XmNbackground, fg_colors[layer]); @@ -272,7 +270,7 @@ for (l = 0; l < num_layer_buttons; l++) { LayerButtons *lb = layer_button_list + l; if (!lb->is_pick) - XtSetValues(lb->w[layer], args, n); + XtSetValues(lb->w[layer], stdarg_args, stdarg_n); } } @@ -347,11 +345,11 @@ name = PCB->Data->Layer[layer].Name; break; } - n = 0; + stdarg_n = 0; stdarg(XmNbackground, fg_colors[layer]); stdarg(XmNforeground, bg_color); stdarg(XmNlabelString, XmStringCreatePCB(name)); - XtSetValues(lesstif_m_layer, args, n); + XtSetValues(lesstif_m_layer, stdarg_args, stdarg_n); lesstif_invalidate_all(); } @@ -476,7 +474,7 @@ name = "Solder Mask"; break; } - n = 0; + stdarg_n = 0; if (accel_idx < 9) { char buf[20], av[30], av2[30]; lht_node_t *ar; @@ -495,7 +493,7 @@ else Message("Error: faliled to create ToggleView(%d)\n", i+1); } - btn = XmCreateToggleButton(menu, name, args, n); + btn = XmCreateToggleButton(menu, name, stdarg_args, stdarg_n); XtManageChild(btn); XtAddCallback(btn, XmNvalueChangedCallback, (XtCallbackProc) layer_button_callback, (XtPointer) (size_t) i); lb->w[i] = btn; @@ -542,7 +540,7 @@ sprintf(av, "SelectLayer(%d)", i + 1); break; } - n = 0; + stdarg_n = 0; if (accel_idx < 9) { lht_node_t *ar; XmString as; @@ -560,7 +558,7 @@ Message("Error: failed to create accel %d\n", accel_idx+1); } stdarg(XmNindicatorType, XmONE_OF_MANY); - btn = XmCreateToggleButton(menu, name, args, n); + btn = XmCreateToggleButton(menu, name, stdarg_args, stdarg_n); XtManageChild(btn); XtAddCallback(btn, XmNvalueChangedCallback, (XtCallbackProc) layerpick_button_callback, (XtPointer) (size_t) i); lb->w[i] = btn; @@ -630,7 +628,7 @@ REGISTER_ACTIONS(lesstif_menu_action_list, lesstif_cookie) #if 0 static void - do_color(char *value, char *which) + stdarg_do_color(char *value, char *which) { XColor color; if (XParseColor(display, cmap, value, &color)) @@ -685,9 +683,9 @@ XmString ls = XmStringCreatePCB((char *) message); XtManageChild(m_click); - n = 0; + stdarg_n = 0; stdarg(XmNlabelString, ls); - XtSetValues(m_click, args, n); + XtSetValues(m_click, stdarg_args, stdarg_n); /*printf("need xy: msg `%s'\n", msg); */ need_xy = 1; XBell(display, 100); @@ -722,10 +720,10 @@ if (aw) { Widget p = work_area; while (p && p != aw) { - n = 0; + stdarg_n = 0; stdarg(XmNx, &wx); stdarg(XmNy, &wy); - XtGetValues(p, args, n); + XtGetValues(p, stdarg_args, stdarg_n); action_x -= wx; action_y -= wy; p = XtParent(p); @@ -819,13 +817,13 @@ static void add_res2menu_main(Widget menu, lht_node_t *node, XtCallbackProc callback) { Widget sub, btn = NULL; - n = 0; + stdarg_n = 0; stdarg(XmNtearOffModel, XmTEAR_OFF_ENABLED); - sub = XmCreatePulldownMenu(menu, node->name, args, n); - XtSetValues(sub, args, n); - n = 0; + sub = XmCreatePulldownMenu(menu, node->name, stdarg_args, stdarg_n); + XtSetValues(sub, stdarg_args, stdarg_n); + stdarg_n = 0; stdarg(XmNsubMenuId, sub); - btn = XmCreateCascadeButton(menu, node->name, args, n); + btn = XmCreateCascadeButton(menu, node->name, stdarg_args, stdarg_n); XtManageChild(btn); if (hid_cfg_has_submenus(node)) { @@ -842,14 +840,14 @@ Widget sub, btn = NULL; lht_node_t *act; - n = 0; + stdarg_n = 0; v = hid_cfg_menu_field_str(node, MF_FOREGROUND); if (v != NULL) - do_color(v, XmNforeground); + stdarg_do_color(v, XmNforeground); v = hid_cfg_menu_field_str(node, MF_BACKGROUND); if (v != NULL) - do_color(v, XmNbackground); + stdarg_do_color(v, XmNbackground); #warning TODO: check if we should reenable this #if 0 @@ -877,16 +875,16 @@ stdarg(XmNlabelString, XmStringCreatePCB(strdup(v))); if (hid_cfg_has_submenus(node)) { - int nn = n; + int nn = stdarg_n; lht_node_t *i; const char *field_name; lht_node_t *submenu_node = hid_cfg_menu_field(node, MF_SUBMENU, &field_name); stdarg(XmNtearOffModel, XmTEAR_OFF_ENABLED); - sub = XmCreatePulldownMenu(menu, strdup(v), args + nn, n - nn); - n = nn; + sub = XmCreatePulldownMenu(menu, strdup(v), stdarg_args + nn, stdarg_n - nn); + stdarg_n = nn; stdarg(XmNsubMenuId, sub); - btn = XmCreateCascadeButton(menu, "menubutton", args, n); + btn = XmCreateCascadeButton(menu, "menubutton", stdarg_args, stdarg_n); XtManageChild(btn); /* assume submenu is a list, hid_cfg_has_submenus() already checked that */ @@ -925,16 +923,16 @@ stdarg(XmNindicatorType, XmONE_OF_MANY); else stdarg(XmNindicatorType, XmN_OF_MANY); - btn = XmCreateToggleButton(menu, "menubutton", args, n); + btn = XmCreateToggleButton(menu, "menubutton", stdarg_args, stdarg_n); if (act != NULL) XtAddCallback(btn, XmNvalueChangedCallback, callback, (XtPointer) act); } else if (label && strcmp(label, "false") == 0) { stdarg(XmNalignment, XmALIGNMENT_BEGINNING); - btn = XmCreateLabel(menu, "menulabel", args, n); + btn = XmCreateLabel(menu, "menulabel", stdarg_args, stdarg_n); } else { - btn = XmCreatePushButton(menu, "menubutton", args, n); + btn = XmCreatePushButton(menu, "menubutton", stdarg_args, stdarg_n); XtAddCallback(btn, XmNactivateCallback, callback, (XtPointer) act); } @@ -974,7 +972,7 @@ { #warning TODO: make this a flag hash, also in the gtk hid Widget btn = NULL; - n = 0; + stdarg_n = 0; if (*node->data.text.value == '@') { if (strcmp(node->data.text.value, "@layerview") == 0) insert_layerview_buttons(menu); @@ -984,7 +982,7 @@ lesstif_insert_style_buttons(menu); } else if ((strcmp(node->data.text.value, "-") == 0) || (strcmp(node->data.text.value, "-"))) { - btn = XmCreateSeparator(menu, "sep", args, n); + btn = XmCreateSeparator(menu, "sep", stdarg_args, stdarg_n); XtManageChild(btn); } @@ -991,7 +989,7 @@ #if 0 #warning TODO: this created the rest of the items in a list, or what? else if (i > 0) { - btn = XmCreatePushButton(menu, node->v[i].value, args, n); + btn = XmCreatePushButton(menu, node->v[i].value, stdarg_args, stdarg_n); /* npath = Concat(path, "/", node->v[i].name, NULL); fprintf(stderr, "htsp_set7 %s %p\n", path, btn); htsp_set(menu_hash, strdup(npath), btn);*/ Index: trunk/src_plugins/hid_lesstif/stdarg.c =================================================================== --- trunk/src_plugins/hid_lesstif/stdarg.c (nonexistent) +++ trunk/src_plugins/hid_lesstif/stdarg.c (revision 1466) @@ -0,0 +1,15 @@ +#include "stdarg.h" +Arg stdarg_args[30]; +int stdarg_n; + +extern Colormap lesstif_colormap; +extern Display *lesstif_display; + +void stdarg_do_color(const char *value, char *which) +{ + XColor color; + if (XParseColor(lesstif_display, lesstif_colormap, value, &color)) + if (XAllocColor(lesstif_display, lesstif_colormap, &color)) { + stdarg(which, color.pixel); + } +} Index: trunk/src_plugins/hid_lesstif/stdarg.h =================================================================== --- trunk/src_plugins/hid_lesstif/stdarg.h (nonexistent) +++ trunk/src_plugins/hid_lesstif/stdarg.h (revision 1466) @@ -0,0 +1,10 @@ +#include "xincludes.h" + +extern Colormap lesstif_colormap; + +extern Arg stdarg_args[]; +extern int stdarg_n; +#define stdarg(t,v) XtSetArg(stdarg_args[stdarg_n], t, v), stdarg_n++ + +void stdarg_do_color(const char *value, char *which); +