/
CDC-1.2b/
CDC-1.2b/src/
parent $libraries
object $integer

var $root child_index 0
var $root owners [$integer]
var $root fertile 0
var $root inited 1
var $root owned [$integer]
var $root manager $integer
var $root writable [$integer]
var $root readable ['parameters, 'methods, 'code]
var $root dbref 'integer

method n_to_nth
    arg number;
    var tens_digit_is_1, ones_digit, single_digit;
    
    if (type(number) != 'integer)
        throw(~type, "Must receive an integer");
    ones_digit = abs(number) % 10;
    tens_digit_is_1 = ((abs(number) / 10) % 10) == 1;
    single_digit = abs(number) < 10;
    if ((ones_digit in [1, 2, 3]) && (!tens_digit_is_1)) {
        switch (ones_digit) {
            case 1:
                return tostr(number) + "st";
            case 2:
                return tostr(number) + "nd";
            case 3:
                return tostr(number) + "rd";
        }
    } else {
        return tostr(number) + "th";
    }
.

method parse_range
    arg range_str;
    var r1, r2;
    
    // ("1-5") => (1, 5)      -- 1, 5
    // ("1-$") => (1, 'end)   -- 1, 'end (end number)
    // (".-3") => ('cur, 3)   -- 'cur (current number), 3
    // ("#-3") => ('bgn, 3)   -- 'bgn (beginning number), 3
    range_str = $parse.reference(range_str, "-");
    r1 = range_str[1];
    r2 = range_str[2];
    
    //
    if (!r2)
        r2 = r1;
    if (!toint(r1)) {
        if (r1 == ".")
            r1 = 'cur;
        else if (r1 == "#")
            r1 = 'bgn;
        else
            throw(~type, "Beginning range invalid.");
    } else {
        r1 = toint(r1);
    }
    
    //
    if (!toint(r2)) {
        if (r2 == "$")
            r2 = 'end;
        else
            throw(~type, "Ending range invalid.");
    } else {
        r2 = toint(r2);
    }
    return [r1, r2];
.

method to_english
    arg num;
    var num_str, sign;
    
    // 12500 => "12,500"
    // if (abs(num) < 9999)
    //  return tostr(num);
    sign = num ? abs(num) / num | 1;
    num = abs(num);
    num_str = "";
    while (num > 999) {
        num_str = ("," + substr(tostr(1000 + (num % 1000)), 2)) + num_str;
        num = num / 1000;
    }
    num_str = tostr(num) + num_str;
    return ((sign == 1) ? "" | "-") + num_str;
.

method range
    arg x, y;
    var list, element;
    
    // creates a list of every number between x and y 
    list = [];
    for element in [x .. y]
        list = list + [element];
    return list;
.