]> git.pond.sub.org Git - empserver/blobdiff - src/lib/commands/retr.c
retreat lretreat: Change query syntax to match mission
[empserver] / src / lib / commands / retr.c
index a02d67da108c388733693209f1976834f2dc76fd..0a81581f5bfffa66cb71326babbeff48f763a681 100644 (file)
@@ -1,11 +1,11 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2010, Dave Pare, Jeff Bailey, Thomas Ruschak,
- *                           Ken Stevens, Steve McClure
+ *  Copyright (C) 1986-2015, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *                Ken Stevens, Steve McClure, Markus Armbruster
  *
- *  This program is free software; you can redistribute it and/or modify
+ *  Empire is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
+ *  the Free Software Foundation, either version 3 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -14,8 +14,7 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  *  ---
  *
@@ -30,7 +29,7 @@
  *  Known contributors to this file:
  *     Ken Stevens, 1995
  *     Steve McClure, 2000
- *     Markus Armbruster, 2008
+ *     Markus Armbruster, 2008-2014
  */
 
 #include <config.h>
@@ -72,8 +71,7 @@ retreat(int type)
     int nunits;
     struct nstr_item ni;
     union empobj_storage unit;
-    int rflags, ch, j;
-    unsigned i;
+    int i, rflags, ch, j;
     char *rflagsc, *p, *name, *rpath, *what;
     int *rflagsp;
     char buf1[1024];
@@ -86,13 +84,37 @@ retreat(int type)
     if (!snxtitem(&ni, type, player->argp[1], NULL))
        return RET_SYN;
     nunits = 0;
-    if (player->argp[2] != NULL)
-       pq = getstarg(player->argp[2], "Retreat path? ", buf1);
-    else
-       pq = NULL;
+
+    if (player->argp[1] && !player->argp[2]) {
+       pr("Omitting the second argument is deprecated and will cease to work in a\n"
+          "future release.  Please use '%s q' to query retreat orders.\n\n",
+          player->combuf);
+       pq = "q";
+    } else {
+       /*
+        * TODO getpath() or similar would be nice once the deprecated
+        * syntax is gone.
+        */
+       pq = getstarg(player->argp[2], "Retreat path, or q to query? ",
+                     buf1);
+       if (!pq || !*pq)
+           return RET_SYN;
+    }
 
     rflags = 0;
-    if (pq != NULL) {
+    if (*pq == 'q') {
+       pq = NULL;
+    } else {
+       for (i = 0; i < RET_LEN - 1 && pq[i]; i++) {
+           if (chkdir(pq[i], DIR_STOP, DIR_LAST) < 0) {
+               pr("'%c' is not a valid direction...\n", pq[i]);
+               direrr(NULL, NULL, NULL);
+               return RET_SYN;
+           }
+       }
+       for (i--; i >= 0 && pq[i] == dirch[DIR_STOP]; i--)
+           pq[i] = 0;
+
     again:
        fl = getstarg(player->argp[3],
                      "Retreat conditions ('?' to list available ones)? ",
@@ -106,7 +128,7 @@ retreat(int type)
                *pq = 0;
                break;
            }
-           if (ch == '?') {
+           if (ch == '?' && !player->argp[3]) {
                for (j = 1; rflagsc[j]; j++) {
                    if (rflagsc[j] != 'X')
                        pr("%c\tretreat when %s\n",
@@ -123,10 +145,8 @@ retreat(int type)
            }
            rflags |= 1 << (p - rflagsc);
        }
-       if (*pq && !rflags) {
-           pr("Must give retreat conditions!\n");
-           return RET_FAIL;
-       }
+       if (*pq && !rflags)
+           return RET_SYN;
        if (ni.sel == NS_GROUP && ni.group)
            rflags |= RET_GROUP;
        if (!*pq)
@@ -164,7 +184,7 @@ retreat(int type)
            pr("%3d ", unit.gen.own);
        pr("%4d ", ni.cur);
        pr("%-16.16s ", name);
-       prxy("%4d,%-4d ", unit.gen.x, unit.gen.y, player->cnum);
+       prxy("%4d,%-4d ", unit.gen.x, unit.gen.y);
        pr("%1.1s", &unit.gen.group);
        pr(" %-11s", rpath);
        rflags = *rflagsp;