public GLVMExecutableCommandOpenGL Add(GLVMExecutableOpenGLCallType type, params object[] values) { GLVMExecutableCommandOpenGL call = new GLVMExecutableCommandOpenGL(); call.FunctionName = type; foreach (object obj in values) { call.ParameterValues.Add(obj); } base.Add(call); return(call); }
protected override void BeforeSaveInternal(Stack <UniversalEditor.ObjectModel> objectModels) { base.BeforeSaveInternal(objectModels); GLVMExecutableObjectModel exe = (objectModels.Pop() as GLVMExecutableObjectModel); FileSystemObjectModel fsom = new FileSystemObjectModel(); fsom.Title = "(c)2012 ALCEXHIM ; Cobalt Virtual Machine compiled executable"; foreach (GLVMExecutableCommandSet set in exe.CommandSets) { System.IO.MemoryStream ms = new System.IO.MemoryStream(); UniversalEditor.IO.BinaryWriter bw = new UniversalEditor.IO.BinaryWriter(ms); foreach (GLVMExecutableCommand cmd in set.Commands) { if (cmd is GLVMExecutableCommandSystem) { bw.Write((byte)1); GLVMExecutableCommandSystem syscmd = (cmd as GLVMExecutableCommandSystem); switch (syscmd.FunctionName) { case GLVMExecutableSystemCallType.Push: { if (syscmd.ParameterValues.Count == 1) { WriteVariantOpcode(bw, 10, syscmd.ParameterValues[0]); } break; } case GLVMExecutableSystemCallType.LoadVar: { if (syscmd.ParameterValues.Count == 1) { bw.Write((byte)40); bw.Write((string)syscmd.ParameterValues[0]); } break; } case GLVMExecutableSystemCallType.StoreVar: { if (syscmd.ParameterValues.Count == 1) { bw.Write((byte)41); bw.Write((string)syscmd.ParameterValues[0]); } break; } case GLVMExecutableSystemCallType.Add: { if (syscmd.ParameterValues.Count == 2) { WriteVariantOpcode(bw, 50, syscmd.ParameterValues[0], syscmd.ParameterValues[1]); } break; } } } else if (cmd is GLVMExecutableCommandOpenGL) { GLVMExecutableCommandOpenGL cmdd = (cmd as GLVMExecutableCommandOpenGL); for (int i = cmdd.ParameterValues.Count - 1; i > -1; i--) { WriteVariantOpcode(bw, 10, cmdd.ParameterValues[i]); } bw.Write((byte)2); bw.Write((byte)cmdd.FunctionName); } } bw.Close(); fsom.Files.Add("Execute__" + set.Name, ms.ToArray()); } foreach (GLVMExecutableResourceSet set in exe.ResourceSets) { fsom.Files.Add("ResourceSet__" + set.Name, set.Data); } objectModels.Push(fsom); }