+ c_old = c_cur;
+
+ switch ((op = mutt_menuLoop (menu))) {
+ case OP_REDRAW:
+ {
+ menu_redraw_status (menu);
+ mix_redraw_head (chain);
+ mix_screen_coordinates (type2_list, &coords, chain, 0);
+ mix_redraw_chain (type2_list, coords, chain, c_cur);
+ menu->pagelen = m_len = MIX_VOFFSET - menu->offset - 1;
+ break;
+ }
+
+ case OP_EXIT:
+ {
+ chain->cl = 0;
+ loop = 0;
+ break;
+ }
+
+ case OP_MIX_USE:
+ {
+ if (!chain->cl) {
+ chain->cl++;
+ chain->ch[0] = menu->current;
+ mix_screen_coordinates (type2_list, &coords, chain, c_cur);
+ c_redraw = 1;
+ }
+
+ if (chain->cl && chain->ch[chain->cl - 1] &&
+ (type2_list[chain->ch[chain->cl - 1]]->caps & MIX_CAP_MIDDLEMAN))
+ {
+ mutt_error (_
+ ("Error: %s can't be used as the final remailer of a chain."),
+ type2_list[chain->ch[chain->cl - 1]]->shortname);
+ }
+ else {
+ loop = 0;
+ }
+ break;
+ }
+
+ case OP_GENERIC_SELECT_ENTRY:
+ case OP_MIX_APPEND:
+ {
+ if (chain->cl < MAXMIXES && c_cur < chain->cl)
+ c_cur++;
+ }
+ /* fallthrough */
+ case OP_MIX_INSERT:
+ {
+ if (chain->cl < MAXMIXES) {
+ chain->cl++;
+ for (i = chain->cl - 1; i > c_cur; i--)
+ chain->ch[i] = chain->ch[i - 1];
+
+ chain->ch[c_cur] = menu->current;
+ mix_screen_coordinates (type2_list, &coords, chain, c_cur);
+ c_redraw = 1;
+ }
+ else
+ mutt_error (_("Mixmaster chains are limited to %d elements."),
+ MAXMIXES);
+
+ break;
+ }
+
+ case OP_MIX_DELETE:
+ {
+ if (chain->cl) {
+ chain->cl--;
+
+ for (i = c_cur; i < chain->cl; i++)
+ chain->ch[i] = chain->ch[i + 1];
+
+ if (c_cur == chain->cl && c_cur)
+ c_cur--;
+
+ mix_screen_coordinates (type2_list, &coords, chain, c_cur);
+ c_redraw = 1;
+ }
+ else {
+ mutt_error _("The remailer chain is already empty.");
+ }
+ break;
+ }
+
+ case OP_MIX_CHAIN_PREV:
+ {
+ if (c_cur)
+ c_cur--;
+ else
+ mutt_error _("You already have the first chain element selected.");
+
+ break;
+ }
+
+ case OP_MIX_CHAIN_NEXT:
+ {
+ if (chain->cl && c_cur < chain->cl - 1)
+ c_cur++;
+ else
+ mutt_error _("You already have the last chain element selected.");
+
+ break;
+ }