/
ColdCore-3.0a8/
ColdCore-3.0a8/src/
new object $directories: $core;

var $directories default_page = $page_root_index;
var $directories entries = #[["home", $page_home_index], ["bin", $page_bin_index], ["~", $page_home_index], ["desktop", $dir_desktop], ["images", $page_file_index], ["login", $page_login]];
var $directories lock = 0;
var $dmi_data descriptions = #[];
var $root created_on = 863765302;
var $root flags = ['variables, 'methods, 'code, 'core];
var $root inited = 1;
var $root managed = [$directories];
var $root manager = $directories;

public method .build_footer() {
    arg header, info, args;
    
    return ["<hr size=1 noshade><a href=\"/\">the Cold Dark</a></body>"];
};

public method .build_header() {
    arg header, info, args, @title;
    var body;
    
    [(title ?= "the Cold Dark")] = title;
    body = "<body bgcolor=\"#ffffff\" text=\"#000000\" link=\"#130191\" vlink=\"#100040\" alink=\"#4000bf\">";
    return ["<head>", ("<title>" + title) + "</title>", "</head>", body];
};

root method .core_directories() {
    var elem;
    
    for elem in (entries) {
        if (!valid(elem[2]))
            entries = entries.del(elem[1]);
    }
};

public method .default_page() {
    return default_page;
};

public method .entry() {
    arg str;
    
    return (> entries[str] <);
};

public method .find_page() {
    arg orig_url, interface;
    var found, script_name, url, dir, page, lock, meth, obj;
    
    script_name = "";
    url = orig_url.explode("/");
    if ((| ((url[1])[1]) == "~" |))
        url = ["~", (url[1]).subrange(2), @url.subrange(2)];
    dir = $directories;
    page = $directories;
    if ((url.length()) == 2) {
        if ((| (obj = $object_lib.to_dbref(url[1])) |)) {
            page = obj;
            script_name += "/" + (url[1]);
            url = url.subrange(2);
            if ((| (meth = tosym(url[1])) |)) {
                if ((| page.find_method(meth) |)) {
                    interface.set_info('generate, meth);
                    script_name += "/" + (url[1]);
                    url = url.subrange(2);
                    found = 1;
                    if ((page.is($page)) && (page.get_lock()))
                        lock = page;
                } else {
                    return 'pagenf;
                }
            } else {
                return 'pagenf;
            }
        }
    }
    if (!found) {
        if (dir.get_lock())
            lock = dir;
        catch ~keynf {
            while (url && (page.is($directories))) {
                page = dir.entry(url[1]);
                script_name += "/" + (url[1]);
                url = url.subrange(2);
                if (page.get_lock())
                    lock = page;
                if (page.is($directories))
                    dir = page;
            }
        }
        if (page.is($directories)) {
            if ((!url) && ((orig_url.last()) != "/")) {
                return ['redirect, orig_url + "/"];
            } else {
                if (url)
                    return 'pagenf;
                page = page.default_page();
                if (page.get_lock())
                    lock = page;
            }
        }
        if (url && (| (meth = tosym(url[1])) |)) {
            if ((| page.find_method(meth) |)) {
                interface.set_info('generate, meth);
                script_name += "/" + (url[1]);
                url = url.subrange(2);
            } else {
                interface.set_info('generate, 'generate);
            }
        } else {
            interface.set_info('generate, 'generate);
        }
    }
    interface.set_info('script_name, script_name);
    interface.set_info('path_info, "/" + (url.join("/")));
    interface.set_info('directory_object, dir);
    interface.set_info('lock_object, lock);
    return page;
};

public method .get_lock() {
    return lock;
};

public method .get_realm() {
    return "the Cold Dark";
};

root method .init_directories() {
    entries = #[];
    default_page = $page_root_index;
};

root method .uninit_directories() {
    lock = 0;
    entries = 0;
    default_page = 0;
};