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
24 * $Id: m_time.c 26 2006-09-20 18:02:06Z spb $
38 #include "sprintf_irc.h"
40 static int m_time(struct Client
*, struct Client
*, int, const char **);
41 static char *date(void);
43 struct Message time_msgtab
= {
44 "TIME", 0, 0, 0, MFLG_SLOW
,
45 {mg_unreg
, {m_time
, 0}, {m_time
, 2}, mg_ignore
, mg_ignore
, {m_time
, 0}}
48 mapi_clist_av1 time_clist
[] = { &time_msgtab
, NULL
};
49 DECLARE_MODULE_AV1(time
, NULL
, NULL
, time_clist
, NULL
, NULL
, "$Revision: 26 $");
51 static const char *months
[] = {
52 "January", "February", "March", "April",
53 "May", "June", "July", "August",
54 "September", "October", "November", "December"
57 static const char *weekdays
[] = {
58 "Sunday", "Monday", "Tuesday", "Wednesday",
59 "Thursday", "Friday", "Saturday"
64 * parv[0] = sender prefix
65 * parv[1] = servername
68 m_time(struct Client
*client_p
, struct Client
*source_p
, int parc
, const char *parv
[])
70 /* this is not rate limited, so end the grace period */
71 if(MyClient(source_p
) && !IsFloodDone(source_p
))
72 flood_endgrace(source_p
);
74 if(hunt_server(client_p
, source_p
, ":%s TIME :%s", 1, parc
, parv
) == HUNTED_ISME
)
75 sendto_one_numeric(source_p
, RPL_TIME
, form_str(RPL_TIME
),
83 * returns date in human readable form
98 memcpy((void *) &gmbuf
, (void *) gm
, sizeof(gmbuf
));
100 lt
= localtime(&lclock
);
102 if(lt
->tm_yday
== gm
->tm_yday
)
103 minswest
= (gm
->tm_hour
- lt
->tm_hour
) * 60 + (gm
->tm_min
- lt
->tm_min
);
104 else if(lt
->tm_yday
> gm
->tm_yday
&& lt
->tm_year
== gm
->tm_year
)
105 minswest
= (gm
->tm_hour
- (lt
->tm_hour
+ 24)) * 60;
107 minswest
= ((gm
->tm_hour
+ 24) - lt
->tm_hour
) * 60;
109 plus
= (minswest
> 0) ? '-' : '+';
112 minswest
= -minswest
;
114 ircsprintf(buf
, "%s %s %d %d -- %02u:%02u:%02u %c%02u:%02u",
115 weekdays
[lt
->tm_wday
], months
[lt
->tm_mon
], lt
->tm_mday
,
116 lt
->tm_year
+ 1900, lt
->tm_hour
, lt
->tm_min
, lt
->tm_sec
,
117 plus
, minswest
/ 60, minswest
% 60);