aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/script/vcpu.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/script/vcpu.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/script/vcpu.h')
-rw-r--r--Src/Wasabi/api/script/vcpu.h171
1 files changed, 171 insertions, 0 deletions
diff --git a/Src/Wasabi/api/script/vcpu.h b/Src/Wasabi/api/script/vcpu.h
new file mode 100644
index 00000000..fdd90bb3
--- /dev/null
+++ b/Src/Wasabi/api/script/vcpu.h
@@ -0,0 +1,171 @@
+#ifndef __VCPU_H
+#define __VCPU_H
+
+#include "script.h"
+#include "opcodes.h"
+
+#include <bfc/tlist.h>
+#include <bfc/ptrlist.h>
+#include <bfc/stack.h>
+#include <bfc/critsec.h>
+#include <api/script/script.h>
+#include <api/script/scriptmgr.h>
+#include <api/script/objects/systemobj.h>
+
+class ConsoleEnum;
+
+#include <api/script/vcputypes.h>
+
+class OrphanEntry {
+
+ public:
+
+ OrphanEntry(int _id, int type);
+ virtual ~OrphanEntry() {}
+
+ int id;
+ VCPUscriptVar v;
+};
+
+class OrphanQuickSort {
+ public:
+ static int compareItem(void *p1, void* p2);
+ static int compareAttrib(const wchar_t *attrib, void *item);
+ };
+
+class ScriptAtom {
+ public:
+ ScriptAtom(const wchar_t *atomname, ScriptObject *object) : name(atomname), obj(object) {}
+ ~ScriptAtom() {}
+
+ const wchar_t *getAtomName() { return name; }
+ ScriptObject *getAtomObject() { return obj; }
+
+ private:
+ StringW name;
+ ScriptObject *obj;
+};
+
+class ScriptAtomSort {
+public:
+ static int compareItem(ScriptAtom *p1, ScriptAtom*p2) {
+ return WCSICMP(p1->getAtomName(), p2->getAtomName());
+ }
+ static int compareAttrib(const wchar_t *attrib, ScriptAtom *item) {
+ return WCSICMP(attrib, item->getAtomName());
+ }
+};
+
+
+class VCPU {
+
+public:
+ static void shutdown();
+ static int assignNewScriptId();
+ static int addScript(void *mem, int memsize, int cpuid);
+ static void removeScript(int id);
+
+ static void push(VCPUscriptVar v);
+ static void push(scriptVar v);
+ static VCPUscriptVar pop();
+ static VCPUscriptVar peekAt(int n);
+
+ static scriptVar executeEvent(scriptVar v, int functionId, int np, int vcpuid=-1);
+ static int runEvent(VCPUeventEntry *e, int np, int pbase);
+ static void runCode(int scriptId, int pointer, int np);
+ static scriptVar callDLF(VCPUdlfEntry *e, int np);
+ static scriptVar VCPUassign(int id, scriptVar sv, int scriptId);
+
+ static int findObject(ScriptObject *o, int start, int dlfid, int vcpuid=-1);
+ static int numScripts;
+ static void setupDLF(VCPUdlfEntry *e, int base);
+ static void delrefDLF(VCPUdlfEntry *e);
+ static void setupDLFFunction(void *ptr, int nargs, int DLFid, VCPUdlfEntry *e);
+ static int getDlfGlobalIndex(int dlfid, int scriptid);
+
+ static scriptVar safeDiv(VCPUscriptVar*, VCPUscriptVar*);
+ static void setComplete() { complete=1; }
+ static void resetComplete() { complete=0; }
+ static int getComplete();
+ static int newDlf();
+ static void resetDlf();
+
+ static PtrList<VCPUscriptVar> variablesTable;
+ static PtrList<VCPUeventEntry> eventsTable;
+ static PtrList<VCPUdlfEntry> DLFentryTable;
+ static PtrList<VCPUcodeBlock> codeTable;
+
+ static int highestDLFId;
+ static Stack<VCPUscriptVar> CpuStack;
+ static Stack<char *> CallStack;
+
+ static int varBase(int scriptId);
+ static int dlfBase(int scriptId);
+ static int nVars(int scriptId);
+ static char *getCodeBlock(int scriptId, int *size=NULL);
+ static VCPUcodeBlock *getCodeBlockEntry(int vcpuid);
+
+ static void addStatementString(wchar_t *s);
+
+ static int getCacheCount();
+ static int getUserAncestor(int varid, int scriptid);
+ static int isValidScriptId(int id);
+ static int oldClassToClassId(int id);
+ static const wchar_t *getClassName(int vcpuid, int localclassid);
+
+ static int VIP;
+ static int VSP;
+ static int VSD;
+ static int VCC;
+ static int complete;
+ static int cacheCount;
+
+ static Stack<int> VIPstack;
+ static Stack<int> VSPstack;
+ static Stack<int> VSDstack;
+ static Stack<int> VCCstack;
+
+ static void RemoveOldScripts();
+ static TList<int> scriptsToRemove;
+
+ static scriptVar paramList[SCRIPT_MAXARGS];
+ static TList<VCPUscriptVar> plist;
+ static PtrList<wchar_t> statementStringList;
+
+ static int isInstantiable(int id);
+
+ static void pushObject(void *o);
+ static void pushInt(int i);
+ static void pushBoolean(int b);
+ static void pushFloat(float f);
+ static void pushDouble(double d);
+ static void pushString(const wchar_t *s);
+ static void pushVoid();
+ static void *popObject();
+ static int popInt();
+ static bool popBoolean();
+ static float popFloat();
+ static double popDouble();
+ static const wchar_t *popString();
+ static void popDiscard();
+ static void callDlfCommand(void *ptr, int nargs, maki_cmd *cmd);
+ static int getDLFFromPointer(void *ptr, int nargs);
+ static void DLF_addref(void *ptr, int nargs);
+ static void DLF_reset(void *ptr, int nargs);
+ static void DLF_remref(void *ptr, int nargs);
+ static VCPUdlfEntry *getGlobalDlfEntry(int dlfid);
+ static void registerGlobalDlf(VCPUdlfEntry *e, int dlf);
+ static void traceState(VCPUscriptVar object, VCPUdlfEntry *e);
+ static PtrList<VCPUdlfEntry> globalDlfList;
+ static PtrListInsertSorted< OrphanEntry, OrphanQuickSort >orphans;
+ static int orphanid;
+ static VCPUscriptVar *getOrphan(int id);
+ static int createOrphan(int type);
+ static void killOrphan(int id);
+ static void setAtom(const wchar_t *atomname, ScriptObject *o);
+ static ScriptObject *getAtom(const wchar_t *atomname);
+ static PtrListQuickSorted<ScriptAtom, ScriptAtomSort> atoms;
+ static ScriptObjectManager *scriptManager;
+};
+
+#endif