/*    /lib/std/virtual.c
 *    From DeadSouls Object Library
 *    A virtual object server
 *    Created by Descartes of Borg 970523
 *    Version: @(#) virt_std.c 1.3@(#)
 *    Last modified: 98/09/12
 */

private string recursed = "";

/****************************** events ************************************/
mixed CreateVirtualObject(string fname) {
    object daemon;
    string tmp, vname;
    int x, y, z, s;
    int i;

    if(fname == recursed){
        recursed = "";
        error("Recursion error in CreateVirtualObject()");    
        return 0;
    }

    i = strsrch(fname, "/", -1);
    if( i == -1 || i == 0 || i == strlen(fname)-1 ) {
        return -1;
    }
    tmp = fname[(i+1)..];
    if( sscanf(tmp, "%d,%d,%d,%d", x, y, z, s) != 4 ) {
        if( sscanf(tmp, "%d,%d,%d", x, y, z) != 3 ) {
            if( sscanf(tmp, "%d,%d", x, y) != 2 ) {
                vname = tmp;
            }
            else {
                vname = 0;
                z = 0;
            }
        }
        s = 0;
    }
    else {
        vname = 0;
    }
    tmp = fname[0..(i-1)];
    recursed = tmp;
    daemon = load_object(tmp);
    recursed = "";
    if(!daemon) return 0;
    if( vname ) {
        return daemon->CreateNamedObject(vname);
    }
    else {
        if(!s) return daemon->CreateGridObject(x, y, z);
        else return daemon->CreateGridObject(x, y, z, s);
    }
}

/************************** driver applies ********************************/
object compile_object(string fname) {
    return CreateVirtualObject(fname);
}
