/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2004, Dave Pare, Jeff Bailey, Thomas Ruschak,
- * Ken Stevens, Steve McClure
+ * Copyright (C) 1986-2011, 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,
* 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/>.
*
* ---
*
- * See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
- * related information and legal notices. It is expected that any future
- * projects/authors will amend these files as needed.
+ * See files README, COPYING and CREDITS in the root of the source
+ * tree for related information and legal notices. It is expected
+ * that future projects/authors will amend these files as needed.
*
* ---
*
* hours.c: Game hours determination; is it legal to play now?
- *
+ *
* Known contributors to this file:
* Dave Pare, 1989
* Doug Hay, 1998
* Steve McClure, 1998
+ * Markus Armbruster, 2004-2010
*/
-#include <limits.h>
+#include <config.h>
+
+#include <ctype.h>
#include <time.h>
#include "misc.h"
#include "optlist.h"
return is_daytime_allowed(60 * tm->tm_hour + tm->tm_min, game_hours);
}
-/*
- * Is day time DTIME (minutes since midnight) near a time in TIMES?
- * TIMES is a list of day times. See daytime() for syntax.
- * DTIME is near a listed time T if its within T and T + SLOP minutes.
- */
-int
-is_daytime_near(int dtime, char *times, int slop)
-{
- int dt;
-
- if (times)
- while (NULL != (times = daytime(times, &dt)))
- if (dt <= dtime && dtime < dt + slop)
- return 1;
-
- return 0;
-}
-
-/*
- * Return time in minutes between DTIME and next time in TIMES.
- * If TIMES doesn't give a time, return -1.
- * DTIME is day time in minutes since midnight.
- * TIMES is a list of day times. See daytime() for syntax.
- */
-int
-min_to_next_daytime(int dtime, char *times)
-{
- int mindt = INT_MAX;
- int dt;
-
- if (times) {
- while (NULL != (times = daytime(times, &dt))) {
- if (dt <= dtime)
- dt += 24 * 60; /* tomorrow */
- if (dt < mindt)
- mindt = dt;
- }
- }
-
- if (mindt == INT_MAX)
- return -1;
- return mindt - dtime;
-}
-
/*
* Parse weekday name in STR.
* On success assign day number (Sunday is 0) to *WDAY and return
*/
static char *day_name[7] = {
"sunday", "monday", "tuesday", "wednesday",
- "thursday", "friday", "saturday" };
+ "thursday", "friday", "saturday"
+ };
int i, j;
for (; isspace(*str); ++str) ;
* Else return NULL.
* Time format is HOUR:MINUTE. Initial whitespace is ignored.
*/
-char *
+static char *
daytime(char *str, int *min)
{
/*
unsigned long h, m;
h = strtoul(str, &end, 10);
- if (end == str || h > 23)
+ if (end == str || h > 24)
return NULL;
if (*end++ != ':')
m = strtoul(str, &end, 10);
if (end == str || m > 59)
return NULL;
+ else if (h == 24 && m != 0)
+ return NULL;
*min = 60 * h + m;
return end;
* Else return NULL.
* Format is HOUR:MINUTE-HOUR:MINUTE. Initial whitespace is ignored.
*/
-char *
+static char *
daytime_range(char *str, int *from_min, int *to_min)
{
char *end;