+1 for the native XML/JSON support
For plugins, after the call to 'ReceiveAGKPtr()' it would be helpful to have 'RegisterAGKConstants()' which would send in the pointer to a function that we can use to register constant values, working on the same principle as ReceiveAGKPtr, with 3 paramaters, "string constant_name, string constant_value, int constant_type)
constant_type (1= integer, 2= float, 3=string) so agk knows what data type the constant is
I'm not sure how it would look in C++ but in PureBasic it would look like
Global agkCreateString : PrototypeC.i AGKCommand0(size.i)
Global agkDeleteString : PrototypeC AGKCommand1(*Ptr)
PrototypeC _GetAGKFunction(function.p-ascii)
PrototypeC _SetAGKConstant(constant.p-ascii, value.p-ascii, type.i)
#IntConstant1 = 1
#IntConstant2 = 2
#IntConstant3 = 3
#IntConstant4 = 4
#FloatConstant1 = 1.1
#FloatConstant2 = 2.2
#FloatConstant3 = 3.3
#FloatConstant4 = 4.4
#StrConstant1$ = "string1"
#StrConstant2$ = "string2"
#StrConstant3$ = "string3"
#StrConstant4$ = "string4"
ProcedureCDLL ReceiveAGKPtr(*Function)
GetAGKFunction._GetAGKFunction=*Function
agkCreateString.AGKCommand0=GetAGKFunction("CREATESTRING_S_L")
agkDeleteString.AGKCommand1=GetAGKFunction("DELETESTRING_0_S")
EndProcedure
ProcedureCDLL RegisterAGKConstants(*Function)
SetAGKConstant._SetAGKConstant=*Function
SetAGKConstant("IntConstant1", Str(#IntConstant1), 1)
SetAGKConstant("IntConstant2", Str(#IntConstant2), 1)
SetAGKConstant("IntConstant3", Str(#IntConstant3), 1)
SetAGKConstant("IntConstant4", Str(#IntConstant4), 1)
SetAGKConstant("FloatConstant1", StrF(#FloatConstant1, 1), 2)
SetAGKConstant("FloatConstant2", StrF(#FloatConstant2, 1), 2)
SetAGKConstant("FloatConstant3", StrF(#FloatConstant3, 1), 2)
SetAGKConstant("FloatConstant4", StrF(#FloatConstant4, 1), 2)
SetAGKConstant("StrConstant1", #StrConstant1$, 3)
SetAGKConstant("StrConstant2", #StrConstant2$, 3)
SetAGKConstant("StrConstant3", #StrConstant3$, 3)
SetAGKConstant("StrConstant4", #StrConstant4$, 3)
EndProcedure