Index: /trunk/FACT++/src/InterpreterV8.cc
===================================================================
--- /trunk/FACT++/src/InterpreterV8.cc	(revision 14058)
+++ /trunk/FACT++/src/InterpreterV8.cc	(revision 14059)
@@ -191,9 +191,35 @@
         return ThrowException(String::New("Argument 1 must be an uint32."));
 
-    const HandleScope handle_scope;
-
     JsSleep(args[0]->Int32Value());
 
     return Undefined();
+}
+
+Handle<Value> InterpreterV8::FuncState(const Arguments& args)
+{
+    if (args.Length()!=1)
+        return ThrowException(String::New("Number of arguments must be exactly 1."));
+
+    if (!args[0]->IsString())
+        return ThrowException(String::New("Argument 1 must be a string."));
+
+    const HandleScope handle_scope;
+
+    const String::Utf8Value str(args[0]);
+    return Integer::New(JsState(*str));
+}
+
+Handle<Value> InterpreterV8::FuncName(const Arguments& args)
+{
+    if (args.Length()!=1)
+        return ThrowException(String::New("Number of arguments must be exactly 1."));
+
+    if (!args[0]->IsString())
+        return ThrowException(String::New("Argument 1 must be a string."));
+
+    const HandleScope handle_scope;
+
+    const String::Utf8Value str(args[0]);
+    return String::New(JsName(*str).c_str());
 }
 
@@ -272,9 +298,11 @@
     dim->Set(String::New("wait"),    FunctionTemplate::New(WrapWait),    ReadOnly);
     dim->Set(String::New("send"),    FunctionTemplate::New(WrapSend),    ReadOnly);
+    dim->Set(String::New("state"),   FunctionTemplate::New(WrapState),   ReadOnly);
+    dim->Set(String::New("name"),    FunctionTemplate::New(WrapName),    ReadOnly);
+    dim->Set(String::New("sleep"),   FunctionTemplate::New(WrapSleep),   ReadOnly);
 
     Handle<ObjectTemplate> global = ObjectTemplate::New();
     global->Set(String::New("dim"), dim, ReadOnly);
     global->Set(String::New("include"), FunctionTemplate::New(WrapInclude),                ReadOnly);
-    global->Set(String::New("sleep"),   FunctionTemplate::New(WrapSleep),                  ReadOnly);
     global->Set(String::New("exit"),    FunctionTemplate::New(WrapExit),                   ReadOnly);
     global->Set(String::New("version"), FunctionTemplate::New(InterpreterV8::FuncVersion), ReadOnly);
@@ -293,4 +321,5 @@
     for (auto it=map.begin(); it!=map.end(); it++)
         args->Set(String::New(it->first.c_str()), String::New(it->second.c_str()));
+    context->Global()->Set(String::New("$"),   args);
     context->Global()->Set(String::New("arg"), args);
 
Index: /trunk/FACT++/src/InterpreterV8.h
===================================================================
--- /trunk/FACT++/src/InterpreterV8.h	(revision 14058)
+++ /trunk/FACT++/src/InterpreterV8.h	(revision 14059)
@@ -28,4 +28,6 @@
     v8::Handle<v8::Value> FuncInclude(const v8::Arguments& args);
     v8::Handle<v8::Value> FuncExit(const v8::Arguments& args);
+    v8::Handle<v8::Value> FuncState(const v8::Arguments& args);
+    v8::Handle<v8::Value> FuncName(const v8::Arguments& args);
 
     static v8::Handle<v8::Value> FuncVersion(const v8::Arguments&);
@@ -36,4 +38,6 @@
     static v8::Handle<v8::Value> WrapSleep(const v8::Arguments &args)   { if (This) return This->FuncSleep(args);   else return v8::Undefined(); }
     static v8::Handle<v8::Value> WrapExit(const v8::Arguments &args)    { if (This) return This->FuncExit(args);    else return v8::Undefined(); }
+    static v8::Handle<v8::Value> WrapState(const v8::Arguments &args)   { if (This) return This->FuncState(args);   else return v8::Undefined(); }
+    static v8::Handle<v8::Value> WrapName(const v8::Arguments &args)    { if (This) return This->FuncName(args);   else return v8::Undefined(); }
 #endif
 
@@ -58,4 +62,6 @@
     virtual void JsSleep(uint32_t) { }
     virtual int  JsWait(const std::string &, int32_t, uint32_t) { return -1; };
+    virtual int  JsState(const std::string &) { return -3; };
+    virtual std::string JsName(const std::string &) { return ""; };
 
     bool JsRun(const std::string &, const std::map<std::string,std::string> & = std::map<std::string,std::string>());
