+ ll = gui_item_display_flush_left (gui_item, buf, MAX_MENUITEM_LENGTH);
+
+ /* Escape '&' as '&&' */
+ ptr = buf;
+ while ((ptr = (char*) memchr (ptr, '&', ll - (ptr - buf))) != NULL)
+ {
+ if (ll + 2 >= MAX_MENUITEM_LENGTH)
+ signal_simple_error ("Menu item produces too long displayable string",
+ XGUI_ITEM (gui_item)->name);
+ memmove (ptr + 1, ptr, (ll - (ptr - buf)) + 1);
+ ll++;
+ ptr += 2;
+ }
+
+ /* Replace XEmacs accelerator '%_' with Windows accelerator '&' */
+ ptr = buf;
+ while ((ptr = (char*) memchr (ptr, '%', ll - (ptr - buf))) != NULL)
+ {
+ if (*(ptr + 1) == '_')
+ {
+ *ptr = '&';
+ memmove (ptr + 1, ptr + 2, ll - (ptr - buf + 2));
+ ll--;
+ }
+ ptr++;
+ }