;;; time commands ; $Id: time.tf,v 1.1 1996/11/20 15:01:15 asm21 Exp $ /~loaded time.tf /require pairlist.tf ;; These commands enable you to keep track of the timezones people are living ;; in, and hence what time it is for them. The commands are: ;; /ltime [ []] ;; Tells you the time in the timezone specified by . ;; If is a person's name (or the beginning thereof), ;; you get the time in the zone where they live. Otherwise, if it ;; is the name of a zone, you are told the time there. Finally, if ;; it is a number, it is taken as a difference from GMT, and this ;; time is displayed. If is not included, `me' is ;; assumed. ;; is the way to display the date, and defaults to the value ;; of %{time_format} (see /time). If is a person or a ;; timezone, and is not present, then a prettified format ;; based on %{time_format} is used to display the time. If ;; is a number, it is displayed as %{time_format}. ;; /mtime ;; Tells you the local time in the current world, assuming it has been ;; set (as a person called w). ;; /addtzone ;; Adds a timezone to the list. ;; /listtzones ;; Lists the defined timezones. ;; /addtperson ;; Adds a person to the list. Note that you *cannot* simply use a time ;; difference, you *must* use a timezone. ;; /listtpeople ;; Lists the people in the list ;; ========== Setup of Variables ;; if the user hasn't already defined these variables (probable!), then give ;; them reasonable defaults. ; where I live -- set in local.tf? /eval /set tzlocal %{tzlocal-GMT} ; list of people and zones. Add to this using /addtperson (in .tfrc?) /eval /eval /set tzpeople=%%{tzpeople-me %{tzlocal}} ; list of defined timezones. If you want to modify this permanently, I suggest ; you do it here! /eval /set tzlist=%{tzlist-GMT 0 EST -5 ET -5 PST -8 Universal 0 BST 1 GMT-12 -12 GMT-11 -11 GMT-10 -10 GMT-9 -9 GMT-8 -8 GMT-7 -7 GMT-6 -6 GMT-5 -5 GMT-4 -4 GMT-3 -3 GMT-2 -2 GMT-1 -1 GMT+1 1 GMT+2 2 GMT+3 3 GMT+4 4 GMT+5 5 GMT+6 6 GMT+7 7 GMT+8 8 GMT+9 9 GMT+10 10 GMT+11 11 GMT+12 12 GMT0 0 GMT1 1 GMT2 2 GMT3 3 GMT4 4 GMT5 5 GMT6 6 GMT7 7 GMT8 8 GMT9 9 GMT10 10 GMT11 11 GMT12 12} ;; ========== Entry Points /def -i ltime= \ /if (%1 =~ "") \ /dtime %{tzlocal} %%% Local time is %{time_format}.%; \ /else \ /let prsn=$(/getfullkeyname -i tzpeople %{1-me})%; \ /let tz=$(/getpair %{prsn} tzpeople)%; \ /if (tz =~ "ERR") \ ; we have an error somewhere. ; first, see if we have a timezone rather than a person. /let tzt=$(/getpair -i %1 tzlist)%; \ /if (tzt =~ "ERR") \ ; then, if we still have an error, see if it's a number /if (%1 != 0 | %1 =~ "0") \ /dtime %*%; \ /else \ /echo % Cannot find person.%; \ /endif%; \ /else \ /ztime %*%; \ /endif%; \ /else \ /shift%; \ /let fmt=%{*-%%% Local time for %{prsn} is %{time_format-%H:%M}.}%; \ /ztime %{tz} %{fmt}%; \ /endif%; \ /endif /def -i addtperson=/addpair tzpeople %* /def -i listtpeople = \ /echo % People in known timezones:%; \ /quote -decho -S % `/listpairs tzpeople /def -i addtzone=/addpair tzlist %* /def -i listtzones = \ /eval /echo $(/echo % Defined timezones:%; /foreachpair tzlist /echo %%{key}) ; /quote -decho -S % `/listpairs tzlist /def -i mtime=/eval /ltime w${world_name} %%%% MUSH time in world ${world_name} is %%{time_format-%H:%M}. ;; ========== Other helper functions ;; Prints the time in another timezone, specified by it's difference from ;; local time ;; ;; call as /dtime [ []] ;; ;; where is the time difference in hours (negative for times ;; before the local, positive for those after) and is the strftime ;; format (see /time for more details). If you don't specify a format, the ;; format given in %{time_format} is used. /def -i dtime= \ /let diff=%{1-0}%; \ /shift%; \ /eval /echo $[ftime(%{*-%{time_format-%%H:%%M}}, time() + %{diff}*60*60)] ;; Prints the time in a specified timezone ;; /ztime [ []] /def -i ztime= \ /let tz=$(/getfullkeyname -i tzlist %{1-%{tzlocal}})%; \ /let tzt=$(/getpair %{tz} tzlist)%; \ /let tzl=$(/getpair %{tzlocal} tzlist)%; \ /if (tzt =~ "ERR" | tzl =~ "ERR") \ /echo % Error in timezone lookup.%; \ /else \ /shift%; \ /let fmt=%{*-%%% Local time in zone %{tz} is %{time_format-%H:%M}.}%; \ /dtime $[tzt - tzl] %{fmt}%; \ /endif