/
ColdCore-3.0a9.02/
ColdCore-3.0a9.02/src/
new object $time: $libraries;

var $root created_on = 796268969;
var $root flags = ['methods, 'code, 'variables, 'core];
var $root inited = 1;
var $root managed = [$time];
var $root manager = $time;
var $time days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var $time months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var $time time_units = [[31536000, "year", "years", "yr", "yrs"], [2592000, "month", "months", "mo", "mos"], [604800, "week", "weeks", "wk", "wks"], [86400, "day", "days", "dy", "dys"], [3600, "hour", "hours", "hr", "hrs"], [60, "minute", "minutes", "min", "mins"], [1, "second", "seconds", "sec", "secs"]];

public method .dhms() {
    arg secs, @long;
    var ret_str, x;
    
    if (long)
        long = 1;
    if (secs > 86400) {
        x = secs / 86400;
        ret_str = x + (long ? (" day" + ((x < 2) ? "" : "s")) : "d");
    } else if (secs > 3600) {
        x = secs / 3600;
        ret_str = x + (long ? (" hr" + ((x < 2) ? "" : "s")) : "h");
    } else if (secs > 60) {
        x = secs / 60;
        ret_str = x + (long ? (" min" + ((x < 2) ? "" : "s")) : "m");
    } else {
        ret_str = secs + (long ? (" sec" + ((secs < 2) ? "" : "s")) : "s");
    }
    return ret_str;
};

public method .elapsed() {
    arg time, @flag;
    var str, t, p;
    
    // compares args[1] with time() and returns hh:mm elapsed
    // will eventually make flags do things like 'long etc.  For now its
    // just your own time, rather than time().
    [(flag ?= 'stopwatch)] = flag;
    str = "";
    switch (flag) {
        case 'long:
            return .to_english(time);
        default:
            if (time > 356400)
                p = 3;
            else
                p = 2;
            return strfmt("%2{0}r:%2{0}r:%2{0}r", time / 3600, (time % 3600) / 60, time % 60);
    }
};

public method .format(): native;

public method .from_english() {
    arg string;
    
    return $world_time.from_english(string, time_units);
};

public method .to_english() {
    arg time, @reftime;
    var times, words, x, ctime, mnths, month, year, days, out, lt, rrk;
    
    // most of this was stolen from MOO (und ve are evil)
    if (time < 1)
        return "0 seconds";
    reftime = reftime || time();
    words = ["year", "month", "day", "hour", "minute", "second"];
    times = [];
    for x in ([60, 60, 24]) {
        times = [time % x, @times];
        time = time / x;
    }
    mnths = 0;
    lt = localtime(reftime);
    month = lt[6];
    if ((lt[7]) < 100)
        year = 1900 + (lt[7]);
    else
        year = lt[7];
    days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
    while (time >= (days + ((month == 2) && (((year % 4) == 0) && (!((year % 400) in [100, 200, 300])))))) {
        refresh();
        time -= days;
        mnths++;
        month++;
        if (month > 12) {
            year++;
            month = 1;
        }
    }
    times = [mnths / 12, mnths % 12, time, @times];
    out = [];
    for x in [1 .. 6] {
        if ((times[x]) > 0)
            out += [(((times[x]) + " ") + (words[x])) + (((times[x]) == 1) ? "" : "s")];
    }
    return out.to_english();
};