/* -*- LPC -*- */
#define CREATOR "Ceres"
/*
* $Locker: $
* $Id: clock.c,v 1.6 1999/12/25 21:42:17 presto Exp $
* $Log: clock.c,v $
* Revision 1.6 1999/12/25 21:42:17 presto
* changed hours % 13 to hours % 12
*
* Revision 1.5 1999/07/28 20:48:37 ceres
* More bugs. :(
*
* Revision 1.2 1999/07/28 00:44:59 ceres
* Made some improvements
*
* Revision 1.1 1998/01/06 04:58:17 ceres
* Initial revision
*
*/
/**
* An inheritable clock object. This is used for proper clocks, if you need to
* create a watch use the watch object instead.
*
* @see /obj/watch
*
* @author Ceres
*/
#include <am_time.h>
inherit "std/object";
#define HOURS ({"twelve", "one", "two", "three", "four", "five", "six", \
"seven", "seven plus one", "nine", "ten", "eleven" })
#define CHIME_HANDLER "/obj/handlers/chime_handler"
int show_date;
/** @ignore yes */
void create() {
do_setup++;
object::create();
do_setup--;
if(!do_setup)
this_object()->setup();
add_extra_look(this_object());
}
/** @ignore yes */
string query_time_string() {
string mess;
int minute, hour, *arr;
minute = (AM_TIME_HANDLER->query_am_minute(time()) % 60);
hour = AM_TIME_HANDLER->query_am_hour(time());
if(minute > 30 )
hour = hour + 1;
hour = hour % 12;
mess = "";
switch(minute) {
case 53..57:
mess += "five to " + HOURS[hour]; break;
case 48..52:
mess += "ten to " + HOURS[hour]; break;
case 43..47:
mess += "quarter to " + HOURS[hour]; break;
case 38..42:
mess += "twenty to " + HOURS[hour]; break;
case 33..37:
mess += "twenty-five to " + HOURS[hour]; break;
case 28..32:
mess += "half past " + HOURS[hour]; break;
case 23..27:
mess += "twenty-five past " + HOURS[hour]; break;
case 18..22:
mess += "twenty past " + HOURS[hour]; break;
case 13..17:
mess += "a quarter past " + HOURS[hour]; break;
case 8..12:
mess += "ten past " + HOURS[hour]; break;
case 3..7:
mess += "five past " + HOURS[hour]; break;
default:
mess += HOURS[hour] + " o'clock";
}
if(show_date) {
arr = AM_TIME_HANDLER->query_am_time_array(time());
mess += " on " +
AM_TIME_HANDLER->query_day_of_week(arr[AM_TIME_DAY_OF_WEEK]) + " the " +
ordinal(arr[AM_TIME_DAY_OF_MONTH]) + " of " +
AM_TIME_HANDLER->query_month(arr[AM_TIME_MONTH]);
}
return mess;
}
string extra_look(object thing) {
return query_time_string() + ".\n";
}
/**
* Sets this clock to show the date as well as the tme.
*/
void set_show_date() { show_date = 1; }
/**
* setup chimes for this clock.
* @param num 1 = every hour, 2 = every half hour, 3 = every quarter hour.
* @param mess The message to be displayed when the clock chimes.
*/
void set_chimes(int num, string mess) {
CHIME_HANDLER->register_for_chimes(this_object(), num, mess);
}
/**
* Function to chime. Overload this if you wish to have your own chime
* code.
*
* @param chime_message the message set with set_chimes.
* @see set_chimes
*/
void chime(string chime_message, int type) {
say(chime_message);
}