/* Do not remove the headers from this file! see /USAGE for more info. */

//:COMMAND
//codefor
//By Beek - derived from eval

//:COMMAND
//$$ see: treefor
//USAGE: codefor <lpc expression>
//
//Displays a "disassembly" of the LPC expression.

inherit CMD;

void create()
{
  ::create();
  no_redirection();
}

#define SYNTAX "USAGE:  codefor <lpc expression>\n"

//prototype
string doith(string arg);

private void main(string str)
{
    string tmp_file;
    string initial_write_to_file;
    mixed ret;
    object o;

    initial_write_to_file =
        "#include <mudlib.h> \n"
        "#include <daemons.h>\n"
        "#include <config.h>\n"
        "mixed eval_function(){\n";
    tmp_file = wiz_dir(this_user()) + "/EVAL.c";
    rm(tmp_file);
    if(o = find_object(tmp_file)) destruct(o);
    if(!write_file(tmp_file,initial_write_to_file)){
        out("eval: Unable to write to "+tmp_file+". \n");  //shouldn't happen.
            return 0;
    }
    write_file(tmp_file,str+";\n");
    write_file(tmp_file,"}\n");

    ret = load_object(tmp_file);
    dump_prog(ret, 1, "/tmp/CODE_TMP_FILE");
    ret = read_file( "/tmp/CODE_TMP_FILE");
    rm("/tmp/CODE_TMP_FILE");
    rm( tmp_file );

    ret = explode(ret, ";;;  *** Disassembly ***");
    out(ret[1]);

    destruct(find_object(tmp_file));
    return;
}
