#include "commands.h"
static int set_leader(struct emp_qelem *list, struct lndstr **leaderp);
+static void switch_leader(struct emp_qelem *list, int land_uid);
int
march(void)
skip = 1;
break;
case 'f':
- {
- struct emp_qelem *qp;
-
- qp = land_list.q_back;
- emp_remque(land_list.q_back);
- emp_insque(qp, &land_list);
- set_leader(&land_list, &lnd);
- }
+ if (ac <= 1)
+ switch_leader(&land_list, -1);
+ else
+ switch_leader(&land_list, atoi(player->argp[1]));
+ set_leader(&land_list, &lnd);
break;
case 'i':
lnd_list(&land_list);
pr("%s\n", prland(&llp->land));
return 1;
}
+
+static void
+switch_leader(struct emp_qelem *list, int land_uid)
+{
+ struct emp_qelem *qp, *save;
+ struct llist *llp;
+
+ if (QEMPTY(list))
+ return;
+
+ save = qp = list->q_back;
+ do {
+ emp_remque(qp);
+ emp_insque(qp, list);
+ qp = list->q_back;
+ llp = (struct llist *)qp;
+ if (llp->land.lnd_uid == land_uid || land_uid == -1)
+ break;
+ } while (list->q_back != save);
+}
+
#include "optlist.h"
static int set_flagship(struct emp_qelem *list, struct shpstr **flagshipp);
+static void switch_flagship(struct emp_qelem *list, int ship_uid);
int
navi(void)
skip = 1;
break;
case 'f':
- {
- struct emp_qelem *qp;
-
- qp = ship_list.q_back;
- emp_remque(ship_list.q_back);
- emp_insque(qp, &ship_list);
- set_flagship(&ship_list, &shp);
- }
+ if (ac <= 1)
+ switch_flagship(&ship_list, -1);
+ else
+ switch_flagship(&ship_list, atoi(player->argp[1]));
+ set_flagship(&ship_list, &shp);
break;
case 'i':
shp_list(&ship_list);
pr("%s\n", prship(&mlp->ship));
return 1;
}
+
+static void
+switch_flagship(struct emp_qelem *list, int ship_uid)
+{
+ struct emp_qelem *qp, *save;
+ struct mlist *mlp;
+
+ if (QEMPTY(list))
+ return;
+
+ save = qp = list->q_back;
+ do {
+ emp_remque(qp);
+ emp_insque(qp, list);
+ qp = list->q_back;
+ mlp = (struct mlist *)qp;
+ if (mlp->ship.shp_uid == ship_uid || ship_uid == -1)
+ break;
+ } while (list->q_back != save);
+}
+