plustot
done features:
- Pd patch is a script
- external scripts are optional
- direct mapping from +tot objects to
arbitrary, full-featured Tcl commands
- Tcl commands invoked by triggering +tot
objects
- Pd connections used for passing Tcl command results
(arbitrary Tcl objects)
- Tcl result coupled with an interpreter
- +tot object inlets implicitly
convert floats,
symbols, and
lists to Tcl objects
- multiple inlets referenced by the pseudo-variable $in
(scalar or array form)
- separate interpreter used in any window containg
+tot +env object(s)
- interpreter of the parent window used in subwindows
lacking a +tot +env
- default interpreter used, if there is no
+tot +env up to the root window
- external scripts specified with +tot +env's
arguments or the source message
- patch directory and Pd path used for locating external
scripts
- dot-sequences used for special characters: { } ; \
input as .( .) .: .`
- commands may be created and executed dynamically
(messages tot and
query)
- +tot's subclasses (with +-escaped
first argument in place of a command name):
- +tot +in converts Pd messages to
Tcl objects
- +tot +out converts Tcl objects
back to Pd messages
- +tot +print is another version of
+tot puts $in or a
+tot +out connected to a
print
- +tot +var combines the two forms
of the Tcl command with tracing
- +tot +env interpreter control and
sourcing
- +tot +qlist two-way interface to
binbuf hosts (qlist,
textfile, later xeq)
done performance-related details:
- command parsed during +tot object's
creation, top-level args objectified
- sub-commands are bytecode-fiendly
- command procedure called explicitly
- attempt to minimize copying of Tcl_Objs (many further
improvements possible)
soon:
- only default interpreter should run in the main thread
later:
- learn about a possibility of recoding plustot into a
stubified Tcl extension
- customize +tot's object box shape
- use Tcl_SetPanicProc (try to survive set-shared attempts)
- +tot +xeq track-aware, using
absolute time, etc.
consider:
- handling non-object commands (none in the core, however,
as of 8.4.4)
- learning about tclpro bytecode utilities
- using resolver hooks for pseudo-variables (unless the
bytecode route taken)
complaints to this address