This site will look much better in a browser that supports web standards, but it is accessible to any browser or Internet device.
Download NeatTools (Windows) (522K)
NeatTools is an object-oriented, visual programming environment, coded in C++ (with a Java-like, thin-layer API). NeatTools, examples, developers' kit, and documentation may be downloaded from www.pulsar.org/2k/neattools or http://www.sensyr.com/NeatTools/oopw.zip at no cost. The language and its toolkit are extensible and expandable. NeatTools modules (visual objects) are selected and dragged into the workspace from toolbox collections. Modules possess properties, parameters, and various data inputs and outputs. Inputs, outputs, and parameters are connected to other modules by links (lines) drawn by the programmer.
NeatTools is specifically designed to work with the TNG-3B interface device. For more information about TNG-3B including sales information as well as sample NeatTools Programs, Click Here.

NeatTools is event-driven. That is, functional elements execute when one or more of their inputs change. This means that NeatTools is also multi-threaded-separated chains of objects without event dependencies that will execute nearly simultaneously. Finite state machines are easy to implement using the State module.
Special objects and tools allow NeatTools to access a PC's basic peripheral hardware: keyboard, mouse, joystick, serial port(s), parallel (printer) port(s), sound card, etc. Other modules have been developed to interface with a family of devices we refer to as TNGs.
NeatTools is dynamic. Visual editing and program execution take place concurrently, so there is no need to alternate between editing and execution modes, as in other visual environments. NeatTools is also network-ready, robust, secure, architecture-neutral, and portable.
The built-in, or internal, modules (over 200 in number, not counting individual keys), arranged in seven toolbars, include device-support modules, switch and slider modules, calibrator module, internet sockets, state-machine module, timers, graphical displays, arithmetic (integer and real, including transcendental) and logic operations, character generation, multimedia sound, Musical Instrument Device Interface (MIDI) controls, and visual relational database modules with multimedia functions.
There are also external modules. External modules are separately compiled visual objects, analogous to those in the main toolbars, loaded at runtime. In the Windows environment, these are implemented as dynamic link libraries (DLLs).
The NeatTools programming model has its roots in the formal input/output automaton model[1]. In NeatTools, module abstraction is offered as a set of class methods for inter-module communication. Functional components (implemented as class objects) of a concurrent system are written as encapsulated modules that act upon local data structures or objects inside object class, some of which may be broadcast for external use. Relationships among modules are specified by logical connections among their broadcast data structures. Whenever a module has updated data and wishes to broadcast the change and make it visible to other connected modules, it should implicitly call an output service function that will broadcast the target data structure according to configuration of logical connections. Upon receiving the message event, the connected modules execute its action engine according the remote data structure. Thus, output is essentially a byproduct of computation, and input is handled passively, treated as an instigator of computation. This approach simplifies module programming by cleanly separating computation from communication. Software modules written using module abstraction do not establish or effect communication, but instead are concerned only with the details of the local computation. Communication is declared separately as logical relationships among the state components of different modules.
The base code and internal modules of NeatTools constitute about 54,000 lines of C++ code. The author, Yuh-Jye Chang, did this for his Ph.D. dissertation [2] in computer science at Syracuse University, working in close collaboration with David Warner who conceived the conceptual architecture based on previous generations developed by Warner independently. A number of extensions and improvements are currently in progress by programmers on our team.
Our NeatTools software has been compared to LabView™ (National Instruments; www.ni.com), which is widely used in scientific and industrial research laboratories. Some ask us why we didn't just use LabView instead of developing NeatTools. Our answers are that a) we do not own or have access to the LabView source code so that we cannot optimize it for human-computer interfacing applications, b) LabView is expensive (professional version costs more than $4,000), c) we cannot provide LabView for free via our Web site as we do with NeatTools, and d) NeatTools has been designed ab initio primarily for human-computer interaction, guided in part by needs of persons with disabilities. Yuh-Jye Chang barely knew about LabView when he wrote the C++ code that produced the NeatTools environment; rather, he based his design on high-end visualization software for use on workstations, notably Application Visualization System (AVS; see www.avs.com). Nevertheless, as part of our inclusive and accommodating approach, we have written LabView interface programs for our TNG devices, so that those who already own, and are proficient with, LabView can use it in their laboratories to interface to our sensors and devices.
[1] Nancy Lynch and Mark Tuttle. An Introduction to Input/Output automata. CWI-Quarterly, 2(3):219-246, September 1989. Centrum voor Wiskunde en Informatica, Amsterdam, The Netherlands. Also, Technical Memo MIT/LCS/TM-373, Laboratory for Computer Science, Massachusetts Institute of Technology. Available online at http://theory.lcs.mit.edu/tds/papers/Lynch/CWI89.html.
[2] Yuh-Jye Chang. NeatTools - a Fine-Grained Data-Flow-Network Programming Environment, Ph.D. dissertation (Electrical Engineering and Computer Science). 2000, Syracuse University: Syracuse, NY.