From f874995c195d3a654397a83feb1d66eb6ae71cb5 Mon Sep 17 00:00:00 2001 From: Ron Koenderink Date: Sun, 9 Jul 2006 18:30:13 +0000 Subject: [PATCH] (switch_leader, switch_flagship): New. (navi, marc): Add the ability to select a flagship or leader. --- src/lib/commands/marc.c | 35 +++++++++++++++++++++++++++-------- src/lib/commands/navi.c | 35 +++++++++++++++++++++++++++-------- 2 files changed, 54 insertions(+), 16 deletions(-) diff --git a/src/lib/commands/marc.c b/src/lib/commands/marc.c index d9c08099c..df2466167 100644 --- a/src/lib/commands/marc.c +++ b/src/lib/commands/marc.c @@ -46,6 +46,7 @@ #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) @@ -147,14 +148,11 @@ 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); @@ -209,3 +207,24 @@ set_leader(struct emp_qelem *list, struct lndstr **leaderp) 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); +} + diff --git a/src/lib/commands/navi.c b/src/lib/commands/navi.c index 62cf816f3..f068eb3ba 100644 --- a/src/lib/commands/navi.c +++ b/src/lib/commands/navi.c @@ -48,6 +48,7 @@ #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) @@ -175,14 +176,11 @@ 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); @@ -312,3 +310,24 @@ set_flagship(struct emp_qelem *list, struct shpstr **flagshipp) 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); +} + -- 2.43.0