set cb [pwd] # so we can cd $cb later
cd {c:/Theo/Tcl} # you'll have other paths
# puts {C:/cygwin/home/Theo/Tcl} # small reminder printed at start
open_text {bwisepres.txt} # assuming that file is in current dir,
wm iconify .tt
# F1 reloads text, F2 = Next, F3 = Prev
bind . <Key-F1> {if ![info exists prescount] {set prescount 0} ; presp dis}
bind . <Key-F2> {presp next}
bind . <Key-F3> {presp prev}
append env(PATH) ";c:\\cygwin\\bin" # I wanted to be able to use cygwin for the C image example
proc presp { {c} } {
global prescount;
set t $prescount;
switch $c "next" {
set prescount [expr [lindex [split [.tt.t search -- ---- $prescount.0] .] 0]+1]
} "prev" {
set prescount [expr [lindex [split [.tt.t search -back -- ---- [expr $prescount-3].end] .] 0]+1]
} "dis" {
}
set t [expr [lindex [split [.tt.t search -- ---- $prescount.0] .] 0]+1]
set o {} ; set i 0
foreach l [split [.tt.t get $prescount.0 [expr $t-2].end] \n] {
if {$i < 1} {
lappend o {-fill blue} $l
} {
lappend o {} $l
}
incr i
}
welcome $o
}
proc welcome { {we {}} } {
global mc
$mc del welcome
bind $mc <Button-1> {global mc; $mc del welcome; bind $mc <Button-1> {}}
if {$we == ""} {set we {
{-fill blue} " Welcome to Bwise version 0.34" {} {}
{-fill red} "Press left mouse button once in this canvas to delete welcome message!"
{} "This canvas can be clicked on to create blocks with the"
{} "rigth or middle mouse button menu, see top of source code."
{} ""
{} "The paper image button creates a tcl shell."
{} "Connect blocks by clicking on two pins and press wire."
{} "Double click blocks to select them for \\\"delete\\\" button."
{} "Saving the canvas doesn't save block entry components (yet)."
{} "Right-click block yellow part to get block menu."
{} "Use Funprop on first block of a network to 'run' it"
} }
set i 0;
foreach {a t} $we {
eval $mc create text 15 [expr 20+30*$i] -font \"helvetica 14\" -anchor nw -tag welcome $a -text \"$t\"
incr i
}
}Apart from this, we need the actual texts to be displayed, which are stored in this format, here including the whole presentation (called bwisepres.txt):
----
Welcome to BWise
by Theo Verelst
- Blockwise programming
- Net based flow execution
- Tk canvas graphical nets
- Utilities
----
Main idea and history
Prototyping all over
In e.g. EE blocks and diagrams are normal
programming by units is good practice
various specific uses in mind, which are working
many limitations, unfinished ideas, and some anomalities
----
Creating a block
Rationale: if you can't block it,
you're definitions are probably weak
functional analysis
new-block functions and popup menu
Left pins inputs, Right pins outputs
----
Block example
a simple pass-through block
standard block facilities
newproc {} example_block
----
Block data
Right-click popup menu
Data Window
List of block variables
Editable entries
Mind braces around variable names with dots
----
Block Evaluate
Either from menu or
button on data window
Evaluates tcl from variable
block.bfunc
at toplevel #0
----
Connecting Blocks
Click on pins to select, press Wire.
Connections follow displaced blocks
Each connection has unique name
connect wirename block1 pin1 block2 pin2
----
Transfering Data
transfer menu
transfers data on output pins
to all connected pins
Visual feedback (slowed down for demo)
----
Automatic chain block eval and transfer
'flooding' based algorithms
net_funprop: minimal # evals/transfers algorithm
latter introduces an invisible state to the net
----
TK Canvas Use
Block elements share first tag name
Main yellow rectangle has 'block' as third tag
much use of canvas tags
some library functions like tag_and (older tk)
----
Block select and delete
double click on main square creates red selection
Del Sel button deletes all selected blocks
and their wires.
----
Procedure Window
List of all main namespace procs
double click a proc to edit it
initial procs and names with
tk_* and tcl_* are filtered
----
Proc Edit
Text widget which is filled with actual body
window is eval-ed at buttonpress to redef
change proc name to create a new, and refresh
single button saving of changed procs
----
Forming commands with a proc
double click proc
put cursor in pro_args line
click arguments with non-default value and fill in
Form Command and Execute
----
Creating Blocks from Functions
Ideally a unambinguous, straightforward step
works best for functions with- all-formal ingoing info (no globals or uplevel)
- only return value as outcoming info
----
Procedure to block
choose proc, and press button
block appears at fixed point
all arguments and return value are pins
defaults are filled in (pin vars)
----
net_ functions
various net-related lib procs
for instance net_left
netlistout generates list of {bl p bl2 p2}
gen_netlist generates eval-able connect list
----
Predefined Block generators
See right popupmenu
Entry and Mon text windows
array for testing purposes
Stack, Term, Seq
----
Image blocks
newimage birds.gif
newimage bridge.jpg
----
Example: C compiled image processing
Uses (free) cygwin C compiler from BWise
compiler, Image-generator and viewer blocks
Useful real time net programs
----Don't forget to remove the leading space from here, or adapt the code a bit.Now BWise can be used as normal, any left mouse click on the canvas removes the text, but leaves the rest in place, and the text can be redrawn by pressing F1.F2 procedes to the next text field, F3 back to the previous.The text file can be arbitrary in format and lenght, the first line of a block is presented in blue.The 'open_text' command has made a window with text widget, which can run-time be edited, for instance to prepare a demonstration, it can be edited interleaved with viewing without problem. Save and load work instantaneously on the file with name provided in the entry, that is NO CONFIRMATION IS ASKED FOR to load and save files !!

