news 2009

Table of Contents:

1. September, 27th (v0.9.10.90)
added: new tks-preview.exe and Win32 binary snapshots, also see Windows 2000/XP/Vista/Win7 32bit
fixed: tks: some script class instances were not removed from the class initializers list after they had been deleted during the build phase
fixed: tks: immutable string issue in function parameter assignment which (under certain conditions) led to overwritten string constants. added "immutable chars" flag to String class to fix it.
fixed: tks: mixed up pooled new with regular delete in Stack class.
fixed: tks: successive {} statement blocks were not linked correctly in statement sequences and switchcase bodies.
fixed: tks: in case of a parse error, the parser state stack was not correctly rewound / cleant up. this could have led to "objects still alive" errors at exit. the current fix is not perfect but definitely an improvement.
fixed: tks: implicit allocation of script context when a script function is called from native code running in an "unknown" thread (e.g. a MIDI timer or audiostream bufferfill callback..)
changed: tks: remodeled the Event class (now derived from Value; added id/subId fields)
changed: tks: various memory allocation (via domain specific allocators) and startup time optimizations
changed: tks: Object pool granularity can now be configured in the source code (default is 8 bytes)
changed: tks: plugins and libraries are now also searched in the tks executable directory (and its plugins/ and libraries/ subdirectories).
changed: tks: increased the maximum number of static class methods and JIT constants.
added: tks: new abstract and virtual method qualifiers. If a class has at least one abstract method (or is declared abstract itself), it cannot be instantiated. Derived classes must implement the abstract methods. The virtual keyword is used in derived classes to ensure that a method is actually overwriting a base class method (which may or may not be abstract).
added: tks: new Mailbox API class. This is useful for inter-thread messaging in multithreaded applications. Also see the test_thread_mbox.tks example (the Thread class has a builtin Mailbox).
added: tks: new Condition API class. Used to implement boolean execution barriers that can be passed by one or many threads as soon as the respective condition is met. Requires win32 or pthread support. Also see the test_condition.tks and test_condition_manualreset.tks examples.
added: tks: TKS.findClassesByPrefix() method. Also see the test_findclass.tks example.
added: tks: if the name of an object variable or class member is preceded by *, no instance will be created. The respective variable or member will simply be initialized with null. Note: This initialization happens exactly once, NOT everytime a function or method is run! Class members will be initialized everytime the class is instantiated, of course.
added: tks: mathDistancePointPlane2d() function
added: tks: FloatArray.bezierCubicDeCasteljau2d(). Also see the bezier_native.tks example.
added: tks: FloatArray.sumPathLen1d()(), FloatArray.sumPathLen2d()()
added: tks: added -sp command line option (enables some mem/cpu profiling output for internal debugging purposes). for example,
$ tks -sp st 
tkradiastools: init done. 
[...] compile time: 390 millisec (2.65 millisec avg. per module). 
[...] optimize time: 16 millisec (0.11 millisec avg. per module). 
[...]     #modules =     147 
[...]      #tokens =  272247 
[...]     #strings =   19118 
[...]       #lines =   55555 
[...]     #LOC/sec = 142448.72 
[...] #unopt.nodes =  102673 
[...]   #opt.nodes =  101111 
[...]   #nodebytes = 5270112 / 5505024 
[...]  #cachechars = 1103672 / 1114112 
[...]     #classes =     188 
[...]     #methods =    2205 
[...]     #members =    1084 
[...]   #t.methods =   17051 / 31639 
[...]   #t.members =    4277 / 8243 
[...]  #classinits =     490 
fixed: tksdl: mouse warp resp. mouse delta positions during mouse grab
fixed: tkui: various fixes and improvements
2. April, 18th (v0.9.10.64)
added: new tks-preview.exe and Win32 binary snapshots, also see Windows 2000/XP/Vista/Win7 32bit
fixed: tks: String is now emptied when it is assigned null.
fixed: tks: several memleaks in PTN_BuiltinFun
fixed: tks/yac: now using 64bit pool handles to handle 16bit id overflow.
fixed: tks: ObjectPool new/delete is thread safe, now. also see the test_threaded_objectpool.tks example.
fixed: YAC_Object::object_counter is thread safe now and can be disabled in yac.h (YAC_OBJECT_COUNTER define)
fixed: tkui: workaround for x11(or SDL?) mousefocus-lost issue (SDL sends mousefocus-lost event even though the window system continues to report mouse events to the window. the workaround merely discards the event if any mouse buttons are pressed when the mousefocus-lost event is received). also see testui.tkx.
fixed: updated tksidplay2 plugin. it is now using the official sidplay-libs-2.1.1 distribution. some minor (C++ template code related) fixes allow it to be built with recent GCC/MSVC compilers (tested on Win32 and Linux). also see test_sidplay2.tkx.
3. April, 16th (v0.9.10.60)
added: new tks-preview.exe and Win32 binary snapshots, also see Windows 2000/XP/Vista/Win7 32bit
hey: I did some size-optimizing -- the tks.exe is now <256k :) The plugin binaries are also considerably smaller now due to WinDDK msvcrt.lib linking..
added: new source build system. tested on win32(msvc, mingw/gcc), linux(gcc). see Build configurations (
changed: source cleanup and minor optimizations
fixed: tks: several multithreading fixes (PTN_IMethodECall, PTN_IMemberExpr)
fixed: tks: some fun/method calls trashed the current return value after it had been set with return = <expr>
fixed: tks: JIT array cache was not invalidated in the if/else statement
added: tks: namespace protection flag for script class methods / members. this restricts access to script class members or methods to the currently active namespace (useful for libraries).
added: tks: Buffer deleteme member. this means that buffers can now share their data with other buffers (similar to String objects)
added: tks: mathSmoothStepf()
added: tks: mathLerpf()
changed: yac: removed yac_host dummy implementation so most class methods are now pure virtual (saves a few kbytes)
added: yac: YAC_TLS, YAC_RESTRICT macros
added: new tkportaudio plugin. supports ASIO2 (win32), Alsa/OSS (Linux et. al). see Plugin source code packages.
fixed: tksdl: SDL_ACTIVEEVENT handling now uses bit tests (SDL_APPACTIVE, SDL_APPMOUSEFOCUS, SDL_APPINPUTFOCUS) instead of integer comparison of the active.state field.
added: tksdl: onInputFocusActive signal/callback
added: tksdl: Viewport.interruptScreenSaver() (great for certain pizza-order utilities :D)
added: new tksdl_net plugin / removed network related code from tksdl plugin. see Plugin source code packages.
added: tkopengl: Texture.visitBuffer()
added: tkopengl: pixel buffer object (write-)support, zglMapBuffer(), glUnmapBuffer(), glTexSubImage2D(), zglGenTexture(), and various related constants
added: tkopengl: bindings for →zglCopyTexSubImage3D, glActiveTexture(), glClientActiveTexture(), glMultiTexCoord[123]f, glBlendFuncSeparate(), glBlendEquation(), glBlendColor(), glGenerateMipmap() (also fixed TEX_AUTOMIPMAP). also added various related constants.
added: tkopengl: constants for texture combiners
added: tkopengl: TRACE_GL_ERROR error handling. GL error messages will now be printed to the console if a GL call went wrong.
added: debugtext.tsl: a simple script library to print fixed-size text. see test_debugtext.tkx (click-to-run script executable), debugtext (download), test_debugtext.tks, test_debugtext.tkp (example source and project file), and DebugText (API docs)
added: spaceship screenhack (thanks to Maarten van Limburg for the 3d model!)
added: sinescroll3d screenhack (yea, it's simple. but wicked. requires OpenGL v1.5+)
added: tkui: ui::WindowDock. double-RMB-click window title to dock window in last used dock. drag'n'drop windows to window docks to dock them. click window dock to undock a window.
added: tkui: ui::TreeTableModel
added: new tkui test application snapshot: testui.tkx
4. January, 1st (v0.9.10.48).

First of all -- happy new year everyone!
As you can see, this site has been completely redesigned/rewritten. Similar to the very first web release in 2002, an offline page generator is used (again) to build the HTML pages. The new page generator ("DOG") is used for both the "regular" pages as well as the API documentation (C++ and scripts). Hope you like it.
fixed: PTN_ClassMemberExpr: if current this object is not a script class, a ClassTypeMismatch exception will now be thrown
fixed: class method call with wrong number of parameters could lead to a crash
fixed: ying: mangled function name + variable return type constellation did not work (e.g. void _Test(YAC_Value *_r); )
fixed: YAC_ObjectArray::yacArraySetTemplate implementation was missing
fixed: YAC_ClassArray::yacArraySetTemplate implementation was missing
fixed: operator priority review/bugfixes
fixed: current namespace was not reset after yac:: namespace was explicitely addressed in native function call (e.g. yac::putenv("a=b"))
fixed: builtin round function did not correctly round negative floats..
fixed: deref operator did not work with class members. now it does.. but only in methods within the respective class
fixed: throw statement did not use YAC_NEW to allocate exception objects which caused crashes when exceptions were thrown within plugins
changed: improved DOG and DOG++ page/APIdoc generators
changed: tkmath: rewrote tkmath.Matrix4f class to support configurable row/column major order. the 2-4d and 2-3f variants still need to be adapted, though (read: WIP)
changed: tkmath: added common tkmath.Matrix base class
changed: tksdl: removed picking helper functions (can be implemented as script code) from Viewport class
changed: moved tkopengl.zgluLookAt()() API call to tkopengl plugin
changed: tkcg: rewrote plugin from scratch
added: support for thread local storage (compile with HAVE_TLS, tested with MSVC and GCC). TLS is used to determine the current "default" script context.
added: Added getFirst(), getLast(), useAll() API methods to all core array objects, e.g. IntArray.useAll()().
added: core.GetCurrentThread()() API call
added: tkopengl: support for OpenGL 1.4+ 3d/cubemap textures
added: tkopengl: support for OpenGL 1.5+ buffer objects
added: tkopengl: tkopengl.zglLoadExtensions()() API call
5. Older news

auto-generated by "DOG", the TkScript document generator. Mon, 28/Dec/2015 14:27:05