/** * A generalised watch object. Taken from a watch I found in /obj/misc * and made into an inheritable object. * @author Ceres */ #include <time.h> inherit OBJECT_OBJ; #define HOURS ({"twelve", "one", "two", "three", "four", "five", "six", \ "seven", "eight", "nine", "ten", "eleven" }) int show_date; /** @ignore yes */ void create() { do_setup++; ::create(); do_setup--; if( !do_setup ) TO->setup(); add_extra_look(TO); } /* create() */ /** @ignore yes */ string extra_look( object thing ) { string mess; int minute, hour, *arr; minute = TIME_H->query_minute( time() ) % 60; hour = TIME_H->query_hour( time() ); if( minute > 32 ) hour = hour + 1; hour = hour % 12; mess = "It is "; 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 = TIME_H->query_time_array( time() ); mess += " on "+TIME_H->query_day_of_week(arr[TIME_DAY_OF_WEEK])+ " the "+ordinal(arr[TIME_DAY_OF_MONTH])+" of "+ TIME_H->query_month(arr[TIME_MONTH]); } return mess + ".\n"; } /* extra_look() */ /** * This method sets the clock to show the date as well as the time. */ void set_show_date() { show_date = 1; } /** * This method sets up chimes for this clock. * @param num 1 = every hour, 2 = every half hour, 4 = every quarter hour * @param mess the message to be displayed when the clock chimes */ void set_chimes( int num, string mess ) { CHIME_H->register_for_chimes( TO, num, mess ); } /* set_chimes() */ /** * This function is called by the chime handler. * Overload this if you wish to have your own chime code. * @param mess the message set with set_chimes. * @param type the type of chime (quarter/half/hour) * @see set_chimes */ void do_chime( string mess, int type ) { say( mess ); } /* do_chime() */