]> git.pond.sub.org Git - empserver/commitdiff
subs: Factor shp_insque() out of shp_sel(), shp_missdef(), ...
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 25 Jan 2014 07:49:02 +0000 (08:49 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Wed, 14 Jan 2015 18:08:46 +0000 (19:08 +0100)
... nav_ship(), fltp_to_list().

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
include/ship.h
src/lib/subs/shpsub.c
src/lib/update/nav_ship.c
src/lib/update/sail.c

index 871525c2d9d21d32e1cabadd119991e949b566f2..4b952b6bf5b7b6fe15e67989e6823515e48cdac5 100644 (file)
@@ -31,7 +31,7 @@
  *     Thomas Ruschak, 1992
  *     Ken Stevens, 1995
  *     Steve McClure, 1998
- *     Markus Armbruster, 2004-2013
+ *     Markus Armbruster, 2004-2014
  */
 
 #ifndef SHIP_H
@@ -183,6 +183,7 @@ extern double shp_torp_hitchance(struct shpstr *, int);
 
 /* 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 *);
index cb73c6360f7a70807631403307a47e3202d0180c..577c5734a9b046bab3b8440e4c3983886c37171e 100644 (file)
@@ -29,7 +29,7 @@
  *  Known contributors to this file:
  *     Ken Stevens, 1995
  *     Steve McClure, 1996-2000
- *     Markus Armbruster, 2006-2013
+ *     Markus Armbruster, 2006-2014
  */
 
 #include <config.h>
@@ -61,8 +61,6 @@ void
 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)) {
@@ -73,7 +71,6 @@ shp_sel(struct nstr_item *ni, struct emp_qelem *list)
         */
        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",
@@ -85,14 +82,26 @@ shp_sel(struct nstr_item *ni, struct emp_qelem *list)
        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,
@@ -912,12 +921,7 @@ shp_missdef(struct shpstr *sp, natid victim)
     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;
index 53873b1c33ac88d962d6314b02f4c87f92ea9381..2010d118055c642df60573fe27a9108fd9b7f774 100644 (file)
@@ -256,12 +256,8 @@ nav_ship(struct shpstr *sp)
 
     /* 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)) &&
index e411786d073e6acfbd3d1f3c86cecd17db1a194c..644086cfb51f029b7fc3b1e696058183f7edf48e 100644 (file)
@@ -337,16 +337,11 @@ fltp_to_list(struct fltheadstr *fltp, struct emp_qelem *list)
 {
     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);
     }
 }