* Thomas Ruschak, 1992
* Ken Stevens, 1995
* Steve McClure, 1998
- * Markus Armbruster, 2004-2013
+ * Markus Armbruster, 2004-2014
*/
#ifndef SHIP_H
/* src/lib/subs/shpsub.c */
extern void shp_sel(struct nstr_item *, struct emp_qelem *);
+extern struct ulist *shp_insque(struct shpstr *, struct emp_qelem *);
extern void shp_nav(struct emp_qelem *, double *, double *, int *, natid);
extern int shp_sweep(struct emp_qelem *, int, int, natid);
extern enum d_navigation shp_check_nav(struct shpstr *, struct sctstr *);
* Known contributors to this file:
* Ken Stevens, 1995
* Steve McClure, 1996-2000
- * Markus Armbruster, 2006-2013
+ * Markus Armbruster, 2006-2014
*/
#include <config.h>
shp_sel(struct nstr_item *ni, struct emp_qelem *list)
{
struct shpstr ship;
- struct mchrstr *mcp;
- struct ulist *mlp;
emp_initque(list);
while (nxtitem(ni, &ship)) {
*/
if (!ship.shp_own || ship.shp_own != player->cnum)
continue;
- mcp = &mchr[(int)ship.shp_type];
if (opt_MARKET) {
if (ontradingblock(EF_SHIP, &ship)) {
pr("ship #%d inelligible - it's for sale.\n",
ship.shp_rflags = 0;
memset(ship.shp_rpath, 0, sizeof(ship.shp_rpath));
putship(ship.shp_uid, &ship);
- mlp = malloc(sizeof(struct ulist));
- mlp->chrp = (struct empobj_chr *)mcp;
- mlp->unit.ship = ship;
- mlp->mobil = ship.shp_mobil;
- emp_insque(&mlp->queue, list);
+ shp_insque(&ship, list);
}
}
+/*
+ * Append SP to LIST.
+ * Return the new list link.
+ */
+struct ulist *
+shp_insque(struct shpstr *sp, struct emp_qelem *list)
+{
+ struct ulist *mlp = malloc(sizeof(struct ulist));
+
+ mlp->chrp = (struct empobj_chr *)&mchr[sp->shp_type];
+ mlp->unit.ship = *sp;
+ mlp->mobil = sp->shp_mobil;
+ emp_insque(&mlp->queue, list);
+ return mlp;
+}
+
/* This function assumes that the list was created by shp_sel */
void
shp_nav(struct emp_qelem *list, double *minmobp, double *maxmobp,
char buf[512];
emp_initque(&list);
-
- mlp = malloc(sizeof(struct ulist));
- mlp->chrp = (struct empobj_chr *)&mchr[(int)sp->shp_type];
- mlp->unit.ship = *sp;
- mlp->mobil = sp->shp_mobil;
- emp_insque(&mlp->queue, &list);
+ mlp = shp_insque(sp, &list);
sprintf(buf, "%s", prship(&mlp->unit.ship));
eff = sp->shp_effic;
/* Make a list of one ships so we can use the navi.c code */
emp_initque(&ship_list);
- mlp = malloc(sizeof(struct ulist));
- mlp->chrp = (struct empobj_chr *)(mchr + sp->shp_type);
- mlp->unit.ship = *sp;
+ mlp = shp_insque(sp, &ship_list);
ef_mark_fresh(EF_SHIP, &mlp->unit.ship);
- mlp->mobil = sp->shp_mobil;
- emp_insque(&mlp->queue, &ship_list);
do {
if ((sp->shp_mobil > 0) && (!(sp->shp_autonav & AN_LOADING)) &&
{
struct fltelemstr *fe;
struct ulist *mlp;
- struct shpstr *sp;
emp_initque(list);
for (fe = fltp->head; fe; fe = fe->next) {
- mlp = malloc(sizeof(struct ulist));
- sp = getshipp(fe->num);
- mlp->chrp = (struct empobj_chr *)(mchr + sp->shp_type);
- mlp->unit.ship = *sp;
+ mlp = shp_insque(getshipp(fe->num), list);
ef_mark_fresh(EF_SHIP, &mlp->unit.ship);
mlp->mobil = fe->mobil;
- emp_insque(&mlp->queue, list);
}
}