1 /*
2 * Empire - A multi-player, client/server Internet based war game.
3 * Copyright (C) 1986-2021, Dave Pare, Jeff Bailey, Thomas Ruschak,
4 * Ken Stevens, Steve McClure, Markus Armbruster
5 *
6 * Empire is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * ---
20 *
21 * See files README, COPYING and CREDITS in the root of the source
22 * tree for related information and legal notices. It is expected
23 * that future projects/authors will amend these files as needed.
24 *
25 * ---
26 *
27 * nat.c: Nation subroutines
28 *
29 * Known contributors to this file:
30 * Markus Armbruster, 2009-2013
31 * Ron Koenderink, 2008-2009
32 */
33
34 #include <config.h>
35
36 #include <ctype.h>
37 #include "nat.h"
38 #include "prototypes.h"
39
40 int
check_nat_name(char * cname,natid cnum)41 check_nat_name(char *cname, natid cnum)
42 {
43 struct natstr *natp;
44 natid cn;
45 int allblank;
46 char *p;
47
48 if (strlen(cname) >= sizeof(natp->nat_cnam)) {
49 pr("Country name too long\n");
50 return 0;
51 }
52
53 allblank = 1;
54 for (p = cname; *p != '\0'; p++) {
55 if (iscntrl(*p)) {
56 pr("No control characters allowed in country names!\n");
57 return 0;
58 } else if (!isspace(*p))
59 allblank = 0;
60 }
61 if (allblank) {
62 pr("Country name can't be all blank\n");
63 return 0;
64 }
65
66 for (cn = 0; NULL != (natp = getnatp(cn)); cn++) {
67 if (cn != cnum && !strcmp(cname, natp->nat_cnam)) {
68 pr("Country #%d is already called `%s'\n", cn, cname);
69 return 0;
70 }
71 }
72 return 1;
73 }
74
75 char *
prnat(struct natstr * np)76 prnat(struct natstr *np)
77 {
78 return prbuf("%s (#%d)", np->nat_cnam, np->nat_cnum);
79 }
80
81 char *
prnatid(natid cnum)82 prnatid(natid cnum)
83 {
84 struct natstr *np = getnatp(cnum);
85
86 if (CANT_HAPPEN(!np))
87 return prbuf("%d (#%d)", cnum, cnum);
88 return prnat(np);
89 }
90