Bwise version 0.34, all in one file, 8.4 compatible

by Theo Verelst

I've been putting of the work for a long time, but I made a new bwise version, still way onder 1.0 (I made commercial software which was appreciated, too, one has ones' standards) which should be a good improvement, though not earthshattering different.

Get it here:


a text file which should read right in your browser (about: 77 kB)


And just load it into a wish interpreter, probably doesn't matter which version, I used the previous version also on windows 3.1...

No extra files are needed, no libraries not packages, not even tcllib, it should run straight as it is, me thinks after just sort of an evening of hacking some changes, do put you own experience on this page, please.

The idea of bwise is to have a better idea of what happens when one programs block-wise.

See wiki pages: Bwise - a graphical programming setup and bwise applications and examples.

From the top of my head some of the things I changed, added, or fixed:

  • A welcome word/help
  • little better save/reload (though canvas entries are still not saved, the state including block variables should read back)
  • slider in the proc list
  • no more need for extra files, bwise is a one file application
  • probably the script is easy to configure, see top for mouse button number, bottom for handfull of the main calls and suggestions
  • the procedure edit window makes its list automatically at startup, load any other packages such as console for unix at the beginning of the script, so their proc names won't show up
  • image saving now skips images (like in the tk file browser) with no file name, typing 'newimage <someimagefile.gif>' in a console (press paper image button) gives you a block with an image in it which will save and reload
  • some minor improvements

Please use the package for any purpose you see fit, for commercial use (as in that it is part of a product) my (TV) permission is needed.

I've made a Latest BWise page ...

Sign your name and comments under the line, please ...

Known bugs/limitations/deficiencies/annoyances:

  • The menu buttons on top are from a long time ago, and not necessarily representing a particular programming or UI view
  • The 'new block' button works, but gives an old type block with no outputs, and no pin variables or bfunc (block function) initialized. Use a commandline or right-mouse-button 'newproc' instead
  • Many options must be taken from the wiki bwise related pages
  • The 'drum scan' button requires a canvas drum pattern and an external sample processing program and drum samples to work (on some older pages of mine, they can still work)
  • Loading and saving are not extensively tested, though the files are normal tcl files, which should make it possible to manually adapt things when needed.
  • The content of blocks with a UI element or even widget hierarchy is excluding those elements from saving, currently (I made versions who did that, too, but their were configuration interface issues with varying versions of tcl/tk), that takes some work
  • The saving of the canvas includes saving of the block variables, so that mainly the state is saved, but this works through global variable name referencing, block.var, so that other variables starting with a block name followed by a dot also get saved or assigned to block 'data' edit windows
  • A lot of proceduers come from various developing styles, times and methods, and a lot of list stuff goes on which probably is maintainable by me because it takes few (long) lines of code but require at least a pretty printer for normal readability, and probably don't make the byte compiler happy
  • Network running is generally slow, which is fine for interactive programming stuff, but not as direct program replacement. It is possible to switch off the graphical fire feedback (pins turn green shortly) visible on non-top-speed machines to improve speed.
  • It is possible to 'loop' a network into wish destruction, that is nothing works anymore, and the only option is to restart and loose you changes. Use funprop (functional type propagate) preferably, which can activate a circular network once.
  • Funprop does the only 'invisble state' (from the 'data' block variable inspection windows) thing, for networks with more than on input block. It does its job, but you have to run funprop from all inputs before the run continues to the end, and in the meanwhiule an invisible state remembers which blocks could already be fired because their inputs were available.
  • Some user interface elements are not too clear in classical type of knowing what they do from the looks of them, such as the save file on the procedure window. It saves only changed procedures, but from the beginning of the session, so it can be used with the same filename repeatedly.
  • Block functions are onliners in the 'data' window, stores in a variable
  • block variable referencing is not made easier by the need to brace the block.var name construction (but it works on all tcl/tk versions)
  • multiple pin blocks (e.g. procs) cannot be instanciated from the canvas menu, but must be made through a command line: newproc {} name {inpinlist} {outpinlist} , see the wiki bwise pages.
  • There are not many ready made interactors like database (though my tcl database is in the script) webbrowser, and standard processing blocks, though that is easy enough: make a proc with the sufficient number of pins, and call any tcl function with it. COul dbe done automatically, which I'll probably do at some point.
  • Network management is limited, though the structure can be exctracted at any point in time in two ways. It would be preferable to tcl function decomposition (possibly with limitations) and (re-) composition, preferably automatically. I'll be in (nicer) france for some time, possibly I'll get around to makig that..
  • the 'data' windows work fine, but when block names start to go beyond block10, 1 ad 10 vars will show together.
  • when removing widget blocks, it might be the widgets are only made invisible (but still present)
  • Saving images with spaces in the pathname doesn't work right (so for now: keep away from such paths, preferably)