]> git.pond.sub.org Git - empserver/blobdiff - src/lib/commands/retr.c
Update copyright notice
[empserver] / src / lib / commands / retr.c
index a02d67da108c388733693209f1976834f2dc76fd..39c14d65194f4c1abe4bd254805d248827129518 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>
@@ -86,9 +85,16 @@ retreat(int type)
     if (!snxtitem(&ni, type, player->argp[1], NULL))
        return RET_SYN;
     nunits = 0;
-    if (player->argp[2] != NULL)
+    if (player->argp[2] != NULL) {
        pq = getstarg(player->argp[2], "Retreat path? ", buf1);
-    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;
+           }
+       }
+    } else
        pq = NULL;
 
     rflags = 0;
@@ -106,7 +112,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 +129,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 +168,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;