; vm Structure opi code.l args.s EndStructure ; In theory this is a byte code interpreter ; Also mad science and may not work Procedure writeblock (fid, *opco.opi) ; used by compile to write compiled code to file WriteByte(fid, *opco\code) WriteLong(fid, MemorySize(@*opco\args));Len(*opco\args)) WriteData(fid, @*opco\args, MemorySize(@*opco\args));Len(*opco\args)*2) using memorysize to make it work over a decade later because unicode EndProcedure Procedure readblock (fid, *opci.opi) ; should not need to be explained *opci\code = ReadByte(fid) *opci\args = Space(ReadLong(fid)) ReadData(fid, @*opci\args, Len(*opci\args)) EndProcedure ;for demo purposes we hard wire the code opcobj.opi\code = $01 opcobj.opi\args = "Bacon ipsum dolor amet beef kevin turducken pork loin, jerky short loin sirloin alcatra doner." ; now write bytecode to file OpenFile(0,"test.byc") Debug("Before write " + Loc(0)) writeblock(0, opcobj) Debug("After write " + Loc(0)) opcobjj.opi\code = $02 opcobjj.opi\args = "Hamburger pork chop pork, t-bone buffalo shank biltong fatback ham. Tail pork porchetta cupim, tenderloin jowl bacon bresaola alcatra strip steak andouille short ribs flank spare ribs chislic." writeblock(0, opcobjj) Debug("After write 2 " + Loc(0)) CloseFile(0) ; now read OpenFile(1,"test.byc") Debug("Before read " + Loc(1)) readblock(1, opcoobj.opi) Debug("After read " + Loc(1)) readblock(1, opcoobjj.opi) Debug("After read2 " + Loc(1)) CloseFile(1) ;run Select opcoobj\code Case $01 : MessageRequester("ouput",opcoobj\args) EndSelect ;Debug(opcoobjj\args) Select opcoobjj\code Case $02: MessageRequester("ouput",opcoobjj\args) Default MessageRequester("ouput",opcoobjj\args) EndSelect ; IDE Options = PureBasic 6.00 LTS (Linux - x64) ; CursorPosition = 42 ; FirstLine = 11 ; Folding = - ; EnableXP ; Executable = vm