string query_door(object what, string direction){
    string door = what->GetDoor(direction);
    object puerta;
    if(!door) return "#";
    else {
	puerta = load_object(door);
	if(!puerta) return "#";
	if(puerta->GetClosed()) return "O";
	return "#";
    }
    return " ";
}

varargs string simple_map(mixed arg){
    string *exits;
    string *extra_desc = ({});
    string ret = "";
    string line0 = "---------\n";
    string line6 = "---------\n";
    string line1 = "|       |\n";
    string line2, line3, line4, line5;
    line2 = line3 = line4 = line5 = line1;
    if(!arg && !this_player()) return "";
    if(!arg) arg = environment(this_player());
    if(stringp(arg)) arg = load_object(arg);
    if(living(arg) || arg->GetMount()) arg = environment(arg);
    if(!arg) return "";
    exits = arg->GetExits();
    if(!exits || !sizeof(exits)) return "";
    line3[4..4] = "*";

    foreach(string element in exits){
	switch(element){
	case "north" : line1[4..4] = query_door(arg, element); line2[4..4] = "|";break;
	case "south" : line5[4..4] = query_door(arg, element); line4[4..4] = "|";break;
	case "east" : line3[7..7] = query_door(arg, element); line3[5..5] = "-";line3[6..6] = "-";break;
	case "west" : line3[1..1] = query_door(arg, element); line3[2..2] = "-";line3[3..3] = "-";break;
	case "northeast" : line1[7..7] = query_door(arg, element); line2[6..6] = "/";break;
	case "northwest" : line1[1..1] = query_door(arg, element); line2[2..2] = "\\";break;
	case "southeast" : line5[7..7] = query_door(arg, element); line4[6..6] = "\\";break;
	case "southwest" : line5[1..1] = query_door(arg, element); line4[2..2] = "/";break;
	    //case "up" : extra_desc += ({ "up" });break;
	    //case "down" : extra_desc += ({ "down" });break;
	default : extra_desc += ({ element });break;
	}
    }
    if(sizeof(extra_desc)){
	line3 = replace_string(line3,"\n"," Also available: "+item_list(extra_desc)+".\n");
    }
    ret = line0 + line1 + line2 + line3 + line4 + line5 +line6;
    return ret;
}
