script.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #ifndef _SCRIPT_H_
  2. #define _SCRIPT_H_
  3. #include "runtime.h"
  4. #include "core/stream/stream.h"
  5. #include "module.h"
  6. #include "core/util/tDictionary.h"
  7. namespace Con
  8. {
  9. inline EvalResult gLastEvalResult;
  10. inline EvalResult setLastEvalResult(EvalResult pLastEvalResult)
  11. {
  12. gLastEvalResult.valid = pLastEvalResult.valid;
  13. gLastEvalResult.error = pLastEvalResult.error;
  14. gLastEvalResult.value.setString(pLastEvalResult.value.getString());
  15. return pLastEvalResult;
  16. }
  17. inline EvalResult getLastEvalResult() { return setLastEvalResult((gLastEvalResult)); };
  18. bool runStream(Stream* byteCode, const char* fileName);
  19. bool isCurrentScriptToolScript();
  20. Module* getCurrentModule();
  21. inline HashMap<S32, Runtime*> gRuntimes;
  22. inline Runtime* getRuntime(S32 pRuntimeId = 0) { return gRuntimes[pRuntimeId]; }
  23. inline void registerRuntime(S32 pRuntimeId, Runtime* pRuntime)
  24. {
  25. AssertFatal(gRuntimes[pRuntimeId] == NULL, "A runtime with that ID already exists");
  26. gRuntimes[pRuntimeId] = pRuntime;
  27. }
  28. /// Evaluate an arbitrary chunk of code.
  29. ///
  30. /// @param script Buffer containing code to execute.
  31. /// @param echo Should we echo the string to the console?
  32. /// @param fileName Indicate what file this code is coming from; used in error reporting and such.
  33. /// NOTE: This function restores the console stack on return.
  34. inline EvalResult evaluate(const char* script, bool echo = false, const char *fileName = NULL) { return setLastEvalResult(getRuntime()->evaluate(script, echo, fileName)); };
  35. inline EvalResult evaluate(const char* script, S32 frame, bool echo = false, const char *fileName = NULL) { return setLastEvalResult(getRuntime()->evaluate(script, frame, echo, fileName)); };
  36. /// Evaluate an arbitrary line of script.
  37. ///
  38. /// This wraps dVsprintf(), so you can substitute parameters into the code being executed.
  39. /// NOTE: This function restores the console stack on return.
  40. inline EvalResult evaluatef(const char* string, ...)
  41. {
  42. char buffer[4096];
  43. va_list args;
  44. va_start(args, string);
  45. dVsprintf(buffer, sizeof(buffer), string, args);
  46. va_end(args);
  47. EvalResult result = setLastEvalResult(getRuntime()->evaluate(buffer));
  48. return result;
  49. };
  50. /// Executes a script file and compiles it for use in script.
  51. ///
  52. /// @param string File name that is the script to be executed and compiled.
  53. /// @param fileName Path to the file to execute
  54. /// @param noCalls Deprecated
  55. /// @param journalScript Deprecated
  56. ///
  57. /// @return True if the script was successfully executed, false if not.
  58. inline bool executeFile(const char* fileName, bool noCalls, bool journalScript) { return getRuntime()->executeFile(fileName, noCalls, journalScript); };
  59. }
  60. #endif