extern int would_abandon(struct sctstr *, i_type, int, struct lndstr *);
extern int nav_map(int, int, int);
extern void switch_leader(struct emp_qelem *list, int uid);
+extern struct empobj *get_leader(struct emp_qelem *list);
+extern void pr_leader_change(struct empobj *leader);
extern int count_pop(int);
extern int scuttle_tradeship(struct shpstr *, int);
extern void scuttle_ship(struct shpstr *);
#include "empobj.h"
#include "unit.h"
-static int set_leader(struct emp_qelem *list, struct lndstr **leaderp);
-
int
march(void)
{
double minmob, maxmob;
int together;
char *cp = NULL;
- struct lndstr *lnd = NULL; /* leader */
+ int leader_uid;
+ struct lndstr *lnd; /* leader */
int dir;
int stopping = 0;
int skip = 0;
pr("No lands\n");
return RET_FAIL;
}
- set_leader(&land_list, &lnd);
+ lnd = (struct lndstr *)get_leader(&land_list);
+ leader_uid = lnd->lnd_uid;
+ pr("Leader is %s\n", prland(lnd));
if (player->argp[2]) {
strcpy(buf, player->argp[2]);
if (!(cp = lnd_path(together, lnd, buf)))
pr("No lands left\n");
return RET_OK;
}
- if (set_leader(&land_list, &lnd)) {
+ lnd = (struct lndstr *)get_leader(&land_list);
+ if (lnd->lnd_uid != leader_uid) {
+ leader_uid = lnd->lnd_uid;
+ pr_leader_change((struct empobj *)lnd);
stopping = 1;
continue;
}
pr("No lands left\n");
return RET_OK;
}
- if (set_leader(&land_list, &lnd)) {
+ lnd = (struct lndstr *)get_leader(&land_list);
+ if (lnd->lnd_uid != leader_uid) {
+ leader_uid = lnd->lnd_uid;
+ pr_leader_change((struct empobj *)lnd);
stopping = 1;
continue;
}
switch_leader(&land_list, -1);
else
switch_leader(&land_list, atoi(player->argp[1]));
- set_leader(&land_list, &lnd);
+ lnd = (struct lndstr *)get_leader(&land_list);
+ if (lnd->lnd_uid != leader_uid) {
+ leader_uid = lnd->lnd_uid;
+ pr_leader_change((struct empobj *)lnd);
+ }
break;
case 'i':
lnd_list(&land_list);
return RET_OK;
}
-static int
-set_leader(struct emp_qelem *list, struct lndstr **leaderp)
+void
+pr_leader_change(struct empobj *leader)
{
- struct ulist *llp = (struct ulist *)(list->q_back);
+ pr("Changing %s to %s\n",
+ leader->ef_type == EF_SHIP ? "flagship" : "leader",
+ obj_nameof(leader));
+}
- if (!*leaderp)
- pr("Leader is ");
- else if ((*leaderp)->lnd_uid != llp->unit.land.lnd_uid)
- pr("Changing leader to ");
- else
- return 0;
- *leaderp = &llp->unit.land;
- pr("%s\n", prland(&llp->unit.land));
- return 1;
+struct empobj *
+get_leader(struct emp_qelem *list)
+{
+ return &((struct ulist *)(list->q_back))->unit.gen;
}
void
#include "empobj.h"
#include "unit.h"
-static int set_flagship(struct emp_qelem *list, struct shpstr **flagshipp);
-
int
navi(void)
{
double minmob, maxmob;
int together;
char *cp = NULL;
- struct shpstr *shp = NULL; /* flagship */
+ int leader_uid;
+ struct shpstr *shp; /* flagship */
int dir;
int stopping = 0;
int skip = 0;
pr("No ships\n");
return RET_FAIL;
}
- set_flagship(&ship_list, &shp);
+ shp = (struct shpstr *)get_leader(&ship_list);
+ leader_uid = shp->shp_uid;
+ pr("Flagship is %s\n", prship(shp));
if (player->argp[2]) {
strcpy(buf, player->argp[2]);
if (!(cp = shp_path(together, shp, buf)))
}
return RET_OK;
}
- if (set_flagship(&ship_list, &shp)) {
+ shp = (struct shpstr *)get_leader(&ship_list);
+ if (shp->shp_uid != leader_uid) {
+ leader_uid = shp->shp_uid;
+ pr_leader_change((struct empobj *)shp);
stopping = 1;
continue;
}
}
return RET_OK;
}
- if (set_flagship(&ship_list, &shp)) {
+ shp = (struct shpstr *)get_leader(&ship_list);
+ if (shp->shp_uid != leader_uid) {
+ leader_uid = shp->shp_uid;
+ pr_leader_change((struct empobj *)shp);
stopping = 1;
continue;
}
switch_leader(&ship_list, -1);
else
switch_leader(&ship_list, atoi(player->argp[1]));
- set_flagship(&ship_list, &shp);
+ shp = (struct shpstr *)get_leader(&ship_list);
+ if (shp->shp_uid != leader_uid) {
+ leader_uid = shp->shp_uid;
+ pr_leader_change((struct empobj *)shp);
+ }
break;
case 'i':
shp_list(&ship_list);
pr("%s\n", wmap[i]);
return RET_OK;
}
-
-static int
-set_flagship(struct emp_qelem *list, struct shpstr **flagshipp)
-{
- struct ulist *mlp = (struct ulist *)(list->q_back);
-
- if (!*flagshipp)
- pr("Flagship is ");
- else if ((*flagshipp)->shp_uid != mlp->unit.ship.shp_uid)
- pr("Changing flagship to ");
- else
- return 0;
- *flagshipp = &mlp->unit.ship;
- pr("%s\n", prship(&mlp->unit.ship));
- return 1;
-}