Author | Message | Time |
---|---|---|
TheMinistered | This is the watered down framework for a scripting language: clsInstruction: [code] Public Enum Instruction END_SCRIPT = 0 NO_OPCODE End Enum Private menumInstruction As Instruction Public Property Get Instruction() As Instruction Instruction = menumInstruction End Property Public Property Let Instruction(ByVal Instruction As Instruction) menumInstruction = Instruction End Property [/code] clsScript: [code] Private mcolInstructionList As Collection Private Sub Class_Initialize() Set mcolInstructionList = New Collection End Sub Public Function Add(ByVal Instruction As Instruction) As clsInstruction Dim objNewMember As clsInstruction Set objNewMember = New clsInstruction objNewMember.Instruction = Instruction mcolInstructionList.Add objNewMember Set Add = objNewMember Set objNewMember = Nothing End Function Public Property Get Item(ByVal vntIndexKey As Variant) As clsInstruction Set Item = mcolInstructionList(vntIndexKey) End Property Public Property Get Count() As Long Count = mcolInstructionList.Count End Property Public Sub Remove(ByVal vntIndexKey As Variant) mcolInstructionList.Remove vntIndexKey End Sub Public Property Get NewEnum() As IUnknown Set NewEnum = mcolInstructionList.[_NewEnum] End Property Private Sub Class_Terminate() Set mcolInstructionList = Nothing End Sub [/code] clsVirtualMachine: [code] Private mcolScriptList As Collection Private Sub Class_Initialize() Set mcolScriptList = New Collection End Sub Public Sub Add(ByVal Script As clsScript, ByVal strKey As String) If (LenB(strKey) = 0) Then mcolScriptList.Add Script Else mcolScriptList.Add Script, strKey End If End Sub Public Sub ExecuteScript(ByVal strKey As String) Dim Script As clsScript Dim Instruction As clsInstruction Dim Counter As Long Set Script = mcolScriptList.Item(strKey) Do Counter = Counter + 1 Set Instruction = Script.Item(Counter) Select Case Instruction.Instruction Case NO_OPCODE 'Do Nothing End Select Loop While Instruction.Instruction <> END_SCRIPT End Sub Public Property Get Item(ByVal vntIndexKey As Variant) As clsInstruction Set Item = mcolScriptList(vntIndexKey) End Property Public Property Get Count() As Long Count = mcolScriptList.Count End Property Public Sub Remove(ByVal vntIndexKey As Variant) mcolScriptList.Remove vntIndexKey End Sub Public Property Get NewEnum() As IUnknown Set NewEnum = mcolScriptList.[_NewEnum] End Property Private Sub Class_Terminate() Set mcolScriptList = Nothing End Sub [/code] Example of Use: [code] Dim Instruction As clsInstruction Dim Script As clsScript Dim VirtualMachine As clsVirtualMachine Set Instruction = New clsInstruction Instruction.Instruction = NO_OPCODE Set Script = New clsScript Script.Add Instruction.Instruction 'OR Script.Add NO_OPCODE Script.Add END_SCRIPT Set VirtualMachine = New clsVirtualMachine VirtualMachine.Add Script, ObjPtr(Script) 'ObjPtr(x) should always be unique VirtualMachine.ExecuteScript ObjPtr(Script) [/code] | July 13, 2003, 5:54 PM |