melville/
melville/cmds/
melville/cmds/admin/
melville/data/
melville/data/mail/
melville/data/player/
melville/data/system/
melville/data/user/
melville/doc/functions/
melville/doc/help/
melville/inherit/
melville/log/
melville/obj/
melville/system/auto/
melville/system/player/
melville/system/user/
melville/users/
melville/users/mobydick/
melville/world/
/* The clone command. Take a filename, clone a copy of it, and move it
   to the cloning wizard's inventory.
   Written by Mobydick, 7-13-94
*/

int do_command (string file) {

    object ob ;
    int res ;

    if (!file) {
	file = this_player()->query_cwf() ;
	if (!file) {
            fail_msg ("Usage: clone <filename>\n") ;
	    return 0 ;
	}
    }
    if (!absolute_path(file)) file = previous_object()->query_cwd()+file ;
    file = resolve_path(file) ;
    if (file[strlen(file)-2..strlen(file)-1]!=".c") file += ".c" ;
    if (file_exists(file)<1) {
        write ("No such file: "+file+"\n") ;
	return 1 ;
    }
/* First, ob is the master object (get_object() loads it if that is
   necessary), then ob becomes the new clone.
*/
    ob = get_object(file) ;
    ob = clone_object(ob) ;
    if (!ob) {
        write ("Failed to clone "+file+"\n") ;
	return 1 ;
    }
    res = ob->move(previous_object()) ;
    if (res==0) {
        write ("Could not move object to your inventory.\n") ;
	res = ob->move(previous_object()->query_environment()) ;
	if (res==0) {
	    write ("Could not move it to your environment. Aborting clone.\n");
	    return 1 ;
	}
	write (file+" cloned to your environment.\n") ;
	say (previous_object()->query_cap_name()+" creates "+ob->query_short()+
	      ".\n") ;
	return 1 ;
    }
    write (file+" cloned.\n") ;
    say (previous_object()->query_cap_name()+" creates "+ob->query_short()+
	   ".\n") ;
    return 1 ;
}