2 * ircd-ratbox: A slightly useful ircd.
3 * m_time.c: Sends the current time on the server.
5 * Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
6 * Copyright (C) 1996-2002 Hybrid Development Team
7 * Copyright (C) 2002-2005 ircd-ratbox development team
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
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.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
36 #include "sprintf_irc.h"
38 static int m_time(struct Client
*, struct Client
*, int, const char **);
39 static char *date(void);
41 struct Message time_msgtab
= {
42 "TIME", 0, 0, 0, MFLG_SLOW
,
43 {mg_unreg
, {m_time
, 0}, {m_time
, 2}, mg_ignore
, mg_ignore
, {m_time
, 0}}
46 mapi_clist_av1 time_clist
[] = { &time_msgtab
, NULL
};
47 DECLARE_MODULE_AV1(time
, NULL
, NULL
, time_clist
, NULL
, NULL
, "$Revision: 26 $");
49 static const char *months
[] = {
50 "January", "February", "March", "April",
51 "May", "June", "July", "August",
52 "September", "October", "November", "December"
55 static const char *weekdays
[] = {
56 "Sunday", "Monday", "Tuesday", "Wednesday",
57 "Thursday", "Friday", "Saturday"
62 * parv[0] = sender prefix
63 * parv[1] = servername
66 m_time(struct Client
*client_p
, struct Client
*source_p
, int parc
, const char *parv
[])
68 /* this is not rate limited, so end the grace period */
69 if(MyClient(source_p
) && !IsFloodDone(source_p
))
70 flood_endgrace(source_p
);
72 if(hunt_server(client_p
, source_p
, ":%s TIME :%s", 1, parc
, parv
) == HUNTED_ISME
)
73 sendto_one_numeric(source_p
, RPL_TIME
, form_str(RPL_TIME
),
81 * returns date in human readable form
96 memcpy((void *) &gmbuf
, (void *) gm
, sizeof(gmbuf
));
98 lt
= localtime(&lclock
);
100 if(lt
->tm_yday
== gm
->tm_yday
)
101 minswest
= (gm
->tm_hour
- lt
->tm_hour
) * 60 + (gm
->tm_min
- lt
->tm_min
);
102 else if(lt
->tm_yday
> gm
->tm_yday
&& lt
->tm_year
== gm
->tm_year
)
103 minswest
= (gm
->tm_hour
- (lt
->tm_hour
+ 24)) * 60;
105 minswest
= ((gm
->tm_hour
+ 24) - lt
->tm_hour
) * 60;
107 plus
= (minswest
> 0) ? '-' : '+';
110 minswest
= -minswest
;
112 ircsprintf(buf
, "%s %s %d %d -- %02u:%02u:%02u %c%02u:%02u",
113 weekdays
[lt
->tm_wday
], months
[lt
->tm_mon
], lt
->tm_mday
,
114 lt
->tm_year
+ 1900, lt
->tm_hour
, lt
->tm_min
, lt
->tm_sec
,
115 plus
, minswest
/ 60, minswest
% 60);