ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/time.C
Revision: 1.30
Committed: Sat Nov 17 23:40:00 2018 UTC (5 years, 5 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.29: +1 -0 lines
Log Message:
copyright update 2018

File Contents

# Content
1 /*
2 * This file is part of Deliantra, the Roguelike Realtime MMORPG.
3 *
4 * Copyright (©) 2017,2018 Marc Alexander Lehmann / the Deliantra team
5 * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
6 * Copyright (©) 2002 Mark Wedel & Crossfire Development Team
7 * Copyright (©) 1992 Frank Tore Johansen
8 *
9 * Deliantra is free software: you can redistribute it and/or modify it under
10 * the terms of the Affero GNU General Public License as published by the
11 * Free Software Foundation, either version 3 of the License, or (at your
12 * option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the Affero GNU General Public License
20 * and the GNU General Public License along with this program. If not, see
21 * <http://www.gnu.org/licenses/>.
22 *
23 * The authors can be reached via e-mail to <support@deliantra.net>
24 */
25
26 #include <global.h>
27 #include <tod.h>
28
29 #include <cstdio>
30
31 #include <sys/types.h>
32 #include <sys/time.h>
33
34 /*
35 * Gloabal variables:
36 */
37 tick_t server_tick;
38
39 static const char *season_name[5] = {
40 "New Year",
41 "Growth",
42 "Harvest",
43 "Decay",
44 "the Blizzard",
45 };
46
47 static const char *weekdays[DAYS_PER_WEEK] = {
48 "the Moon",
49 "the Bull",
50 "the Deception",
51 "Thunder",
52 "Freedom",
53 "the Great Gods",
54 "the Sun"
55 };
56
57 static const char *month_name[MONTHS_PER_YEAR] = {
58 "Winter", /* 0 */
59 "the Ice Dragon",
60 "the Frost Giant",
61 "Valriel",
62 "Lythander",
63 "the Harvest",
64 "Gaea",
65 "Futility",
66 "the Dragon",
67 "the Sun",
68 "the Great Infernus",
69 "Ruggilli",
70 "the Dark Shades",
71 "the Devourers",
72 "Sorig",
73 "the Ancient Darkness",
74 "Gorokh"
75 };
76
77 void
78 get_tod (timeofday_t *tod)
79 {
80 unsigned int todtick = (unsigned int)(runtime * (1. / RUNTIME_PER_HOUR));
81
82 tod->year = todtick / HOURS_PER_YEAR + EPOCH;
83 tod->month = todtick / HOURS_PER_MONTH % MONTHS_PER_YEAR;
84 tod->day = todtick % HOURS_PER_MONTH / DAYS_PER_MONTH;
85 tod->hour = todtick % HOURS_PER_DAY;
86 tod->minute = (int)((runtime - todtick * RUNTIME_PER_HOUR) * (60. / RUNTIME_PER_HOUR));
87
88 tod->dayofweek = tod->day % DAYS_PER_WEEK;
89 tod->weekofmonth = tod->day / WEEKS_PER_MONTH;
90 tod->season = min (4, tod->month / 4);
91 }
92
93 char *
94 format_tod (char *buf, int len, timeofday_t *tod)
95 {
96 int day = tod->day + 1;
97
98 const char *suf;
99
100 if (day == 1 || ((day % 10) == 1 && day > 20))
101 suf = "st";
102 else if (day == 2 || ((day % 10) == 2 && day > 20))
103 suf = "nd";
104 else if (day == 3 || ((day % 10) == 3 && day > 20))
105 suf = "rd";
106 else
107 suf = "th";
108
109 snprintf (buf, len,
110 "It is %d minute%s past %d o'clock %s, on the Day of %s,\n"
111 "the %d%s Day of the Month of %s, Year %d.\n"
112 "It is the Season of %s.",
113
114 tod->minute ? tod->minute : 60,
115 tod->minute ? "s" : "",
116 (tod->hour + 13) % 14 + 1,
117 (tod->hour >= 14 ? "pm" : "am"),
118 weekdays[tod->dayofweek],
119
120 day, suf, month_name[tod->month], tod->year + 1,
121
122 season_name[tod->season]);
123
124 return buf;
125 }
126
127 static const char *
128 get_current_tod_str ()
129 {
130 timeofday_t tod;
131 get_tod (&tod);
132
133 static char todbuf[512];
134 format_tod (todbuf, sizeof (todbuf), &tod);
135
136 return todbuf;
137 }
138
139 void
140 print_tod (object *op)
141 {
142 new_draw_info (NDI_UNIQUE, 0, op, get_current_tod_str ());
143 }
144